dsh-composer-resize: Add draggable height and lower default upper limit to DSH chat input box

前言

在 DeepSeek Harness(DSH)里写长提示、贴代码块时,输入区会跟着内容一直长高。官方行为是长到约 336px 才开始在框内滚动,且不能用手拖动固定高度。对经常改多行草稿的开发者来说,框时高时低、占屏又偏满,阅读和排版都不顺手。

下面介绍的 dsh-composer-resize 是维护者 ayachinene285 发布的客户端插件:在聊天输入框顶部加一条拖动把手,可在一定范围内自由改高度;松手后高度写入浏览器 localStorage,重启仍生效。双击把手可回到「跟着内容长、但封顶更低」的自动增高模式。实现上只改 [data-input-scroll] 的 height / max-height,不接管 React 组件。

这是什么

  • 名称:dsh-composer-resize(npm 包名与仓库同名)
  • 分类:客户端(dsh.client.platform 为 web)
  • 许可证:MIT
  • 版本(package.json):0.1.0
  • GitHub 星标:目录页记录为 1(以社区目录为准)

插件通过 Cordis bundle patch(cordis.patch.yml)做纯 DOM 增强,宿主入口 lib/index.js 为空实现,实际逻辑在客户端导出 lib/client.js。

与官方输入框行为的差异

DSH 默认:输入框随内容增高,约 336px 后内部滚动,不能拖。

启用本插件后:

模式 行为
自动增高(默认 / 双击复位) 仍随内容变高,但 max-height 封顶 168px(约为官方一半)
固定高度(拖动后) 高度锁定为你拖定的值,超出部分在框内滚动,不再忽高忽低

拖动范围:64px ~ 屏高的 72%。拖动时右上角会显示当前像素值。

核心功能

  1. 把手交互:在 [data-composer-card] 输入卡片顶部插入约 10px 高的细把手;鼠标移上或聚焦时出现。
  2. 任意时刻可拖:无论当前一行还是多行,往上拖变高、往下拖变矮;从「当前实际高度」起算,第一次移动后切换为 height / min-height / max-height 三件套固定高度。
  3. 双击复位:清除内联 height,回到仅设 max-height 的自动增高模式(封顶 168px)。
  4. 持久化:松手即写入 localStorage,换会话、重启浏览器或 DSH 仍保持上次高度(按本次浏览器,不写进 DSH 配置文件)。
  5. 兼容范围:不改动发送、附件、斜杠命令;MutationObserver 加定时兜底,React 重建输入框后自动补回把手与样式;卸载时移除把手、样式及内联高度。

安装与启用

安装步骤以仓库 README 为准。插件以当前 DSH 进程权限运行,安装前建议浏览源码与 MIT 许可证。

先克隆仓库到本地,再让 desktop profile 以本地路径安装:

git clone https://github.com/ayachinene285/dsh-composer-resize.git
dsh plugin --profile desktop add "$(pwd)"

(第二条命令需在克隆得到的仓库目录内执行,使 $(pwd) 指向该插件根目录。)

手动方式(README 原文):

  1. 将目录放到 ~/.dsh/profiles/<profile>/node_modules/dsh-composer-resize
  2. 在该 profile 的 package.json 里,dependencies 增加 link: 指向该目录
  3. 在 dsh.profile.bundles 末尾加入 dsh-composer-resize
  4. 完全退出 DSH 再重新打开

社区目录页:https://www.skillhub.cn/plugins/ayachinene285/dsh-composer-resize(独立站点,与 DeepSeek / 幻方无官方从属关系)。

典型用法

无需额外配置项;安装并重启 DSH 后,在聊天输入框顶部即可使用把手。

  1. 临时拉高写长文:鼠标移到把手或聚焦输入区,向上拖至合适高度;松手后进入固定高度模式,长内容在框内滚动。
  2. 收回占屏:向下拖矮输入框;高度会记住,下次打开仍是该值。
  3. 恢复「随内容长」:双击把手,回到自动增高,且最高约 168px。

示意见仓库 docs/screenshot.png。

实现要点(便于排错)

插件不注册 UI 组件,流程概括为:

  1. 定位 [data-composer-card](position: relative),顶部插入把手;
  2. 拖动 → 固定高度模式;双击 → 清内联 height,自动增高模式;
  3. 监听 DOM 变化并在 React 重建后重新挂载;
  4. 仅触及 [data-input-scroll] 的高度相关样式。

适用场景与注意

适合:经常在 DSH 桌面 Web 端写多行提示、希望输入区高度可控、且希望默认自动增高不要顶到半屏的用户。

边界(README「已知边界」):

  • 只影响聊天输入框;队列编辑框(QueueDock)仍为官方样式。
  • 固定高度模式下不会再自动增高;要恢复自动增高请双击把手。
  • 高度仅存在浏览器 localStorage,不进入 DSH 配置。
  • 依赖 data-composer-card、data-input-scroll 两个 DOM 标记;若未来 DSH 改名,插件会静默不生效(不报错)。

结尾

dsh-composer-resize 用最小 DOM 补丁解决「输入框只能长到 336px、不能拖」的问题:拖动定高、双击回自动、默认封顶 168px,并本地记住高度。需要详情与源码时,可看社区目录页与 GitHub 仓库。

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

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

Xiaoye