中文EN

dsh-deepseek-theme-studio

theme已测通过npmMIT

DSH Web GUI 客户端主题插件:流体背景、毛玻璃面板与量子化着色器效果,100 项参数可调并持久化到 JSON 文件。

下载量 / Downloads
845
依赖体积 / node_modules
0.26 MB
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

安装

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

链接

GitHub · Homepage · npm

同类插件