前言¶
在 DeepSeek Harness(DSH)的 composer 中輸入消息後,如果需要修改或調整之前的表述,目前只能手動刪除重寫。對於多輪對話場景,這種重複操作會降低開發效率。下面介紹一個插件,可以在輸入框中按方向鍵回溯已發送的消息,並回填爲草稿。
這是什麼¶
dsh-plugin-composer-history 是一個客戶端插件,由 Dogtiti 維護。它爲 DSH composer 提供類似 Shell 命令行的歷史記錄功能:按下 ↑ 向前回溯已發送的消息,按下 ↓ 返回到當前草稿。
插件通過攔截輸入框的按鍵事件,結合會話日誌中的消息記錄,實現消息的回填與恢復。歷史消息來自會話日誌中 role: user 且 source.kind === 'user' 的文本,運行時上下文、技能目錄等非用戶輸入會被過濾。
核心功能¶
按下 ↑ / ↓ 方向鍵,可以逐條回溯本會話已發送的消息:
- 輸入框爲空時,按
↑從最近一條開始向前回溯 - 回溯時右下角顯示當前位置(如
3/19,表示當前第 3 條,共 19 條) - 按下
↓向前返回,越過最新一條後恢復回溯前的草稿 - 手動編輯輸入框內容後,會自動退出回溯狀態
安裝與啓用¶
市場索引
https://raw.githubusercontent.com/Dogtiti/dsh-plugin-composer-predict/main/market-index.json
設置 → 插件 → 啓用實驗性市場 bundle → Discover → 添加上面的地址 → 安裝 dsh-plugin-composer-history。
npm
npm i dsh-plugin-composer-history
在 Plugins 頁用「添加」填寫包名。
本地目錄
git clone https://github.com/Dogtiti/dsh-plugin-composer-history
Plugins → 添加 → 選擇該目錄。
典型用法¶
- 在輸入框中發送一條消息,例如「寫一個 Python 腳本」。
- 發送第二條消息,例如「再加一個日誌功能」。
- 輸入框清空後,按
↑回溯到第二條消息「再加一個日誌功能」。 - 繼續按
↑回溯到第一條消息「寫一個 Python 腳本」。 - 按
↓返回到第二條消息,繼續編輯或刪除部分內容。 - 手動輸入新內容後,退出回溯狀態。
配置¶
插件支持以下配置項(YAML 格式):
- insert:
- id: composer-history
name: 'dsh-plugin-composer-history'
config:
limit: 50
| 鍵 | 默認值 | 說明 |
|---|---|---|
enabled |
true |
總開關;關閉後路由返回 503,客戶端不接管按鍵 |
limit |
200 |
保留的歷史條數(取最近) |
maxChars |
2000 |
單條消息最大字符數(保留頭尾) |
cacheTtlMs |
30000 |
相同會話事件序號下的緩存時間 |
行爲說明¶
| 按鍵 | 行爲 |
|---|---|
↑ |
輸入框爲空時開始回溯,從最近一條向前;到達最舊一條後停止 |
↓ |
向前返回;越過最新一條時恢復原草稿 |
不接管的情況:
| 條件 | 行爲 |
|---|---|
| 輸入框已有內容或附件 | ↑ 保留給編輯器的光標與選區移動 |
| 焦點不在該輸入框 | 不處理 |
| 帶 Alt / Ctrl / Cmd / Shift | 不處理 |
/ 或 @ 菜單已認領輸入 |
方向鍵歸菜單 |
實現原理¶
瀏覽器端通過 conversation.composer.dock 攔截階段捕獲 ↑ / ↓ 按鍵,維護一個索引狀態機(index = -1 表示未回溯),調用 inputActions.setDraft(items[index]) 回填消息。Host 側通過 POST /api/composer.history 接口,從會話日誌中提取用戶輸入消息,按來源過濾後緩存 30 秒。
歷史消息過濾規則:
- 計入歷史:{ "kind": "user" }
- 排除:runtime-context、skill-catalog、time-context、user-approval
相鄰重複消息會合併爲一條。
兼容性¶
- DSH
^0.2.1-0(engines.dsh)。 - 依賴公開的
inputActions.setDraft()。
相關插件¶
| 插件 | 說明 |
|---|---|
| dsh-plugin-composer-predict | 預測下一條指令並顯示爲佔位文字,Tab 採納 |
| dsh-plugin-composer-history | 輸入框中按 ↑ / ↓ 回填歷史消息 |
| dsh-plugin-subagent-bridge | 讓 Codex 通過本機 MCP 把 DSH 當 subagent 用 |
| dsh-plugin-usage-panel | 在模型選擇器旁顯示供應商套餐額度餘量 |
適用場景與注意¶
該插件適合需要頻繁調整多輪對話輸入的開發者。使用前請確認 DSH 版本不低於 ^0.2.1-0,並檢查插件源碼與許可證。插件以當前 dsh 進程權限運行,請從可信來源安裝。