Skip to content

feat: 大段纯文本粘贴自动转为 paste_text.txt 附件 (v0.1.23) - #1

Open
athenafirst wants to merge 2 commits into
lhh010:mainfrom
athenafirst:feat/big-text-paste
Open

feat: 大段纯文本粘贴自动转为 paste_text.txt 附件 (v0.1.23)#1
athenafirst wants to merge 2 commits into
lhh010:mainfrom
athenafirst:feat/big-text-paste

Conversation

@athenafirst

@athenafirst athenafirst commented Sep 8, 2026

Copy link
Copy Markdown

背景

粘贴大段日志/执行输出时,整段文本直接插入输入框,消息气泡里一大坨,模型上下文也浪费在原始粘贴上。本 PR 让超过阈值的纯文本粘贴自动走既有粘贴文件管道,变成可折叠的 paste_text.txt 芯片——与 DeepSeek 网页版的大段粘贴体验对齐。

改动(全部在 lib/client.js,host 侧零改动)

  1. capture 阶段 paste 拦截(onBigTextPaste,document 层,先于 composer 自身监听):
    • text/plain 粘贴,字符数 > 阈值行数 > 20 时触发
    • preventDefault + stopPropagation:文本不再进入草稿(capture 阶段拦截,Lexical 的 PASTE_COMMAND 挂在 editor root 上,事件到不了)
    • 合成 new File([text], 'paste_text.txt', {type:'text/plain'}),走既有 add() 管道
    • composer 识别:Lexical 代(isContentEditable root)与 textarea 代(value === draft,同 onBeforeInput 守卫)都覆盖;只拦落在 composer 上的粘贴,队列编辑器/设置搜索框等不受影响
  2. 命名与去重:复用 uniqueLabel —— paste_text.txtpaste_text(2).txt…(与 paste_image/paste_file 同族;跨发送同名无冲突,批次目录本就带 committedAt-hash8)
  3. 设置面板:附件设置页新增「大段文本粘贴自动转附件」下拉(关闭/1000/2000/5000 字符,默认 1000,localStorage 持久化)
  4. 首次告知弹窗文案补充说明文本自动转附件
  5. 版本 rebase 到上游 main(已独立发布 v0.1.22,声明 0.1.5-alpha.1 支持);本 PR 取 v0.1.23,README changelog 已加条目

全链路复用(无新基建)

芯片插入 → dock 显示(× 可删)→ 发送时复制进 <workspace>/.dsh/tmp/attachments/<session>/<send>/DSH_PASTE_INPUT_V1 协议块 → 气泡自动折叠为 📎 芯片 → 设置面板按会话/工作区清理。全部与粘贴图片同一管道。

验证

  • node --check 通过
  • 实机(本机 dsh-v0.1.3-alpha.2-133,link 安装):
    • 粘贴 7.7 KiB disql 输出 → toast「文本较长(5289 字符),已转为 paste_text.txt 附件」→ dock 芯片 → 发送 → 气泡折叠 → 模型按绝对路径 读取 paste_text.txt 成功
    • 粘贴 3.9 KiB 补跑包输出 → 同上,批次目录独立
    • 短文本粘贴(< 阈值)→ 原样插入,行为不变
    • 图片粘贴/拖拽/选择文件 → 行为不变
  • 已知边界:add() 在 composer 忙碌(phase !== 'plain')时拒绝,与粘贴图片同一失败模式(toast 报错,文本不插入)

兼容性

纯客户端改动;dsh.client 声明、槽位、服务注入均不变;对 0.1.2-alpha.x ~ 0.1.3-alpha.x 的兼容面与 v0.1.21 相同。textarea 代 composer 的识别分支未实机验证(本机为 Lexical),逻辑与 v0.1.4 时代 onBeforeInput 的 composer 识别一致。

….23)

Rebased onto upstream main (e683182, v0.1.22). Version bumped to 0.1.23
because upstream independently released v0.1.22 (DSH 0.1.5-alpha.1 support).

- capture-phase paste interception before the composer's own listener
  (Lexical contenteditable + textarea-era guards)
- threshold (chars) or 50+ lines => File([text]) through the existing
  add() pipeline: paste_text.txt naming, uniqueLabel (2)/(3) de-dup,
  per-send directory, DSH_PASTE_INPUT_V1 block, bubble folding
- settings panel: threshold select (off/1000/2000/5000, default 2000)
- first-paste notice mentions the text conversion
@athenafirst athenafirst changed the title feat: 大段纯文本粘贴自动转为 paste_text.txt 附件 (v0.1.22) feat: 大段纯文本粘贴自动转为 paste_text.txt 附件 (v0.1.23) Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant