Back to home@LeeGuanWei-a

dsh-mini-games-lee

🎮 DeepSeek Harness Web 端小游戏合集:俄罗斯方块 / 贪吃蛇 / 2048 / 扫雷,一个可拖动毛玻璃悬浮窗,支持深浅色主题与各游戏独立排行榜,一条命令安装。实测 @deepseek-ai/dsh 0.1.2-rc.1。

Stars
0
Language
JavaScript
Created
Sep 10, 2026
Updated
Sep 10, 2026
GitHub repo

Introduction

🎮 dsh-mini-games-lee — DeepSeek Harness 小游戏合集

DeepSeek Harness Web GUI 上运行的小游戏合集:一个毛玻璃悬浮窗,内含 4 个游戏,可随时切换、拖动、收起。

游戏玩法排行榜
🕹️ 俄罗斯方块7-bag 出块、墙踢旋转、消行计分、逐级加速、下一块预览分数(高→低)
🐍 贪吃蛇15×15 网格,吃食物变长、撞墙/自撞结束、每 3 个加速一级分数(高→低)
🔢 20484×4 合并到 2048,键盘或屏幕方向键分数(高→低)
💣 扫雷初级 9×9/10 雷、中级 12×12/24 雷,左键翻开 / 右键标记,首点安全用时(低→高)

共性:

  • ☀️/🌙 深浅色主题一键切换,毛玻璃背景
  • 窗口可拖到页面任意位置,/ 收起为标题条(自动暂停), 还原
  • 每个游戏独立排行榜(最近 10 局,localStorage 持久化、可清空)
  • 键盘全局操作(打开期间无需点击窗口),同时提供屏幕按钮,输入框打字不受影响

✅ 运行环境(版本标识)

组件版本
@deepseek-ai/dsh(Harness CLI / Web GUI)0.1.2-rc.1(开发与实测版本)
Web GUI 地址http://127.0.0.1:3080
宿主接口依赖shell.overlayconversation.session.header.utilitiestimerinject: ['timer']
插件形态Host-resident Client Plugin(node 半区空 apply + 浏览器半区 ./client

⚠️ dsh.client 元数据、window.__ModuleLoader__.load 浏览器产物与宿主 roster 扫描机制绑定本版本 harness。换版本装配前请核对插槽名与 timer 契约。

🚀 安装(一条命令)

仓库根目录即 npm 包,lib/ 已构建并提交,可直接从 GitHub 安装:

dsh plugin --profile web add github:LeeGuanWei-a/dsh-mini-games-lee

安装时包内 dsh.bundle.patchcordis.patch.yml)会把插件行自动插入 profile 层叠:

- insert:
    - id: dsh-mini-games-lee
      name: 'dsh-mini-games-lee'

重启 Web 后:页面中央出现小游戏窗口;会话头部右侧工具区出现 🎮 入口(用来重新打开)。

升级 / 回滚

dsh plugin --profile web remove dsh-mini-games-lee
dsh plugin --profile web add github:LeeGuanWei-a/dsh-mini-games-lee

🎮 操作

窗口顶部是一排 游戏标签,点击切换(切换会开始新的一局)。

🕹️ 俄罗斯方块

操作按键 / 屏幕按钮
左右移动 / ,或 ← →
软降(+1/格),或 ▼
旋转(带墙踢)X,或 ↻
反向旋转Z
硬降(+2/格)空格,或 ⤓
暂停 / 继续P,或 Ⅱ

🐍 贪吃蛇

操作按键 / 屏幕按钮
转向(反向输入被忽略) WASD,或 ↑ ← ↓ →
暂停 / 继续空格P,或 Ⅱ

🔢 2048

操作按键 / 屏幕按钮
滑动合并 WASD,或 ↑ ← ↓ →
暂停 / 继续P,或 Ⅱ

💣 扫雷

操作按键 / 屏幕按钮
翻开格子(首次点击才布雷,该格及周围保证无雷)鼠标左键
插旗 / 取消插旗鼠标右键
切换难度(初级 9×9 · 中级 12×12)初级 / 中级
重新开始↺ 新局

📦 仓库结构

dsh-mini-games-lee/
├── package.json            # npm 包:dsh.bundle.patch + dsh.client 元数据 + exports
├── cordis.patch.yml        # 自注册插件行(安装自动插入 profile)
├── src/
│   ├── index.js            # node 半区:空 apply(纯 UI 插件)
│   ├── client.js           # 浏览器半区入口:游戏注册表 + apply
│   ├── shared/
│   │   ├── theme.js        # 深浅色板
│   │   ├── records.js      # 按游戏分库的 localStorage 排行榜
│   │   ├── store.js        # 窗口状态(open/theme/pos/game)
│   │   └── ui.js           # 悬浮窗框架:拖拽、游戏标签、通用排行榜、入口按钮
│   └── games/
│       ├── tetris.js       # 🕹️ 俄罗斯方块
│       ├── snake.js        # 🐍 贪吃蛇
│       ├── g2048.js        # 🔢 2048
│       └── minesweeper.js  # 💣 扫雷
├── lib/                    # 已构建产物(提交在仓库,克隆即装)
│   ├── index.js
│   └── client.js           # 全部模块内联 + ModuleLoader 注册形态
└── scripts/build-lib.mjs   # src → lib 内联打包(改源码后 npm run build)

加一个新游戏

  1. src/games/ 新建模块,导出一个游戏对象:
export const MYGAME = (() => {
  function View(props) {           // props: { ctx, th, active, onGameOver, onOpenRank }
    // 用 el(...) 渲染;props.th 提供当前主题色;
    // props.active 为 false 时不要跑时钟/键盘;
    // 一局结束时调用一次 onGameOver({ value: 分数, meta: '说明文字' })
  }
  return { id: 'mygame', title: '我的游戏', icon: '🎯', short: '短名', scoreOrder: 'desc', View }
})()
  1. src/client.jsGAMES 数组里加入它;
  2. 把新文件加到 scripts/build-lib.mjsMODULES 列表(放在 client.js 之前);
  3. npm run build 重新生成 lib/(记得提交)。

🏆 排行榜说明

  • 每个游戏独立存储:dsh.minigames.records.v1.<gameId>
  • 每局结束自动记录(扫雷只记胜利局),保留最近 10 条;
  • 排序:多数游戏按分数降序,扫雷按用时升序;
  • 数据保存在本机浏览器 localStorage,清站点数据 / 无痕 / 换浏览器会丢;
  • 排行榜视图内可两次点击清空当前游戏的记录。

📄 许可证

MIT。