前言¶
使用 DeepSeek Harness(DSH)时,输入框草稿可能变得很长。long-draft-input 是一个面向 DSH 0.1.0-rc.5 的独立插件。它解决的问题是:当输入框草稿超过阈值时,将发送框向上扩展并显示附件式摘要卡片,同时不改变 DSH 原有的草稿状态、消息格式或发送路径。
这是什么¶
下面介绍这个插件的定位和边界。
它由 Heyflyingpig 维护,许可为 MIT。插件用于处理 DSH 输入框中的长草稿:超过阈值后把草稿折叠为摘要卡片;未超过阈值时保持原输入框行为。插件不定义附件协议,也不修改服务端消息格式。
核心功能¶
未超过阈值的小文本不渲染插件 UI,保持原行为。
当输入框草稿超过阈值后:
- 长文本仍完整保存在 DSH 的
input.draft中。 - 摘要卡片展示首行预览、字符数和行数。
- 摘要卡片作为原发送框内部布局子项,像附件一样将发送框向上撑高。
- 折叠态隐藏原 textarea 的完整文本,保留原工具栏和发送按钮。
- 卡片下方保留独立补充输入区,补充文字会追加到完整长文本后,继续通过原发送按钮提交。
- 点击“在文本框中显示”后恢复原 textarea,并将焦点交还给它。
- 点击
×移除聚合的长文本;如果卡片下方已经输入补充正文,只保留这部分正文。 - 原 InputBar 的发送按钮仍调用原有
inputActions.submit()。
实现上使用公开的 conversation.input.dock 扩展点承载生命周期,再通过 React Portal 把摘要卡片放入原 [data-composer-card]。
安装与启用¶
安装到 DSH profile¶
先按仓库资料给出的命令安装,再运行指定 profile。
dsh plugin --profile demo add github: Heyflyingpig/long-draft-input
dsh --profile web
安装前需要注意 package.json 声明 node >= 22.19.0。GitHub 安装会执行 prepare 构建 TypeScript 和浏览器 bundle。pnpm 10+ 可能要求 profile 的 pnpm-workspace.yaml 显式允许该包的构建脚本。也可以发布 npm 包或 pnpm pack tarball,直接携带已构建的 lib/,减少安装时的构建权限。
在源码 checkout 中本地验证¶
如果是在 DSH 项目源码 checkout 中验证,下面三条命令分别用于添加本地路径插件、查看配置和启动。
pnpm dsh plugin --profile demo add /absolute/path/to/long-draft-input
pnpm dsh --profile demo --dump-config
pnpm dsh --profile demo
典型用法¶
默认阈值¶
默认阈值为 2000 个 JavaScript 字符,首行预览为 120 个 Unicode code point。
覆盖配置¶
可在 profile 的后续 patch 层覆盖配置。由于 patch 会替换整行配置,覆盖时请同时写出 threshold 和 previewChars 两个字段:
- id: long-draft-input
config:
threshold: 20000
previewChars: 160
开发与验证¶
开发与验证命令如下:
pnpm install
pnpm test
pnpm run test:unit
pnpm pack:check
真实 Web 组合测试需要先在一个已安装本插件的 DSH profile 中启动 Web,然后执行:
DSH_WEB_URL=http://127.0.0.1:3080 pnpm run test:web
适用场景与注意¶
适合在 DSH 输入框中经常产生较长草稿、希望折叠展示但不改变提交路径的场景。
使用时注意:
- 插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
- 插件不改变草稿状态、消息格式或发送路径;未超过阈值的短文本不会触发插件 UI。
- 公开扩展点无法控制
InputBar.tsx内部的私有 React 渲染逻辑,因此不能阻止原组件继续构造 backdrop 和 mirror 节点。 - 真实 Web 组合测试依赖一个已安装本插件的 DSH profile 启动 Web。
结尾¶
long-draft-input 的价值在于:长文本仍然保存在 input.draft 中,发送按钮仍走原有 inputActions.submit(),只是把超过阈值的草稿折叠成附件式摘要卡片。