npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@junjian.work/dsh-chat-width

v0.22.4

Published

DSH Web 对话消息百宝箱

Readme

dsh-chat-width

调整 DSH Web UI 聊天区的小插件:可分别设置聊天内容列输入框任务清单排队消息/进行中的目标我的消息五个宽度(默认聊天内容 99%,其余跟随上层/官方默认),并支持对话导航滚动条自动隐藏Markdown 表格宽度与边框控制历史拉取条数配置触顶自动加载更早消息

  • 安装后在 设置 → 插件配置 出现「聊天优化」卡片,随时可改,保存立即生效,无需重启
  • 宽度数值支持 CSS 长度:px / em / rem / % / vw / vh;留空 = 跟随上一层;
  • 配置持久化到 profile 的设置文档(~/.dsh/settings.yaml),可一键「重置全部」。

功能清单

| 功能项 | 控制对象与行为说明 | 默认值 | | :--- | :--- | :--- | | 聊天内容 | 消息流列宽(--dsh-chat-content-width) | 99% | | 输入框 | 输入框卡片最大宽(--dsh-composer-card-max-width) | 留空 = 跟随聊天内容 | | 任务清单 | 会话流中的待办任务面板([data-testid="todo-panel"]) | 留空 = 跟随输入框 | | 排队消息/进行中的目标 | 输入区上方排队消息停靠栏([data-queue-dock])与目标栏([data-goal-bar]) | 留空 = 跟随输入框 | | 我的消息 | 我发送的消息气泡宽度(官方默认 min(525px, 82%)) | 90% | | 表格宽度 | 聊天内容中 Markdown 表格的宽度(如 100% 撑满消息区;留空跟随官方 max-content);同时自动支持表格单元格内 <br> 标签真实换行 | 100% | | 表格边框 | 聊天内容中 Markdown 表格单元格显示横向边框(上/下) | 开启 | | 表格竖线边框空白 | 开启 = 表格的竖线改为空白分隔(列间与边缘均无竖线);关闭 = 显示完整边框(列间 + 左右边缘竖线) | 开启 | | 表格竖线空白宽度 | 竖线边框空白模式下,列与列之间的空白分隔宽度(CSS 长度,如 4px6px) | 4px | | 滚动条自动隐藏 | 全部滚动条在鼠标移动/滚动时显示,停止操作约 1.5 秒后自动隐藏 | 开启 | | 任务清单/排队消息防覆盖修正 | 任务清单/排队消息保持绘制在输入框之上,并取消排队消息与输入框的 9px 重叠(两者干净分隔) | 开启 | | 我的消息图片缩略图 | 我发送的图片在聊天中显示为缩略图(200×150,点击可查看大图),不再大图直出;粘贴图片的占位([Pasted image...])也会渲染成缩略图 | 开启 | | 提问行显示问题内容 | 会话流里的「提问」行显示为「提问:{问题内容}」(提问弹出时即显示,不等回答完) | 开启 | | Think 行折叠隐藏摘要 | 聊天消息窗体里的 Think 行不显示后面的摘要信息,点击行展开后才显示完整思考内容 | 开启 | | 完成后折叠每轮过程 | 每轮执行完成自动收成一个可点击概要条(「本轮 思考N · 工具M · 用时X」);用时格式如 1 天 2 小时 3 分钟 15 秒(每个有值的单位才显示,不足 1 秒显示毫秒);折叠范围是该轮最终回答(最后一个 assistant 步骤)之前的全部中间过程(思考、工具执行、中间文本),最终回答与操作栏始终显示;执行中保持展开,历史消息同样折叠 | 开启 | | 开启对话导航 | 在滚动条左侧显示极简垂直轮次指示器(横线),鼠标悬浮展开半透明列表卡片;按屏幕中心最近位置高亮当前轮次,点击可平滑跳转到对应消息 | 开启 | | Think/工具调用行间隔 | 调整聊天消息窗体中 Think 行与工具调用行之间的空白间隔(.Md3f7G_column 的 gap,如 2px;留空跟随官方) | 16px | | 输入框模型二级菜单选择 | 输入框右下角的模型选择下拉框改为 2 级菜单:一级为供应商名称(相同供应商合并归类),二级为该供应商下的具体模型列表,支持思考强度快速切换与「供应商/模型名称」直观显示 | 开启 | | 历史拉取消息数 | 每次打开会话或向上拉取时的历史消息条数(默认 50,范围 20~300 条) | 50 | | 触顶自动加载更早消息 | 向上滚动到顶部时自动触发加载更早历史,免去手动点击 | 开启 |

宽度百分比说明

任务清单、排队消息与进行中的目标的百分比数值是相对输入框宽度计算的:

| 设置值 | 实际宽度计算 | | :--- | :--- | | 100% | 精确等于输入框(输入卡片)宽度,左右对齐 | | 99% | 输入框宽度 × 0.99(缩窄 1%) | | 98% | 输入框宽度 × 0.98(缩窄 2%) | | 1000px 等绝对值 | 直接按输入的像素或其他 CSS 长度生效 |

100% 是“与输入框等宽”的快捷设定,其他百分比按输入框宽度等比缩放。

滚动条自动隐藏实现原理:官方 WebKit 与 Firefox 两条渲染路径均读取 --dsh-scrollbar-thumb 变量,开启后把该变量默认设为透明;浏览器端监听 mousemovescroll 事件,活动期间给 body 元素添加 dcw-scroll-active 类恢复变量值,静止 1.5 秒后移除隐藏。

实现原理

官方 Web UI 的聊天列宽度由 CSS 变量 --dsh-chat-content-width(默认 748px)控制,输入框/任务清单/排队消息/进行中的目标共享 --dsh-composer-card-max-width(= 内容宽 + 32px),官方界面未内置自定义设置项。本插件通过以下方式实现:

  1. 服务端(Host 侧):注册 chat-width settings 命名空间,并挂载同源路由 /dsh-chat-width/config(GET 读取 / POST 写入)。采用自有路由规避 API 网关对第三方 settings 命名空间的白名单限制;
  2. 浏览器端(Client 侧):启动时拉取配置并注入覆盖规则(如 .wSkVaW_root.wSkVaW_root{--dsh-chat-content-width:90%}),配置修改保存后即时重写样式,无需刷新或重启;
  3. RPC 拦截与滚动联动:在前端 Hook 会话历史拉取接口动态注入 maxMessages 参数,并监听会话滚动容器实现触顶防连击自动加载。

安装指南

方式一:从 npm 安装(发布后)

dsh plugin --profile web add @junjian.work/dsh-chat-width

方式二:本地链接(开发调试)

dsh plugin --profile web add link:D:\William\Documents\DeepSeek\dsh-chat-width

两种安装方式均需在 ~/.dsh/profiles/web/cordis.patch.yml 中挂载:

- insert:
    - id: chat-width
      name: '@junjian.work/dsh-chat-width'

首次安装或修改 bundle 需重启 dsh web 进程使浏览器端插件清单生效。

配置文件示例

可在「设置 → 插件配置 → 聊天优化」中通过可视化界面配置,亦可直接编辑 settings 文档:

# ~/.dsh/settings.yaml
chat-width:
  width: "90%"
  composerWidth: "1000px"
  todoWidth: "720px"
  queuedWidth: ""
  userMessageWidth: "800px"
  tableWidth: "100%"
  historyPageSize: 50
  autoLoadOlder: true
  scrollbarAutoHide: true
  dockLayerFix: true
  tableBorder: true
  tableVerticalBorder: true
  tableVerticalGap: "4px"
  thinkHideSummary: true
  foldCompletedTurns: true
  turnNav: true
  modelDisplayEnhance: true
  rowGap: "16px"

更新历史

| 版本号 | 发布日期 | 更新内容说明 | | :--- | :--- | :--- | | 0.22.4 | 2026-08-27 | 修复路径芯片对中文文件名的匹配截断:完整保留含中文的相对路径、盘符路径和目录路径,避免只显示文件名前缀。 | | 0.17.2 | 2026-08-24 | 修复表格代码块过滤:检查具体文本节点的父级链,防止行内代码块(<code>)内的 <br> 标签被误转为换行节点导致黑色块瑕疵。 | | 0.17.1 | 2026-08-24 | 新增 Markdown 表格单元格换行增强:自动将表格单元格(thtd)中的 <br><br/><br /> HTML 换行标签替换解析为真实换行 DOM 元素,完美支持模型在表格列内换行。 | | 0.17.0 | 2026-08-24 | 模型选择下拉全面升级为原生 UI 风格的 2 级级联菜单:一级展示合并归类后的供应商列表(带右向箭头 > 与当前选中模型高亮),鼠标悬浮即时向上弹出二级模型列表,支持长列表独立平滑滚动与思考强度(Effort)快捷设置,并在无操作时自动隐藏滚动条。 | | 0.16.12 | 2026-08-24 | 重构对话导航 Tooltip 气泡提示:完全基于 DSH 原生主题样式自研弹出卡片,支持长消息自动换行、适中尺寸限制、精确定位与防遮挡计算,彻底取代浏览器简陋的原生 title 提示框。 | | 0.16.10 | 2026-08-24 | 优化对话导航悬浮面板 UI 风格:适配 DSH 原生主题变量(浅色/深色自适应背景与边框),采用标准的轻量阴影、项圆角及 hover 高亮状态,彻底消除与原生界面不协调的黑底突兀感。 | | 0.16.9 | 2026-08-24 | 新增「开启对话导航」功能:在会话右侧滚动条旁显示极简轮次横线指示器,鼠标悬浮展开半透明对话轮次导航面板;支持顶部/底部端点精确判定与滚动锚定实时高亮,点击平滑滚动跳转至对应提问。 | | 0.15.6 | 2026-08-24 | 修复滚动/消息变动时第一条带图消息自动弹出放大图的问题:触顶自动加载更早历史严格按按钮文本(“加载更早”/“Load earlier”)匹配,杜绝误点击图片缩略图。 | | 0.15.3 | 2026-08-23 | 修复相同百分比下“进行中的目标”与任务清单宽度不一致:queuedWidth 现在同时覆盖排队消息 [data-queue-dock] 和目标栏 [data-goal-bar],并补充回归测试与设置说明。 | | 0.15.2 | 2026-08-23 | 修复「完成后折叠每轮过程」被轮内 contextsteering 错误拆分后失效的问题;会话列与块间距改用稳定的 [data-chat-flow] 选择器,并增加 DOM fixture 回归测试。 | | 0.15.1 | 2026-08-23 | 修复触顶自动加载更早消息在官方类名变动下失效的问题(增加多重弹性匹配与文本兜底,触顶阈值优化至 120px / 300ms);README 全量重写为简体中文。 | | 0.15.0 | 2026-08-21 | 新增「历史拉取消息数(historyPageSize)」与「触顶自动加载更早消息(autoLoadOlder)」:支持自定义单页历史拉取条数(20~300 条,默认 50),向上滚动触顶自动加载更早历史;修复每轮折叠条在顶部堆叠和空过程误折叠的问题。 | | 0.14.2 | 2026-08-21 | 修复输入框模型选择器污染左下角权限菜单选项文本的问题:限定仅对模型选择器按钮生效。 | | 0.14.0 | 2026-08-19 | 新增「完成后折叠每轮过程」:每轮执行完成自动收成一个可点击概要条(本轮 思考N·工具M·用时X),折叠该轮最终回答之前的全部中间过程(思考、工具执行、中间文本),最终回答与操作栏始终显示;执行中保持展开,历史消息同样折叠;同时移除 Think 行标题的思考时间显示,「本轮 用时」保留并以「1 天 2 小时 3 分钟 15 秒」格式展示(有值的单位才显示)。另将「表格竖向边框」改为「表格竖线边框空白」:开启 = 竖线变空白分隔(宽度可配),关闭 = 完整边框竖线。 | | 0.13.2 | 2026-08-19 | 修复重启后 Think 思考时间闪烁:时长恢复改用稳定哈希(标题文本归一为 Think 再取哈希),读写键不再随标题改写而漂移。 | | 0.13.1 | 2026-08-18 | Think 耗时映射加上限清理(保留最近 5000 条),避免文件与浏览器内存随时间膨胀。 | | 0.13.0 | 2026-08-18 | 宿主进程监听会话事件记录 Think 耗时:窗口后台、消息非最新位置也能记录;刷新/切换会话均稳定恢复。 | | 0.12.1 | 2026-08-18 | 修复切换会话再切回后 Think 耗时丢失:完成时同步更新内存映射,会话内切换无需刷新也能恢复。 | | 0.12.0 | 2026-08-18 | Think 耗时改由宿主进程持久化到 ~/.dsh/dsh-chat-width/think-durations.json,刷新/重启后历史行稳定恢复(不再依赖 localStorage)。 | | 0.11.9 | 2026-08-18 | 修复思考时间显示闪烁:思考中改为整秒锚定更新,毫秒阶段只显示一次,避免流式渲染时高频闪动。 | | 0.11.8 | 2026-08-18 | 思考时间数字与单位之间增加空格;窗口恢复可见/聚焦时立即刷新计时,缓解窗口失焦导致无思考时间。 | | 0.11.7 | 2026-08-18 | 移除无效的「Think 行行高」「Think 行上下间距」配置及处理,只保留 .Md3f7G_column 间隔控制。 | | 0.11.6 | 2026-08-18 | 按用户定位改用 .Md3f7G_column 的 gap 控制 Think/工具调用行间隔,设置即时生效。 | | 0.11.5 | 2026-08-18 | 行高设置扩大命中会话根下所有 DisclosureRow,Think/工具调用行行高调整更可靠。 | | 0.11.4 | 2026-08-18 | Think 与工具调用交替行之间真正贴紧(抵消官方 16px 行间距);结论信息间距保持官方。 | | 0.11.3 | 2026-08-18 | 收敛为只调整 Think 行与工具调用行的行高;结论信息、折叠内容、块间 gap 均保持官方。 | | 0.11.2 | 2026-08-18 | 「Think 行行高」的作用范围扩大到 Think 行之后的所有行,蓝色日志块内每行行高可统一调整。 | | 0.11.1 | 2026-08-18 | 修复屏幕外 Think 行无思考时间的问题:监听 data-state 属性变化,滚动离开时也记录并保存完成耗时。 | | 0.11.0 | 2026-08-18 | 新增「明面行高(块间距)」配置:控制 Think/工具调用等每行之间的明面间距,默认 16px,可即时调整。 | | 0.10.2 | 2026-08-18 | 设置面板改数值即实时预览(不用等保存),确认后再点保存持久化。 | | 0.10.1 | 2026-08-18 | Think 计时显示改为人性化时长:<1秒显示毫秒,≥1分钟显示分秒,≥1小时显示小时分秒,≥1天显示天小时分秒。 | | 0.10.0 | 2026-08-18 | Think 行及后续行的行高与上下 padding 改为设置面板可配置(默认 17px / 4px),可随时调整,无需改代码。 | | 0.9.4 | 2026-08-18 | Think 行及后续行上下 padding 调整为 4px,行高保持 17px,进一步紧凑。 | | 0.9.3 | 2026-08-18 | Think 行及后续行高度在 0.9.2 基础上再收缩 15%(行高 17px / 上下 padding 7px)。 | | 0.9.2 | 2026-08-18 | Think 行及其后每一行高度收缩约 15%(行高与上下 padding 收紧),整体更紧凑。 | | 0.9.1 | 2026-08-18 | 修复 Think 计时在思考结束后仍增长的问题;折叠隐藏摘要时压缩 Think 行高度,避免与工具调用之间空隙过大。 | | 0.9.0 | 2026-08-18 | 新增「Think 行显示思考时间」:Think 标题后显示思考耗时秒数,思考中实时递增,完成后固定;耗时存入本地存储,刷新/重启后历史消息可恢复显示。 | | 0.8.0 | 2026-08-18 | 新增「Think 行折叠隐藏摘要」:折叠时 Think 行不显示后面的摘要信息,点击行展开才显示完整思考内容。 | | 0.7.1 | 2026-08-18 | 修复 Markdown 表格默认竖向边框为透明断点时不可见的问题:两列之间现在会出现 1px 分隔断点(无底色);开启竖向边框时显示可见竖线。 | | 0.7.0 | 2026-08-18 | 新增「Markdown 表格宽度/边框控制」:默认表格宽度 100%、横向边框开、竖向边框为透明断点,不替换官方渲染器。 | | 0.6.1 | 2026-08-18 | 修复 DSH rc.07 后「设置 → 插件配置」不显示配置卡片的问题;注册 settings.plugin.item 时改用 key 匹配。 | | 0.6.0 | 2026-08-16 | 新增「提问行显示问题内容」:提问弹出即显示问题文本,不等回答完;README 补充说明。 | | 0.5.1 | 2026-08-14 | 修正 0.5.0 发布包版本号(代码内容不变)。 | | 0.5.0 | 2026-08-14 | 新增「我的消息图片缩略图」:粘贴占位替换为缩略图(跨节点/多图)、本窗体灯箱、自动滚动、修复多图替换 bug。 | | 0.4.17 | 2026-08-14 | 宽度百分比按输入框精确缩放(100%=同宽)、取消队列面板内缩、README 补充宽度语义说明。 | | 0.4.14 | 2026-08-14 | 修复排队消息条样式:四角圆角、宽度与输入框精确对齐(min 变量方案)、容错加固。 | | 0.4.12 | 2026-08-14 | 初始化插件:聊天区宽度/滚动条优化。 |

版本规则

  • 新增功能:次版本号 +0.1(如 0.1.00.2.0
  • 代码修正:补丁版本号 +0.01(如 0.1.00.1.1

维护说明

宽度与布局规则挂载于以下选择器(位于 lib/client.js 顶部常量):

| 常量名 | 选择器 | 说明 | | :--- | :--- | :--- | | ROOT_SELECTOR | .wSkVaW_root.wSkVaW_root | 会话页根容器(CSS Modules 哈希,版本升级可能变动) | | TODO_SELECTOR | [data-testid="todo-panel"] | 稳定属性,跨版本保持一致 | | QUEUE_SELECTOR | [data-queue-dock] | 排队消息稳定属性 | | GOAL_SELECTOR | [data-goal-bar] | 进行中的目标稳定属性;与排队消息共同受 queuedWidth 控制 | | TABLE_PARENT_SELECTORS | [class*="tableScroll"] + [class*="markdown"] | 官方 MarkdownText 表格容器类名包含 tableScroll;另以 markdown 根类兜底 |

DSH 升级后若 ROOT_SELECTOR 发生变动,插件会自动退回默认宽度(其余功能不受影响),更新该常量即可恢复自定义宽度。