DSH 小鲸鱼跳:等回复时在对话流里玩一局 canvas 跑酷

前言

用 DeepSeek Harness(DSH)跑对话或智能体任务时,模型生成往往要等十几秒甚至更久。这段时间界面大多只能盯着进度,没有轻量、不打扰又不必联网的消遣入口。社区插件 dsh-whale-jump(仓库 CharlieChang1216/dsh-whale-jump)把一行入口挂在对话输入区下方,点开即可在本地 canvas 里玩跳跃 / 下潜类小游戏,纯本地、零运行时依赖、不读写凭据。下面介绍它是什么、怎么装、怎么确认跑通。

这是什么

dsh-whale-jump(中文名:DSH 小鲸鱼跳)由维护者 CharlieChang1216 发布,在 SkillHub 插件目录 中归类为趣味向扩展。当前 npm / 仓库版本为 0.1.1;GitHub 星标数为 1(以目录页与仓库公开信息为准)。

定位可以概括为:DeepSeek Harness 在回复等待期的小游戏挂件——对话流(及新会话空状态页)下方一行轻量入口,展开后是带计分、最高分与氧气机制的跑酷玩法,不联网。

代码部分为 MIT 许可;assets/ 美术素材不在 MIT 范围内,权利与来源见仓库内 PROVENANCE.md。

入口与界面行为

插件通过 DSH 官方 client 模块通道加载(dsh.client + exports["./client"]),由模块系统在 /plugins/dsh-whale-jump/client.js 下发,不修改 index.html,避免部分桌面端 script-src 注入失败牵连整个 boot 的问题。

入口注册在 conversation.input.dock 插槽,空状态页与进行中的对话共用同一处注册,两处都会出现入口行。

入口文案随场景与宿主状态变化,README 中归纳为三态:

  1. 新会话空状态页:显示「🐳 小鲸鱼跳」。
  2. 空闲对话:显示「🐳 等太久了?先玩个小游戏~」。
  3. 宿主已运行约 20 秒以上:显示「🐳 还在跑…要不要来一局?」,并提亮、开始摆动。

平时入口行较淡,等待越久越显眼,共用同一组件、不重复注册,减少对正常输入的干扰。

语言跟随 DSH 设置:优先 ctx.locale(「设置 → 通用 → 语言」),再退回 <html lang> 与 navigator.languages,最后落到简体中文;切换语言后入口行可即时重渲染,无需重建插件。

玩法与操作

游戏在 canvas 中运行,障碍与空间分层如下(均来自 README 说明):

  • 跃过:露出水面的珊瑚、漂浮木(按住跳跃可跳更高)。
  • 下潜:灯塔(高约 128px)与海鸥;最高速下跳跃峰值约 107.7px,灯塔顶部在约 74px,无法跳过,需下潜至 -45 以下才能完全躲开。
  • 留在水面:沉在水下的水母;开局约 25 秒内水母生成权重约为平时的 3 倍(占比约 34%),之后回落到约 14%。

氧气:满氧可连续下潜约 4 秒,从空回满约 8 秒;耗尽会强制上浮并锁定下潜,氧气回到 30% 才解锁;低于 50% 氧气条变橙,低于 25% 变红并脉动。

操作:

  • 空格 / ↑ / 点击:跳跃(按住跳更高)。
  • ↓:下潜(空中按下为急坠)。
  • Esc:退出;结束后空格或按钮重开。

实现侧强调帧率无关位移、略窄于绘制的碰撞盒、随速度放大的障碍间距,以及相邻障碍要求相反动作时加大间距等,用于保证不同刷新率下手感一致、难度相对公平。立绘加载失败时会退化为代码绘制的鲸鱼,保证画面里始终有主角。

宿主侧与安全边界

宿主入口为 lib/index.js,通过 cordis.patch.yml 挂载,提供状态读写与立绘等路由。状态写入(POST)仅接受回环来源,非本机请求返回 403;请求体上限 8KB,并对分数范围做校验。插件不读写凭据、不联网、不修改 profile 配置。

运行时统计数据写在 $DSH_HOME/.dshwj-state.json(最高分 best、局数 plays),与 profile 的 node_modules 分离。

安装与启用

同一份包支持 Web(dsh web)与 桌面端 两种 profile,安装时 profile 名不同。要求 DSH ≥ 0.2.0(README 实测环境为桌面端 0.2.1-rc.2);执行 dsh plugin 时需在 PATH 上提供 pnpm。插件本身无需 npm install、无需构建。

桌面端首次用 CLI 安装前,需先完整启动一次桌面客户端再完全退出,否则可能出现 README 中的提示:Open DeepSeek Harness Desktop once to initialize its profile, then fully quit it before running dsh plugin --profile desktop.

从 npm 安装(最简单)

Web:

dsh plugin --profile web add dsh-whale-jump
dsh web

桌面端:

dsh plugin --profile desktop add dsh-whale-jump

从 GitHub 安装

Web:

dsh plugin --profile web add "github:CharlieChang1216/dsh-whale-jump"
dsh web

桌面端:

dsh plugin --profile desktop add "github:CharlieChang1216/dsh-whale-jump"

固定版本可将源写成 github:CharlieChang1216/dsh-whale-jump#<tag>(例如 v0.1.1),两种 profile 写法相同。

本地开发(软链)

dsh plugin --profile web add "link:<你的仓库路径>"
# 或
dsh plugin --profile desktop add "link:<你的仓库路径>"

装完后 Web 需重启 dsh web;桌面端需完全退出(含系统托盘)再打开。link: 改客户端代码刷新即可生效;宿主侧 lib/index.js 改动需重启进程。不要移动软链指向的仓库目录,移动后需重新 add。

若桌面端命令行安装因环境限制失败,README 建议改用桌面会话内的内置 plugin_manager,来源填 https://github.com/CharlieChang1216/dsh-whale-jump。

验证是否装通

以 Web profile 为例(桌面端将路径中的 web 换成 desktop)。端口以 dsh web 打印的地址或客户端地址栏为准,下面示例中的 52135 需替换为实际端口。

Select-String -Path "$env:USERPROFILE\.dsh\profiles\web\package.json" -Pattern "dsh-whale-jump"

$port = 52135
curl "http://127.0.0.1:$port/dsh-whale-jump/diag"
curl "http://127.0.0.1:$port/dsh-whale-jump/state"
curl -o hero.png "http://127.0.0.1:$port/dsh-whale-jump/hero.png"

Get-Content "$env:USERPROFILE\.dsh\.dshwj-state.json"

/state 初始多为 {"best":0,"plays":0};在游戏中得分后 best / plays 应更新,可作为「路由 + 前端 + 落盘」整条链路通的依据。若路由返回空 400,README 建议查看 /dsh-whale-jump/diag 中的 heroError / lastError(该诊断接口仅回环可读)。

适用场景与注意

适合谁:经常在 DSH 里等长回复、希望用本地小游戏打发几十秒、又不想装额外运行时依赖的用户;也适合想学习 DSH conversation.input.dock、client 模块注入与轻量宿主路由的插件作者。

环境与权限:README 标明操作系统在 Windows 11 x64 实测,macOS / Linux 未实测;浏览器需支持 Canvas 2D。插件以当前 DSH 进程权限运行,安装前请自行阅读仓库源码与许可证(代码 MIT,assets/ 另见 PROVENANCE.md)。

维护与生态:DSH 社区奉行「一切皆插件」;SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。仓库含 8 个测试套件(128 项),本地可 npm test(仅开发验证需要 Node ≥ 20,与插件运行时无关)。

结尾

dsh-whale-jump 把等待期收成一行 dock 入口和一局本地 canvas 跑酷:有氧气与分层障碍、有最高分落盘,又不碰网络与凭据。若你要试用或看实现细节,可从目录页 CharlieChang1216/dsh-whale-jump 进入,或直接打开 GitHub 仓库:https://github.com/CharlieChang1216/dsh-whale-jump。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜