前言¶
在 DeepSeek Harness(DSH)里写提示词时,日志、diff、JSON 导出或整段文档往往是一次性从剪贴板贴进 Composer 的。文本一长,输入框会被占满,草稿里混着多段粘贴也不易单独收回或删除。出站侧已有 dsh-spill 等能力处理工具输出离开模型;入站方向——用户贴进输入框的大块内容——需要另一套规则。下面介绍社区插件 dsh-paste-spill(维护者 winditer,分类:客户端),它按粘贴体积自动走「折叠 chip」或「真附件 + 交付卡」两条路径,且不改动 DSH 会话格式与模型侧协议。
这是什么¶
dsh-paste-spill 面向 DSH Composer 的入站大粘贴:单次粘贴的 UTF-8 字节数决定行为,量的是本次粘贴的文本,不是整份草稿。
| 体积(UTF-8 字节) | 行为 |
|---|---|
| 小于 4,000 | 不处理,保持原样 |
| 4,000 – 50,000 | Fold:该次粘贴从编辑器移出,变成一枚 chip |
| ≥ 50,000 | Spill:上传为真实附件,消息带 file 块,回合尾部出现可点击交付卡 |
两层彼此独立:Fold 改变 Composer 外观;Spill 改变模型实际收到的是内联文本还是只读宿主路径上的附件。
核心功能¶
Fold 层(4 KB – 50 KB)¶
一次粘贴 4 KB–50 KB 时,仅该次粘贴的连续片段离开编辑器,由插件持有一枚 chip;你已键入的文字、以及更早粘贴产生的 chip 不会被覆盖。
每枚 chip 提供:
- 预览行:粘贴内容前 20 个字符(空白压平);
在文本框中显示 ›/Show in text box ›:将该 chip 的完整原文写回对应位置并释放;×:只删除这一枚 chip 并释放其文本(删除这段文本/Delete this text)。
chip 是真实编辑器节点,不是装饰;它注册 inputTriggers 源,serialize(ref) 返回完整原文。发送时提交的是粘贴本身,不是占位符,也不是附件。一次粘贴对应一枚 chip;再贴第二段 6 KB 会追加 chip,不会替换第一枚。
chip 带浮动在输入区上方,通过 CSS 变量 --dshps-chip-band 把高度交给 Composer 卡片作 padding-top,避免挡住首行输入;多枚 chip 换行时会重排。
Spill 层(≥ 50 KB)¶
单次粘贴 ≥ 50,000 字节时,文本被合成 File,走 Composer 既有附件上传路径;文件名按内容嗅探为 pasted-text-<n>.json、.md、.py、.js、.html、.csv、.txt 等。消息里是合法的 file 块,模型通过 stock 附件逻辑拿到只读宿主路径。
宿主侧监听 agent/inbox/inserted 中的粘贴附件,从附件存储解析宿主路径,在 agent/pre-step 上发布 deliverables/presented,由内置交付物 UI 在回合尾部渲染可点击卡片;点击后在右侧边栏打开文件。原文在 Composer 内就地从该次粘贴的 span 清空为 "",不整篇清空草稿,其它 chip、已键入文字、光标与撤销历史保留。
实现要点(与兼容性)¶
- 单包两行:
lib/client.js(浏览器,dsh.client.platform: "web")负责草稿监听与 paste;lib/index.js(宿主)负责 inbox 与 pre-step。 - 不 patch、不替换 stock 包;只用公开扩展点:
inputTriggers、conversation.input.overlay、既有附件上传、agent/inbox/inserted/agent/pre-step。 package.json声明engines.dsh: ">=0.1.7-rc.2 <0.3.0-0";README 写明在 DSH 0.1.7-rc.2 与 0.2.0-rc.2(web 与 desktop)上验证。Web UI 能力(fold、chip 带、附件上传)在浏览器半;宿主半可在 bundle loader 所在环境运行。- npm 包版本 0.2.0,许可证 MIT。
安装与启用¶
插件以 web profile 安装;CLI 对 --profile desktop 会拒绝,desktop 由应用自身管理。
从 DSH CLI 安装(npm 发布名 dsh-paste-spill):
dsh plugin --profile web add dsh-paste-spill
若要从 GitHub 源安装同一包:
dsh plugin --profile web add github:winditer/dsh-paste-spill
在 DSH Desktop 上,可在应用内插件管理器(Settings → Plugins)或插件市场安装。
安装后浏览器半是页面级模块:刷新页面(或重新启动应用)后才会加载。
典型用法¶
用法即「按体积自动触发」,无需额外配置项(资料未列出独立配置文件或环境变量)。
- 在 Composer 中一次性粘贴约 4 KB–50 KB 的日志片段或 JSON:该段变为输入框上方的一枚 chip;需要编辑时点「在文本框中显示 ›」,不需要时点
×仅删该段。 - 一次性粘贴 ≥ 50 KB 的大 dump:Composer 出现类似
pasted-text-173.json的附件 chip,发送后模型读附件路径;回合尾部出现交付卡,点开在右侧边栏预览。 - 小于 4 KB 的普通粘贴:与未装插件时一致,不会变成 chip 或附件。
开发与排错时,README 提到应用内诊断写入 localStorage["dsh.paste-spill.diag"](按 session 分键);本地 checkout 可用仓库内 scripts/install-into-profile.sh 链入 desktop profile(面向插件作者,非终端用户必做步骤)。
适用场景与注意¶
适合:经常把中等体积片段(几 KB 到几十 KB)贴进 Composer、又不想输入框被墙文本占满;或单次粘贴超过 50 KB、希望走附件与交付卡、减轻上下文内联体积的 DSH 用户。
注意:
- 插件在当前 DSH 进程权限下运行;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
- 分类为客户端插件,Fold/Spill 的交互与上传发生在 Web UI;与出站
dsh-spill互补,不替代附件与交付物的 stock 行为。 - 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,目录为独立社区站点。
结尾¶
dsh-paste-spill 把 Composer 入站粘贴按 4 KB / 50 KB 两档拆开:中等粘贴收成可单独展开或删除的 chip,超大粘贴变成真附件并在回合尾部给出交付卡,发送时仍走公开扩展点与既有附件路径。需要安装命令、截图与架构说明时,以仓库 README 为准。