Bundle
dsh-paste-collapse
AI 输入框粘贴大段文本自动缩略为 [Paste #N +M lines] 小序号标签(编号不可改);👁 点击预览全文(点外关闭)、✎ 编辑名称、↺ 恢复纯原文;无删除按钮,删输入框标签文本即消失;发送时自动展开原文并加固定方括号纯标识块分隔(编号与输入框一致);slash 命令参数展开不加装饰;代理可用 myds_read_captured 工具按编号读取标签对应文本。
- Source
- huenjie
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 12 hours ago
Readme
# dsh-paste-collapse — DSH 静态插件:大段文本粘贴自动缩略
**中文** | [English](https://github.com/huenjie/dsh-paste-collapse/blob/main/README.en.md)
> 真正的**静态 Cordis 插件包**(双半:Host + 浏览器 Client)。
> 装入 `dsh web` profile 后,重启 `dsh web` 即自动加载,**无需动态重建、无需再次授权**。
>
> 适配 dsh **v0.1.2-rc.1**。
## 功能
### 1. 大段文本粘贴自动缩略
在 AI 输入框中粘贴文本时:
| 粘贴内容 | 行为 |
| --- | --- |
| 真换行(掐掉首尾空白后仍多行) | **立即缩略**,不看字数 |
| 单行且 ≥ 100 字 | 缩略 |
| 其它(短单行、仅首尾伪换行) | 正常粘贴 |
> "伪换行"不算换行:首尾的空白/空行(如复制命令自带的行尾 `\r\n`)先掐掉再判断;
> 孤立的 `\r`(char 13)在网页里不产生可见换行,同样不算。真换行即是一个段落 → 缩略,
> 行数按掐掉首尾空白后的内容统计;存储与 ↺ 恢复仍保留原始字符。
- 缩略后输入框只保留 `[Paste #N +M lines]` 标记(编号为小号连续整数,无冗长时间戳;
命名后为 `[Paste #N | 名字 +M lines]`),插入点前后的已有内容保留。
- 完整文本由浏览器端 `localStorage` 持久保存(最多 32 条、每条最多 50,000 字),Host 侧仍保留最近 8 条进程内存兜底,**不写入 Host 硬盘**。
- 输入框内部图片插入区(粘贴图片出现的位置)渲染标签芯片(只有按钮与编号),从左到右:
- **👁 预览**:点击弹出完整内容卡片(可滚动);**点卡片外任意处**、点卡片右上角 ✕、
或再点同块 👁 即关闭(不随悬停自动弹出/隐藏)
- **✎ 编辑名称**:给这块起名(如 `版本A`),同步更新输入框标签为
`[Paste #N | 版本A +M lines]`,发送时也显示在块标识里;留空提交即清除名字。
**编号不可修改**(编号是唯一标识,由插件分配)
- **↺ 恢复原文**:将对应标签**回写为纯原文**(不带任何块说明),直接回到输入框继续编辑
- 没有删除按钮:**直接在输入框里删掉标签文本,芯片自然消失**
- 页面刷新后,输入框暂存的 `[Paste #N +M lines]` 标签会先从浏览器缓存恢复,
不再因为客户端内存清空而变成无法引用的普通字符串;序号也会持久化,避免刷新后复用旧编号。
- 发送后,消息里的 `[Paste #N +M lines]` 标签会在"发出去"的那一刻**自动展开为完整原文**
(本地缓存优先,Host 取回兜底),模型直接收到原文,无需再调用工具;输入框内仍保持标签样式。
- 展开时原文会被一对**纯标识首尾行**包裹(零语义解说,原文内容零改动),
标识编号与输入框标签编号**完全一致**,只带:编号、可选自定义名、行数,例如:
```
[Paste #12 | 版本A | 342 lines]
<原文本>
[End #12]
[Paste #13 | 版本B | 210 lines]
<原文本>
[End #13]
```
这样连续粘贴的多块(例如要对比的两段代码)在模型侧边界清晰、编号与输入框一致,
又不会被插件加任何解释性文字。
- 三处文本统一为同一套简洁短词:输入框 `[Paste #N +M lines]`(命名后带 `| 名字`)、
芯片 `名称 #N`、发送块 `[Paste #N ...]` / `[End #N]`(**同一编号**,不会出现
输入框是 `#12`、发给 AI 却是 `#1` 之类的不一致);↺ 回写为纯原文,不带块说明。
- 旧版插件的 `[Pasted text #N +M lines]` 标签仍会被识别、展开与编辑(兼容)。
- 带参数的 slash 命令(例如 `/agent-teams [长文本]`)会在命令提交前展开参数,
但**不加块装饰**(纯替换),避免破坏命令解析。
- 仅当展开取不到原文(例如浏览器缓存被清理且 Host 进程也已重启)时,标签才会原样发出,
此时代理可调用工具 `myds_read_captured` 按编号读回完整文本处理。
---
## 目录结构
```
dsh-paste-collapse\
├── package.json # 包声明:dsh.bundle.patch + dsh.client(零依赖)
├── cordis.patch.yml # 挂载声明:把 dsh-paste-collapse 一行插入 profile 插件树
├── lib\
│ ├── index.js # Host 半:/myds/captured 路由 + myds_read_captured 工具
│ └── client.js # 浏览器半:粘贴拦截 + 标签编辑 + 原文持久化 + 发送时自动展开
├── test\
│ └── expander.test.cjs # 冒烟测试
├── README.md # 本文档
└── LICENSE # MIT 许可
```
---
## 使用
安装:
```powershell
dsh plugin --profile web add dsh-paste-collapse
```
移除:
```powershell
dsh plugin --profile web remove dsh-paste-collapse
```
安装/移除后重启 `dsh web` 生效。
---
## 开发
```powershell
# 从本地目录安装(改代码后 remove + add 重新生效;同版本 add 不会更新,需改版本号)
dsh plugin --profile web add 本仓库目录路径
```Install
dsh plugin --profile web add github:huenjie/dsh-paste-collapse
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-paste-collapse from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.