dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
把 DeepSeek Harness 的输入框变成一片液态玻璃:镜面高光、内缘白线、边缘缓慢绕行的镶边光;模型思考时玻璃里往上冒泡;深浅主题切换带 1.7 秒从容过渡。
把 DeepSeek Harness 的输入框变成一片模拟质感的液态玻璃。
顶部镜面高光、内缘白线、边缘溢出的一圈柔光;模型思考时玻璃里往上冒泡; 深浅主题切换带 1.7 秒的从容过渡。
名字里的 Analog 指模拟仪表那种质感(弯液面、观液管、刻度),不是技术上的"模拟/数字" —— 对应插件里的玻璃容器、液位式进度与上升的气泡,也与"数字进度条"划清界线。图标即为此意。

从 GitHub 安装(当前推荐,本包尚未发布到 npm):
dsh plugin --profile <你的 profile> add github:Siloet-phy/analog-liquid-glass-for-dsh
桌面版 DSH 的包管理需要先完全退出 DSH 再执行;装完重启生效。 profile 名一般是
desktop(桌面版)或web(dsh web起的服务)。
如果只想用短名(需要在 npm 上已发布同名包):
dsh plugin --profile <你的 profile> add analog-liquid-glass-for-dsh
| 元素 | 说明 |
|---|---|
| 磨砂层 | 白雾 + 重度模糊,是"玻璃感"的来源(不是简单叠一层半透明) |
| 顶部镜面高光 | 玻璃最容易辨认的那道柔光 |
| 内缘白线 | 上缘一道发丝白线 |
| 外扩散泛光 | 光从玻璃边缘微微溢到外面一圈 |
| 三点吐泡泡 | 只在模型思考时出现:三颗泡错开 1/3 周期、同一个出生点,一个破灭、一个新生 |
| 主题过渡 | 浅 ↔ 深切换时,玻璃比整页更慢地插值(1.7s vs 0.9s) |
| 真毛玻璃 | 为做出磨砂感,覆盖原生卡片的背景与 backdrop-filter(见下方"设计决定"第 2 条) |
[data-composer-card] 的背景与
backdrop-filter(这是毛玻璃唯一能成立的物理位置——在卡片内容之上加雾会把文字压淡,
对它做 backdrop-filter 会把文字一起糊掉)。该段集中在 client.js 一处、带注释与旋钮,
删掉即回到纯加层模式;/ 菜单底板那处小修复同理可删。卸载后不留任何样式。icon.svg 的立意是模拟仪表,和"数字进度条"划清界线:
一根竖直的玻璃观液管(sight tube),里面一柱淡蓝液体,顶端一道弯液面 (液体贴管壁上翘的那道弧,是"模拟时代"最一眼可辨的符号),液柱里两点气泡正在上升。 —— 玻璃是容器、液位是进度、气泡是"模型正在思考",正好对应插件的三件事。
配色与插件本体一致(天蓝 112,176,244 为主、冷白为釉)。
多尺寸与深浅底的对照见 docs/icon-preview.html;
设计草图留在 docs/icon-concept.svg,
上一版图标备份在 docs/icon-previous.svg。
0.2.0-rc.2 及以上(依赖 conversation.input.overlay slot 与
ctx.theme 的 theme/change 事件)。dsh web)。纯 CLI 会话不受影响。backdrop-filter 与 color-mix(),需要现代内核。prefers-reduced-motion——开启后所有动画停止,只保留静态玻璃与状态色。node selftest.mjs # 19 项断言:替身环境,验证模块面与 apply() 行为
node livetest.mjs [react-umd 目录] # 30 项断言:真 React + 真 DOM,验证真的能渲染
selftest.mjs:用替身把客户端 bundle 完整跑一遍——语法、模块面(name/inject/apply)、
apply() 在有无服务时的行为、slot 注册目标、样式挂载、theme/change 订阅、组件渲染。
改完 client.js 先跑它,因为客户端 bundle 一旦在最顶层抛错会牵连 Web 端模块系统。livetest.mjs:需要 react/react-dom/jsdom(故意不进 package.json 依赖,
避免让插件包带上开发期重量)。它用真 React 把玻璃层真的挂进真 DOM,并验证
几何锚定(含"包含块非视口"时的差值归零)、fail-closed 行为、
running 状态翻转时 data-busy / data-on 跟着变、卸载后 DOM 清干净。两个测试装置上的坑(都写进注释了): ①
document/window必须在require('react-dom')之前就位; ② 必须用createRoot+act(),不能用 legacyReactDOM.render—— legacy render 会把 passive effects 推到下一个任务,同步断言时会看到 "玻璃层没进 DOM"这种假失败。
--dsw-* token 与 body[data-ds-dark-theme],
不自己管理主题状态;过渡窗口通过监听 ctx.theme 的 theme/change 事件实现。conversation.input.overlay(list,session 作用域);
"模型是否在思考"来自标准 props 的 useSession((s) => s.running),
取不到时退化为观察原生按钮的「发送 ↔ 停止」态(MutationObserver),保证气泡不会静默失效。position:fixed + 实测原生卡片矩形写进 CSS 变量。
⚠ 取的是「卡片矩形 − 自身矩形」的差值,不能直接用卡片的视口坐标——
卡片一旦带 backdrop-filter 就会成为 fixed 的包含块,直接写会偏移叠加两次。
找不到卡片则整体隐藏(fail-closed)。mask-composite 只留边线"做 1.5px 绕行亮边,
深色下会变成一圈巨大的旋转发光矩形(用户点名要求删掉)。教训:mask-composite
必须 -webkit- 前缀与标准属性双写,且绝不要放大盒子;要做镶边应让盒子就是玻璃本身。scaleY 调幅度时必须显式写 transform-origin,否则元素会"消失"。getComputedStyle / 条件调用 hook 都会在真实环境里炸;前者要 try/catch,后者要定序。docs/light.png 与 docs/dark.png 是设计稿(单文件 HTML 演示)在浏览器里的实拍;
插件的实现与设计稿逐像素对齐(同一套 CSS)。设计稿与全部探索过程在同一作者的
magic-cast 工作目录里,未随包发布。
dsh plugin --profile <你的 profile> remove analog-liquid-glass-for-dsh
卸载后输入框恢复原样,不会残留样式(样式表随插件生命周期移除)。
MIT