dsh-auto-paste

uitested: passnpmMIT

Auto-saves large pasted text as an attachment file in the DeepSeek Harness web input box; with dsh-better-sidebar installed, the paste pill opens the file in the sidebar editor and saves it back.

下载量 / Downloads
2,756
依赖体积 / node_modules
13.67 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-auto-paste

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-auto-paste

![npm version](https://www.npmjs.com/package/dsh-auto-paste)

![license](LICENSE)

![DSH](https://github.com/sakuraqqq/dsh-auto-paste)

![GitHub stars](https://github.com/sakuraqqq/dsh-auto-paste/stargazers)

往输入框里粘 8000 字日志,最后只剩一张卡片。

DeepSeek Harness(DSH)插件:粘贴超过 500 字(默认阈值,可配置)时,原文自动保存到当前工作区的 pastes/<时间戳>.txt,输入框里只插入一张卡片;发送后消息里也是同一张卡片,模型收到的是一行文件引用,按需再读。聊天框和上下文都不会被长文占满。

安装

npm i dsh-auto-paste
dsh plugin --profile web add dsh-auto-paste

装完刷新页面即可,不需要改配置。桌面版(DeepSeek Harness 桌面应用)需在它自己的 profile 上单独装一次,见下文 [安装与激活](#install--安装与激活)。

适用

日志与堆栈、代码与 diff、论文、会议记录、聊天导出——凡是「很长、但不想让它占满聊天框」的文本。

兼容性

DSH 版本 · 状态

0.2.1-alpha.5 · ✅ 实测可用

0.2.1-rc.1 · ✅ 实测可用

0.2.1-rc.2 · ✅ 实测可用

0.2.1-rc.3 · ✅ 实测可用

0.2.1-rc.4 · ✅ 同线判断可用(官方仅修 ACP 模式下诊断输出混入 stdout;未单独实测)

0.2.1-rc.5 · ✅ 实测可用

0.2.2-rc.1 · ✅ 实测可用(桌面版)

如果它帮你省了时间

点一个 Star ⭐ —— 这是对作者最直接的鼓励,也能让更多人看到它。遇到问题欢迎开 issue。

Release / 发布状态

  • npm:npm 页面 —— 官方源 registry.npmjs.org。发版策略:新版本先发到 dist-tag: next 观察,再人工转为 latest。当前 0.3.1(latest 与 next 一致)。
  • 源仓库:https://github.com/sakuraqqq/dsh-auto-paste(tag 与版本号一一对应)。
  • 许可:MIT(见下)。
  • 同步提示:npm 发布后国内镜像(npmmirror)同步有几秒到几分钟延迟,以官方 registry 为准。

License / 许可

MIT License — Copyright (c) 2026 misakamaster。

本插件以 MIT 许可开源:可自由使用、修改、再分发(含商用),需保留版权声明与许可文本。详见 [LICENSE](LICENSE)。

反馈(bug/建议)欢迎提交:QQ 群测试反馈或直接联系作者。

What it does / 功能

1. Web 客户端粘贴钩子(主路径) — dsh.client.platform: web。在输入框粘贴超过阈值(默认 500 字符)的文本时:

  • 客户端拦截粘贴事件,通过现有 connection RPC(/api → Typert gateway)调用宿主 pasteStore/savePaste;
  • 宿主把文本写入当前会话工作区的 pastes/<时间戳>.txt;
  • 输入框里插入 dsh 原生原子引用卡片(与 dsh 自己的附件同一套节点):
  • 只显示文件名 + 字符数(📄 20260815-103000.txt · 1234 字符),不显示路径;
  • 一键删除:Backspace / Delete 一次把整张删掉——它是 Lexical 装饰节点(contenteditable="false"),不存在被逐字删的中间态;
  • 点击即在右侧栏打开全文(官方侧栏对 .txt 走纯文本预览,只读;要能编辑需装 dsh-better-sidebar,见下);
  • 发送后消息里是同一张可点卡片。模型侧不塞正文:卡片序列化出来就是 @"pastes/20260815-103000.txt" 这个引用,dsh-file-reference 明确该语法不增加请求 token,模型据此自己去读那个文件。
  • 降级(自动,无提示):拿不到上面那套输入框接口时——老 dsh 线、输入框正忙(提交中)、或光标在你打字期间被改动——退回文本引用 @"pastes/20260815-103000.txt" (1234 字符):发送后同样渲染成可点卡片,只是输入框里是纯文本、要手工删。两条路径给模型的文本完全一致。
  • 其中 N 是 UTF-16 code units(即 JS 的字符串长度:emoji/代理对算 2,CJK 算 1),与 UTF-8 字节数不是一回事——这个口径是冻结的,已发消息里的引用数字不会被改写。卡片上的数字走卡片自己的显示字段,不进引用本身(引用必须是裸的 @"路径",否则点击时会把数字当成路径的一部分而打不开)。
  • 保存失败时会尝试把原始文本插回输入框,并如实说明是否插回成功:插回去了就说已按原样粘贴;没插回去会明说「没能自动插回、内容仍在剪贴板,请手动 Ctrl+V 重试」,不做未经验证的承诺。
  • 超过 1 MiB 的文本会被服务端拒绝(大小上限,防资源耗尽):报错并回退为普通粘贴,不落盘。

2. save_paste 工具(纪律兜底) — 宿主同时注册 save_paste 工具,模型在用户贴大段文字时可主动调用,把文本持久化为 pastes/<时间戳>.txt 并在回复中引用路径。工具输出只含 path / bytes / chars(不含本机绝对路径,RPC 结果同样收窄:绝对路径含用户名与目录结构,仅宿主内部使用)。建议在项目 AGENTS.md 加一行纪律:

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

可选集成:dsh-better-sidebar(在侧栏编辑粘贴文件)

本插件不调用 better-sidebar 的 API,只探测它在不在(ctx.inject(['betterSidebar']),仅用于下面那行提示与设置页状态)。点粘贴卡片的动作由 dsh 内核路由:内核把卡片地址交给右侧栏,装了 better-sidebar 时它认领该地址、用它的编辑器打开 pastes/*.txt(可编辑);没装则落到 dsh 自带的只读纯文本预览。

因此:

  • 没装时:第一次粘贴出卡片后会就地说明一次(一行提示,可关闭,关掉后不再出现);万一错过了,设置页 General 分区的「侧栏集成」一行会一直写着,装上后自动消失。
  • ⚠️ 版本要求:dsh-better-sidebar ≥ 0.28.0。更早的版本里,侧栏编辑器保存时会用工作区相对路径,而它的写接口只接受绝对路径 ⇒ 保存报 400(is not an absolute path,host 侧校验在 lib/index.js 的 if (!isAbsolute(path)) throw …)。那是上游 omdsh-dev/DSH-better-sidebar#646(本插件无关,已于 2026-10-04 修复)。
  • 0.28.0 实测可正常保存(2026-10-17,桌面版)。
  • 若暂时无法升级,两条替代路径:从 better-sidebar 自己的文件树 / 路径输入框打开同一文件再保存(那条路会传绝对路径);或继续用 pastes/ 下的文件本身(内容已在磁盘上,编辑只是便利)。
与 dsh 自带文件面板的区别:自带面板能浏览工作区文件(包括 pastes/),但只读、改不了;装了 better-sidebar 才有编辑入口。两者的差别只在"能不能改",不在"能不能看"。

Install / 安装与激活

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

npm i dsh-auto-paste                          # 最新版(dist-tag: latest);--save-exact 可锁版
npm i dsh-auto-paste@0.3.1                    # 或指定版本(换成你要的版本号)
# 在插件父目录执行,以包名注册到目标 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 attached — threshold 500 chars until the host's config arrives
#                              随后: [dsh-auto-paste] config from host: minChars=500 (deployment), maxBytes=1048576

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

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

改动插件后:pnpm install && pnpm run build(tsc → dist/),然后重启 dsh --profile web 并刷新页面。

官方桌面版(DeepSeek Harness 桌面应用):同样支持,但要在桌面版自己的 profile 上单独装一次(它不复用 web profile 的装配)——桌面版自带 CLI,在应用安装目录下执行:

set "DSH_HOME=%USERPROFILE%\.dsh"          # 换成桌面版实际使用的 home(隔离启动器会改它)
resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add dsh-auto-paste

桌面版是独立 dsh 线(如 0.2.0-rc.2)。若它的运行时版本超出本插件声明的 peer 范围,dsh 会拒绝加载该 bundle(表现为插件完全无输出、设置里也没有本插件的阈值项),需要精确版本豁免——用 dsh plugin --profile desktop allow-version dsh-auto-paste@<版本> --dsh-version <运行时版本> --accept-risk,它会在 profile 目录写一个 compatibility.json;--dsh-version 必须填它报错时给出的那个值。豁免是精确配对的,插件升级或 dsh 升级都不会继承。

minChars 有两个入口:Settings → General 的「大段粘贴阈值」(保存即生效、不用重启;旁边的「恢复默认」清掉这次覆盖),以及 cordis.patch.yml 的 row config(部署默认值,改完只需重启 dsh、不用重新构建)。用户设置优先,没设置时用部署默认值。

覆盖值存在哪里随 dsh 线而变,保存后都立即生效:dsh 0.1.5 线存进 dsh 自己的设置文档;dsh 0.1.7 起 dsh 改成"从插件自己的 Config 投影",覆盖值写回 profile patch(同一个 cordis.patch.yml)—— 所以本插件把 minChars 声明为 schemastery 的 volatile 字段:没有它,dsh 不会为该插件生成表单,写入也会被

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::17,最后更新 2026-11-06

Links

GitHub · Homepage · npm

Same category