dsh-collapse-paste
Manifest valid★ 1DSH plugin: collapses multi-line pastes in the input box and long sent messages into compact inline tags, while keeping the sent content verbatim.
dsh-collapse-paste
DSH(DeepSeek Harness) 的纯客户端 UI 插件:把输入框里的多行粘贴和已发送的长消息都折叠成紧凑的内联标签,避免聊天记录被长文本刷屏;发送给模型的始终是完整原文。
功能
输入框
- 粘贴达到阈值的文本时(默认 ≥ 3 行),整段内容原地折叠成一个内联标签:
X 字符 / Y 行; - 标签与 DSH 原生
@文件reference chip 同款(22px、同一套 token、省略号),Backspace 原子删除; - 点击标签展开原文,再点收起;
- 发送时还原全文,模型收到的内容与普通粘贴完全一致。
消息区(发送后)
- 已发送的用户消息如果达到阈值(默认 600 字符或 12 行),折叠成右侧蓝色标签:
X 字符 / Y 行 · 点击展开; - 点击就地展开,消息末尾还有第二个「↑ 点击收起」,不用滚回顶部;
- 折叠只隐藏正文,时间与复制/编辑/删除操作条仍然可用;只影响显示,不改存储内容;
- 助手回复不受影响。
兼容性
| 环境 | 状态 |
|---|---|
| DSH Desktop 0.2.1-rc.2 | 已在 Windows 桌面版手动验证 |
| DSH Web(同一版本) | 未单独验证,预期一致 |
| DSH ≤ 0.2.0 / ≥ 0.3 | 未验证,可能失效 |
插件对 0.2.1 的 Lexical 内部接口(__lexicalEditor、_nodes、文本叶子样式)有依赖;任何不匹配都会 fail-open(退回原生粘贴行为),不会阻塞启动。
安装
最简单(npm,一条命令,不需要构建):
dsh plugin --profile desktop add dsh-collapse-paste
其他方式:
从 GitHub(源码,含已构建的 lib/):
dsh plugin --profile desktop add github:Mrsong123456/dsh-collapse-paste
从本地目录:
dsh plugin --profile desktop add file:C:\path\to\dsh-collapse-paste
安装后重启 DSH(桌面版重启应用;Web 端重启 dsh web),或在 GUI 内刷新页面。卸载:
dsh plugin --profile desktop remove dsh-collapse-paste
更新
npm 安装的用户:
dsh plugin --profile desktop update dsh-collapse-paste --latest
GitHub 安装的用户:
dsh plugin --profile desktop remove dsh-collapse-paste
dsh plugin --profile desktop add github:Mrsong123456/dsh-collapse-paste
更新后重启 DSH(桌面版重启应用;Web 端重启 dsh web)。检查当前版本:
dsh plugin --profile desktop list dsh-collapse-paste
配置
GUI 内:设置 → 折叠多行粘贴(Settings 侧栏里,靠近底部)。
| 字段 | 默认 | 说明 |
|---|---|---|
| 启用输入框折叠 | 开 | 关掉后输入框恢复原生粘贴 |
| 输入框:最小行数 | 3 | 粘贴至少这么多行才折叠 |
| 输入框:最小字符数 | 0 | 额外字符下限,0 = 只看行数 |
| 发送后折叠长消息 | 开 | 关掉后消息区不再折叠 |
| 消息折叠:最小字符数 | 600 | 与行数任一达到即折叠 |
| 消息折叠:最小行数 | 12 | 与字符数任一达到即折叠 |
设置保存在当前浏览器的 localStorage(key dsh-collapse-paste.config.v1),保存后立即生效,不需要重启;换浏览器或设备不会同步。
隐私与权限
插件运行在 DSH 页面内,会:
- 监听全局
paste事件,只读取剪贴板纯文本,不写入、不拦截文件粘贴; - 用
MutationObserver观察聊天记录 DOM,只读取已发送消息的文本用于折叠; - 使用
navigator.clipboard.writeText复制折叠内容; - 把阈值写入当前浏览器的
localStorage(不离开本机)。
不发起任何网络请求,不收集、不上传任何数据。
DSH 插件以你的用户权限运行,安装第三方插件前请自行审阅源码。
已知限制
- 依赖 Lexical 内部结构,DSH 升级后可能失效(失效时静默退回原生行为);
- 展开/收起状态只保存在当前页面内存中,刷新后恢复默认折叠;
- 消息区折叠是纯显示层:滚动虚拟化导致的行重建会重新套用折叠;
- 设置保存在浏览器
localStorage,不随 DSH profile 同步,换浏览器/设备不共享。
开发
npm install
npm run build # host: tsc → lib/;client: tsc 类型检查 → esbuild → lib/client.js
npm test # 构建后运行 node --test
源码结构:
src/
├── index.ts # Host 入口
├── core.ts # 纯函数核心(阈值、diff、叶子定位)
├── host/ # Host 半(空 apply + 身份)
└── client/
├── index.ts # 浏览器半出口(apply + inject)
├── apply.ts # 挂载:locale、设置、引擎、消息折叠、设置页
├── settings.ts # 浏览器本地设置存储(localStorage)
├── settings-page.ts # 设置页(settings.section)
├── engine/ # 输入框折叠引擎(chip 节点、文档隐藏、观察)
├── fold/transcript.ts# 发送后消息折叠
├── locales/ # 中英文案
└── styles/ # 注入的 CSS
致谢
- 原始实现:
@comecaramelos/dsh-collapse-multiline-paste,作者 Robe ComeCaramelos,MIT; - 输入框折叠的核心思路来自原项目的
INLINE-CHIP设计:文本保留在普通 TextNode 中、只用 state-leveldisplay:none隐藏,chip 节点不贡献文本,因此提交的草稿与原生粘贴逐字节一致。
License
Comments
Loading…
From the same category
by awesome-dsh-plugin
A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表
★ 19.8k
CC0-1.0
Python
Oct 20, 2026
by 0xsline
DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.
★ 1.2k
CC0-1.0
Python
Oct 16, 2026
by pax-beehive
Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub
★ 386
MIT
TypeScript
Oct 20, 2026
by xiajiajun516
DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.
★ 217
MIT
TypeScript
Oct 18, 2026
dsh plugin --profile web add dsh-config-managerby yjh051108
推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。
★ 165
TypeScript
Oct 16, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby jigjoy-ai
A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.
★ 124
MIT
TypeScript
Oct 13, 2026