dsh-composer-input-history:爲 DSH Web 輸入框補上 Shell 式歷史

前言

在 DeepSeek Harness(DSH)裏用 Web 端 composer 和智能體對話時,輸入框往往只保留當前草稿。想重發或微調上一條用戶消息,只能手動複製聊天記錄,或重新打一遍。終端裏的 opencode 等 agent 早已習慣用方向鍵在「已發送內容」和「未發送草稿」之間切換;Harness 的 Lexical 編輯器默認把 ↑/↓ 留給編輯器自身,不會自帶這套行爲。

下面介紹社區插件 dsh-composer-input-history:在 Session 內用 ↑ 回溯本會話已發送消息,用 ↓ 向前瀏覽並恢復你正在寫的草稿。維護者爲 liumorrisclaw,分類爲客戶端插件,源碼與說明見 GitHub 倉庫,社區目錄頁爲 SkillHub 條目。

這是什麼

dsh-composer-input-history 爲 DeepSeek Harness 的 Web composer 提供 Shell 風格的輸入歷史:↑ 拉回本 Session 裏已經發過的消息,↓ 在較新的消息之間前進,越過最新一條後回到你瀏覽前正在寫的草稿,再按一次 ↓ 會丟棄該草稿並清空輸入框。

插件不引入 Harness Client 包、不額外改樣式;通過 conversation.composer.dock 註冊不可見的 Session 級 occupant,用標準 useChat、useInput 與 inputActions.setDraft 讀寫草稿,並在 document 級 keydown 與 shortcuts 的 observeFixedInput 兩條路徑上仲裁按鍵(先處理者取消事件,避免與 slash 菜單、IME 搶鍵)。

核心功能

按鍵行爲

操作 行爲
草稿爲空時按 ↑ 召回最新一條已發送消息
再次按 ↑ 每次向更早的一條移動
單行草稿且光標在第一行時按 ↑ 召回歷史,並記住當前草稿
多行草稿且光標不在第一行時按 ↑ 交給編輯器(光標照常移動)
瀏覽歷史時按 ↓ 向更新的一條移動
↓ 越過最新已發送消息 恢復瀏覽前正在寫的草稿
草稿恢復後再按 ↓ 丟棄草稿並清空 composer
瀏覽過程中開始輸入 退出瀏覽模式,召回文本變爲當前草稿

歷史來源與範圍

歷史來自本 Session 聊天視圖已加載的 Chat 節點(snapshot.nodes,按 anchor 順序),並與會話級 localStorage 持久化記錄合併(上限 300 條),因此 compaction prune 掉的消息在重啓後仍可能召回。

納入:普通用戶消息、steering 消息、以及喚醒一輪的消息。

跳過:隱藏節點(compacted 或 interrupted)、僅附件消息、以及 Harness 代發內容(goal rounds、skill catalogs、runtime snapshots、job notices、model notices、approval answers、compaction checkpoints 等)。

與其它插件的差異

npm 上另有社區插件 dsh-input-history,同樣用 ↑/↓ 召回提示,但機制不同。README 中的對比如下:

dsh-composer-input-history dsh-input-history
歷史來源 Chat 視圖已加載的 Session transcript 獨立的本地已提交提示存儲
非空草稿 可召回並記住草稿,在最新消息之下恢復 僅空 composer 時召回
附件 召回爲純文本,不恢復附件 可持久化並重新附加
菜單 / IME 對 slash/reference 菜單與 IME 組合讓出按鍵 —

若希望召回與界面上看到的對話一致,且正在輸入時也能 ↑ 回溯,選本插件更合適。

兼容與驗證

開發與驗證目標爲 @deepseek-ai/dsh 0.2.0-rc.2。插件聲明 dsh.client.inject 於 dsh-client-ui-conversation、dsh-client-ui-chat、dsh-client-shortcuts,bundle 在 web profile 下 immediately: true。README 記載 48 項測試(單元 + 模擬 composer 集成),並在真實 Web 實例與 Desktop composer 上做過手工確認。

當前 npm 包版本爲 0.1.2(見倉庫 package.json),許可證 MIT。

安裝與啓用

插件以 DSH 當前進程的 Web 客戶端權限運行;安裝前建議閱讀倉庫源碼與 LICENSE,確認符合你的安全策略。DSH 生態強調「一切皆插件」;SkillHub 等爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。

在 web profile 下從 npm 安裝(短名):

dsh plugin --profile web add dsh-composer-input-history

或直接從 GitHub 添加:

dsh plugin --profile web add https://github.com/liumorrisclaw/dsh-composer-input-history

也可在 Web UI 的 Plugins 頁面添加,或通過插件管理器列出包目錄。bundle 默認關閉,需在 profile 中選中後生效。

本地 checkout 可按路徑安裝:

dsh plugin --profile web add /absolute/path/to/dsh-composer-input-history

可用 dsh --profile <name> --dump-config 檢查 composed profile 是否包含該 bundle 行。

典型用法

  1. 在已打開的 Session 中,向 composer 發送若干條用戶消息。
  2. 輸入框爲空時按 ↑,應出現最近一條已發送的純文本內容。
  3. 連續按 ↑ 向更早消息瀏覽;按 ↓ 向更新方向走,越過最新一條後應回到你按 ↑ 之前未發送的草稿。
  4. 草稿恢復後再按 ↓,composer 應被清空。
  5. 若輸入框裏已有多行文字且光標不在第一行,↑ 應仍由編輯器處理行內移動,而非搶歷史。

首頁未打開 Session 時沒有 composer dock,無法召回;歷史僅限當前 Session,不支持跨 Session。

適用場景與注意

適合: 經常在同一 Session 裏微調、重發上一條提示的 Web 用戶;希望行爲貼近終端 agent、且歷史與聊天窗口可見 transcript 一致的場景。

侷限(來自 README):

  • 跨 Session 召回尚未實現。
  • 插件未安裝期間發送的消息,不會進入其合併後的歷史。
  • 召回僅爲純文本,reference chips 與附件不會恢復。
  • 假定每個 Web 頁只有一個常駐 composer。

安裝命令與行爲說明以上述倉庫 README 爲準;衝突時以倉庫文檔爲準。

結尾

dsh-composer-input-history 用鍵盤觀察者的方式補上 Harness Web composer 刻意留出的 ↑/↓ seam,把 Session 內已發送消息與當前草稿串成可瀏覽的一條線。需要目錄簡介或一鍵跳轉時,可打開 SkillHub 插件頁;需要安裝命令、按鍵表與限制說明時,以 GitHub:liumorrisclaw/dsh-composer-input-history 爲準。

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

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

小夜