前言¶
使用 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(),只是把超過閾值的草稿摺疊成附件式摘要卡片。