前言¶
DSH 的 Web UI 裏,消息發得很快:在輸入框按 Enter、按 Ctrl/Cmd+Enter,或者點一下發送按鈕,內容就離開本地了。長對話裏改一句措辭重發、半句話沒寫完就誤觸,都是高頻場景。客戶端本身沒有發送前的確認環節,這類需求只能靠插件補。
下面介紹 a-2788553793/dsh-wait,由 A-2788553793 維護,是一個客戶端插件,作用是在 DSH Web UI 裏發送消息之前彈窗確認,取消則保留草稿。在社區目錄中它被列入 admin-security 分類。
這是什麼¶
dsh-wait 掛在 DSH 客戶端上,在消息真正發送之前插入一個確認窗口,完整展示即將發送的內容;確認才發,取消則草稿原樣保留,繼續編輯。適用對象是日常用 DSH Web UI 聊天、希望發送動作多一道確認的開發者。
插件目錄結構不大:index.js 是入口,client.js 是客戶端邏輯,另有 cordis.patch.yml、locale/*.json、icon.svg。package.json 裏 dsh.client 聲明瞭 platform: web、immediately: true,並注入 @deepseek-ai/dsh-client-ui-conversation。
核心功能¶
攔截三種發送方式:Enter、Ctrl/Cmd+Enter、點擊發送按鈕。確認彈窗展示完整草稿,超過 4000 字時預覽會截斷,但實際仍發送完整內容。
取消不丟草稿:Esc、點擊遮罩或「取消」按鈕均可關閉窗口,草稿留在輸入框裏。
彈窗內的確認操作:Enter / Ctrl/Cmd+Enter / 點「發送」都能確認,Tab 可以在「取消」「發送」之間切換。彈窗默認聚焦「發送」,所以連續按兩次 Enter 纔會真正發出——第一次被攔截並彈窗,第二次確認。
幾個邊界情況也覆蓋到了:新會話(hero 輸入框)的第一條消息同樣會確認;忙時排隊 / 插話發送同樣會確認;以 / 開頭的斜槓命令不攔截,交給 DSH 自己的命令菜單處理;界面文字跟隨 DSH 的語言設置(中文 / English)。
最後是失敗開放(fail-open):插件內部異常或彈窗未能掛載時,守衛放行,不會把消息卡住。
安裝與啓用¶
在 DSH 會話中執行:
plugin_manager action=install_bundle target="dsh-wait"
安裝後需要強制刷新頁面(Ctrl+Shift+R),讓客戶端邏輯重新掛載。
卸載或停用:
plugin_manager action=set_bundle target="dsh-wait" enabled=false
package.json 版本號爲 0.1.3,license 爲 MIT。
典型用法¶
- 正常輸入消息。
- 按
Enter、Ctrl/Cmd+Enter或點發送按鈕——不會立即發送,而是彈出確認窗口。 - 在窗口裏選擇:
- 按Enter/Ctrl/Cmd+Enter或點「發送」:確認發送
- 按Esc、點遮罩或點「取消」:關閉窗口,草稿原樣保留
- 按Tab:在「取消」「發送」之間切換
日常使用裏注意一點:彈窗默認聚焦「發送」,所以兩次 Enter 是固定節奏,第一次彈窗、第二次發出。只按一次 Enter 只是打開了確認窗口。
實現要點¶
DSH 客戶端沒有暴露發送攔截 API,所以這個插件在 apply 中直接安裝 document 捕獲階段的 keydown / click 監聽:
- 發送按鈕識別爲
[data-composer-card]內的最後一個<button>,編輯器是卡片內的[contenteditable="true"]。 - 用戶在彈窗裏確認後,插件重放原始事件,保留
Ctrl/Cmd語義和點擊路徑,而不是直接調用inputActions.submit()——後者會強制進入 queue 模式。 - 彈窗註冊在根級
shell.overlay槽位,因此還沒有任何 session 的新會話也能顯示。 - 守衛只在彈窗組件已掛載時生效,內部異常時放行,不會阻塞發送。
適用場景與注意¶
適合日常在 DSH Web UI 裏聊天、希望發送前多看一遍內容的開發者,也適合腳本化操作、誤觸發送代價較高的長對話場景。不需要改代碼,裝完刷新頁面即可。
幾個限制要清楚:
- 普通會話裏「純附件、無文字」的發送不會被確認,那個位置可能是停止按鈕,無法僅憑 DOM 區分。
- 插件依賴宿主 DOM 結構(
data-composer-card/data-composer-overlay/ 按鈕順序)。DSH 客戶端改版後守衛可能自動失效,且不會報錯,表現爲發送不再彈窗。 - 通過輸入框以外的入口(非 composer)觸發的消息不受影響。
另外需要明確權限邊界:插件以當前 DSH 進程的權限運行,能碰觸的不只是聊天界面,還包括進程能訪問的本地資源與憑據。安裝前應先讀一遍源碼(倉庫公開)、確認 cordis.patch.yml 的補丁內容,並覈對許可證(MIT)。
結尾¶
dsh-wait 解決的是一個很具體的問題:把「發送」這個一觸即發的動作變成一次可撤回的確認。不改變 DSH 的使用方式,取消時也不丟草稿,代價是一次多按的 Enter 和對 DOM 結構的依賴。
目錄頁:https://www.skillhub.cn/plugins/A-2788553793/dsh-wait
源碼:https://github.com/A-2788553793/dsh-wait