dsh-auto-title:等首輪迴復後再給 DSH 會話起名

前言

DeepSeek Harness(DSH)的會話列表靠標題區分任務。內置的 session-title-llm 在首條人類消息到達時就定標題,做法接近把提問截斷塞進任務欄——多條會話往往長得一樣,掃列表時很難分辨「這條在修 pnpm 還是寫文檔」。

dsh-auto-title 是社區維護者 sumingwang233 發佈的客戶端類 DSH 插件(當前 GitHub 星標爲 0)。它接管同一條「會話標題」槽位:默認在首輪對話結束(首條助手帶文本回復或 turn 結束)後,用輔助模型根據「首條提問 + 首條回覆」生成「項目|具體任務」式標題;另在會話行菜單提供 AI 重命名,可對已有會話手動再命名一次。下面介紹定位、安裝、配置與使用邊界。插件目錄頁見 SkillHub,源碼與說明見 GitHub 倉庫。SkillHub 爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。

這是什麼

一句話:給 DSH 會話自動起名——不再依賴截斷首條 prompt,而是在看到首輪助手回覆後,用一次不佔用正文上下文的輔助模型調用生成可區分的標題。

維護者:sumingwang233。許可證:MIT(見倉庫 LICENSE)。包版本在資料中爲 0.1.0,運行環境要求 Node >= 20。

和內置行爲的差異

內置標題在首條人類消息上定型;本插件由 automatic 控制節奏,默認 first-prompt 只在首輪命名。命名前會等待助手回覆(最長 waitForReplyMs),超時或失敗則退化爲「僅根據人類請求」命名,仍走模型而不是原始截斷。

示意(資料中的對比,非真實運行記錄):

改前(內置,截斷首條提問)  →  改後(本插件)
幫我看看這個 pnpm 報錯…      →  pnpm|lockfile 供應鏈校驗報錯排查
再寫一版                      →  寫作|把筆記改成一頁紙說明
那個 bug 修了嗎               →  debug|會話標題事件沒觸發

核心功能

自動命名(首輪)

  1. 人類提交消息後(默認僅第一條),標題服務調用本插件。
  2. 插件等待本輪帶文本的 assistant/message 或 turn/end(失敗/超時則以空字符串繼續),最多等 waitForReplyMs。
  3. 將「人類請求 + 助手回覆」交給一次輔助模型調用;結果規範化(去引號、摺疊換行、去句末標點、按 maxTitleLength 截斷)。
  4. 以 { title, messageSeqs, model } 交回標題服務持久化並推送到界面。

任一步失敗會拋出帶 code 的錯誤,不會把會話改成空標題。

手動 AI 重命名

自動命名只管首輪。對任意已有會話:在會話行右側「…」菜單中,原生「重命名」之下多一行 AI 重命名。

  1. 讀取該會話首條人類提問與最近一次帶文本的助手回覆,調用輔助模型,彈窗預填建議標題;
  2. 可編輯後回車或點「應用」;Esc 或「取消」放棄;
  3. 提交走原生 sessionTitle.rename(source.kind === 'user'),之後自動命名不會覆蓋該標題。

實現上客戶端 bundle 註冊菜單與 shell.overlay 對話框,宿主提供 POST /dsh-auto-title/title 與 POST /dsh-auto-title/apply。會話未打開時會先 resume 再改名。常見失敗:422 empty-session、409 no-route、502 model-empty,對話框會顯示本地化文案。

與內置 provider 的關係

ctx.sessionTitle 只接受一個 provider。本包 cordis.patch.yml 會先 disabled 內置 session-title-llm,再插入 auto-title。停用本插件後內置行爲恢復;若 profile 裏另有會話標題插件,本插件會安靜不註冊(日誌 warn),不導致啓動失敗。

安裝與啓用

官方安裝命令如下(不要用 github:owner/repo 形式自行拼接):

dsh plugin add https://github.com/sumingwang233/dsh-auto-title

或在桌面端 設置 → 插件市場 → 添加插件,填入同一 URL。裝完後重啓 DSH 桌面端(或重連該 profile)使 bundle 生效。本地開發可從工作副本安裝:

dsh plugin add <本目錄絕對路徑>

安裝時無需改基礎 bundle;patch 已處理與內置行的爭用。

在桌面端使用

重啓後插件出現在兩處。

設置側欄 →「dsh-auto-title」(一級條目,與「內置插件」等並列,不在「插件」頁)。可改 enabled、provider、model、language、maxTitleLength、waitForReplyMs、timeoutMs 等,保存後下一次命名即生效。頁下方有最近事件日誌(自動命名、手動重命名、失敗原因),可刷新、清空、複製;日誌同時寫入 <插件目錄>/log.jsonl,也可用 GET /dsh-auto-title/log?limit=100。

會話列表每行「…」→「AI 重命名」:彈窗展示候選標題,確認後列表更新;失敗原因可在設置頁日誌中對照排查(例如尚未配置會話 provider/model、推理模型佔滿 maxOutputTokens 等)。

配置

運行時配置(推薦):<插件目錄>/settings.json。桌面 profile 下典型路徑爲 ~/.dsh/profiles/desktop/node_modules/dsh-auto-title/settings.json;可用環境變量 DSH_AUTO_TITLE_SETTINGS 指向別處。優先級最高,保存後立即生效。

加載期配置(可選):在 profile 的 cordis.patch.yml 中覆蓋,例如:

- id: auto-title
  config:
    language: zh
    maxTitleLength: 20
    waitForReplyMs: 90000

主要字段(默認值與說明以 README 爲準):

字段 默認 說明
enabled true false 時只加載不註冊
automatic 'first-prompt' all-prompts 爲每條新消息都重命名
provider / model '' 留空則用會話自己的路由;填則須兩個一起填
language 'auto' auto / zh / en
maxTitleLength 24 標題最大字符數
maxInputChars 6000 拼進提示詞的總字符上限
maxOutputTokens 512 輔助調用輸出上限(上限 8192)
waitForReplyMs 120000 等首條助手回覆
timeoutMs 30000 輔助調用超時
stopWords [] 標題中要去掉的詞

類型配錯會在加載時拋 TypeError,對應行以錯誤狀態出現。

典型驗證步驟

資料中的真機驗證(需重啓後):

  1. 設置側欄出現「dsh-auto-title」,頁面可打開,provider/model 可保存;
  2. 會話「…」→「AI 重命名」,彈窗有候選標題,應用後列表標題變化;
  3. 若彈窗報錯,設置頁日誌中有失敗原因與細節。

開發側可用倉庫內 npm test 跑單元測試(README 稱 49 個用例);介紹安裝流程時不使用 git clone,讀者自行克隆倉庫後再測即可。

適用場景與注意

適合誰:長期開多條 DSH 會話、希望任務欄標題能反映「問什麼 + 做成什麼」的開發者;需要中文或英文固定標題語言時,可設 language。

成本與邊界:

  • 默認只在首輪自動命名一次;對話大改後不會自動改名,可用手動 AI 重命名,或設 automatic: 'all-prompts'(每條新消息多一次小請求)。
  • 每條命中消息多一次輔助調用(約幾百 token 輸入、輸出受 maxOutputTokens 限制);可 enabled: false 或指定便宜模型。
  • 助手回覆晚於 waitForReplyMs 時,會退化爲「只看請求」命名。
  • 插件以當前 DSH 進程權限運行;安裝前應閱讀 源碼 與 MIT 許可證,確認符合你的安全與合規要求。

卸載

桌面端 設置 → 插件市場 → dsh-auto-title → 卸載,或用 plugin_manager action: "remove_bundle"、target: "dsh-auto-title"。移除後內置 session-title-llm 重新生效。

結尾

dsh-auto-title 用「首輪結束後再命名 + 可選 AI 重命名」替換截斷式標題,並自帶設置頁與事件日誌,便於調 provider、語言和超時。需要細節時以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/sumingwang233/dsh-auto-title
  • GitHub:https://github.com/sumingwang233/dsh-auto-title
羽毛球分组比赛记分
小程序二维码

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

小夜