# deepseek-harness-desktop

> 按 Minecraft 主菜单风格给 DSH Web GUI 换一套像素方块外观：身后缓慢旋转的程序化全景天空盒、灰石板按钮、带角钉木牌输入框，完全离线不触模型请求。

## Metadata

- Author: [@ningbainb](https://github.com/ningbainb)
- Repo: <https://github.com/ningbainb/deepseek-harness-desktop.git>
- GitHub: [ningbainb/deepseek-harness-desktop](https://github.com/ningbainb/deepseek-harness-desktop)
- Stars: 156
- Language: TypeScript
- License: [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html)
- Homepage: <https://ningbainb.github.io/deepseek-harness-desktop/>
- Topics: `ai-agent`, `ai-coding-assistant`, `codex`, `deepseek`, `deepseek-harness`, `desktop-app`, `dsh`, `dsh-plugin`, `electron`, `electron-app`, `gui`, `open-source`, `plugin-system`, `plugins`, `remote-access`, `skills`, `ssh-client`, `windows`, `windows-desktop`
- Forks: 5
- Open Issues: 6
- Last push: 2026-08-20T05:29:52.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/skins/minecraft
```

## Wiki

## 一句话定位
这是一套给 DSH Web GUI 用的 Minecraft 主菜单风格皮肤：把按钮换成灰石板方块、输入框换成带角钉的木告示牌，再在界面背后画一个缓缓旋转的程序化全景天空盒。

## 核心能力
- 渲染程序化全景天空盒：六面 CSS 3D 立方体（四个侧面生物群落 + 顶面天空 + 底面草方块田），所有像素图都由代码当场绘制，不依赖任何外部贴图
- 复刻 Minecraft 标题画面的"绕 Y 轴缓慢滚动"动作，让地平线在背景中飘过
- 把界面按钮换成经典 MC 风格组件（灰色石板、黑色描边、悬停变黄、按下下沉）
- 把输入框换成带角钉的木质告示牌 UI
- 把面板改成半透明石板，配色映射到青金石蓝、草绿、石灰、金沙
- 切换皮肤时把所有写入（body 属性、注入的 div、文档标题）一次性收回，不留痕迹

## 技术实现
- **语言**: TypeScript（含 CSS Modules）
- **关键依赖**: `@deepseek-ai/cordis`（仅类型）、`lightningcss`（CSS 编译）、`tsdown`（打包）、`vitest`（测试）
- **架构模式**: 官方独立 cordis bundle 形态——`src/index.ts`（host 半区）为空 stub，`src/client/index.ts`（client 半区）通过 `apply(ctx)` 渲染皮肤；副作用全部走 `ctx.effect` 注册清理器，dispose 时由 cordis 自动回收
- **入口文件**: `packages/skins/minecraft/src/client/index.ts`（host 入口 `src/index.ts` 不做任何事）

## 适用场景
想换换 DSH Web GUI 视觉风格、喜欢 Minecraft 美学的用户。同一个浏览器 profile 下"用腻了现在的皮肤想试试像素风"时，装上并执行 `dsh-skin use minecraft` 即可一键切换；不想用了再用 `dsh-skin use` 切回其他皮肤或默认状态。它不影响任何聊天、文件、模型调用行为，只是把"长相"换掉。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| Node | ^22.19.0 \|\| >=24.0.0 | 包级 package.json 未单独声明 engines，沿用 monorepo 根 `package.json` 的 engines 字段与 `packages/AGENTS.md` 约定 |
| DSH | 未声明 | 走官方 cordis bundle 形态（`dsh.bundle.patch` + `cordis.patch.yml`），未在 package.json 中指定具体 DSH 版本号 |
| 平台 | 跨平台 | 包内只有 DOM 操作 + CSS Modules，不引入原生模块；运行在 DSH web profile 的浏览器侧 |
| 原生模块 | 无 | peerDependencies 为空；未引入 node-pty、sqlite、ffi 等原生绑定 |

## 安装方式
```bash
dsh plugin --profile web add github:ningbainb/deepseek-harness-desktop/packages/skins/minecraft
```

> 注：仅"安装"包还不会让皮肤生效，还需要 `dsh-skin use minecraft`（仓库内 `scripts/dsh-skin` 辅助脚本）把它标记为当前激活的皮肤；同 profile 下同一时刻只激活一个皮肤。

## 配置项
本插件无需额外配置。

皮肤的视觉效果（按钮、面板、调色板）全部由 CSS Modules 与代码常量固定下来，没有运行时配置项、Schema 字段、环境变量或开关。

## 常见问题

**Q: 这个皮肤需要联网吗？会调用模型吗？**

A: 不需要，也不调用。整张全景天空盒是 JavaScript 在本地把方块、云、山、树、房屋一行一行画成 SVG 的，没有任何外部贴图或网络请求，README 与源码注释都明确"不触任何模型请求"。

**Q: 装上之后皮肤没生效怎么办？**

A: 安装只把皮肤包放进 profile，还需要执行 `dsh-skin use minecraft`（仓库里的辅助脚本）把它标记为"当前激活的皮肤"。同一时刻只能激活一个皮肤，未被激活的皮肤不会被启用。

**Q: 会保存我的聊天记录或个人信息吗？**

A: 不会。皮肤包只读写 DOM（body 属性、几个注入的 div、document.title），没有任何本地存储、网络上报或后端调用，卸载时由 effect 清理器逐条撤回。

**Q: 怎么切回默认外观？**

A: 用 `dsh-skin use <其它皮肤名>` 切到其它皮肤，或 `dsh-skin use none` 回到无皮肤状态；皮肤包卸载时也会自动把写入的 body 属性、注入的 div、文档标题全部还原。

**Q: 安装这个包会跟其他皮肤冲突吗？**

A: dsh-skin 工具负责互斥——profile 的 `cordis.patch.yml` 中同一时刻只有一行皮肤是 enabled，其他皮肤会带上 `disabled: true`。所以不能同时叠加多个皮肤。

**Q: 和官方功能有什么区别？**

A: 这只是外观皮肤，不注入服务、不发 cordis 事件、不拦截模型请求。所有官方功能（聊天、文件、设置、插件市场等）原样可用，只是按钮、输入框、面板变成方块/石板/木牌风格。

**Q: 卸载时会留垃圾吗？**

A: 不会。cordis 卸载流程会执行 effect 清理器：移除 `data-dsh-minecraft` body 属性、移除注入的 stage/scrim、还原原文档标题，单元测试 `tests/apply.spec.ts` 明确覆盖了这些收回路径。

## 上手难度
入门 — 安装一行命令 + 一次 `dsh-skin use minecraft` 即生效；没有配置项、没有副作用、没有需要阅读文档的开关，普通用户 1 分钟内可完成全部部署。

## 已知问题与限制
- 同一时刻只能激活一个皮肤：`dsh-skin` 工具通过 profile 的 `cordis.patch.yml` 把其它皮肤标 `disabled: true`，不能两个皮肤同时叠加（这是设计限制，非 bug）
- 包级 package.json 未声明 `engines` 字段：构建/运行依赖 Node 版本沿用 monorepo 根 `package.json` 的 `^22.19.0 || >=24.0.0` 约定
- 文档标题只在本皮肤自己的标题仍生效时还原：若 shell 后续又覆盖过 `document.title`，皮肤 dispose 时不会覆盖回原值（注释 `src/client/index.ts:407-410` 明确说明）

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [deepseek-harness-desktop](https://deepseek-plugin.org/plugins/ningbainb/deepseek-harness-desktop/packages/skins/minecraft)
Wiki generated by AI (model: `MiniMax-M3`)
