概览
@bananasoldier01/dsh-tidychat
README / ZH
插件文档
dsh-tidychat
🌐 English
▼ DSH 版本适配
DSH 版本 settings 注册 折叠/分隔线/自动加载 左缘定位条 0.1.0-rc.7 / 0.1.1-rc.x register(v0.2.7+)/installSettingsSection(v0.2.5)✅ 折叠/分隔线/自动加载正常(v0.2.8 起回退 anchor-key;v0.2.7 不生效) ✅ 可用(navigator 开;旧槽 + 锚点均在) 0.1.2-alpha.2+ / 0.1.2-rc.1 installSection✅ 正常 ⛔ 暂停(官方右缘 TurnNavigator + react-dom)
- settings 自动适配:插件按宿主 DSH 版本自动选用注册 API——0.1.2+ 用
installSection,0.1.0-rc.7 / 0.1.1-rc.x 用register——同一份插件在 0.1.0-rc.7 ~ 0.1.2-rc.1 都能加载并设置开关。- 左缘定位条:在没有官方右缘 TurnNavigator 的旧版 DSH(0.1.0-rc.7 ~ 0.1.1-rc.x)上可用(navigator 开;旧槽
conversation.session.header.utilities存在且被渲染,所需 DOM 锚点均在,已从 0.1.1-rc.2 源码确认)。在 DSH 0.1.2+(有官方右缘 TurnNavigator)暂停显示,原因:官方新增右缘 TurnNavigator 与它重叠,且定位条依赖react-dom(当前插件与宿主均未提供)。是否保留/优化待后续版本定。- 折叠/分隔线:v0.2.8 起在旧版 DSH 也可用——
data-chat-turn缺失时回退到从data-chat-anchor-key解析 turn 号(v0.2.5 的做法)。v0.2.7 无此回退,故 v0.2.7 在旧版折叠/分隔线不生效(仅自动加载正常)。- 功能重叠:DSH 0.1.2 起官方原生新增「折叠过程内容 + System prompt」与右缘 TurnNavigator,与插件的 fold / 左缘定位条重叠。
- 使用建议:
- DSH 0.1.2+:官方原生折叠与插件 fold 二选一——用官方就关插件 fold(避免双折叠);想用插件的折叠控制条就关官方原生折叠。左缘定位条默认暂停。
- DSH ≤ 0.1.1-rc.x:左缘定位条可用(navigator 开);折叠/分隔线/自动加载在 v0.2.8 起也可用。
让 DSH 的长会话变成可扫读、可跳转的结论流。
多任务、多轮次的会话里,思考、工具调用、中间文字和最终总结混在一起,回头找「上次那个任务的结论」很费劲。dsh-tidychat 把已完成的任务轮次自动折叠成一条结论,把思考与正文用分隔线切开;聊天区左缘的 Codex 式全局导航定位条(Canvas minimap)在没有官方右缘 TurnNavigator 的旧版 DSH(0.1.0-rc.7 ~ 0.1.1-rc.x)上可用(navigator 开),在DSH 0.1.2+(有官方右缘 TurnNavigator)暂停(与官方功能重叠 + 依赖 react-dom)。
🔌 生态:挂
#dsh·#dsh-plugintopic,欢迎收录。
✨ 功能
| 功能 | 说明 |
|---|---|
| 🗂 自动折叠 | 已完成轮次自动收起思考(Think)、工具调用与中间文字,只保留最终总结;控制条含「过程 N 步」和处理时长(用时 / 首 token / 速率) |
| ➖ 分隔线 | 思考行与正文之间的实线,一眼区分「过程」与「结论」 |
| 📍 左缘定位条(Adaptive Navigation Rail) | 旧版 DSH(0.1.0-rc.7 ~ 0.1.1-rc.x,无官方右缘 TurnNavigator)可用(navigator 开);DSH 0.1.2+ 暂停(与官方新功能冲突 + react-dom 问题)。历史能力:固定高度 Canvas minimap,任意轮次全局映射;鱼眼悬停、拖动预览、点击跳转、当前轮次高亮;配色可自适应,或用调色盘自定义(HEX/RGB 输入 + 透明度) |
| ⬆ 智能加载更早历史 | 页面空闲时逐步加载更早记录;检测到页面响应开始下降时自动暂停,保持长会话流畅,需要时仍可手动继续加载 |
| 📤 一键报告问题 | 自动生成诊断报告(版本/浏览器/性能数据/异常检测/现象标签),一键打开 GitHub issue 预填页,标题正文全带,零手写提交 |
折叠 / 分隔线 / 智能加载更早历史可各自独立开关(「设置 → 插件配置」,改动即时生效);左缘定位条在无官方右缘 TurnNavigator 的旧版 DSH 上可用(navigator 开),在 DSH 0.1.2+ 暂停(默认关)。另有一键「📤 生成诊断报告并提交」入口。
📸 效果
自动折叠:已完成轮次收成一条控制条,只留最终结论(上);点击「展开」恢复思考、工具调用与中间文字(下)。
左缘定位条(Canvas minimap):在无官方右缘 TurnNavigator 的旧版 DSH(0.1.0-rc.7 ~ 0.1.1-rc.x)可用(navigator 开);DSH 0.1.2+ 暂停(与官方新功能冲突 + react-dom)。下图为历史版本运行效果。
设置面板:四个功能独立开关 + 现象标签 + 一键「生成诊断报告并提交」,改动即时生效。
🚀 安装
前置:已安装 DSH(Web 版),pnpm 在 PATH 上。
# 方式 1(推荐):npm 包,预构建产物免 allowBuilds 授权
dsh plugin --profile web add @bananasoldier01/dsh-tidychat
# 方式 2:从 GitHub 安装(推荐钉版本,可复现)
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.8
安装后重启 dsh web + 硬刷新(Cmd+Shift+R)。
更新
插件以 profile 依赖的形式安装,更新就是让 pnpm 重新拉取该依赖的新版本(只拉这个插件,不会重下整个 DSH):
# 方式 A:npm 方式安装,直接更新
dsh plugin --profile web update @bananasoldier01/dsh-tidychat
# 方式 B:装的是某个 tag,改钉到新 tag 重新 add
dsh plugin --profile web add git+https://github.com/BananaSoldier01/dsh-tidychat.git#v0.2.8
更新后同样重启 dsh web + 硬刷新。
⚠️ 让设置开关可写(仅 DSH ≤ 0.1.0-rc.6 需要):rc.6 及更早版本的「设置 > 插件配置」白名单硬编码在宿主编译产物里,默认不含第三方插件的命名空间,导致开关变灰不可点。运行下面命令把
tidychat加进白名单(幂等;DSH 升级后重跑即可):curl -sL https://raw.githubusercontent.com/BananaSoldier01/dsh-tidychat/main/scripts/whitelist-patch.sh | bashDSH ≥ 0.1.0-rc.7 不需要这条:rc.7 起白名单机制移除,命名空间由插件动态注册,开关自动可点。
💡 版本兼容性:
0.2.0起适配 DSH ≥ 0.1.0-rc.7(含 0.1.1-rc.x,已实测 rc.1/rc.2 契约点无变化)。rc.7 把settings.plugin.item槽从 list 改为 keyed,注册字段由id改为key,旧版写法会报 "Failed to load plugins";DSH ≤ 0.1.0-rc.6 请使用0.1.0。
🗺️ 路线图
0.2.0(已发布)—— Adaptive Conversation Navigation Rail
左缘定位条从「固定列表」升级为 Canvas Minimap 全局导航:
- 固定高度:
min(70vh, 660px),任意 turn 数量(20/70/200+)都映射在同一可视区内 - Turn 全局均匀映射:
y = index/(total-1) × railHeight,不随 turn 数增长 DOM(仅 1 个 canvas + 1 个提示卡) - 鱼眼 hover:hover 附近 ±4 turn 间距放大、远处自动压缩,命中测试与绘制共用同一布局函数
- Drag scrubbing:拖动时仅预览目标 turn,松手才跳转
- 当前 turn 高亮:以「阅读区顶部」为准(含 header 偏移),随滚动实时更新
- 精确跳转:用户消息滚到阅读区顶部(而非 viewport 中心或埋进 header)
- 兼容性:fold / divider / autoload / diagnostics 均不受影响(rail 数据来自会话快照,与折叠的 CSS 隐藏无关)
0.2.1(已发布)—— 定位条配色完善(PR #5 合入)
- 背景真实冒泡:默认色 auto 的背景判定从会话滚动容器沿父级向上冒泡找第一个非透明背景(alpha=0 跳过),不再只查固定候选
- auto 尊重主题:默认色 auto 优先用宿主淡色文字色,与实际背景 WCAG 对比 ≥3:1 才使用,不足自动切纠偏灰;强调色 auto(默认)= 跟随主题品牌色(
--dsw-alias-state-business-primary) - 配色折叠为高级项:设置卡片内「配色(高级)」可折叠收起,明度档在 auto 时禁用
- 配置枚举化:host schema 四个配色字段改为
z.union枚举收敛取值;插件卸载时清除写入:root的临时 CSS 变量
0.2.2(已发布)—— 提示卡可读性(issue #6)
- 头部提级:提示卡
#序号 · 时间由最弱一级(label-tertiary)提升到label-secondary,亮色主题下不再发虚;正文跟随label-primary(与对话正文同色),明暗随主题自动切换 - 保守对比度兜底:仅当提示卡浮层背景「不透明」(
bg-layer-3alpha ≥ 0.85)且 label token 与背景对比 <3:1 时才写纠偏色(亮底深字 / 暗底亮字);玻璃/半透明浮层(官方深色等)一律跳过、跟随主题 token——避免误判深色玻璃 - 长摘要折行:
overflow-wrap: anywhere,含长代码/URL 的摘要在卡片内折行不溢出 - 解析增强:颜色解析支持
rgba逗号/空格+斜杠语法、#rgb/#rgba/#rrggbb/#rrggbbaa、transparent
0.2.3(已发布)—— npm 发布准备(awesome-dsh-plugin 投稿推荐项)
- peerDependencies 化:
@deepseek-ai/dsh-settings由dependencies移入peerDependencies(官方运行时包由宿主 profile 提供,避免重复运行时) - npm 发布:
prepublishOnly自动构建,@bananasoldier01/dsh-tidychat@0.2.3已公开发布(预构建产物,安装免allowBuilds授权);推荐安装方式改为dsh plugin add @bananasoldier01/dsh-tidychat - 投稿:awesome-dsh-plugin 收录 PR 已提交(#3067,session 分类 + 截图条目),待维护者合并
0.2.4(已发布)—— npm 包元数据刷新
功能零改动,仅 npm 包内容更新:README.en.md 纳入包内、repository.url 规范化(npm pkg fix)、双语 README 随包发布。awesome-dsh-plugin 收录 PR #3067 已合并(session 分类 + 截图条目)。
0.2.5(已发布)—— Hardening(工程收口)
- 折叠状态会话隔离(P0):
foldState改为Map<sessionId, Map<turn, boolean>>,修复跨会话同轮次串扰(会话 A 展开第 5 轮 → 会话 B 第 5 轮不再错误继承展开态) - 定位条 pointermove 节流:高频移动只记录最新坐标,rAF 帧内统一处理一次(不再每事件一次 React 渲染);离开/卸载时清理挂起帧
- 测量前不渲染:宿主布局未就绪(
pos === null)时不再渲染到写死的 280px 猜测位,测量成功后再出现 - 快照/DOM 轮次一致性诊断:报告新增「会话快照轮次 vs DOM 轮次」对照,不一致时报 ⚠️(加载中或 DOM 更新滞后)
- 文档钉版示例随版本更新;package description 补齐「智能加载更早历史」
0.2.6(已发布)—— 折叠 & 分隔线重做;左缘定位条暂缓
- 折叠重做(Codex 式):只折叠思考(Think)+ 工具调用,保留用户消息和最终正式回复;控制条为「用时 X + 箭头 + 分隔线」,整条可点击,折叠时箭头朝右、展开时朝下;过程与正式回复之间再画一条分隔线。
- 分隔线重做:过程/回复分界改用行内分隔线(思考芯片
::after绘制,React 重渲染不清除),并加深到rgba(96,96,96,0.85)(对比度更清晰)。 - ⚠️ 左缘定位条暂缓显示:DSH 0.1.2-rc.1 起官方原生新增右侧 TurnNavigator 与原生折叠,与插件左缘定位条功能重叠;同时插件定位条依赖
react-dom(当前插件 / 宿主均未提供)。因此从本版起左缘定位条不再显示。是否保留、或改造成与官方新的导航/折叠协同,待后续版本再定(源码与历史截图保留)。 - 折叠含重试提示(issue #8):DSH 把被重试的模型请求渲染为
model-retry行(“已重试模型请求”),此前折叠不会收起它。本版起model-retry作为过程噪音随思考/工具调用一起折叠。
0.2.7(已发布)—— settings API 向后兼容
- settings 注册自动适配:宿主注册配置时按 DSH 版本自动选用 API——0.1.2+ 用
installSection,0.1.0-rc.7 / 0.1.1-rc.x 用register——让同一份插件在 DSH 0.1.0-rc.7 ~ 0.1.2-rc.1 都能正常加载并注册设置开关(此前 0.2.6 沿用 0.1.2 的installSection,在旧版 DSH 上会报 “Failed to load plugins”)。 - 左缘定位条:仍与官方新功能冲突、且依赖
react-dom,继续暂缓显示(本次兼容不恢复它)。
0.2.8(已发布,本次)—— 旧版 DSH(无右缘 TurnNavigator)整套可用
- 折叠/分隔线兼容回退:折叠分组在
data-chat-turn缺失(旧版 DSH 0.1.0-rc.7 ~ 0.1.1-rc.x)时,回退到从data-chat-anchor-key解析 turn 号(v0.2.5 做法),让折叠/分隔线在旧版 DSH 也生效(0.1.2+ 仍走data-chat-turn,行为不变)。 - 左缘定位条确认可用:旧版 DSH 没有官方右缘 TurnNavigator,旧槽
conversation.session.header.utilities存在且被渲染、所需 DOM 锚点均在(0.1.1-rc.2 源码确认)——旧版 DSH(0.1.0-rc.7 ~ 0.1.1-rc.x)定位条可正常使用(navigator 开);DSH 0.1.2+ 因有官方右缘 TurnNavigator 仍暂停。
下一版本(候选)
- Turn Index 层 —— conversation DOM → Turn Index(id/element/position/summary),fold/navigator/autoload 共享索引,替代每次全量扫描;基于索引的增量维护(等真实 500+/1000+ 行数据再定方案)。
- 运行中回合的已完成步骤折叠(issue #2)—— 单轮内 LLM 执行大量动作时,运行中实时折叠已完成步骤。需求强度待验证。
本地开发(link 模式)
git clone https://github.com/BananaSoldier01/dsh-tidychat.git
cd dsh-tidychat
pnpm install
dsh plugin --profile web add link:$PWD
改源码后 pnpm run build,重启 dsh web / 硬刷新即生效。
⚙️ 设置
在「设置 → 插件配置」展开 dsh-tidychat 卡片:
- 自动折叠已完成轮次:隐藏思考、工具调用与中间文字,只保留最终结论,控制条含处理时长。
- 思考↔文字分隔线:在思考行与正文文字之间插入实线,区分过程与结论。
- 左缘定位条:聊天区左缘的细窄条状导航,悬停显示摘要、点击跳转到对应消息。
- 智能加载更早历史:页面空闲时逐步加载更早记录;检测到页面响应下降时自动暂停,保持长会话流畅,需要时仍可手动继续。
- 配色(高级,卡片内可折叠):默认色与强调色各自「自动 / 自定义」二选一。自动:默认色优先用宿主淡色文字色,与聊天区背景对比不足时自动切纠偏灰(深背景淡灰、浅背景深灰);强调色跟随主题品牌色(
--dsw-alias-state-business-primary)。自定义:调色盘无极调色(原生取色器),或直接输入 HEX /rgb()/rgba()精确定位,另有透明度滑杆;强调色控制「当前轮次 + 悬停回合」的高亮色。
🔧 原理
纯浏览器半(exports "./client")实现,host 半只注册 settings 命名空间,不修改任何 DSH 源码:
- 折叠 / 分隔 / 导航全部通过 DOM 结构锚点(
data-chat-anchor-key、data-variant="think"等契约级属性)定位,不依赖编译期 hash 类名; - 通过
MutationObserver观察会话 DOM,配合定时兜底扫描,处理流式渲染与历史加载带来的 DOM 变化; - 展开 / 收起状态为会话内内存态,刷新后恢复默认(全部折叠)。
🧑💻 开发
pnpm install
pnpm run build # tsdown 构建 lib/
pnpm run typecheck
📄 License
MIT
