dsh-deepseek-theme-studio
DSH Web GUI 客户端主题插件:流体背景、毛玻璃面板与量子化着色器效果,100 项参数可调并持久化到 JSON 文件。
安装
dsh plugin --profile web add dsh-deepseek-theme-studio
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-deepseek-theme-studio
DeepSeek 官网视觉语言的 DSH Web 客户端主题插件:毛玻璃 / 液化(流体)/ 量子化(Q1–Q4)三类效果,
全部参数可调、可持久化、可程序化调用。
- 宿主实测版本:0.2.1-rc.2(同时兼容 0.2.0-rc.2;
dsh.compatibility.dshReleases两个版本都已声明) - 目标 profile:web(
$env:USERPROFILE\.dsh\profiles\web) - 出厂默认是蓝白官网主题(流体背景 + 毛玻璃 + 鲸鱼水印);点预设里的 「原生」 立即回到
DSH 原生外观,关闭全部效果后不写任何令牌、不挂任何 canvas。
- 复用与许可台账见 [
REUSE.md](REUSE.md),第三方许可见 [LICENSES/](LICENSES/NOTICE.md)。
1. 交付物
路径 · 说明
package.json · manifest(dsh.bundle.patch / dsh.client / exports)
cordis.patch.yml · loader 条目(dsh.bundle.patch 指向它)
lib/index.js · 宿主半(Node):JSON 参数文件 + 围栏 HTTP 路由 + 热加载
lib/client.js · 浏览器 bundle(scripts/build.mjs 由 src/ 生成,勿手改)
src/** · 可读源码(参数表、存储、各效果引擎、设置行、程序化 API)
scripts/build.mjs · 零依赖构建(--check 做陈旧检查)
scripts/smoke-factory.mjs · 在 Node 里跑一遍 bundle 工厂,抓语法/导出错误
scripts/verify-tokens.mjs · 令牌漂移自检(失败非零退出)
scripts/png-diff.mjs · 纯 Node PNG 双图差异报告(含 --dump-region diff)
REUSE.md · 复用与许可台账(Phase 0 闸门产物:逐行来源与许可判定)
ACCEPTANCE.md · 验收实测证据(含 0.2.1-rc.2 复验与点击安全,§11)
icon.svg, LICENSE, LICENSES/ · 图标 / 许可证 / 第三方声明
2. 安装 / 升级 / 卸载 / 还原
dsh 不在 PATH 上,下面用绝对路径调用。
# 本仓库克隆到哪,就填哪 $repo = "$env:USERPROFILE\src\dsh-deepseek-theme-studio" $dsh = "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
2.1 安装(本地路径)
$env:COREPACK_ENABLE_PROJECT_SPEC = "0" # 见 §6 坑 1 & $dsh plugin --profile web add $repo
换成别的 profile 只改 --profile 的值,其余完全一样:
profile · 你在哪用它 · 命令
desktop · 桌面版 DSH(托盘常驻的那个,Web GUI 通常绑定随机端口) · & $dsh plugin --profile desktop add $repo
web · dsh --profile web 起的纯 Web 实例 · & $dsh plugin --profile web add $repo
两者是独立的两份 profile(各自有自己的package.json/node_modules/ 设置),装一个不影响另一个;
想两边都有就各装一次。重启也只重启你要用的那个。
桌面版重启:完全退出 DeepSeek Harness(含托盘图标)再打开。这份 profile 没有 patchReload: live,
所以热更新不适用于"新增插件"这种改动。
预期输出(本次实测):
dependencies: + dsh-deepseek-theme-studio link:$repo Done in 3s using pnpm v11.7.0
安装做三件事,缺一不可:
1. profiles/web/package.json → dependencies 增加 "dsh-deepseek-theme-studio": "link:$repo";
2. 同文件 dsh.profile.bundles 追加 "dsh-deepseek-theme-studio";
3. profiles/web/node_modules/dsh-deepseek-theme-studio 建 Junction 指向源码目录。
loader 条目由本包自己的 cordis.patch.yml 提供(dsh.bundle.patch 机制),因此不需要手改
profiles/web/cordis.patch.yml。本包内容:
- insert:
- id: deepseek-theme-studio
name: 'dsh-deepseek-theme-studio'
2.2 生效:重启 profile
客户端插件没有自动发现机制 —— 只把包装进 node_modules 不会生效,必须重启 profile 让 boot manifest 重新组合。
重启前可先跑 node scripts/preflight-profile.mjs 体检(见 §7)。
web profile:
# 停掉当前实例后: $exe = "$env:LOCALAPPDATA\Programs\DeepSeek Harness\DeepSeek Harness.exe" $bin = "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh\lib\bin.js" $env:ELECTRON_RUN_AS_NODE = "1" Remove-Item Env:DSH_PROFILE, Env:DSH_PROFILE_DIR, Env:DSH_SHELL -ErrorAction SilentlyContinue & $exe --expose-internals $bin --profile web --port 19399 --no-open # 输出形如: dsh web: http://127.0.0.1:19399/?token=<TOKEN>
然后浏览器打开该 URL 并 Ctrl+Shift+R 硬刷新。
为什么必须清那几个环境变量:dsh.cmd走的是 desktop host CLI(manageDesktopProfile: true),
会强行注入--profile desktop,于是--profile web变成"profile 指定了两次"而报错;
且DSH_PROFILE_DIR会把 profile 目录钉死在 desktop。直连内层bin.js并清掉这三个变量即可。
desktop profile: 完全退出 DeepSeek Harness(含托盘图标)再打开即可 —— 桌面版由它自己拉起,
不需要手敲命令。重启后到设置 → 通用 看那一行在不在;不在就按 §6 坑 2 逐条查,
或先跑 node scripts/preflight-profile.mjs --profile desktop。
2.3 升级
本地 link 安装:改完 src/ 后 node scripts/build.mjs(或用 pnpm run build),再重启 profile 即可;
不需要重新 add。npm 安装:& $dsh plugin --profile web add dsh-deepseek-theme-studio@<新版本> 后重启。
2.4 卸载
& $dsh plugin --profile web remove dsh-deepseek-theme-studio
实测会把 dependencies 与 dsh.profile.bundles 中的条目一并移除(刷新页面不够,必须重启 profile)。
node_modules 下可能残留一个失效 Junction,可手动删除:
Remove-Item "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-deepseek-theme-studio" -Force -Recurse
2.5 还原原生外观(不卸载)
设置 → 通用 → DeepSeek 官网主题工作台 → 点 一键还原原生;或:
window.dshThemeStudio.reset()
还原后本插件不写任何令牌、不挂任何 canvas、不设 data-dts 根属性,只剩设置行本身(关掉设置即不可见)。
3. 三条控制通道
3.1 设置页 UI
注册进宿主自己的 settings.general.item 槽位(order: 20,紧随内置「外观」行 order: 10 与字号行 order: 11),
不是独立悬浮面板。分组折叠、每组控件由参数表自动生成。
3.2 程序化 API
同一个对象挂两处:window.dshThemeStudio 与 ctx.provide('themeStudio', api)。
方法 · 签名 · 说明
list() · () => ParamInfo[] · 每个参数的 key / 标签 / 分组 / 类型 / 范围 / 步长 / 默认值 / 当前值
get(key) · (string) => any · 取一个参数(未知 key 抛错)
getAll() · () => object · 取全部当前值
set(key, value) · (string, any) => any · 设一个参数,按参数表强制类型与范围
setMany(patch) · (object) => object · 批量设置
reset() · () => object · 还原原生
exportPreset() · () => string · 导出 JSON(含 $schema)
importPreset(text\ · object) · (any) => {applied, unknown} · 导入
presets() / applyPreset(id) · · 内置预设:native / official-dark / official-light
subscribe(fn) · (fn) => () => void · 订阅变更
selfCheck() / formatSelfCheck() · · 令牌 + DOM 钩子漂移报告
diagnostics() / diagnosticsText() · · 全量诊断(含每个效果的运行状态)
window.dshThemeStudio.applyPreset('official-dark')
window.dshThemeStudio.set('glass.blur', 32)
window.dshThemeStudio.formatSelfCheck()
3.3 JSON 参数文件(可手工编辑 + 热加载)
// $env:USERPROFILE\.dsh\theme-studio.json
{
"appearance.mode": "dark",
"appearance.backgroundMode": "fluid",
"glass.enabled": true,
"glass.blur": 24,
"quantum.q1Spacing": 90,
"quantum.q2Levels": 6
}
- 文件名/路径:
$DSH_HOME/theme-studio.json(默认$env:USERPROFILE\.dsh\theme-studio.json),原子写(tmp+rename)。 - HTTP 接口(前缀路由,带 loopback + 同源信任围栏):
GET /deepseek-theme-studio/api→{ ok, value, fileError, revision, path }
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:6,最后更新 2026-10-30