[![🇨🇳 简体中文](https://img.shields.io/badge/语言-简体中文-red)](README.md) [![🇺🇸 English](https://img.shields.io/badge/lang-English-blue)](README_EN.md) # dsh-theme-minecraft **把 DeepSeek Harness 变成一个像 Minecraft Java Edition 一样使用的 AI Coding Agent —— 打开 `dsh web`,第一眼不是「AI 编程工具」,而是「我打开了 Minecraft,这个世界里住着一个 AI」。** [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](#license) [![Stars](https://img.shields.io/github/stars/your-username/dsh-theme-minecraft?style=social&label=Stars)](https://github.com/your-username/dsh-theme-minecraft) [![Version](https://img.shields.io/badge/version-0.1.0-blue)](package.json)
> **工作原理**:本主题是一个标准 DSH 插件(bundle),**不修改 DeepSeek Harness 任何核心源码**。 > 会话、消息流、工具调用、审批、预设、工作区、凭据等真实能力全部通过 DSH 现有 > JSON-RPC / WebSocket API 完成,界面上的每一帧状态都有真实数据来源,没有任何伪造。 ## ✨ 功能特性 - [x] **原版主菜单** —— WebGL 旋转全景 + 像素 Logo + 黄色闪字 + 石板按钮,`dsh web` 打印的 URL 打开即是 - [x] **会话即世界存档** —— 「继续对话」渲染成存档选择页,重命名 / 归档 / 刷新都走真实 `session/*` 调用 - [x] **模式选择 = Agent 预设** —— 生存 / 创造 / 冒险 / 专家四张像素皮肤,对应 DSH 的 standard / ptc / minimal / cordis 预设 - [x] **世界内聊天台** —— Steve 与「AI him」对话:流式输出、思考过程可折叠、模型 / Token / 工作区实时面板 - [x] **工具调用卡片** —— 📖 打开书、⚙️ 红石机关、⛏️ 挖掉方块……每个真实 `tool/call` / `tool/result` 都有像素皮肤 - [x] **危险操作审批** —— 审批面板弹出时跑酷小游戏自动暂停,允许 / 拒绝后恢复(`approval/request` waterfall) - [x] **村民提问** —— AI 的澄清问题以村民对话气泡呈现,回答直接回流 DSH(`user-questions/request`) - [x] **AI 思考跑酷** —— Chrome 离线小恐龙跑酷(T-Rex Runner,Chromium BSD 许可)只由真实 THINKING / STREAMING / TOOL_CALLING 状态驱动,空闲时绝不假装在思考 - [x] **五页设置中心** —— 游戏 / AI / 世界 / 音频 / 视觉:设置存 localStorage,音乐存 IndexedDB,API Key 存 DSH 凭据库 - [x] **音效与音乐** —— WebAudio 合成 8-bit 音效,支持导入自己的背景音乐(MP3 / WAV / OGG / FLAC / M4A / AAC / OPUS) - [x] **桌宠与粒子** —— 互动桌宠(美西螈/猫/狼/苦力怕/恶魂,支持喂食、好感度、图鉴换宠)+ 经验球 / 红石粒子(限量 80 粒),独立开关 - [x] **零侵入** —— 经典 DSH Web 界面原样保留,`/index.html` 一键切回 ## 📦 安装与使用 ### 1. 环境要求 | 依赖 | 要求 | | ---------------- | ------------------------------------------------- | | Node.js | `^22.19` 或 `>=24`(DeepSeek Harness 运行要求) | | DeepSeek Harness | 已安装,且 `dsh` 命令可用 | | 浏览器 | 支持 WebGL 与 WebSocket 的现代浏览器 | | DEEPSEEK_API_KEY | 真实对话必需,见下方「配置」步骤 | ### 2. 安装主题 **方式一:安装到 web profile(标准用法)** ```bash dsh plugin --profile web add dsh-theme-minecraft # npm 发布后 dsh plugin --profile web add ./dsh-theme-minecraft # 或本地目录安装 ``` 安装后插件进入 `~/.dsh/profiles/web`,随 `dsh web` 自动挂载,无需其他步骤。 **方式二:仓库内源码运行(开发调试)** 在 DeepSeek Harness 仓库根目录执行: ```bash pnpm dsh web --patch ./dsh-theme-minecraft/cordis.source.patch.yml --no-open # 浏览器打开 http://127.0.0.1:3080/ ``` ### 3. 配置 1. **登录**:使用 `dsh web` 打印的带 `?token=` 的 URL 完成登录(与原版一致的签名 Cookie 流程,主题复用了 `connection.authorizeIndex`,没有绕过任何认证)。 2. **API Key**(二选一): - 主题内:主菜单 → 设置… → AI 设置 → 保存(走 `credentials/set` 写入 DSH 凭据库,值只进不出); - 环境变量:在 `.env` 里提供 `DEEPSEEK_API_KEY`。 ### 4. 启动 ```bash dsh web ``` 打开终端打印的 URL,即看到 Minecraft 主菜单。想回到经典界面,直接访问 `http://:/index.html`。主菜单的「模型选择」可切换新对话使用的模型 (`session/modelCatalog` 列出部署内全部可路由提供方,含非 DeepSeek 厂家;选择经 `session/selectModel` 安装到新会话)。 ## 🛠 技术栈 | 技术 | 用途 | 版本 / 兼容范围 | | ------------------------ | ---------------------------------------- | ------------------------- | | JavaScript(ESM) | 插件与前端全部逻辑,零运行时依赖 | ES2022+ | | Node.js | 宿主运行环境 | `^22.19` 或 `>=24` | | Cordis 插件框架 | 插件生命周期与依赖注入 | `>=0.x`(peer 依赖) | | WebSocket + JSON-RPC | 与 DSH 的全部真实通信(RPC / 流 / 事件) | DSH 内置 API | | WebGL | 主菜单全景立方体贴图 | 浏览器原生(无 three.js) | | Canvas 2D | AI 思考跑酷小游戏渲染(iframe 内 T-Rex) | 浏览器原生 | | Web Audio API | 8-bit 音效合成与背景音乐播放 | 浏览器原生 | | IndexedDB / localStorage | 设置与音乐文件持久化 | 浏览器原生 | ## 📁 项目结构 ``` dsh-theme-minecraft/ ├── .github/ │ └── workflows/ │ └── static.yml # GitHub Pages 自动部署(demo/ 素材演示站) ├── demo/ # Minecraft-Panorama 素材演示站(GitHub Pages) │ ├── index.html # 主菜单演示(three.js 高清全景背景) │ ├── 404.html # Pages 404 页面 │ ├── asset/ # 全景立方体贴图 6 张 + 界面素材 │ ├── css/ # 演示站样式与像素字体 │ ├── figure/ # 角色头像(Steve / 村民 / 苦力怕) │ ├── loading/ # 加载地形页演示 │ └── worlds/ # 选择世界页演示 ├── docs/ │ └── 开发文档.md # 主题设计开发文档 ├── screenshots/ # README 演示截图 ├── web/ # 主题本体(单页应用) │ ├── index.html # SPA 外壳 │ ├── manifest.webmanifest # PWA 清单 │ ├── css/ │ │ ├── minecraft.css # 主菜单 / 存档页 / 设置页视觉 │ │ └── hud.css # 游戏 HUD │ ├── fonts/ # Minecraft 风格像素字体(ttf / woff) │ ├── assets/ # 官方素材:全景图、GUI、头像 │ ├── js/ │ │ ├── rpc.js # 浏览器协议客户端(unary RPC + 流 + $events) │ │ ├── panorama.js # 原生 WebGL 立方体贴图全景 │ │ ├── menu.js # 主菜单 / 存档 / 模式 / 设置 │ │ ├── world.js # 游戏 HUD、AI 状态机、审批与提问面板 │ │ ├── store.js # localStorage 设置 + IndexedDB 音乐 │ │ ├── audio.js # WebAudio 合成音效 + 背景音乐 │ │ ├── particles.js # 经验球 / 红石粒子(限量 80 粒) │ │ ├── pet.js # 桌宠(iframe 挂载 web/pet/pet.html) │ │ ├── ui.js # 对话框 / toast / 闪字库 / 模式风味命名 │ │ └── main.js # 路由与启动 │ ├── pet/ # 桌宠应用本体(pet.html + picture/ 素材) │ └── mini-games/ │ ├── dino-runner.js # 跑酷封装(T-Rex iframe 适配,createDinoGame 工厂) │ └── t-rex/ # Chrome 离线小恐龙跑酷本体(Chromium BSD 许可) ├── index.js # Host 插件:注册 / 与 /minecraft 两条路由 ├── cordis.patch.yml # bundle 层挂载声明(DSH 插件标记) ├── cordis.source.patch.yml # 仓库内源码调试层 ├── package.json # dsh.bundle.patch 声明(bundle 形态) ├── LICENSE # MIT ├── .gitignore ├── README.md └── README_EN.md ``` ## 📸 效果截图 **主菜单** —— 下界全景旋转背景,黄色闪字是每个玩家的 reminder: ![主菜单](screenshots/menu.png) **世界存档** —— 历史会话渲染为存档卡片,可直接进入、重命名或刷新: ![世界存档](screenshots/worlds.png) **模式选择** —— 四种游戏模式即四种 Agent 预设,右侧是 DSH 真实描述: ![模式选择](screenshots/modes.png) **世界内对话** —— Steve 与「AI him」聊天,AI 思考时弹窗出现小恐龙跑酷小游戏: ![世界内对话](screenshots/play.png) **工具与思考过程** —— 工具调用卡片、可折叠思考过程、完成时的经验球粒子: ![工具调用](screenshots/play-tools.png) **设置中心** —— 游戏 / AI / 世界 / 音频 / 视觉五个标签页: ![设置中心](screenshots/settings.png) > 仓库另带一个独立的 three.js 全景演示站(`demo/` 目录,即 Minecraft-Panorama 素材站), > push 到 main 后由 GitHub Pages 自动部署;主题本体不依赖 three.js,全景由原生 WebGL 实现。 ## 📄 License 信息 本项目以 **[MIT](LICENSE)** 协议开源。 [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](#license) > ⚠️ **素材版权说明**:`Minecraft` 名称与官方素材(全景图、GUI 贴图、角色头像、像素字体) > 版权归 Mojang AB / Microsoft 所有,本项目仅作非商用粉丝主题使用。请勿将本仓库用于 > 商业产品;如需移除,Mojang 可随时提出要求。 ## 🤝 贡献指南 欢迎 Issue 与 PR!为提高协作效率,请遵循以下约定。 **提交 Issue** - **Bug 报告**请包含: - 环境信息:操作系统、浏览器及版本、Node.js 版本、DeepSeek Harness 版本; - 复现步骤(从哪条命令开始)、期望行为、实际行为; - 浏览器控制台与 `dsh web` 终端日志截图。 - **功能请求**请说明:想解决的场景、期望的 Minecraft 表现形式、对应的 DSH 能力(若已知)。 **提交 Pull Request** ```text 1. Fork 本仓库 2. 新建分支 git checkout -b feat/your-feature # 或 fix/your-fix 3. 提交变更 git commit -m "feat: 支持 xxx" # 遵循 Conventional Commits 4. 推送并建 PR Push 到你的 Fork,向 main 分支发起 Pull Request 5. 等待 Review 按评审意见修改,通过后由维护者合并 ``` > 注意事项:UI 变更请附改动前后的截图;请勿在 PR 中引入对 DeepSeek Harness 核心源码 > 的修改——主题能力只应通过 DSH 现有插件机制与 API 实现。