← Back to home@tenebris173

dsh-skin-prts

PRTS —— DSH (DeepSeek Harness) UI 皮肤:罗德岛终端风格,直角切角 + 黑色发丝线 + 黄黑警示条,纸面/终端两套底。有控制台则进卡片墙,没控制台也能自立运行;「皮肤」下拉第一项「原生」即还原默认皮肤。

Stars
0
Language
JavaScript
Created
Oct 5, 2026
Updated
Oct 6, 2026
GitHub repo

Introduction

PRTS · DSH UI 皮肤

dsh-plugin DeepSeek Harness test

罗德岛终端风格 · 直角切角 · 黑色发丝线 · 黄黑警示条 · DIN 技术字

按 dsh.ecosystem.ui-skin-loader/v1 公约实现的 DSH 皮肤包。装好后出现在 设置 → 皮肤 的卡片墙里,与其它皮肤并列,一键切换。

外观矩阵

运行模式:有控制台托管,没控制台自立

场景行为
装了皮肤控制台登记托管:出现在 设置 → 皮肤管理 卡片墙里,由控制台负责互斥切换 / 持久化 / 故障隔离
没装控制台等待 3 秒宽限后进入自立模式:自动应用外观,并在「设置 → PRTS」里给出开关与全部调节项

不会误判:皮肤用运行时提供的 ctx.inject(["uiSkinLoader"], cb) 显式等待控制台服务出现, 而不是在加载瞬间"看一眼有没有"。所以即使控制台比皮肤晚一步就绪,也仍然会正常登记(这是上一版踩过的坑)。

对控制台 / 脚本的接口

无论哪种模式,皮肤都暴露一个统一入口:

window.__dshSkins["skins.prts"]
// { mode: "console" | "standalone", skinId, version,
//   isActive(), activate(), deactivate(), getSettings(), setSettings(patch) }

「原生」选项

设置面板里的 「皮肤」下拉 第一项是 原生(默认观感) —— 选中即还原默认皮肤:

  • 有控制台时:调用控制台的 switchTo("default")(与控制台自己的"还原默认观感"同一路径),持久化归控制台;
  • 自立模式时:直接关掉自己(enabled=false),立即卸下并长期保持原生,随时可再从下拉里选回本皮肤。

控制台是可选的第三方插件,不随本包分发。

这是一个 DSH 插件

本仓库是 DeepSeek Harness 的插件(皮肤类)。 按官方 README「Community and support」一节的要求,仓库已打上 dsh-plugin topic,便于在 github.com/topics/dsh-plugin 被发现; package.json 的 keywords 与 dsh.skin.tags 里同样带 dsh-plugin。

三种安装方式,任选其一:

方式命令 / 操作
git(无需下载包)dsh plugin --profile desktop add https://github.com/tenebris173/dsh-skin-prts
美化包从 Releases 下 PRTS-UI-*.zip,双击 安装PRTS皮肤.cmd
本地源码见下方「安装 → B. 从源码装」

装完必须重启 DSH(插件包只在启动时进启动图),随后在 设置 → 皮肤 里一键切换。

外观

项选项默认
外观跟随应用 / 纸面(亮)/ 终端(暗)跟随应用
强调色警示黄 / 工程橙 / 信号青警示黄
圆角直角 0px / 工作台 6px / 圆润 12px直角
纹理全屏细网格 + 扫描线 + 四角登记标记开
硬投影浮窗错位实心影 + 按钮按压位移开
DIN 技术字拉丁文用 Bahnschrift(中文回落雅黑)开

3 × 3 × 3 × 2 × 2 × 2 = 216 种组合,改档即时生效并跨重启保留 (皮肤自治:localStorage,键 dsh.skin.prts.preferences.v1)。

跟随应用:读 ctx.theme.getTheme().preference,为 system 时用 prefers-color-scheme 判定;1s 轮询 + matchMedia 监听,应用换主题时自动重算。

两套底

纸面(Paper · 亮)终端(Terminal · 暗)
底 / 面板 / 卡片#f4f5f7 / #ffffff / #ffffff#0d1012 / #121618 / #171c1f
发丝线黑 18–60%冷白 15–60%
实心块(徽标 / 主按钮 / DONE 章)黑底白字反相:冷白底深字
代码 token#1d3f63 #7a4b12 #b5342a#8ab7ea #e0a45c #ff9a8a
警示黄#ffd100#ffd100

安装

A. 用打包好的美化包(推荐给最终用户)

下载 release 里的 PRTS-UI-*.zip,解压后双击 安装PRTS皮肤.cmd。脚本会找到本机 DSH (优先用你正在运行的那个),用官方途径装进 desktop profile,并把 activeSkin 切到本皮肤。

B. 从源码装(开发)

# 应用目录(默认装在当前用户的 LocalAppData 下;装在 Program Files 时改成对应路径)
$app = "$env:LOCALAPPDATA\Programs\DeepSeek Harness"
$cli = "$app\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js"

# 以软链方式安装(改代码刷新即生效)
& "$app\DeepSeek Harness.exe" $cli plugin --profile desktop add "<本仓库绝对路径>"

# 卸载
& "$app\DeepSeek Harness.exe" $cli plugin --profile desktop remove dsh-skin-prts

装完必须重启 DSH(新增插件包只在启动时进启动图)。切换皮肤也可以直接在 设置 → 皮肤 里点,不必手改配置。

设计语言

  1. 纸面/终端,不是"深色科幻" —— 层级只靠 1px 线与明度差,零阴影、零光晕、零圆角。
  2. 切角而非圆角 —— border-radius: 0;面板头是黑底白字条 + 黄色 ▶;浮窗用错位实心影。
  3. 警示黄只给四处 —— 当前 / 可点 / 运行中 / 焦点;其余全部黑白灰。
  4. DIN 技术字 + 字距 —— 拉丁文 Bahnschrift 大写标签;中文雅黑托底;数字等宽。

实现要点

  • 观感承载:theme.overrideTokens() 覆盖宿主公开 token —— --dsw-alias-*(107)、 --dsw-specific-*(11)、--dsw-menu-*、--dsw-linear-*、--dsw-radius-*(直角 0)、 --dsw-static-neutral(-bluish)-* 中性灰阶、--dsw-font-family / --ds-font-family-code。
  • 驱动宿主亮暗开关:body[data-ds-dark-theme] 由皮肤按有效底置位 / 摘除 —— 否则 --dsw-specific-* 这类"只在 scheme 分支里有定义"的表面会落在错误的一档(实测过: 纸面模式下输入框仍是深色)。
  • 浮层实色兜底:[role="dialog"] / [aria-modal] / [role="menu|listbox|tooltip"] 强制实色 + 直角(PRTS 的表面本就是实心的,弹窗天然不透出正文)。
  • 装饰层:注入 7 个自有节点(网格、扫描线、左缘警示条、四角登记标记), pointer-events:none + z-index:1(低于菜单 100 / 弹窗 1000),退出时整体移除。
  • 生命周期(公约 §4.3 / R8):activate 的每项副作用都登记 disposer,teardown 幂等; deactivate / skinCtx.signal abort / fiber 意外 dispose 三路汇合,退出后 token 与节点全部还原。
  • 主题注册兜底:重复 id 时改用带序号的 id,皮肤重载后不会整次回滚成默认。
  • 设置面板:经 settings.section 席位注册 React 组件,只在皮肤激活时出现。

自测

脚本覆盖断言
tests/browser-smoke.mjs控制台路径:登记载荷 / 激活副作用 / 真实 CSS 层叠 / teardown32
tests/console-wait.mjs控制台迟到 1 秒(不许误判自立)/ 始终不出现(自立 + 能回原生)18
tests/skin-selector.mjs「皮肤」选择器:控制台模式走 switchTo / 自立模式走开关自己9
tests/contrast.mjs每个强调色 × 每种底:文字/标签对比度 ≥4.5:1,亮底派生深档25
tests/dependency-check.mjs宿主半依赖自检6

合计 90 项断言。

目录

lib/index.js          宿主半(空 apply:观感全在 client 半)
lib/client.js         皮肤本体(登记 / token 表 / 两套底 / 外观面板 / 生命周期)
cordis.patch.yml      bundle patch(row id = 设置命名空间)
install/              一键安装 / 卸载脚本(美化包同款)
preview/              外观矩阵图 + 卡片预览 SVG
tests/browser-smoke.mjs

更新记录

见 CHANGELOG.md。

许可

MIT。