dsh-enter-newline:讓 Harness 輸入框 Enter 只換行不發送

前言

在 DeepSeek Harness(DSH)裏寫長提示詞時,默認行爲是:在聊天輸入框按 Enter 會直接發送。寫到一半想換行分段,消息卻已經發出去了。社區插件 dsh-enter-newline 只改這一處交互:Enter 插入換行,發送交給界面上的發送按鈕;Shift+Enter 與中文輸入法組合輸入期間的 Enter 行爲按 README 說明保持不變。

這是什麼

dsh-enter-newline 是 DSH 的客戶端插件,維護者爲 KunKun24(package.json 中作者署名爲「困困」)。分類上屬於在 Web 端注入客戶端邏輯的插件:通過 Cordis patch 與 @deepseek-ai/dsh-client-ui-slots 注入,平臺爲 web。許可證爲 MIT;當前 package.json 版本爲 1.1.0,運行環境要求 Node >= 22.13.0。

核心功能

下面是對 README 與 package.json 中已寫明能力的歸納。

  1. Enter 換行、不發送
    在 Harness 的 composer 輸入框內,單獨按 Enter 只插入一行換行,不會觸發發送。

  2. 發送方式不變
    需要發出消息時,仍使用發送按鈕(README 未改動 DSH 其它發送快捷鍵的表述,此處不延伸)。

  3. Shift+Enter 保持原樣
    插件通過把真實鍵盤事件的 shiftKey 改寫爲 true,讓 Lexical 走 Shift+Enter 的換行路徑;dsh 提交邏輯裏對 event.shiftKey === true 會直接 return false,從而不發送。

  4. 中文輸入法
    組合輸入過程中按 Enter,README 寫明不會被攔截。

  5. 側邊欄開關
    側邊欄提供「換行設置」,可開關行爲;設置保存在本機 localStorage,鍵名爲 dsh-enter-newline。

  6. 作用範圍
    僅作用於 composer 內、帶 [data-lexical-editor] 的輸入框;會話改名、設置頁等其它輸入框不受影響。

實現要點(爲何不用 execCommand)

DSH 的輸入框基於 Lexical 富文本編輯器,內容由 Lexical 數據模型管理。README 記錄了早期踩坑:用 document.execCommand('insertLineBreak') 直接改 DOM 會繞過模型,Lexical 在 reconcile 時會把 DOM 重置回模型,連帶把剛粘貼進去的內容沖掉。

當前做法是不碰 DOM,只在鍵盤事件上把 shiftKey 設爲 true,交給 Lexical 處理換行。Lexical 側按 Shift+Enter 走 INSERT_LINE_BREAK_COMMAND;dsh 提交處理器在 event.shiftKey === true 時不提交。兩條路徑同時滿足時,實現「換行且不發送」。

安裝與啓用

DeepSeek Harness 生態採用「一切皆插件」思路;插件可在 DSH 內置市場或社區目錄發現。社區目錄頁:dsh-enter-newline(SkillHub)。源碼與說明:GitHub - KunKun24/dsh-enter-newline。

安裝前請自行查看倉庫源碼與 MIT 許可證;插件在當前 dsh 進程權限下運行,與使用任何第三方 DSH 插件的通用注意一致。

方式一:插件市場(README 推薦)

在 dsh 的「插件市場」裏搜索包名 dsh-enter-newline 直接安裝。README 未給出額外的 CLI 市場安裝單行命令,此處不臆造。

方式二:Release 壓縮包

README 示例使用 profile web 與本地 tgz 路徑:

dsh plugin --profile web add ./dsh-enter-newline-1.0.0.tgz

說明:示例文件名中的版本號爲 README 安裝示例原文;若你從 Release 下載,請以實際壓縮包文件名爲準。

方式三:手動裝到 profile

# 1. 複製到 profile 的 vendor 目錄
cp -r dsh-enter-newline ~/.dsh/profiles/web/vendor/dsh-enter-newline

# 2. 在 profile 的 package.json 里加一條依賴(file: 指向 vendor)
#    "dependencies": { "dsh-enter-newline": "file:./vendor/dsh-enter-newline" }

# 3. 裝依賴並重啓
cd ~/.dsh/profiles/web && pnpm install && dsh web

典型用法

  1. 按上述任一方式安裝並啓動 dsh web(或你使用的 profile)。
  2. 打開 Harness 聊天 composer,在輸入框裏輸入多行內容:需要換行時按 Enter。
  3. 確認消息未自動發送後,點擊發送按鈕發出。
  4. 若不需要該行爲,在側邊欄「換行設置」關閉;設置寫入 localStorage: dsh-enter-newline。

需要保留「Enter 即發送」習慣時,關閉側邊欄開關即可,無需卸載。

卸載

README 給出的步驟:

從 profile 的 package.json 的 dependencies 和 dsh.profile.bundles 裏刪掉 dsh-enter-newline,再執行 pnpm install 並重啓 dsh。插件本身不寫業務數據。

適用場景與注意

適合誰: 經常在 Harness composer 裏寫長 prompt、需要 Enter 分段、又不希望誤觸發送的 Web 端用戶。

注意:

  • 僅 Web 客戶端(dsh.client.platform 爲 web);README 未聲明其它平臺。
  • 行爲綁定 Lexical composer 輸入框;其它頁面的輸入框不受影響。
  • 社區目錄與 DeepSeek / 幻方無 README 所述的官方從屬關係,安裝來源請自行覈對。

結尾

dsh-enter-newline 用最小侵入的方式對齊「寫提示詞時 Enter 換行」的常見編輯器習慣,實現上依賴 Lexical 與 dsh 對 Shift+Enter 的既有約定,避免直接改 DOM。進一步瞭解或提 Issue,請訪問 SkillHub 目錄頁 與 GitHub 倉庫。

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

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

小夜