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

dsh-sticky-user-bubble

v0.1.6

Published

阅读长对话时把已滚出对话顶部的用户气泡固定在阅读区顶部。

Downloads

381

Readme

dsh-sticky-user-bubble

一个纯客户端 DSH Web 插件:阅读长对话时,当当前用户气泡已经完整滚出对话顶部,插件会在阅读区顶部固定显示同一条原生用户气泡,点击或键盘激活即可回到原消息。固定内容直接来自原气泡的 DOM 克隆,因此不会改写正文排版,也不会把用户发言强行称为“问题”。

功能

  • 固定当前已完整滚出对话可视区顶部的用户或 durable steering 气泡;向上、向下滚动时按真实消息顺序切换。
  • 原气泡仍有任何可见部分(包括底部内边距与圆角)时保持隐藏,不会出现原气泡与副本同时可见。
  • 下一条用户卡片进入顶部区域时,固定气泡像列表 sticky 标题一样被它顶出去(超出对话顶边的部分被裁掉),不会盖住新卡片,并保持与对话一致的消息间距;新卡片到达阅读线时固定气泡完全消失。
  • 点击固定气泡平滑滚动回对应的原始用户输入位置;键盘聚焦后按 Enter 或空格键同样有效。
  • 超过三行时默认只显示三行并以省略号截断,鼠标移入或键盘聚焦时恢复完整内容;展开高度同时受输入框顶部和「下一条用户卡片上方空间」限制,超出部分在气泡内部滚动,空间只剩消息间距时保持三行不展开。
  • 内部滚动发生在气泡 padding 之内:滚动条不会压住圆角边框,并沿用 DSH「卡片内滚动区域」的暗色滑块。
  • 会话仍在进行(思维链、工具调用、回答流式增长)时不会打断阅读:展开状态不会因会话更新而反复收起再展开。
  • 保留 DSH 原生的手动历史分页:更早消息仍由「加载更早」控制;旧消息进入当前窗口后,固定气泡自动重新归组和定位。
  • 固定副本位于独立的 shell.overlay 层,除气泡本身外点击穿透;克隆内部节点会移除 ID、ARIA 引用、核心聊天标记和交互属性,避免引用链接或控件被二次触发。
  • 找不到预期核心标记、当前快照过期、气泡不可测量、结构存在歧义或克隆几何自检失败时自动隐藏,并在 host 上保留非视觉状态码供诊断。

要求

  • DeepSeek Harness Web >=0.1.7-alpha.1 <0.1.8;0.1.7-alpha.1 已逐版本验证。同线后续版本会给出警告,并继续依赖客户端结构与能力检查;范围外保持 inert。
  • Node.js 20 或更高版本(仅安装与发布检查需要)。
  • 不需要额外的运行时 npm 依赖。

安装与卸载

dsh plugin --profile web add dsh-sticky-user-bubble        # 安装
dsh plugin --profile web add [email protected]  # 升级到指定版本
dsh plugin --profile web remove dsh-sticky-user-bubble     # 卸载

已发布为 dsh-sticky-user-bubble。profile 依赖是 caret 范围,升级需要显式写版本号。安装会向 profile 增加 bundle,而 bundle 列表只在启动时读取,因此需要重启 dsh web 并刷新页面。

从源码运行:./install.sh 通过官方 profile manager 安装 link:<源码目录>,./uninstall.sh 移除;两者都不直接改写用户的 cordis.patch.yml。卸载只移除 profile 依赖和 bundle 层,不修改 DSH 源码、会话历史或用户配置。

已知边界

  • 当前 DSH 的圆角气泡没有稳定的专用 data-* 标记,因此插件在权威用户行内部用消息文本、paint、padding 和几何联合评分;候选存在歧义时 fail closed(隐藏而不是猜)。
  • wrapper 无法可靠保留 flex/grid/table 根布局、垂直书写、root transform 或非 1 zoom,这些布局会隐藏固定气泡并记录 unsupported-* 状态;Shadow DOM、canvas 与关键伪元素内容不在支持范围内。
  • 第三方 !important 规则若主动覆盖克隆的关键属性,几何自检能发现一部分但不能保证全部识别;原消息始终不受影响。
  • 纯图片消息没有文本气泡时不会伪造文字副本。
  • 尚未成为 durable 节点的 pending steering 行不参与切换;尚未点「加载更早」的历史消息也不在当前窗口内,插件有意不自动调用 loadOlder()。
  • 展开窗口只剩消息间距级空间时 hover 不再展开(避免退化成极窄的内部滚动窗口);要读全文,向上滚一点让下一张卡片离开即可恢复。
  • 这是纯客户端行为:不提供开关、不保存历史数据、也不新增 Host 路由。

License

MIT