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 变更需要重启后生效),进入 设置 → 皮肤。
效果展示
工作原理(简述)
- 互斥持久化:管理器把"非激活皮肤"以
disabled: true行写入 home 层补丁$DSH_HOME/cordis.patch.yml。客户端插件(window.__DSH_BOOT__清单)只装载未禁用的条目,因此重新加载页面后新皮肤才生效 —— 这正是"重启后生效"的机制。 - Host 面(
lib/index.js):skinManagerRemote 网关(list / setActive / rename / uninstall)+ui-skins设置命名空间(activeSkin、renames)+ 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.client(platform: "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 缺省时开关会显示为"不支持开关管理"。