dsh-auto-paste:输入框大段粘贴自动存为附件文件的 DeepSeek Harness 插件

前言

在 DSH(DeepSeek Harness)的 web profile 里,往输入框粘贴大段文本时,默认行为是原始文本直接进入消息体。长日志、长报错、长文档贴进去,消息本身很重,模型也必须在消息里处理原文。

dsh-auto-paste 解决的就是这个问题:粘贴超过阈值的文本时,插件自动把内容保存为当前会话工作区里的附件文件,输入框里只插入一个路径引用,模型按路径读文件即可。它由 create-dsh-plugin 模板生成后扩展而来,本文介绍它的功能、安装方式和验证步骤。

这是什么

dsh-auto-paste 是一个 DeepSeek Harness 插件,定位是 web 客户端的粘贴钩子(dsh.client.platform: web)。GitHub 仓库在 sakuraqqq 名下(https://github.com/sakuraqqq/dsh-auto-paste),package.json 的 author 与 MIT 版权人为 misakamaster,许可为 MIT。npm 上已发布 dsh-auto-paste@0.1.2(dist-tag: latest),源仓库 tag 为 v0.1.0,两者对应关系资料未说明。

它做两件事:客户端拦截大段粘贴并落盘;同时注册一个 save_paste 工具作为兜底。插件不发起任何网络请求,只写工作区 pastes/ 下的本地文件。

核心功能

Web 客户端粘贴钩子(主路径)

粘贴超过阈值(默认 500 字符)的文本时,流程如下:

  1. 客户端拦截粘贴事件,通过现有 connection RPC(/api → Typert gateway)调用宿主 pasteStore/savePaste
  2. 宿主把文本写入当前会话工作区的 pastes/<时间戳>.txt
  3. 输入框里插入文件路径引用,例如 [已保存大段粘贴为附件: pastes/20260815-103000.txt (1234 字符)]
  4. 消息发送后,模型通过该路径读取文件内容。

保存失败时回退为普通粘贴(原始文本直接进输入框),不丢数据。

大小上限

超过 1 MiB 的文本会被服务端拒绝(大小上限,防资源耗尽):报错并回退为普通粘贴,不落盘。

save_paste 工具(纪律兜底)

宿主同时注册 save_paste 工具。当用户贴大段文字而输入框钩子未拦截时,模型可主动调用该工具,把文本持久化为 pastes/<时间戳>.txt 并在回复中引用路径。README 建议在项目 AGENTS.md 加一行纪律:

## dsh-auto-paste 纪律
用户粘贴大段文字(约 500 字符以上)时:若输入框钩子未拦截,主动调用 save_paste 工具
把文本存入 pastes/<时间戳>.txt,并在回复中引用该工作区相对路径,不要复述原文。

安装与启用

方式一:从 npm 安装(推荐)

npm i dsh-auto-paste                          # 最新版(dist-tag: latest);--save-exact 可锁版
npm i dsh-auto-paste@0.1.2                    # 或指定版本
# 在插件父目录执行,以包名注册到目标 profile:
dsh plugin --profile web add dsh-auto-paste
dsh --profile web                             # 重启 web profile

重启后观察 [dsh-auto-paste] host ready ...;刷新浏览器页面,控制台可见 [dsh-auto-paste] client paste listener ready (minChars=500)

npm 发布后国内镜像(npmmirror)同步有几秒到几分钟延迟,安装时以官方 registry registry.npmjs.org 为准。

方式二:本地目录安装(开发/调试)

# 在插件父目录(本仓库根)执行;相对路径锚定调用目录,不要在插件目录内执行
dsh plugin --profile web add ./dsh-auto-paste
dsh --profile web

改动插件后,先执行 pnpm install && pnpm run build(tsc 编译到 dist/),再重启 dsh --profile web 并刷新页面。

阈值调整

minChars 阈值默认 500 字符,可在 cordis.patch.yml 的 row config 中调整。

验证

无 API key 验证

没有 DEEPSEEK_API_KEY 时,可以验证加载与事件链路:

dsh --profile web --dump-config | grep dsh-auto-paste   # 配置层含本行
dsh plugin --profile headless add ./dsh-auto-paste
dsh --profile headless "run a probe"                    # host 半身加载

无 key 时 --verify 只能证明加载、列出、事件正常,模型调用会报 MISSING_CREDENTIAL。端到端验证(模型真正调用 save_paste 工具)需要设置 DEEPSEEK_API_KEY

适用场景与注意事项

适合在 DSH web profile 下频繁粘贴长日志、长文档的用户:消息里只留路径引用,原文落盘为工作区文件,模型按需读取。配合 save_paste 工具和 AGENTS.md 纪律行,钩子未拦截时模型也能兜底。

安装和使用前注意几点:

  1. Node 版本:DSH 要求 ^22.19.0 || >=24.0.0。旧版本(如 v22.17)只告警 EBADENGINE 不阻断,但建议升级。
  2. 依赖线:插件锁定 @deepseek-ai/dsh-tools 0.1.0-rc.6(exact,next tag 线,npm latest 是过期的 0.0.1-rc.1);@deepseek-ai/cordis ^4.0.1 为 peerDependency,由宿主提供;zod ^4.4.3。二次开发时不要手动覆盖 dsh-tools 的版本。
  3. 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。本插件为 MIT 许可,可自由使用、修改、再分发(含商用),需保留版权声明与许可文本;manifest 声明不发起任何网络请求,只写工作区 pastes/ 下的本地文件。
  4. 二次开发提示:包为纯 ESM("type": "module"),dsh.bundle.patch → ./cordis.patch.yml 是 dsh 加载插件的硬性要求,缺失只会被当作普通依赖安装。

结尾

dsh-auto-paste 用一个客户端钩子加一个工具,把「大段粘贴直接进消息体」改成「落盘为附件、消息里留路径引用」,实现不复杂,边界也清晰:失败回退、1 MiB 上限、不发网络请求。

项目主页:https://github.com/sakuraqqq/dsh-auto-paste ;社区插件目录页:https://www.skillhub.cn/plugins/sakuraqqq/dsh-auto-paste 。目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜