前言¶
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|會話標題事件沒觸發
核心功能¶
自動命名(首輪)¶
- 人類提交消息後(默認僅第一條),標題服務調用本插件。
- 插件等待本輪帶文本的
assistant/message或turn/end(失敗/超時則以空字符串繼續),最多等waitForReplyMs。 - 將「人類請求 + 助手回覆」交給一次輔助模型調用;結果規範化(去引號、摺疊換行、去句末標點、按
maxTitleLength截斷)。 - 以
{ title, messageSeqs, model }交回標題服務持久化並推送到界面。
任一步失敗會拋出帶 code 的錯誤,不會把會話改成空標題。
手動 AI 重命名¶
自動命名只管首輪。對任意已有會話:在會話行右側「…」菜單中,原生「重命名」之下多一行 AI 重命名。
- 讀取該會話首條人類提問與最近一次帶文本的助手回覆,調用輔助模型,彈窗預填建議標題;
- 可編輯後回車或點「應用」;Esc 或「取消」放棄;
- 提交走原生
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,對應行以錯誤狀態出現。
典型驗證步驟¶
資料中的真機驗證(需重啓後):
- 設置側欄出現「dsh-auto-title」,頁面可打開,
provider/model可保存; - 會話「…」→「AI 重命名」,彈窗有候選標題,應用後列表標題變化;
- 若彈窗報錯,設置頁日誌中有失敗原因與細節。
開發側可用倉庫內 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