Uplink
August 14, 2026 · View on GitHub
DeepSeek Harness Web 的赛博朋克表现层皮肤:深靛蓝夜 × 电光青/品红/霓虹紫,
CRT 扫描线,玻璃面板,右下角霓虹壁纸,终端式 Uplink It ... 输入框占位符动画。
所有效果都以 body[data-dsh-uplink] 作用域叠加,不改动 DSH 任何内置行为;
卸载插件即可完整还原。
目录
效果一览
- 双主题令牌体系:暗色 = 霓虹夜,浅色 = 霓虹白昼(冰白蓝 + 电光点缀)
- 字体:按钮/标题 Orbitron + 站酷庆科黄油体(中文),正文 Rajdhani, 代码 JetBrains Mono —— 全部自托管内嵌,离线可用
- 全局质感:暗色 CRT 扫描线、四角霓虹辉光、霓虹选中/聚焦态
- 玻璃面板:主表面半透明,右下角壁纸从面板后透出
- 壁纸:右下角锚定,双向渐变 mask(从右到左、从下到上 → 0%),无硬边
- 占位符动画:
Uplink It→Uplink It .→Uplink It ..→Uplink It ...循环闪动;prefers-reduced-motion: reduce时静态
工作原理
皮肤 = 一个 DSH 插件包(bundle):
cordis.patch.yml声明一条接线(idui-skin-uplink), 包名和接线名在package.json的dsh.bundle.patch中关联;dsh plugin --profile web add <包>会先转交pnpm add把包装进 web profile 目录,然后自动扫描依赖:凡是声明了dsh.bundle.patch的包, 都会被追加进 profile 清单的dsh.profile.bundles层;dsh web启动时按 bundles 层叠加载插件:宿主侧加载lib/index.js(本皮肤为空操作),浏览器侧通过模块系统拉取lib/client.js;- 客户端插件给
<body>打上data-dsh-uplink,注入内嵌样式(字体 + 令牌调色板 + 特效),所有规则都以该属性作用域,卸载即整体消失。
因为内嵌了全部素材(字体、壁纸均为 data URI),运行期零网络请求。
安装
前置条件
| 依赖 | 版本建议 | 说明 |
|---|---|---|
| DeepSeek Harness | 含 dsh CLI 的版本 | 执行 dsh --help 能出帮助即可 |
| pnpm | ≥ 10 | dsh plugin 只是 pnpm 的转发器,必须能 pnpm --version |
| Node.js | ≥ 20(推荐最新 LTS) | 构建/安装皮肤需要 |
方式一:本地克隆 + link(推荐先试这个)
适合快速体验和二次开发。请先确认包名 scope 与作者信息已按 开源发布清单换成你自己的值。
# 1. 克隆到本地
git clone https://github.com/<你的账号>/dsh-uplink-skin.git
cd dsh-uplink-skin
# 2. 构建(可选,link 安装时也会自动跑 prepare;手动跑一次能提前暴露问题)
pnpm install
pnpm check # 类型检查 + 单元测试 + 构建
# 3. 以 link 方式装进 web profile
dsh plugin --profile web add link:"$(pwd)"
# 4. 重启(或启动)web
dsh web
link:是 pnpm 的符号链接安装:之后你改src/里的代码, 重跑pnpm build,刷新浏览器即可看到效果,不需要重新安装。
方式二:直接从 GitHub 安装
不想克隆仓库,一步装:
dsh plugin --profile web add "github:<你的账号>/dsh-uplink-skin"
dsh web
注意(pnpm ≥ 10 会拦构建脚本):git 依赖安装时通过 prepare 脚本
构建 lib/,pnpm 默认拦截。首次安装若报
Ignored build scripts / prepare 被阻止,按 CLI 的提示把包名加入
web profile 目录下 pnpm-workspace.yaml 的 allowBuilds,再重跑一次:
# 提示会给出精确的 key,例如:
# dsh-uplink-skin+github.com+<账号>+dsh-uplink-skin
dsh plugin --profile web add "github:<你的账号>/dsh-uplink-skin"
也可以用 git+https://github.com/<账号>/dsh-uplink-skin.git 形式,
效果相同。
方式三:发布到 npm 后安装
发布到 npm registry 后(见开源发布清单), 任何机器只需:
dsh plugin --profile web add <你的-npm-包名>
dsh web
验证安装
- 打开
dsh web的地址(默认 http://127.0.0.1:3080), 硬刷新(macOS:Cmd+Shift+R;Windows/Linux:Ctrl+Shift+R); - 浏览器标签标题变为 Uplink · DeepSeek Harness;
- 界面呈霓虹配色;输入框占位符在
Uplink It与Uplink It ...间循环; - 右下角出现渐变壁纸(无硬边);
- 设置 → 常规 → 外观的 浅色 / 深色 / 跟随系统 依旧可用—— 皮肤同时定义了两套调色板,切换主题会得到对应的霓虹白昼 / 霓虹夜。
如果什么都没变,先看常见问题。
更新与卸载
# 更新到最新版(npm / git 安装均可)
dsh plugin --profile web update <包名>
# 卸载:从 profile 移除依赖,bundles 层会同步自动清理
dsh plugin --profile web remove <包名>
dsh web # 重启后还原为默认 UI
卸载后所有效果消失,无残留(皮肤只改 DOM/样式,不写任何用户数据)。
常见问题
Q:装上了但界面没变化? 依次检查:
- 是否硬刷新(皮肤资源按 rev 缓存);
- profile 清单里是否有本包:
dsh plugin --profile web add成功后, 包会出现在 profile 目录package.json的dependencies与dsh.profile.bundles中;只有声明了dsh.bundle.patch的包才会 进入 bundles 层——被装了却没进层时,终端会打出declares no dsh.bundle警告; - 包是否真的构建出了
lib/client.js(本地 link 安装时确认跑过pnpm build)。
Q:git 安装报 build script 被拦截?
按方式二把包名加入 profile 的
pnpm-workspace.yaml → allowBuilds,重跑安装命令。
Q:标题没变成 Uplink? 标题是皮肤挂载的标志之一;没变说明 client 插件没跑起来, 回到上一问的第 2、3 条检查。
Q:壁纸想换自己的图?
替换 assets/wallpaper.webp(建议 2:3 竖图、WebP),非 2:3 时同步改
src/client/uplink.module.css 里的 --dsh-uplink-wall-ratio,
然后 pnpm embed && pnpm build(本地 link 安装)或提交后更新包。
Q:和其它皮肤冲突吗? 每个皮肤各占一个 body 属性与接线 id,理论上可共存; 但同一时刻叠加多套调色板会互相覆盖,建议一次只装一套。
参数微调
壁纸与渐变参数都集中在 src/client/uplink.module.css 的
--dsh-uplink-wall-* 变量里:
| 变量 | 默认 | 含义 |
|---|---|---|
--dsh-uplink-wall-size-x | 85vw | 壁纸宽度上限 |
--dsh-uplink-wall-size-y | 85vh | 壁纸高度上限 |
--dsh-uplink-wall-ratio | 1000 / 1506 | 图片宽高比 |
--dsh-uplink-wall-hold | 35% | 渐变保持全显的占比(调小 = 淡得更早) |
修改后 pnpm embed && pnpm build。
占位符动画:基文本 Uplink It 与步进周期(450ms)在
src/client/index.ts 顶部的常量里。
开源发布清单
推送 GitHub / 发布 npm 之前:
- 替换占位符(四处保持一致):
skin.json:author字段,package的 scope 改为你的 scopecordis.patch.yml:name与上面包名一致package.json:name、authorLICENSE:版权行改为你的年份与名字
- 预览图:
preview/dark.svg换成真实截图(≤ 5 MB) - 壁纸版权:
assets/wallpaper.webp出处未确认(见ASSET_LICENSE.md),无法确认就删除并换成自己的素材 - 验证一次全链路:
pnpm check+ 方式一安装 + 硬刷新确认效果 - 发布 npm(可选):
npm publish(files已包含lib/,prepare会在发布前自动构建)