DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

zgj980644897 /

zgj980644897/dsh-ui-we2

Verified

WE2 console: an off-white / ink hard-sci-fi skin for the DeepSeek Harness web UI (paper canvas, ink sidebar, typing status ticker, centred approval dialog, bezel HUD)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@0ec27be9

dsh-ui-we2 · WE2 CONSOLE

中文 | English

米白 / 墨黑 · 硬核科幻控制台皮肤 — DeepSeek Harness Web 客户端插件。 以《流浪地球 2》里那套「纸白面板 + 墨黑机箱 + 信号红 + 细发丝线 + 等宽读数」的计算机界面语言重绘对话页: 纸色正文区、墨黑侧栏(悬停反相为纸白)、墨黑色代码舱与操作员消息块、发丝级硬边框、零圆角、屏幕边框与刻度尺 HUD。

An off-white and ink console skin for the DeepSeek Harness web UI: paper canvas, ink rail with inverted hover, ink code decks, hairline rules, zero radii, a scrolling status reel, a centred approval dialog, and a bezel HUD. Pure client plugin — no runtime dependencies, no network access, no build toolchain beyond Node.

preview

approval dialog


它改了什么

层 效果
色板 把 --dsw-* 语义 token 整体换成「纸 / 墨」两色系:纸白 #fdfcf8、画布 #f8f5ed、墨黑 #111110、信号红 #b2352a、数据青 #2b6771。浅色、深色两种系统主题下都锁成同一套纸色,切主题不会花掉。
几何 全部圆角归零(--dsw-radius-*: 0),浮层阴影改成 1px 墨线 + 1px 硬偏移,菜单改为不透明纸面、去毛玻璃。
字体 正文走 Bahnschrift(Windows 自带的 DIN 风技术字)+ 微软雅黑;代码、时间戳、计数走 Cascadia Mono / JetBrains Mono。
侧栏 墨黑机箱;鼠标悬停(以及当前选中的会话 / 面板)整行反相为纸白底 + 墨黑字;行内操作按钮在纸白行上再反相成墨黑底 + 纸白图标。会话行的选中/悬停改为纸白面板从左侧扫入(300ms,与「更多」菜单选中同一动画);正在运行的会话前面是双环对转指示器:外圈细虚线顺时针慢转(3.6s),内圈信号红弧逆时针快转(1.4s)。
侧栏思考字幕 会话列表下方的空白处是一条实时的思考过程日志:内容来自当前会话最后一条 reasoning 文本(通过 uiConversation 的 chat 快照读取,不是假数据)。每行以 HH:MM:SS 实时时间戳开头,正文一行一行、逐字敲出;打字时行首是红点,这一行打完(或停在截断处)才转绿点。太长不换行:打印到栏宽就停住,句尾省略号持续闪烁表示还有内容。切换会话时自动重新绑定并清空重打。背景完全透明、pointer-events: none,不遮挡也不拦截任何操作;列表占满或侧栏收成图标栏时自动隐藏;没有思考内容时保持安静。
用量弹窗 对话下方「x 轮 x 步」和上下文圆环打开的弹窗改为墨黑面板(纸白字、硬边框、去毛玻璃);行与读数悬停反相为纸白底墨黑字;底部数字与百分比走等宽字体、表格数字、加宽字距;上下文用量 ≥ 90% 时进度条、圆环与百分比一起变成信号红。
菜单 侧栏「更多」等所有 role=menu / data-menu-material 弹层统一为墨黑面板 + 纸白文字,不再受侧栏 token 或深色主题影响;悬停/选中时纸白面板从左侧扫入(300ms),文字翻成墨黑——与开机动画的确认按钮同一套选中动画;危险项保持信号红,悬停时红底白字。
设置 设置弹窗(data-shortcut-modal="settings")沿用控制台的纸白底 + 墨黑字,硬边框、零圆角;不加入场动画,也不做悬停反色,保持与页面一致的静态风格。
对话 操作员消息 = 墨黑面板 + 信号红左边条;代码块 = 墨黑舱体 + 红点标题栏 + 专属低饱和语法色;行内代码 = 墨黑小章;标题带红色索引竖条;引用、表格、分隔线全部硬边化。
授权弹窗 从输入区接管条改成屏幕居中的墨黑对话框:顶部居中的红色「请求授权」标题条(16px、字距加宽、信号红文字、左侧红色刃口),中部是可滚动的请求内容,选项在最下方竖直排列(拒绝为描边、允许一次为纸白实心)。打开时从 0.82 倍放大入场(280ms),遮罩同时淡入;不叠加花屏或抖动。
代码背景 新会话页的滚动代码墙(dsh-hero-code-backdrop)由 96s / 138s 加速到 42s / 60s,读起来像实时控制台而不是静止画面。
HUD 固定屏幕边框、四角括号、左右刻度尺、顶部铭牌(WE2 // OPS CONSOLE · 550W · 实时时钟)、极低强度的扫描线与纸张颗粒。全部 pointer-events: none,不挡点击。

插件是纯覆盖层:只写 --dsw-* token 与 CSS,不改 React 组件、不发请求、不写会话。

稳定性与版本兼容

设计、构建与验收都对着 DeepSeek Harness 0.2.1-rc.3(Electron 44.7.0 / Node 24) 完成,实测结论:

检查项 结果
运行时依赖 / peer 依赖 零(dependencies 与 peerDependencies 都不声明),不存在依赖版本冲突面
客户端契约 window.__ModuleLoader__.load({ id, factory });id 与包名一致;整个包只注册一次
Host 半边 只导出 name + 空 apply,没有任何 import,不会因缺少服务而卡在 PENDING
注入的服务 不注入任何 Cordis 服务(不写 inject),只在 ctx.effect 里挂 DOM
设计 token 运行时已核对:--dsw-radius-panel、--dsw-menu-surface-fill、--dsw-elevation-soft、--dsw-specific-*、--dsw-alias-*、--shiki-* 全部存在于本机 ui-theme / ui-sidebar 构建中
类名钩子 sidebarCol、userStack / userRow、md-code-block、[data-code-block-banner]、composerSeat / composerStack 全部存在于本机 ui-layout / ui-chat / ui-conversation 构建中
失败姿态 每一层挂载都有 try/catch:DOM 异常只记一条 warn,返回空清理函数,不会抛进 Cordis fiber
重复加载 挂载前清理同标识旧节点,HMR 重载不会叠层
条目失败 挂载行是可选条目(未标 required),导入失败只会在启动日志里留一条告警,不会阻止应用启动

已用无头 Chromium 对构建产物本身跑过验收:挂载(样式 19,739 字节 / 46 条规则 / HUD / 时钟)→ 重复挂载(仍只有 1 份)→ 全部卸载(节点、属性、背景色归零)→ 合成 DOM 故障(不抛出,记 2 条告警)→ 重新挂载。

关于 2026-10-28 的三次启动崩溃:原因是 profile 的 package.json 带 UTF-8 BOM(Unexpected token ''), 不是皮肤代码。Windows PowerShell 5.1 的 Set-Content -Encoding utf8 会写 BOM,本仓库早期安装脚本正是这么写的。 现在的 install.ps1 用 UTF8Encoding($false) 写文件,写前备份、写后校验 JSON 并断言无 BOM; 当前 profile 的 package.json 与 cordis.patch.yml 均确认无 BOM。

安装

需要 DeepSeek Harness Desktop / Web(按 0.2.1-rc.3 的 UI 结构适配)。

方式一:脚本(推荐)

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1        # desktop profile
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -Profile web

脚本会:

  1. 把包复制到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-ui-we2;
  2. 在该 profile 的 package.json 里声明 dsh-ui-we2 依赖(Loader 只解析 profile 已声明的包);
  3. 在该 profile 的 cordis.patch.yml 末尾追加带标记的挂载块;
  4. 两个文件改动前各自备份 .bak,写入为无 BOM UTF-8,写后校验 JSON 并断言无 BOM。

重启 DeepSeek Harness 后生效(新增 Loader 条目在启动时读取)。

卸载:

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -Uninstall

分享给别人(GitHub)

本目录可以直接作为 GitHub 仓库的根目录推送:插件没有 npm 依赖、没有构建步骤, lib/client.js 与预览图都已提交,克隆下来即可安装。

git clone https://github.com/zgj980644897/dsh-ui-we2.git
cd dsh-ui-we2
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1

也可以在 github.com/zgj980644897/dsh-ui-we2 选 Code → Download ZIP,解压后运行 install.ps1。

  • 安装脚本只适用于 Windows(PowerShell)。macOS / Linux 用户改用下面的「方式二:手动」, 把 link: 换成本机上的绝对路径即可,效果完全一样。
  • 插件没有发布到 npm,所以不能用 dsh plugin add dsh-ui-we2 按名字安装,只能按路径安装。
  • git pull 拉到新版本后,重新运行一次 install.ps1(它会把 lib/client.js 重新复制进 profile),再重启应用。
  • 兼容性:按 DeepSeek Harness 0.2.1-rc.3 的 UI 结构适配。其他版本同样能装、能卸载, --dsw-* token 层会继续跟随;若某个类名钩子(sidebarCol、sessionRow、md-code-block、 [data-approval-key] 等)在新版本里改了名,对应那一小块装饰会退回默认样式, 但不会影响应用启动或对话功能。

更新(一键)

插件推送新版本后,已安装的用户不需要重新下载:

  • 双击 update.cmd(Windows):脚本会判断这个目录是怎么来的 —— 是 git clone 就执行 git pull --ff-only,是 ZIP 解压就下载最新源码包覆盖本目录; 然后自动重跑 install.ps1,打印版本变化(例如 0.8.0 -> 0.9.0),最后提示重启。
  • 或命令行:powershell -NoProfile -ExecutionPolicy Bypass -File .\update.ps1
  • 或完全手动:git pull(或重新下载 ZIP)后重跑 install.ps1。

更新后重启 DeepSeek Harness 生效;HUD 顶部铭牌会显示当前版本(550W · v0.9.0), 可以用来确认更新是否生效。

方式二:手动

// <DSH_HOME>/profiles/desktop/package.json
"dependencies": {
  "dsh-ui-we2": "link:<本目录的绝对路径>"
}
# <DSH_HOME>/profiles/desktop/cordis.patch.yml 末尾
- insert:
    - id: ui-we2
      name: dsh-ui-we2

并把本目录复制到 <DSH_HOME>/profiles/desktop/node_modules/dsh-ui-we2,然后重启。

方式三:作为 bundle 安装

package.json 里已声明 dsh.bundle.patch → ./cordis.patch.yml。把包加进 profile 的 dsh.profile.bundles 即可由 bundle 机制自动挂载(不要再手写 insert,否则 id 重复)。

插件市场 / 索引源

  • 自托管索引:https://raw.githubusercontent.com/zgj980644897/dsh-ui-we2/main/market/index.json 在 DSH 里打开 插件 → 实验性插件 → 自定义插件市场,到 发现 → 添加索引源 粘贴该地址, 就能在发现页看到本皮肤并一键安装(索引格式 1,已用官方校验器验证)。
  • 已向社区插件市场 dshopen.org(仓库 polang233/dsh-plugin-index) 提交收录申请;审核通过后也可以直接用它的索引安装。

开发

node scripts/build.mjs      # src/theme.css + src/client.js  →  lib/client.js
node scripts/check.mjs      # 校验清单、注册契约、Host 半边无 import
node scripts/restore-source.mjs  # 从已安装产物反推源码(灾难恢复用)

preview/index.html 与 preview/approval.html 是纯静态设计预览(引用同一份 src/theme.css), 用浏览器直接打开即可对照色彩、悬停填充与授权弹窗;preview/shot.png、preview/approval.png 是它们的截图。

  • src/theme.css — 全部视觉规则,唯一需要改的地方。
  • src/client.js — 浏览器半边:挂载样式表与 HUD、时钟、清理、异常兜底。
  • index.js — Host 半边空插件(Loader 需要一个合法条目)。
  • lib/client.js — 构建产物,不要手改。

改色板:src/theme.css 顶部 --we2-paper-* / --we2-ink-* / --we2-signal 一组变量, 改完全局一致;改完重新 build.mjs 并重启应用。

结构

dsh-ui-we2/
├─ package.json            清单:dsh.client、bundle patch、导出映射(零依赖)
├─ index.js                Host 空插件(无 import)
├─ cordis.patch.yml        bundle 挂载补丁
├─ install.ps1             安装 / 卸载(无 BOM 写入 + 校验)
├─ README.md               中文说明
├─ README.en.md            英文说明
├─ LICENSE                 MIT
├─ .gitignore
├─ src/
│  ├─ theme.css            视觉系统(token 覆盖 + 组件细化 + HUD)
│  └─ client.js            浏览器插件工厂体(带异常兜底)
├─ scripts/
│  ├─ build.mjs            零依赖打包(把 CSS 内联进 __ModuleLoader__ 工厂)
│  ├─ check.mjs            静态契约自检
│  └─ restore-source.mjs   从安装产物反推源码
├─ preview/
│  ├─ index.html           静态设计预览(对话页 + 悬停/选中态)
│  ├─ approval.html        授权弹窗预览
│  ├─ shot.png             对话页截图
│  └─ approval.png         授权弹窗截图
└─ lib/client.js           构建产物(安装的正是这一份)

兼容与代价

  • 选择器基于 --dsw-* token,绝大多数样式随产品更新自然跟随;少数针对语义类名片段的细化, 在 UI 大改后需要重新核对:userStack、bubble、markdown、md-code-block、 [data-code-block-banner],侧栏悬停用的 panelRow / sessionRow / projectRow / searchResultRow / newSession / iconButton,以及授权弹窗的 [data-approval-key]。
  • 侧栏描边与思考字幕依赖左栏容器的 sidebarCol 类名,以及 footArea(页脚高度)、 sessionRow / projectRow / panelRow(已占用的最低点)。找不到这些钩子时字幕不显示, 侧栏仍按 --dsw-* 正常上色。
  • 思考文本来自客户端服务而不是 DOM:会话 id 取自 [data-conversation-session],再读 uiConversation.binding(id).target('chat') 快照的 order / nodes,取节点 data.blocks 中最后一条 kind: 'reasoning' 的 text。这三处都是内部接口,DSH 大版本升级时需要复核。
  • 字幕每次布局只做一次 getBoundingClientRect 测量(rAF 合帧 + ResizeObserver + 滚动捕获), 空闲时不跑计时器;1.5 秒一次的廉价重挂载检查负责在侧栏被整体替换后接回去。
  • 打字计时器、滑行计时器、同步防抖全部登记在同一个集合里,插件卸载时统一清理; prefers-reduced-motion: reduce 下不启动逐字与闪烁动画,直接铺满静态行。
  • 授权弹窗用 [data-approval-key] 做全屏定位(position: fixed)。若将来该面板被放进带 transform / backdrop-filter 的容器,定位会改为相对那个容器。
  • 代码墙加速规则(.dsh-hcb-track)在未安装 dsh-hero-code-backdrop 时是惰性的。
  • profile 里的依赖写成 link:<本目录>;如果移动或删除本目录,重新跑一次 install.ps1 即可自愈。
  • 只影响浏览器外观:会话日志、模型输入、工具行为全部不变。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 0ec27be9d111

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout