Back to home

FURO2170

dsh-ui-manager

在 Web 设置界面的 Agent 预设 之下新增 皮肤 分区,用于管理用户已安装的 UI / 皮肤类插件。

Stars
0
Language
TypeScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

DSH-UI-Manager

DeepSeek Harness 插件:在 Web 设置界面的 Agent 预设 之下新增 皮肤 分区,用于管理用户已安装的 UI / 皮肤类插件。

功能

  • 列出所有已安装的皮肤插件(检测包清单中的 dsh.skin 标记,或 exports["./skin.json"] 导出,兼容现有 maid-atelier 皮肤)。
  • 单列 / 双列视角切换。
  • 每个皮肤一个滑动开关:同一时间只启用一款;点击已开启的开关即关闭;全部关闭时恢复默认 UI。
  • 切换后不会立即刷新界面;右下角出现 立即重启 按钮,由你决定何时生效(重启 = 重新加载界面)。
  • 开关右侧的垃圾桶图标:点击弹窗确认后卸载该皮肤插件(pnpm remove,并同步 profile 的 bundle 列表)。
  • 插件名右侧的笔图标:内联重命名显示名称(持久化,重启后保留)。
  • 点击插件名跳转到插件主页(GitHub 仓库,取自 skin.json.homepage / package.json.homepage / repository)。

安装

# 本地路径
dsh plugin --profile web add /path/to/dsh-ui-manager
# 或直接从 GitHub 安装(安装时通过 prepare 脚本自动构建)
dsh plugin --profile web add https://github.com/FURO2170/dsh-ui-manager.git

然后重启 Web 应用(bundle 变更需要重启后生效),进入 设置 → 皮肤。

效果展示

PixPin_2026-08-17_00-00-39

工作原理(简述)

  • 互斥持久化:管理器把"非激活皮肤"以 disabled: true 行写入 home 层补丁 $DSH_HOME/cordis.patch.yml。客户端插件(window.__DSH_BOOT__ 清单)只装载未禁用的条目,因此重新加载页面后新皮肤才生效 —— 这正是"重启后生效"的机制。
  • Host 面lib/index.js):skinManager Remote 网关(list / setActive / rename / uninstall)+ ui-skins 设置命名空间(activeSkinrenames)+ home 补丁对账。
  • 浏览器面lib/client.js):settings.section(order 30,位于 Agent 预设之下)与 shell.overlay 右下角重启按钮。
  • 首次运行:若管理器从未管理过本机,会采纳当前已启用的皮肤作为激活项,不会意外切换 UI。

开发

pnpm install
pnpm build   # 产出 lib/index.js + lib/client.js(闭包工厂格式)

皮肤插件作者须知

皮肤包在 package.json 声明 dsh.bundle.patch(成为 profile 层)与 dsh.clientplatform: "web"),并提供 skin.json

{
  "id": "my-skin",              // 管理器中的唯一 id
  "name": "我的皮肤",            // 显示名(可被用户重命名覆盖)
  "nameEn": "My Skin",
  "homepage": "https://github.com/you/my-skin",
  "wiring": { "id": "ui-skin-my-skin" } // 补丁层插入的 entry id,用于启用/禁用
}

wiring.id 缺省时开关会显示为"不支持开关管理"。