DeepSeek Harness 的鲸鱼娘桌面宠物,一键启动/停止/监测服务,双击唤起 GUI。
安装
# npm 包(预构建)
dsh plugin --profile web add @miku00039-01/dsh-whale-pet
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:miku00039-01/dsh-whale-pet
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
一个 Windows 桌面宠物程序,把 DeepSeek Harness 的服务启动、停止、状态监测和 GUI 唤起整合到一个零依赖的 .exe 里。
English: README.en.md · 版本记录: CHANGELOG.md · 安全: SECURITY.md

✨ 功能
| 功能 | 说明 |
|---|---|
| 一键启动 | 双击 exe = 检测 DSH 服务 → 未运行则后台拉起 → 就绪后打开 GUI → 鲸鱼娘出现 |
| 两种模式自动识别 | 桌面端模式(Electron 应用):只做伴侣——唤起它的窗口、看它状态,不再另起实例;CLI 模式:沿用下面的完整服务管理 |
| 人形桌宠 | 逐像素透明悬浮窗,按图片原形状显示,可拖动、记住位置 |
| 双击唤起 | 桌面端模式 = 把桌面端窗口置顶;CLI 模式 = 打开 GUI(复用同一 PWA 窗口,不堆标签页) |
| 右键菜单 | 打开程序 / 最小化至托盘 / 关闭程序 / 查看状态 / 退出 |
| 最小化至托盘 | 选「🗕 最小化至托盘」隐藏鲸鱼娘(仅留托盘图标);单击托盘图标即可唤起,再次运行 exe 同样能唤回(位置不变) |
| 关闭程序 | 桌面端模式 = 只关桌面端窗口(不动服务进程);CLI 模式 = 停服务 + 关 GUI 窗口(不影响其他浏览器页面) |
| 退出 | 确认框后退出(CLI 模式连服务一起退;桌面端模式不动桌面端进程) |
| 托盘图标 | 常驻;鲸鱼娘已隐藏时左键单击 = 唤起,未隐藏时左键单击 = 打开 GUI;右键菜单(兜底入口) |
| 状态监测 | 仅绿/红两态(无黄色中间态),自适应频率:在线 5 秒 / 离线 2 秒 |
| 状态卡片 | 悬浮卡片显示服务状态/地址/PID/运行时长 + 桌宠内存/GDI 句柄(自检防泄漏) |
| 单实例 | 重复双击不会开第二个,只会唤起已有实例 |
| 崩溃日志 | 未捕获异常自动写入 dsh-whale-pet-crash.log,方便排查 |
📦 依赖(前置条件)
| 依赖 | 必选? | 说明 |
|---|---|---|
| Windows 10 / 11 | ✅ 必选 | 使用了 WinForms / 分层窗口 / netstat 等 Windows 能力 |
| .NET Framework 4.x | ✅ 必选 | 系统自带,无需安装;exe 由系统自带 csc.exe 编译,目标框架 4.x |
| DeepSeek Harness | ✅ 必选 | 需要正确安装:① Node.js(提供 node 运行环境)② dsh CLI 全局安装(npm i -g @deepseek-ai/dsh)③ 已配置 API 凭证(~/.dsh/.credentials.yaml 中的 DEEPSEEK_API_KEY)。桌宠通过 node <dsh的bin.js> web 拉起服务,监听 127.0.0.1:3080 |
| Chrome | ⚪ 可选 | 用于 PWA 独立窗口模式(由 DSH GUI 生成 DeepSeek Harness.lnk 快捷方式)。未安装/未找到时自动回落到默认浏览器打开 |
简言之:装好 DeepSeek Harness 就能跑;装 Chrome 并获得 PWA 快捷方式可获得最佳体验。
🚀 快速开始
方式一:作为 DSH 插件安装(推荐)
# 从 npm 安装(推荐,npm 包名为 @miku00039-01/dsh-whale-pet)
dsh plugin --profile web add @miku00039-01/dsh-whale-pet
# 或直接从 GitHub 安装(无需 npm)
dsh plugin --profile web add github:miku00039-01/dsh-whale-pet
安装后在 DSH 里输入 /whalepet 即可启动鲸鱼娘桌宠。插件市场(dsh-market)里搜索 dsh-whale-pet 也能一键安装。
关于包名:npm 上
dsh-whale-pet已被他人占用,因此本插件发布在作用域下@miku00039-01/dsh-whale-pet。package.json的name、cordis.patch.yml的name与 profile 里的依赖键必须三处一致。关于宿主要求:插件市场卡片上的"宿主要求"读自 npm manifest 的
engines.dsh(本包声明>=0.1.0-rc.6); 只从 GitHub 安装、未发布到 npm 的插件,市场读不到 manifest,会显示"宿主要求未知"——这是市场刻意不猜测的设计。
方式二:直接下载 exe
- 从 Releases 下载
DSH桌宠.exe(或按下方"从源码构建") - 双击运行 → 鲸鱼娘出现在屏幕右下角
- 首次运行会在 exe 同目录生成
dsh-whale-pet.conf(自动检测的路径),可按需修改
⚙️ 配置(dsh-whale-pet.conf,INI 格式)
| 键 | 默认 | 说明 |
|---|---|---|
workspace |
(exe 所在目录) | DSH 工作区目录(决定会话归属;建议设为你的工作目录) |
nodePath |
自动检测 | node.exe 路径 |
dshBin |
自动检测 | @deepseek-ai/dsh 的 lib/bin.js 路径 |
pwaShortcut |
自动查找 | Chrome PWA 快捷方式路径;留空且找不到则用浏览器打开 |
pwaWindowTitle |
DeepSeek Harness |
GUI 应用窗口标题前缀(用于"关闭程序"时精确关窗) |
openMode |
auto |
开窗方式:auto(优先用令牌地址自愈 cookie)/ pwa(只走快捷方式)/ token(只用令牌地址) |
chromeProfile |
从快捷方式读取 | Chrome 配置目录名(令牌地址开窗时与 PWA 共用 cookie);留空 = 自动读取 |
mode |
auto |
运行模式:auto(检测到桌面端就用桌面端逻辑,否则回落 CLI)/ desktop(只认桌面端)/ cli(只认命令行服务) |
desktopExe |
自动探测 | DSH 桌面端(Electron 应用)exe 路径;留空则自动探测(见下方"桌面端怎么被找到") |
port |
3080 |
CLI 模式的 DSH 服务端口(桌面端模式下不使用) |
lastX / lastY |
-1 | 鲸鱼娘上次位置(自动记录) |
所有键留空 = 自动检测;修改后重启桌宠生效。示例见 dsh-whale-pet.conf.example。
🖥️ 两种运行模式(桌面端 / 命令行)
DSH 现在有两种形态,桌宠会自动识别并切换行为(mode=auto):
| 桌宠行为 | 桌面端模式(检测到 DeepSeek Harness.exe / 其进程) |
CLI 模式(回落到原逻辑) |
|---|---|---|
| 在线判定 | 桌面端进程是否在运行 | 127.0.0.1:<port> 端口是否可连 |
| 双击 / 打开程序 | 把桌面端窗口置顶(最小化了就还原);没在跑就先启动它 | 用令牌地址打开 GUI(自愈 cookie) |
| 关闭程序 | 只关桌面端窗口,不动它的服务进程 | 停掉桌宠自己拉起的服务 + 关闭 GUI 窗口 |
| 启动服务 | 不启动任何实例(桌面端自己管服务) | dsh web --no-open 由桌宠拉起 |
| 状态卡片 | 显示桌面端进程 PID 与运行时长 | 显示服务地址与 PID |
为什么要分模式:桌面端是 Electron 应用,自带 dsh 服务并自带窗口(端口由应用自己分配,实测 19387,且同样有令牌围栏)。 如果桌宠还按老逻辑去拉一个 CLI 实例,就会出现两套 GUI、两份会话、两个端口——所以桌面端模式下桌宠只做"伴侣"(唤起窗口/看状态),不再碰服务生命周期。 强制指定模式:把
mode设为desktop或cli。
桌面端怎么被找到(不依赖安装路径)
别人的安装位置可能完全不同,所以桌宠按 5 条途径依次探测,任意一条命中即可:
| # | 途径 | 说明 |
|---|---|---|
| 1 | desktopExe 配置 |
你手工指定的完整路径(最稳) |
| 2 | 注册表卸载信息 | DisplayName 含 DeepSeek Harness → 读 InstallLocation / DisplayIcon / UninstallString |
| 3 | 开始菜单快捷方式 | 名字含 Harness 的 .lnk → 解析其目标路径 |
| 4 | 常见安装位置 | Program Files、%LOCALAPPDATA%\Programs、C:\dsh、D:\dsh |
| 5 | 运行中的进程反查 | 从桌面端进程读它的可执行文件路径 |
并且即使一个 exe 都没探到,只要桌面端进程在跑、或存在桌面端用户数据目录
(%APPDATA%\@deepseek-ai\dsh-desktop),也会判定为桌面端模式——所以不会因为"路径不同"而误起 CLI 实例。
进程与窗口匹配也会用上探测到的 exe 文件名(改名版、便携版同样能认)。
🖥️ 打开行为与开关(CLI 模式)
- 桌宠打开 GUI 的方式:优先打开 Chrome PWA 独立窗口(通过
pwaShortcut指定的快捷方式);未找到快捷方式时回落到默认浏览器标签页。 - 服务启动开关:桌宠以
dsh web --no-open启动服务——新版 dsh(0.1.1+)默认会自动打开浏览器,--no-open让开窗完全由桌宠控制,避免出现"先开网页再开应用窗口"的双窗口。 - 裸地址会 401?这是 dsh 的浏览器信任围栏:新版 dsh 对裸地址
http://127.0.0.1:3080/要求浏览器持有dsh-auth-*cookie(默认 30 天)。服务每次启动都会打印一行带进程令牌的地址(dsh web: http://127.0.0.1:3080/?token=...),浏览器访问一次即换取新 cookie 并 303 跳回干净地址。- 桌宠会自动捕获这一行,启动后首次开窗优先使用令牌地址(自动换取/续期 cookie),之后回落到 PWA 快捷方式复用同一窗口——不必再手动贴令牌地址。
- cookie 到期或被清理后,桌宠下一次启动服务时就会自动续期;若服务由外部(如 CMD 里
dsh web)启动,桌宠拿不到令牌,此时可用openMode=token以外的方式,或手动打开日志里那行地址一次。
- 想改打开方式?
- 修改
dsh-whale-pet.conf的pwaShortcut→ 指向别的 PWA 快捷方式;置空则始终用默认浏览器打开。 - 手动运行
dsh web(不带--no-open)时,服务会自动打开浏览器——这是 dsh 自带行为,与桌宠无关。
- 修改
🔨 从源码构建
# 要求:Windows 10/11(自带 csc.exe 与 .NET Framework),PowerShell 7 或 5.1
pwsh -File build.ps1
构建脚本会:① 从 assets/whale.png 生成多尺寸 pet.ico;② 用系统 csc.exe 编译 src/DSHPet.cs → DSH桌宠.exe(零第三方依赖)。
🚀 发布新版本(CI 自动构建 Release)
仓库已配置 GitHub Actions:推送 v* 标签时,自动在 Windows 环境构建并上传 exe 到 Release。
git tag v1.0.0
git push origin v1.0.0
推送 main 分支也会触发一次构建校验(不发布)。
Release 正文自动取自 CHANGELOG:发布任务会调用 .github/scripts/extract-changelog.sh,按 tag 从 CHANGELOG.md 提取对应版本小节作为 Release 说明(因此发版前请先在 CHANGELOG.md 写好该版本小节;小节标题用 ## [v1.14] 或 ## [v1.14.0] 都能匹配)。匹配不到时退化为一段简短说明,不会导致发布失败。
📁 目录结构
dsh-whale-pet/
├── package.json # dsh 插件 manifest(dsh.bundle)
├── cordis.patch.yml # 插件注册(/whalepet 命令)
├── lib/index.js # 插件实现:注册命令并启动桌宠 exe
├── dist/DSH桌宠.exe # 随插件分发的桌宠 exe
├── src/DSHPet.cs # 桌宠全部源码(单文件,WinForms + P/Invoke)
├── assets/whale.png # 桌宠形象素材(见下方授权)
├── assets/pet.ico # 构建生成的 exe 图标
├── assets/WHALE_ATTRIBUTION.md # 素材授权说明
├── build.ps1 # 一键构建脚本(支持 -OutDir)
├── .github/workflows/ci.yml # CI:push 构建校验,tag 自动发 Release
├── dsh-whale-pet.conf.example # 配置示例
├── CHANGELOG.md # 版本记录
└── README.md
🖼️ 素材授权
桌宠形象(鲸鱼娘)素材的出处与许可详见 assets/WHALE_ATTRIBUTION.md。请在使用/分发前确认符合其许可要求。
📄 License
代码部分:MIT,见 LICENSE。素材部分遵循上述授权说明。
链接
同类插件
PC2005-cloud/dsh-pet#dsh-pet★ 960
DSH Web UI 桌面宠物:25 个透明动画、屏幕漫游、点击反应与拖拽,附可复现的素材生成链。
Nagi-ovo/dsh-ads★ 643
2005 年中文站点风格的整活广告插件:侧栏广告/信息流/角落弹窗 + 假关闭叉,素材全虚构。
vlln/whale-girl★ 339
桌面宠物(QQ 宠物形态):右下角悬浮、可拖拽/投喂/玩耍。
a86582751/dsh-nexttavern★ 128
面向 DeepSeek Harness 的角色扮演工作台:人物卡可以导入(SillyTavern/TauriTavern),也可以从零交互式写出一张;长篇 TXT 能改编成可玩的角色卡,精读或粗颗粒度两种读法;主代理按剧情主动查阅世界书,正文在独立的酒馆阅读 TAB 中呈现;同一对话里探索多条世界线(重新生成、改后发送、显式分支);带作用域的文风预设(16 种自带文风)、角色 Agent 集群、独立决策卡,以及角色卡或小说导出;长篇由固定设定前缀、硬切上下文窗口、可追溯导演笔记与关键词/语义/混合检索撑住,嵌入可用在线服务,也可完全本地运行。面向 Harness 0.1.2-alpha.3,安装需按文档应用显式兼容补丁。
yyh-001/dsh-meme★ 120
聊天表情包:纯文本斗图、情绪主动发图、像 QQ/微信 一样发图、AI 自动学图、自定义表情包。
Sutera-Diffusus/dsh-whale-musume★ 106
元气鲸鱼娘桌宠:摸头养成、按工具类型联动的工作状态、494 条台词、30 项成就、成长日记、拖拽惯性、主题适配与无障碍模式。关键词感知与余额关心默认关闭、需手动开启;可选的天气心情只在你填了城市后才会请求 Open-Meteo。无遥测。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。