dsh-rail:DSH 侧栏窄轨布局与余额条

前言

DeepSeek Harness(DSH)的默认侧栏往往把面板图标、工作区与会话列表挤在同一列里:工作区被压到下半区,会话标题拿不到整列宽度,也很难从视觉上区分「工作区层级」和「会话层级」。若还想在桌面端顺便看到账号余额与今日消费,多半要切到浏览器或另开页面。

dsh-rail(仓库名 xiaoxiaolelang-ai/dsh-rail,npm 包名 dsh-rail)是维护者 xiaoxiaolelang-ai 提交的 客户端 类插件,定位是「给 DeepSeek Harness 的侧边栏做减法」:图标收进 40px 窄栏、用线条和字重拉出层次,并在侧栏底部栏上方常驻一条 DeepSeek 余额与消费摘要。它不替换宿主 slot、不重排 React 树,主要依赖注入样式与少量数据属性,卸载时可还原。

下面按定位、功能、安装、用法与边界说明如何接入。

这是什么

  • 名称:dsh-rail(中文产品介绍里常写作「窄轨」)
  • 分类:客户端(dsh.client,platform: web,immediately: true)
  • 引擎要求:engines.dsh >= 0.2.2-rc.1(README 写明在 0.2.2-rc.1 上验证);Node >= 20
  • 当前包版本(package.json):0.3.1
  • 许可证:MIT
  • 社区目录:SkillHub 插件页(独立社区站点,与 DeepSeek / 幻方无官方从属关系)
  • 源码:GitHub - xiaoxiaolelang-ai/dsh-rail

插件向 @deepseek-ai/dsh-client-ui-sidebar、dsh-client-ui-workspace 等客户端模块注入补丁(cordis.patch.yml),在浏览器侧改侧栏栅格与样式,在 Host 侧通过 /api/dsh-rail/balance 等路由提供已算好的余额 JSON。

核心功能

图标窄栏(40px + 内容列)

侧栏改为「40px 图标列 + 内容列」两列栅格:所有面板图标进左侧竖栏;品牌、新建会话、工作区与会话列表占右侧整列。工作区不再被挤在下半栏,会话标题可使用完整宽度。

  • 图标悬停有原生 title 提示;当前面板左侧有一条 2px 强调条。
  • 原生类名从注入的 CSS Module(style[data-plugin-css="…"])运行时解析,宿主升级换哈希时仍可对上类名;解析不到的规则会跳过,窄栏与余额条仍可工作。

侧栏层次与会话标题

用细线、字重和强调色区分层级,颜色全部走 --dsw-alias-* 主题令牌(含线条 alpha),浅色 / 深色跟随宿主,无硬编码色值。

  • 工作区之间:1px、强调色淡染的圆头分隔线。
  • 组内会话之间:1px 中性发丝线;每个工作区标题下有一条淡竖线,括住其下会话。
  • 选中会话左侧 2px 强调条;键盘聚焦时未选中行也显示同一条。
  • 工作区标题字重 500,文件夹图标提到二级色。
  • 会话标题:普通会话用次级色;选中 / 悬停 / 键盘聚焦升到主色,选中再加一档字重;相对时间保持三级色。
  • 会话列表右缘按原生滚动条宽度加偏移内缩,行 hover 底色与滚动条对齐。

工作区会话数

工作区行末尾显示其下会话个数(11px、三级色、等宽数字);悬停时让位给行操作按钮。

计数逻辑(README 说明):

  • 展开时:数屏幕上真实的会话行。
  • 折叠时:宿主不渲染那些行,使用上次展开时记在 localStorage 的值(键 dsh-rail:session-counts:v2)。
  • 首次启动且工作区一直折叠:不显示数字(插件不猜测、不读宿主内部状态)。
  • 别处增删会话后,折叠态可能显示旧值,下次展开会纠正。

计数写在行自身的 data 属性上,由 CSS content: attr() 渲染,不插 DOM 节点。

余额条与今日 / 累计消费

侧栏底部栏正上方一行,典型展示包括:状态圆点、余额(如 ¥ 23.41)、今日消费、累计消费(小标签 + 数值,右对齐分组,中间竖线分隔)。

状态圆点与数字颜色(阈值在 client.js 顶部:WARN_AT = 50、LOW_AT = 10):

  • 正常:中性灰
  • 余额低于 50:琥珀
  • 低于 10:红
  • 未登录:暗灰

刷新:平时约每 60 秒自动刷新;切回窗口时也会刷新。

点击行为(0.2.2 起):

  • 单击:在新窗口打开平台充值页,地址来自宿主账号状态 deepseekAccount.getState().links.topUpUrl,非插件写死。
  • Shift + 单击:立即刷新余额。
  • 宿主未提供充值地址时,单击退回为刷新。
  • 悬停可查看充值 / 赠金分项、更新时间、今日与累计消费(含累计起始日)、今日充值 / 今日赠金等。

今日花费算法(README 强调与旧版不同):

  • 右侧今日数值是今日累计消费,不是「当前余额相对早晨的差值」。
  • 已移除读写 DSH_HOME/dsh-usage/usage-ledger.json 的「账本优先」路径;改为只用分钱包采样(充值余额、赠金余额分别跟踪)。
  • 任一钱包余额下降 → 记入今日消费;充值钱包上升 → 今日充值;赠金钱包上升 → 今日赠金;充值不会把今日消费冲成负数或抹掉。
  • 状态落在 DSH_HOME/dsh-rail/day-spend.json(状态文件 v: 3),重启当天接着算,跨天自动归零。
  • 精度受 60 秒轮询影响:同一分钟内先充后花可能被当成净涨,README 认为不必为此做更复杂记账。
  • 今天尚未消费则不显示今日数字;悬停仍可见今日花费与今日充值。

累计消费口径(重要):

  • 不是账号官方历史总消费;官方接口只给三个余额,反推不出全历史。
  • 只覆盖插件持续运行期间观察到的余额下降;DSH 关闭或插件禁用期间的消耗会漏记。

余额数据来源

  1. 优先使用宿主内置 DeepSeek 账号(deepseekAccount 服务);已登录即可显示,不需要 API Key。
  2. 不可用时回退 DEEPSEEK_API_KEY(先环境变量,再宿主凭据);请求带 10 秒超时,避免余额条长期停在「读取中」。明文仅在 Host 进程使用,不下发到浏览器。
  3. 浏览器通过 connection 的精确 fetch 路由 /api/dsh-rail/balance 取 JSON。
  4. 两条都拿不到时显示「未登录」,不编造数字。

安装与启用

在 DSH 插件管理器中添加包名 dsh-rail,或命令行:

dsh plugin install dsh-rail

安装后刷新页面;首次安装或升级客户端代码时,正常退出 Desktop 再启动更稳妥。

插件以当前 DSH 进程权限运行,安装前宜自行查看仓库源码与 MIT 许可证,确认可接受其 Host 侧读账号 / API Key、写 DSH_HOME/dsh-rail/ 等行为。

典型用法

dsh-rail 无单独「配置文件」面向终端用户;启用后随侧栏自动生效。日常使用可按下述理解交互即可。

  1. 在侧栏左侧竖栏点图标切换面板;右侧整列浏览工作区与会话。
  2. 展开工作区后,折叠时才会稳定显示该工作区的会话数;若从未展开过,折叠态不显示数字。
  3. 看底部余额条:颜色反映余额档位;需要充值时单击余额条(新窗口打开宿主给出的 topUpUrl);需要马上更新数字时用 Shift + 单击。
  4. 悬停余额条查看分项与今日 / 累计消费说明;理解「累计」仅为插件运行期观测值,不等同平台账单全量。

开发者本地校验(仓库 README):

node --check client.js
node _smoke.mjs
node _smoke-host.mjs

适用场景与注意

适合谁

  • 长期在 DSH Desktop / Web 客户端里维护多工作区、多会话,希望侧栏更宽、层次更清晰。
  • 希望在侧栏底部附近看到 DeepSeek 余额,并粗略跟踪「今日花了多少」(分钱包采样),而不是频繁切网页。

兼容与边界

  • 侧栏折叠到 56px 时,宿主会隐藏整个底部区,余额条一并隐藏——原生行为,插件不覆盖。
  • 未实现工作区吸顶:position: sticky 与宿主行容器的 overflow 裁剪冲突,README 明确不做。
  • 与修改侧栏结构或全局主题的其他皮肤插件可能样式互盖;与侧栏外观类插件 繁界(fanframe) 建议二选一。
  • 深色主题下线条 alpha 会略调高,便于辨认。

安全与信任

  • 余额与消费逻辑在 Host 侧执行;客户端只拿算好的 JSON。仍建议在可信环境安装,并知悉其会读写本机 DSH_HOME/dsh-rail/ 下状态文件。

结尾

dsh-rail 把 DSH 侧栏收成「图标窄轨 + 内容列」,用轻量样式补层次与会话数,并在底部提供可点击充值的余额与今日 / 累计消费摘要;实现上尽量不碰 React 结构,卸载可清理注入内容。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜