跳到主内容

dsh-minigames

25Star3Fork0Issue0Watching

DSH Web 浮动小游戏窗口,内置 18 款离线 Canvas 游戏,自带可拖动面板、可吸附边缘与本地最高分。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
BSD-3-Clause
分支
main
dshdsh-plugin

安装

命令web profile
$ dsh plugin --profile web add github:lhh010/dsh-minigames

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 lhh010/dsh-minigames:先查看仓库 https://github.com/lhh010/dsh-minigames 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

在 DSH Web 页面里挂一个可拖动、可边缘吸附的小游戏窗口,集成 18 款纯 Canvas 离线小游戏,适合模型回复等待期或调试间隙随手玩一局,无需联网、无需图片资源。

核心能力

  • 内置 18 款离线小游戏:恐龙跳一跳、俄罗斯方块、坦克大战(带 AI)、消消乐、华容道、贪吃蛇、2048、扫雷、记忆翻牌、五子棋 vs AI、跳一跳、打砖块、打地鼠、黑白棋 vs AI、Flappy、数独、吃豆人、跟枪练习(FPS)
  • 浮动窗口可自由拖动、贴左右停靠或上下贴边(吸附阈值 24px),窗口宽度 360px–80vw 可在左缘拖拽调整,所有几何信息自动持久化到浏览器
  • 折叠态是一个圆形 🎮 启动按钮,可拖动定位到屏幕任意位置(拖动超过 5px 视为拖拽、单击才打开窗口),按钮位置同样持久化
  • 每款游戏有独立"最高分",存于 localStorage(键前缀 dsh-minigames:best:),切换游戏/重启浏览器都不丢失
  • 窗口隐藏、标签页切走或用户主动暂停时游戏自动暂停(rAF 循环停转),恢复时自动继续;游戏区域需先点击获取键盘焦点,避免劫持聊天输入框
  • 提供 registerGame 扩展点:实现一个接口即可在面板里新增一款游戏,无需改动面板、注册表或其它游戏源码

技术实现

  • 语言: TypeScript + React 18
  • 关键依赖: @deepseek-ai/cordis(仅 type-only 导入,peer ^4.0.1-rc.1,运行时由宿主注入)、react ^18.2.0、react-dom ^18.2.0
  • 架构模式: 双半 Cordis 插件——src/index.ts 是 node 端的"loader 占位"(仅写一行日志,不注册路由/工具/服务),保证 client-modules 在 boot 时能扫到包;src/client/index.tsx 是浏览器端的 apply(ctx),在 ctx.effect 内把 <MiniGamePanel> 挂到 document.body(纯 DOM portal,不依赖宿主布局槽),卸载/HMR 时由 disposer 自动拆除
  • 入口文件: 浏览器端 src/client/index.tsx(编译为 lib/client.js,通过 window.__ModuleLoader__.load 注册),宿主端占位 src/index.ts(编译为 lib/index.js)

适用场景

主要给"等模型回复"或"修 bug 等编译"间隙想随手摸一把的用户。窗口挂在屏幕右侧任意位置,不抢主聊天区,输入焦点与游戏焦点互相不冲突,最高分随手保存在本机,不需要登录、不需要联网、也不需要任何配置文件。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness(DSH)>=0.0.1dsh.plugin.json 中 engines.dsh 声明 >=0.0.1;README 实机验证 0.0.1-rc.2、0.0.1-rc.5(dist-tag next)、0.1.1-rc.1(npm)均 boot 通过
Node.js(仅构建期)未声明package.json 未声明 engines.node;构建工具为 tsdown + tsc 6.x
运行平台Web(跨平台)纯浏览器端 Canvas 渲染,任何带现代浏览器的桌面 OS 都可;Aim Training 用 Pointer Lock API 锁定鼠标
原生模块无客户端零原生依赖,cordis 仅作为 type-only peer

安装方式

dsh plugin --profile web add github:lhh010/dsh-minigames

配置项

本插件无需额外配置。所有"配置"都通过面板 UI 和自动持久化生效:

配置类型说明默认值
面板宽度拖拽左缘在 360px 到视口 80% 之间调节,自动持久化min(50vw, 640) px
面板位置 / 停靠状态拖拽标题栏拖到边缘 24px 内自动吸附到左/右;可循环按钮切到"自由浮动/右停靠/左停靠"屏幕右侧、宽度 = 默认值、y=80
🎮 启动按钮位置拖拽按钮仅拖动(位移 > 5px)才移动位置;单击打开面板屏幕右下角
当前选中游戏点击卡片关闭面板后再次打开自动恢复无
每局最高分自动写入每款游戏独立最高分;仅在分数创新高时写 localStorage0

常见问题

Q: 安装后页面右下角没看到 🎮 按钮怎么办?

A: 插件只在 DSH Web profile(dsh --profile web)下加载,纯桌面端不会渲染;首次安装或移除后必须重启 dsh web 进程让宿主重新扫描插件清单。如仍不显示,可打开浏览器控制台查看 window.__DSH_BOOT__ 是否包含 @dsh-external/dsh-minigames,以及 /plugins/@dsh-external/dsh-minigames/client.js 是否返回 200。

Q: 需要单独配置什么吗?

A: 不需要。插件零配置,安装后右下角即出现 🎮 启动按钮,单击即可打开面板;窗口位置、停靠状态、宽度、选中游戏与每款游戏的最高分都会自动保存在浏览器 localStorage。

Q: 玩到一半切走标签页 / 关掉窗口会丢进度吗?

A: 不会。游戏在被隐藏、标签页切换或窗口折叠时会自动暂停(rAF 循环停转),恢复时自动继续;但每局的局内进度(如坦克大战当前波次、消消乐当前关卡)不会跨会话保存,仅"最高分"是跨会话持久化的。

Q: 怎么卸载?

A: 执行 dsh plugin --profile web remove @dsh-external/dsh-minigames 然后重启 dsh web。localStorage 里的偏好键(dsh-minigames:*)会留在浏览器内但不再被读取,需要时可手动清理。

Q: 跟枪练习(FPS)需要特殊权限吗?

A: 该游戏使用浏览器的 Pointer Lock API(点击画布后锁定鼠标、隐藏光标),Esc 会自动释放并暂停到覆盖层;不需要任何额外权限申请,少数禁用 Pointer Lock 的环境会自动降级为普通鼠标坐标,但仍可玩。

Q: 我可以自己加一款小游戏吗?

A: 可以。插件公开了 registerGame(来自 src/client/games/registry.ts),按 MiniGameDefinition 接口(src/client/games/types.ts)实现 id/title/icon/description/controls/create 即可在面板里出现一个新卡片,无需改动面板或注册表本身;建议把游戏逻辑写成纯函数模块并用 vitest 单测覆盖。

Q: 占用主页面空间吗?会和聊天框冲突吗?

A: 不冲突。面板是独立的浮动窗口(document.body portal),不依赖 DSH 布局槽位;键盘输入只在点击游戏区域获取焦点后生效,点回聊天输入框时游戏会主动让出键位,反之亦然——这是有意设计,避免游戏劫持正常打字。

Q: 18 款游戏都完全离线吗?会上传数据吗?

A: 完全离线:所有画面用 Canvas 实时绘制,零图片/音频资源文件,零网络请求;游戏不读取你的对话内容,最高分只存本机浏览器 localStorage(键名前缀 dsh-minigames:best:)。

上手难度

入门 — 装上即用,零配置、无网络依赖、纯 Canvas 渲染,唯一需要适应的是"先点游戏区获取键盘焦点再按方向键/空格"这个有意为之的焦点规则。

已知问题与限制

  • 键盘控制依赖游戏区域焦点:点击聊天输入框后再按空格/方向键会输入到聊天框,需要点回游戏区域才能继续操作(Panel.tsx:457,这是有意为之而非 bug,避免游戏劫持正常打字)
  • 坦克大战 AI 仅为贪心追踪 + 视线直射开火,不做寻路 / 障碍绕行,也没有不同装甲类型
  • 消消乐、打砖块、坦克大战的"当前关卡 / 波次"等局内进度不跨会话保存,仅每款游戏的最高分持久化
  • 恐龙跳一跳的雨天与昼夜切换是纯视觉氛围(昼夜换色、雨点 + 闪电 + 迷雾),不影响游戏判定
  • 跟枪练习(FPS)在极少数禁用 Pointer Lock API 的浏览器中会自动降级为非锁定模式,体验略差
  • 跟枪练习、Flappy 等需要持续动画/快速刷新的游戏在面板宽度被压到接近下限 360px 时画布较小、操作空间受限

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/lhh010/dsh-minigames)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录