dsh-chat-ux
English | 中文
面向 DeepSeek Harness(dsh) Web GUI 聊天区的 UX 优化插件。
装好之后,整页铺在一张纸上、思考行不会一直杵在那儿、过程组该开的时候开该收的时候收、输入框与读数区都换上这个插件的那一套——而读者自己滚到哪里,都不会被动画抢回去。
它做了什么
- 纸感(默认开):整页就是一张纸。页面底色换成这张纸的调子,纸面上有织纹、正中一道圆形光斑;输入框、气泡与菜单读起来像纸面上压出来的一层——气泡的底跟着这张纸重算,与输入框那块玻璃同一个调子,不再是浮在纸上的一块白卡片——正文与代码换成衬线体与打字机体。纸只有一种(葱皮),深浅两档跟着 dsh 的主题切换:亮档是原来那张葱皮,暗档是它的暗版,一键换过去,不必重新挑。关掉就整块回到 dsh 原来的样子,字也一起换回去;纸感底下的「纸面字体」可以单独关,只留纸、不换字。窗口材质平台(桌面版把侧栏做成玻璃的那种)上,侧栏还会铺一层只给纹理、不给底色的纸纹,玻璃照样透得出来。可在插件页关掉。
- 思考行自动开合:思考时自动展开,这段思考结束就收起;读者自己动过手,就不再打扰。
- 过程组自动开合:工具调用开始自动展开,这一段跑完再收起,展开收起都走一道卷帘门过渡。展开体里有好几张卡片的行(
run_code的代码加输出)也是一整扇门,不会一张一张地开合。两者共用一个「自动开合」开关,可在插件页关掉。标准/简洁档里被限高的过程组只滚纵向,这一条常驻、不跟开关走。读者把 dsh 的「收起时机」选成「下次发送时收起」时,这一段结束的那一下让给官方;dsh 的折叠动效正在驱动某一行时,也让路。 - 文件变更行:
run_code里 write / edit 的改动,diff 行直接显示在聊天区;直接调用时,路径、输入大小与+n -m在参数还在流进来时就显示,两个数随内容往上长(内容一到就显示,不必等另一个字段,也不必等路径——写入的参数里file_path排在最后一个字符);行尾那两个数按节拍一跳一跳地弹(让每一轮动画走完整,写入与编辑同款),落定那一下才是实时跟随(默认开着,可在插件页关掉)。 - 光标动效:输入框的光标会滑过去,打字、方向键、点击都算,80 ms。主输入框、提问卡片的作答框、排队消息的编辑框(给跑着的子智能体追加消息时用的那个)都算。
- 发送气泡形变(默认开):发出之后,一块与输入框同形同色的方块从输入框上沿升起,里面就是刚敲的那句话,一边收窄一边跟着重新折行、换成落点那条气泡的颜色,落到它的位置,整段 350 ms。输入卡片自始至终都留着——方块就是从它上面升起来的,不是把输入框抹掉再画一个。可在插件页关掉。
- 工作步骤默认标准:网页端把 dsh 的「工作步骤展示」默认补成「标准」(dsh 自己的网页端默认是「详细」)。你之后在 设置 → 通用 → 工作步骤展示 里改过,就以你的选择为准,插件不再动它。
- 缓存命中率:输入框下方那枚胶囊里的读数恒取一位小数,颜色按 90%~99% 六档走——90 以下是红、99 以上是深绿,中间由红经橙黄、黄、黄绿走到浅绿;「缓存命中」这几个字与读数同色(详细档里那个 token 总量与中间那个分隔点不算在内)。读数一变,变了的那几位会原地弹到新数字:从下方一点的位置落回来,旧的朝反方向淡出(500 ms,低位起手更晚);插件页上可以关掉。
- 上下文占用改成饼:原来那圈环换成一枚 16px 的实心饼,颜色按 20%~40% 六档走(20 以下绿、40 以上红),读数与饼同色。已占用那一角沿一条折点在圆心的折线切开,并沿角平分线端出去一点,缺口与那一块之间那道缝处处 1.2px 宽;插件页上可以整枚关掉,回到 dsh 原来的环。旁边那串百分比也会跟着弹。
- 输入框毛玻璃(默认开):输入框自带一条蓝调渐变(两端各一片极淡的色、中间完全透明,端色淡到只是隐约一层),底只让出一成不到,再叠一层轻模糊与顶边亮边、内侧微光、底部内阴影三笔质感;右下角那枚发送按钮(跑起来时是停止)与左下角那枚加号也跟着换成同一套材质:发送是玻璃上的一片蓝,加号是同一块玻璃上的一片灰。下面那排统计与上面那几张卡不受影响,上方那条从画布淡出的过渡带照旧。可在插件页关掉。
- 输入框里的滚动条:不显示。主输入框、提问卡片的作答框、排队消息的编辑框都不再冒出那两根条;滚轮与键盘照旧能滚,内容超过十四行也照样滚。常驻,没有开关。
- 窗口通知:两条通道,都可以关。停下来等你动手时弹一条——提问、计划确认、工具审批三种都算,正文就是它刚写的那段内容(压成一行,超过 140 字截断),不是一句固定提示。任务跑完也弹一条——会话名、耗时、这一轮回复的开头,完成 / 出错 / 中断分三种标题,几个同时跑完时排队出现、相邻两条隔 3 秒;这一轮结束时若还有提问在等你,就不再补这一条。三档:关 / 未聚焦时 / 无论何时,默认无论何时。可在插件页切换。
- 轨迹视图收掉输入区:切到「轨迹」那一页时,dsh 会把输入框当浮层压在记录表上;插件把整条输入区收掉,记录表铺到底,切回「对话」原样回来。
安装
在 dsh Web GUI 里打开插件页 →添加插件→ 输入包名:
@alm-allen/dsh-chat-ux
或者直接走命令行(等价于在 profile 目录里执行 pnpm):
dsh plugin --profile web add @alm-allen/dsh-chat-ux
装完重启 dsh、刷新页面即可。卸载用插件页的开关,或:
dsh plugin --profile web remove @alm-allen/dsh-chat-ux
从 GitHub 仓库安装
也可以直接从仓库装 —— 仓库里带了构建产物,所以不需要任何构建授权:
dsh plugin --profile web add github:Alm-Allen/dsh-chat-ux
想锁死到某个 commit(后续推送就改不了你装到的东西):
dsh plugin --profile web add github:Alm-Allen/dsh-chat-ux#<commit-sha>
配置
插件装好后,在插件页的这一行上可以直接改:
| 项 | 默认 | 说明 |
|---|---|---|
| 纸感 | 开 | 关掉后整页回到 dsh 原来的样子,正文与代码的字也一起换回去。 |
| 纸面字体 | 开 | 纸感底下的子开关。关掉后只留纸:页面底色与墨照换,正文与代码回到 dsh 自己的字体;纸感关掉时它不起作用。 |
| 自动开合 | 开 | 关掉后,思考行与过程组都不再自己展开收起,读者自己点开收起照常。 |
| 工具行跟随 | 开 | 工具调用与新的思考行出现时补一次底,新内容不会落到看不见的地方;你自己往上翻时它不动。 |
| 光标动效 | 无论何时 | 三档:关/移动时/无论何时。 |
| 发送气泡形变 | 开 | 关掉后,发出那一条直接出现在落点,没有那段飞行(方块里也不显示文字)。 |
| 命中率转轮 | 开 | 关掉后,命中率变化时直接换成新数字。 |
| 上下文占用饼 | 开 | 关掉后回到 dsh 原来的环。 |
| 输入框毛玻璃 | 开 | 关掉后,输入区、发送按钮与那枚加号都回到 dsh 原来的样子,背后不再模糊。 |
| 实时改动行数 | 开 | 打开后,直接调用 write / edit 时行尾那两个 +n -m 在内容流进来时就长(两个字段各自到、各自开始数,不等另一半);流式期间那两个数按节拍换数、让数字轮每次都弹完整,落定那一下才是实时跟随。 |
| 窗口通知 | 无论何时 | 三档:关/未聚焦时/无论何时。一条控件同时管两条通道——停下来等你动手时弹一条,一轮跑完(含出错、中断)也弹一条。 |
「工作步骤展示」不在插件卡片上:它在 dsh 自己的 设置 → 通用 里,插件只在你没选过时把它补成「标准」。
兼容性
- 兼容目标是 dsh 的两条发布线:网页端
0.2.1-rc.5与桌面端0.2.2-alpha.2。两者都实测过,插件认的契约面在这两版上一致。 - 最低支持
0.2.1-alpha.1;0.2.0-rc.2及更早不再适配(2026-10-17 下线了那几处兜底:data-text-shimmer双认、坞的「按形状找」老版分支、内置统计胶囊的收尾、文件变更行准备态的参数前缀扫描)。 0.2.1-alpha.1起,输入框下方的统计坞带data-composer-dock、准备态块带block.args,插件直接认它们;更早的版本上它认不出来时原样不动,不会画错。- 2026-10-31 核对过 rc.5 与 alpha.2 的全部接触面:
PLATFORM_MODULES(11 个键)、四个座位名、插件认的 32 个data-*语义属性、DisclosureRow/TextShimmer/ContextMeter三处实现、设计令牌的取用,两版逐项相同。改动只有一处不影响本插件的:conversation.chat.reasoning.body那一版的 owner props 多一个rawText字段。 - Node
^22.19.0 || >=24.0.0。
关于本仓库
这里是插件的源码与发行说明。构建脚本、内部设计文档不在本仓库内,因此 clone 之后不能直接 npm run build;需要用插件请直接安装 npm 上的包。