dsh-puzzle-plugin
DeepSeek Harness(DSH)WebUI 的滑块拼图小游戏插件:随时点开就玩,AI 助手能实时发话、换图、看进度。
功能特性
- 输入框工具行左端「🧩 拼图」小开关打开浮窗面板(标题可拖拽移动)
- 滑块拼图(华容道式):点空格相邻的块滑动,2×2 ~ 6×6 可切换
- 新局 / 预览 / 步数 / 用时;拼完弹庆祝(随机台词),「再来一局」继续
- 面板常驻助手碎碎念(开局/完成随机台词池),助手也能用
puzzle_talk 实时发话
- 换图三路:
- 丢图进
puzzles/(本地图库目录,不入 git/GitHub 仓库):png / jpg / webp / gif 放进去,
设置页「🔃 刷新图片」即识别
- 面板 / 设置页直接粘贴图片 URL(http / https / data:)
- 对话里让助手换:
puzzle_set_image(图库名 或 直链 URL)
- 默认图是代码内置的占位图(SVG data URL,无本地图片文件)
AI 侧工具(模型可用)
| 工具 | 作用 |
|---|
puzzle_talk | 往拼图面板发一句话(提示/鼓励/吐槽),显示在面板气泡里 |
puzzle_state | 查当前局:格数/步数/用时/完成状态/当前图/可用图 |
puzzle_set_image | 换图(name = puzzles 里的文件名,或 url 直链) |
安装
# 从源码目录安装
dsh plugin --profile web add <插件目录>
# 或从打包好的 tgz 安装(可移植,不依赖源目录存活)
dsh plugin --profile web add dsh-puzzle-plugin-0.2.0.tgz
安装后重启 WebUI 生效。dsh 请替换为你安装的 DSH CLI 调用方式。
打包
pnpm pack --pack-destination <你的插件分发目录>
产物 dsh-puzzle-plugin-<版本>.tgz 为 npm 标准 tarball。
配置
- 持久化到
$DSH_HOME/dsh-puzzle-config.json(当前图 / 默认格数),跨重启恢复
- 无 Config schema、无 settings namespace 依赖,安装即用
架构
- Host 半(
index.js 入口 + host/):index.js 只做组装(一次 apply 一份状态 → 注册路由/工具);
host/config.js 配置持久化、host/images.js 图库扫描与文件服务、host/state.js 可变状态(工厂模式)、
host/routes.js 路由 /dsh-puzzle/*(images / file / state / report / talk / config / refresh)、
host/tools.js 三个 AI 工具
- Client 半(
client.js 产物 + client/src/ 源码 + client/build.mjs 打包):
conversation.input.left 入口开关 + shell.overlay 浮窗面板 + settings.section 图库管理;
1s 轮询拉消息/配置/图片清单;图片 cover 裁剪切片
- 零第三方依赖(host 只用 node 内置模块,client 打包也是 node 内置 fs),无 Config schema,安装即用
开发
DSH client bundle 是单文件直出(无构建步骤、require 无相对路径),所以 client 源码按功能拆到
client/src/(data 静态内容 / core 核心逻辑 / panel 浮窗面板 / ui 小组件 / entry 入口),
改源码后必须重跑打包生成产物:
node client/build.mjs
刷新页面即生效(client 半热重建);host 半(host/、index.js)改动需重启 WebUI。
姊妹仓库
同族的其它 DSH 插件(各一个独立仓库):
许可
双许可——文档与代码分开:
- 代码(
index.js、host/、client/、client.js):MIT —— 拿去用、改、再发,保留版权声明即可。
- 文档(本 README 的正文):CC BY 4.0 —— 可以自由使用、改编、连商用都行,但要署名(莉娅 / @feverZHONG)并注明来源。
两份许可的全文:LICENSE(MIT)/LICENSE-DOCS(CC BY 4.0)。
莉娅(@feverZHONG)· 宇宙美好记录官