dsh-pull-to-send:按住输入框上拉发送的 DSH 客户端手势插件

前言

在 DeepSeek Harness(DSH)里发消息,常见路径是点发送按钮或快捷键。输入框卡片面积不小,但「发送」往往仍是一个小目标;长对话里反复点按,也容易打断输入节奏。社区插件 dsh-pull-to-send 把发送改成一次拖拽:在输入框上按下、向上拉出一定距离后松手,即触发与发送按钮相同的主行为,并用 FLIP 动画把副本飞入新消息气泡。反悔时可以拖回输入框保留草稿,或拖出对话可投放范围直接作废。下面介绍它是什么、如何安装,以及手势与边界规则。

这是什么

dsh-pull-to-send 是 DSH 的客户端(web)插件,由维护者 dhdkfkfkf 发布在 GitHub(dhdkfkfkf/dsh-pull-to-send),社区目录页见 SkillHub 条目。实现为零构建、单文件 client.js,通过 bundle 的 cordis.patch.yml 注入桌面 Web 界面;当前 package 版本为 0.3.1,许可证 MIT。

它不改变后端协议,而是在界面上监听输入框(composer)区域的指针手势,在武装后调用发送按钮的程序化 .click(),从而在 React/Lexical 环境下走与手动点击相同的发送路径(README 称 CDP 探针已实测)。

核心功能

三种拖拽语义

README 用一张表概括行为,可归纳为:

操作 结果
拖出去:在输入框卡片(含周边 12px 缓冲区)按下,向上拉出卡片上边缘 ≥24px 武装:输入框副本被拎起并跟随指针(阻尼、微放大、阴影);真输入框缩小变暗
武装后松手,且落点在可投放范围内 触发发送按钮当前主行为(空闲=发送,生成中=排队/插话);副本 FLIP 飞入新消息气泡,真气泡交叉淡入
拖回来:武装后指针回到输入框卡片内 解除武装:副本约 150ms 回位消失,草稿保留;同一按压内可再次拉出
拖出界:武装后指针离开对话区可投放范围 立即取消:副本弹回,本次按压作废,松手不会发送

未达拉出阈值、横向拖拽占优、松手时指针仍在卡片内、按 Esc 或 pointercancel 等情况,按取消处理,副本约 320ms 沿原路弹回。

可投放范围

松手发送有效,仅当指针落在下列矩形内(README 原文边界):

  • 左:输入框卡片左缘
  • 右:对话区背景右缘(为识别贴边越界,右边界内缩 8px 安全余量)
  • 上:对话区顶格
  • 下:输入框卡片顶缘

范围外(屏幕边缘、任务栏、其他窗口等)一律视为取消。

不打断原有输入

  • 框内拖选:须越过上边缘并达到 24px 才武装,框内文本选择保持原生。
  • 空输入或发送按钮禁用:不武装。
  • IME 组合输入:组合开始即取消手势,避免半截拼音误发。
  • 触屏:仅鼠标与笔;手指滚动不触发。
  • 卡片上的按钮、链接、菜单:不抢事件。
  • 拖到窗口外松手:视为取消。

界面无额外文字提示,武装状态仅靠视觉反馈(副本拎起)。

动画与可调参数

v1 无设置面板;参数为 client.js 文件顶部具名常量,例如:

常量 默认 含义
ARM_DISTANCE 24px 越过输入框上边缘多少距离才武装
EDGE_MARGIN 8px 可投放范围与窗口边缘的安全余量
DISARM_RETURN_MS 150ms 拖回卡片内时副本回位时长
HIT_PAD 12px 卡片四周隐形响应缓冲区
DAMPING 0.95 副本跟随指针的插值系数
MAX_SCALE 1.02 拎起时最大放大
FLIP_MS 400ms 松手后副本飞入气泡时长
BUBBLE_LEAD_MS 80ms 真气泡提前淡入提前量
RETURN_MS 200ms 真输入框回位时长
CANCEL_MS 320ms 取消回弹时长

改代码后可通过 dsh-hmr 热更;首次添加 bundle 仍需重启 DSH(见安装节)。

兼容性与排错

插件同时兼容 claude-style 与原生界面(共用 data-composer-* 锚点);多会话窗格各自绑定手势。锚点查找三层降级:语义属性 → aria-label / contenteditable → 类名模糊匹配。

若手势异常,可在浏览器控制台执行:

window.__DSH_PULLTOSEND__.disable()   // 立刻停用手势(不用重启、不用卸载)
window.__DSH_PULLTOSEND__.version     // 确认插件是否加载

disable() 会移除监听器并收回已拎起的副本;刷新页面后恢复。

安装与启用

在已安装 DSH CLI 的机器上,按 README 官方命令为 desktop profile 添加插件:

dsh plugin --profile desktop add "github:dhdkfkfkf/dsh-pull-to-send"

装完后重启一次 DSH(添加 bundle 需要重启)。之后若只改插件源码,可走 dsh-hmr 热更,无需每次重启。

典型用法

  1. 确认插件已加载(可选):控制台查看 window.__DSH_PULLTOSEND__.version。
  2. 在对话输入框卡片区域按下指针(注意 12px 缓冲区仍算有效起点)。
  3. 向上拖动,直到拉出上边缘至少 24px,看到输入框副本被拎起(武装)。
  4. 在可投放范围内松手 → 消息按当前发送按钮逻辑发出,并播放 FLIP 飞入动画。
  5. 若不想发送:武装后将指针拖回输入框内(保留草稿),或拖出对话区可投放范围(本次按压作废)。

生成中若发送按钮处于排队/插话行为,武装后松手会走同一主行为,与点小按钮一致。

适用场景与注意

适合:习惯大手势、希望减少「瞄准小发送按钮」操作的 DSH 桌面 Web 用户;需要在发送前用拖拽明确「确认/取消」、且能接受纯视觉反馈(无文案提示)的场景。

注意:

  • 插件以当前 DSH 进程权限在客户端注入脚本运行;安装前请自行阅读 仓库源码 与 MIT 许可证,确认符合你的安全与合规要求。
  • 社区目录 SkillHub 独立于 DeepSeek / 幻方,并非官方应用商店;DSH 生态理念是「一切皆插件」,选型以仓库 README 与版本为准。
  • 触屏纯手指操作不适用;依赖鼠标或笔。
  • 临时禁用手势用 disable(),卸载插件需走 DSH 插件管理流程(README 未展开卸载命令,以你本地 DSH 文档为准)。

结尾

dsh-pull-to-send 把发送收敛为「按住、上拉、松手」一次 stroke,并用拖回与拖出界两种取消路径降低误发;动画与阈值在单文件常量里可调。若要在桌面 DSH 里试用,从官方安装命令添加 bundle 并重启即可。

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

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

小夜