dsh-web
zhu1090093659
DeepSeek Harness (DSH) Web 插件聚合生态 · 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:NoNameLeGo/dsh-catppuccin-theme
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README

中文 | English
简介 · 特性 · 预览 · 安装 · 使用 · 玻璃拟态 · 兼容性 · 开发 · 🙋 常见问题 · 💝 致谢
DeepSeek Harness 的
Catppuccin 主题插件——一个包同时适配
Web GUI(dsh web)、桌面版(官方 Electron 壳 apps/desktop 与社区 DSH Desktop,
共用 desktop profile)与 dsh-TUI 终端:
Web / 桌面端做全界面换色与玻璃质感,TUI 端自动同步四套官方主题色板。
它内置 Catppuccin 的四个主题——Latte、Frappé、Macchiato、Mocha—— 把整个界面的配色都换成对应的 Catppuccin 色板;并在 设置 → 常规 → 外观 下方提供一行 Catppuccin 快捷切换,选择会自动保存、重启自动恢复。
同时内置一套可开关的玻璃质感(Glassmorphism)皮肤:顶栏、侧边栏、 输入框、统计行、轨迹视图、聊天气泡、新会话按钮都变成磨砂玻璃卡片, 模糊度、磨砂度、背景亮度均可自由调节,玻璃颜色自动跟随当前 Catppuccin 主题。
--dsw-* 变量: 值」逐条覆盖单个配色 token(例如把注释色换成蓝色),与所选风味一起持久保存~/.dsh-tui/themes/,见安装 · dsh-TUI四个主题在 DeepSeek Harness 中的实际效果(截图来自本地 GUI,文首大图为四主题斜切合成):
同一会话在浅色(Latte)与深色(Mocha)下的磨砂玻璃效果:顶栏、侧边栏、 聊天气泡、输入框与统计行都是玻璃卡片,消息滚过页面边缘时被柔化, 背景为主题底色的纯色(截图来自本地 GUI):
dsh plugin --profile web add @nonamelego/dsh-catppuccin
装完重启 dsh web 即可,dsh plugin 会自动把它加进 profile 的 bundles。
其他 profile 把命令里的 web 换成对应名字即可(如 headless)。
桌面版:官方桌面壳与社区桌面壳都读同一个 profile $DSH_HOME/profiles/desktop,但
两者装/升插件的方式完全不同、也不通用——按你用的壳选一列:
| 官方桌面壳(DeepSeek Harness 客户端) | 社区桌面壳(DSH Desktop) | |
|---|---|---|
| 安装 | 应用内的插件界面 → 添加插件 → 填包名 @nonamelego/dsh-catppuccin(也接受 Git 地址 / 压缩包 / 本地路径) |
在打开的 终端里执行命令:dsh plugin --profile desktop add @nonamelego/dsh-catppuccin |
| 升级 | 先在插件界面里把插件删除,再重新填一遍同一个包名安装(v0.2.0 没有升级入口,也没有版本选择器) | 与 web 类似的更新命令:dsh plugin --profile desktop update @nonamelego/dsh-catppuccin |
| 谁执行 pnpm | 应用自带的 pnpm | 应用自带的 pnpm |
两种方式改完都要重启桌面应用才会加载新版本。
⚠️ 两列别混用:官方壳的插件界面不执行命令;社区壳那条
update命令对官方壳也不适用。 另外,系统 PATH 上那个普通dsh两个壳都管不了desktop——上游把desktop当自己保留的 profile,会直接报error: profile "desktop" is managed exclusively by the Electron application。 想用 CLI 管就用别的 profile 名(web、headless、dsh-tui)。
本插件的桌面支持以 官方 web + 官方 desktop 为维护核心;社区壳的
desktopProfiles服务探测也保留。 但官方壳的 profile 进程没有专用的环境标记(它的DSH_DESKTOP_NODE_EXECUTABLE只注入给 包安装子进程),所以本插件改为识别 Electron-as-node 运行时(process.versions.electron) 来判定官方桌面版;设置的读写不受影响。
dsh plugin --profile web add https://github.com/NoNameLeGo/dsh-catppuccin-theme
从 git 安装时 pnpm 可能要求允许构建脚本——按 pnpm 的提示把对应包加进 profile
pnpm-workspace.yaml 的 allowBuilds 后重跑一次即可。
桌面版同理,但按上面的表走:官方壳在插件界面里直接填 Git 地址;社区壳把这条命令的
dsh plugin --profile web add … 换成 dsh plugin --profile desktop add …。
本节针对第三方终端前端 dsh-TUI(需先自行装好它)。 与 Web GUI 插件同一个包,用标准的插件安装命令装进 dsh-tui profile:
dsh plugin --profile dsh-tui add @nonamelego/dsh-catppuccin
从仓库安装同理(也可用 git 形式,效果一致):
dsh plugin --profile dsh-tui add https://github.com/NoNameLeGo/dsh-catppuccin-theme
包里带一个只做主题同步的小插件行(dsh-catppuccin-tui-themes,不依赖任何服务):dsh-TUI 启动时自动把四套主题 JSON 同步到 ~/.dsh-tui/themes/,之后升级包即同步新版配色。装完启动 dsh --profile dsh-tui,在 dsh-TUI 里用 /theme 选择 Catppuccin Latte / Frappé / Macchiato / Mocha,或直接 /theme catppuccin-mocha 切换(选择会持久化,下次启动自动恢复)。
💡 已为 Web GUI 装过本插件、同时用 dsh-TUI 的话,无需重复安装:Web 端每次 启动会自动同步主题到
~/.dsh-tui/themes/(仅当该目录已存在)。
📁 不想装包也可手动复制:把
themes/*.json拷进~/.dsh-tui/themes/(Windows:%USERPROFILE%\.dsh-tui\themes\),只是不随版本自动更新。
⚠️
catppuccin-*.json归本插件所有、同步时会被覆盖;想自定义请改名另存。
💡 TUI 主题只管 TUI 内部配色,终端背景由你的终端决定——建议也配上对应 风味的 Catppuccin(见 Catppuccin ports 列表),观感最一致。
http://127.0.0.1:3080);在 DSH Desktop 中则直接打开桌面应用即可。另一处入口:在 插件页(Plugins)点开本插件自己的卡片,中间会出现同一组设置 (Catppuccin 主题 / 玻璃质感 / 检查更新)——两处读写的是同一份偏好,改哪边都一样。 该区域由宿主(≥
0.2.0-rc.2的插件详情页)提供,更旧的版本上没有。
--dsw-* 变量: 值」逐条覆盖单个 token,
例如 --dsw-static-blue-500 → #89b4fa。键名失焦生效(必须以 -- 开头,否则该条会被丢弃);
值同样失焦生效、清空值即删除该条;✕ 删除整行。覆盖持久保存,与所选风味一起生效。在 设置 → 常规 的 Catppuccin 主题 正下方找到 玻璃质感 行:
none,每帧都要回读背景)。
在意占用就用兼容模式:它只在输入框卡片与浮层上做玻璃,命中面明显更小。玻璃配色自动跟随当前主题,切换 Latte / Frappé / Macchiato / Mocha 时即时 变色;所有设置跨重启自动恢复。
在 设置 → 常规 的 玻璃质感 正下方找到 检查 Catppuccin 插件更新 行:
web)。latest)或 Beta 版(连预发布一起跟)。link: / file: / git)时不显示 npm 升级
命令,会提示改用 git pull 或重新构建。latest 标签;预发布版同时跟随 beta(升级命令
自动带 @beta)。离线或网络失败时显示原因并可重试。包名@渠道 并提示在
插件界面里先删除、再重新安装(与上面「桌面版」段的升级路径一致);
社区桌面壳与 web 仍照常给出可复制的 dsh plugin … 命令。
判定由宿主完成(web / community-desktop / official-desktop),无需你选。玻璃拟态是一种视觉风格:界面面板像一片磨砂玻璃——半透明填充、
背景模糊(backdrop-filter: blur())和玻璃细节(描边、内高光、柔和投影),
透过它能看到并柔化背后的内容。
本插件的具体效果:
兼容模式靠类名子串与语义属性给宿主与第三方插件的悬浮面加玻璃,不需要插件配合——
代价是子串匹配无法区分「面」与「面里的行级容器」。自 0.5.8 起,明确会被命中的族只剩这些:
| 族 | 锚点 |
|---|---|
| 输入框卡片 | [data-composer-card](材质画在它的 ::before 上,见 issue #19) |
| 菜单 | [role='menu'] |
| 弹出层 | [class*='popover'] / [class*='dropdown'](仍是子串) |
| 模态框 | [role='dialog'][aria-modal='true'] |
| 宿主右侧栏(仅展开态) | [data-sidebar-right-panel][data-sidebar-right-open] |
第三方插件里新出现的类名仍可能被误命中。遇到时走三步:① 只读取证(一段粘进控制台的探针脚本,
列出命中的元素与规则)→ ② 临时止血(外部注入一条 !important 还原;本插件不提供
「自定义 CSS」配置项)→ ③ 反馈(把取证输出连同 DSH 与插件版本提到
issues)。
三步的完整说明、探针脚本与历史(#16 / #17 / #19)见 docs/glass-mis-hits.md。
玻璃层用 backdrop-filter 读取它背后实际被画出来的像素。本插件只负责给面加材质,
不负责给宿主造透明底:宿主若把窗口与自绘容器刷成不透明色,玻璃面背后就没有可柔化的
内容,效果退化为半透明叠色——能看到色调,看不到悬浮/磨砂层次。
| 宿主 | 表现 | 原因 |
|---|---|---|
| 官方 Web GUI / 官方桌面壳 | 正常 | 窗口与容器提供可透出的底 |
第三方 DSH Desktop(dsh-plugin-desktop 2.0.17) |
仅半透明叠色 | Windows 上静默把窗口材质强制为 off(设置里的 Mica/纯色选项选了不生效);同时把侧栏表面与自绘容器刷成不透明面板色(--dsh-desktop-frame-fill / .dshDesktopSidebarSurface 取 --dsw-alias-bg-layer-1) |
本插件不会为此加 !important 覆写:那等于让插件去接宿主的容器结构,宿主一改就碎,
也偏离「只改材质」的定位。宿主将来若能提供 Windows 原生窗口材质(backgroundMaterial: mica/acrylic),
本套实现无需改动即可受益。
自查(玻璃「正常」与「观感平」返回的 computed 值可能完全相同,差别只在宿主有没有给出透明底):
const s = document.querySelector('[data-dsh-glass-surface]'), cs = getComputedStyle(s)
console.table({ backdropFilter: cs.backdropFilter, background: cs.backgroundColor,
radius: cs.borderRadius, roots: [...document.documentElement.attributes]
.map(a => a.name).filter(n => n.includes('glass')).join(', ') })
更早的第三方壳版本尚无可靠对照(无法确认当时主题/玻璃是否真的作用到侧栏),暂不下结论。
| 项 | 声明 |
|---|---|
| DSH | >=0.1.5-rc.1(同时适配两套 settings seam:≤ 0.1.6-alpha.2 的旧通道与 ≥ 0.1.7-alpha.1 的 configForms) |
| Node.js | >=20 |
| Profile | web(Web GUI 与两个桌面壳都启动 web 界面,共用本插件);桌面端默认 profile 名为 desktop(已声明) |
| 已验证的具体版本 | 0.2.0-rc.2:官方桌面壳自带运行时的启动级 e2e(19/19)、真机桌面窗口像素与标题栏取色链路、configForms 落盘(审计);0.1.7-rc.1:真实 profile 上完成安装、启动、改设置落盘与重启恢复(证据);0.1.7-rc.2:启动级 e2e 与玻璃层的真页采样(issue #16 / #17);0.1.5-rc.1:按 CI 口径复跑的启动级 e2e;0.1.5-rc.3、0.1.7-alpha.1、0.1.7-alpha.2 为同一 seam 的声明 |
以上也是 package.json 里 dsh.compatibility(dsh / dshReleases / dshOperations)的机器可读版本。
色彩覆盖以 dsh-v0.2.0-rc.2 的 design-platform.css 为基线:每方案 190 个 --dsw-* token(static 77 /
alias 101 / specific 11 / 非三族 1)全覆盖,含 0.2.0 新增的 17 个 alias。
| 类别 | 用途 | 边界 |
|---|---|---|
| 文件读 | 识别当前 profile 与安装来源($DSH_HOME/profiles/ 下的目录名);一次性读取旧状态文件 ~/.dsh/catppuccin-state.json 做迁移 |
只读;DSH_HOME 取自 process.env.DSH_HOME,缺省 ~/.dsh |
| 文件写 | 把四套 TUI 主题 JSON 同步到 ~/.dsh-tui/themes/(dsh-TUI 只从该目录读主题,无注册 API) |
只写这一个目录;~/.dsh-tui 不存在时是严格 no-op。设置本身由 DSH 的 settings 服务写入,插件只经官方服务读写 |
| 网络 | 「检查更新」读取 npm registry 上 @nonamelego/dsh-catppuccin 的元数据;页面侧再向本插件的宿主路由取一次结果 |
只访问 registry.npmjs.org 与同源插件路由;无遥测、无上报;离线时该行报错、不影响使用 |
| 命令 | 无 | 不执行任何子进程 / shell |
| 凭据 | 无 | 不读取任何 token、key、密码;仅读 DSH_HOME 与桌面壳标记类环境变量 |
prepare(本地用它构建 lib/)。仓库里的 scripts/(截图、E2E、changelog 生成)不随 npm 包发布(files 不含 scripts),也不会在安装时执行。pnpm install # 装依赖
pnpm typecheck # tsc --noEmit:src 的类型检查
pnpm typecheck:tests # tsc --noEmit:tests 的类型检查
pnpm test # vitest
pnpm build # tsdown -> lib/index.js(服务端)+ lib/client.js(浏览器)
配色表由 scripts/generate-palettes.mjs 生成,不要手改 src/client/palettes.ts;
CHANGELOG 草稿由 pnpm changelog:gen 从 conventional 提交里产出。
完整命令清单、生成器与 typedoc、本地 link 调试见 CONTRIBUTING.md;
状态契约的版本迁移约定见 docs/state-migrations.md。
catppuccin 命名空间);0.1.7 起上游
改为「插件配置表单」,落点是当前 profile 的 patch 文件里本插件的 config: 段
(本插件两套都支持,按宿主实际提供的服务自动选择)。因此换浏览器、清站点数据、
自定义端口(dsh web --port)或再开一个桌面实例,偏好都不会丢;
DSH Desktop(官方壳与 anywhere-labs/dsh-desktop)同样跨重启自动恢复。
玻璃质感开关与各旋钮同样持久保存。0.5.0 起旧版 catppuccin-state.json
会在首次启动时一次性迁移进官方设置(文件保留作回退)。ui-layout 的行为:视口 < 1024px 时侧栏默认自动收起;
只有你手动点过侧栏开关,它才会以 280px 展开并挤压主区(主区 = 视口宽 − 280,501px
窗口下就是 221px),再点一次即收回。上游把这个「窄帧手动展开挤压」列为已知限制。
侧栏滚动条也是上游的指针可达性提示:指针不在侧栏内时不绘制,移进去(或直接滚轮)
就会出现。逐项实测读数与上游代码坐标见
docs/issue-18-narrow-sidebar.md。dsh plugin --profile web update @nonamelego/dsh-catppuccin
(或重新 add 最新版)。
桌面版要分壳:社区壳 DSH Desktop 在应用内的
DSH 终端里用同一条命令(把 web 换成 desktop);官方壳没有升级入口——要在插件界面里
先删掉本插件,再重新填一遍包名 @nonamelego/dsh-catppuccin 安装,然后重启应用。
两种方式不通用,详见上面「安装 → 桌面版」的对照表。minimumReleaseAge,默认 24 小时)把刚发布的版本
静默过滤掉了:pnpm add 会解析到上一个符合窗口的版本(例如新 beta 发布当天去装 @beta,
实际装到的仍是上一个 beta),而界面显示的却是目标版本。三条出路,任选其一:
① 指名精确版本(最省事)——@nonamelego/dsh-catppuccin@0.5.10-beta.0,pnpm 会自动把该版本
写进当前 profile 的 minimumReleaseAgeExclude;② 在当前 profile 的 pnpm-workspace.yaml 里
给本包整包豁免(一次配置,之后每个新 beta 都能立刻装):
minimumReleaseAgeExclude: 换行再加 - '@nonamelego/dsh-catppuccin';③ 等版本发布满 24 小时。
判断方法:看 profile 里 node_modules/@nonamelego/dsh-catppuccin/package.json 的 version,
以及 pnpm-lock.yaml 里那个包的 specifier:。
Copyright © 2021-present Catppuccin Org
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: theme。