前言¶
在 DeepSeek Harness(DSH)裏,左側工作區會堆很多會話。默認自動標題往往只反映第一句,或者和後面幾輪討論對不上;手動改標題可以,但長對話一多就懶得逐條改。社區裏也有依賴全局標題服務、或按固定規則命名的做法;本插件走的是另一條路:在你已經聊過的會話上,從本機持久化日誌裏取最近的用戶輸入,用該會話最後一次實際用過的模型現場生成一個新標題,確認後再寫回,不碰全局 sessionTitle 配置。
下面介紹維護者 wyewyewye 發佈的 DSH 插件 dsh-session-title-regen(GitHub 倉庫 wyewyewye/dsh-session-title-regen,社區目錄分類爲「模型推理」)。插件以 MIT 許可發佈,當前 package 版本爲 0.1.1,聲明需要 DSH >=0.1.7-rc.1,並在 compatibility 中標註與 0.2.1-rc.3 兼容。
這是什麼¶
一句話:dsh-session-title-regen 在每條會話行右側的「…」擴展菜單裏增加「AI 重新生成標題」,讀取該會話事件日誌裏最近 10 輪用戶 prompt,沿日誌裏最後一條 request/header 摺疊出的 provider/model 調用 LLM,生成標題後經可編輯預覽對話框確認,再通過內置 rename 路徑寫回側邊欄。
數據不聯網、不讀全局標題緩存;寫回只是一條標準 session/title 事件,與手動重命名格式相同。無設置面板、無環境變量、不新增持久化配置文件。
核心功能¶
入口與交互¶
client 半(lib/client.js)向 sidebar.workspaces.session.menu.item 注入 order 500 的菜單項,位於「複製會話 ID」之後,與置頂、重命名、分叉、歸檔等同列。點擊後彈出預覽對話框(顯示所用模型),可改字再確認;側邊欄標題即時更新,其它設備按普通標題事件同步。
數據來源與模型選擇¶
node 半註冊 loopback 路由 POST /api/dsh-session-title-regen/generate,body 爲 {sessionId, currentTitle?}。經 ctx.sessionQuery.readSession 讀冷會話日誌:
- 採集最近 10 輪用戶 prompt(
user/message且source.kind === "user",跳過工具結果與空白消息); - 輸入總上限 16 KB,超限則丟棄最舊的 prompt;
- 從最後一條
request/header得到該會話最近使用的模型路由,經ctx.llm.prepareCall生成標題。
調用參數:maxTokens=512、30 秒超時;思考檔位優先 none,否則取最低檔(若 profile 支持)。舊標題僅作上下文,語義上始終產出新標題;歸一化邏輯對齊官方 dsh-session-title-all-prompts-llm 思路。
與內置標題服務的關係¶
標題生成不經過全局 sessionTitle provider,不替換內置 provider,與官方自動標題、其它標題類插件互不影響。
安裝與啓用¶
安裝來源會影響 client 半能否進入瀏覽器 bundle:DSH 的 client-modules 掃描器會靜默跳過 junction/symlink 形態的 bundle 目錄;github:、npm、tarball 會裝成真實目錄。pnpm 的 link:<目錄> / file:<目錄> 本地依賴只會建 junction,常見現象是裝完菜單不出現、也不報錯。
Web(dsh web)¶
在 PowerShell 中執行:
dsh plugin --profile web add github:wyewyewye/dsh-session-title-regen
# 重啓 dsh web,瀏覽器 F5
dsh plugin 會在成功後把包名追加進 dsh.profile.bundles,無需手改。裝完後需重啓宿主(client bundle 僅在啓動時進入 bundle 圖,僅刷新頁面不夠)。
官方桌面客戶端(Electron)¶
桌面端使用 desktop profile,命令行 dsh plugin 按設計拒絕 --profile desktop。應在桌面端會話裏讓宿主內置的 plugin_manager 安裝 github:wyewyewye/dsh-session-title-regen,裝完後完全退出客戶端(含托盤)再打開。
本地開發(tarball)¶
源碼目錄 pnpm pack 後,在 profile 目錄用 file:./vendor/dsh-session-title-regen-<版本>.tgz 安裝,並把 "dsh-session-title-regen" 手動追加進 dsh.profile.bundles,再重啓 DSH。不要用 link: 或直接 file:<目錄>。
安裝前建議自行查看倉庫源碼與 MIT 許可證;插件在當前 DSH 進程權限下讀會話日誌並調用 LLM,與你在該 profile 裏配置的模型提供商一致。
典型用法¶
- 安裝並重啓 DSH(Web 或桌面端按上文方式)。
- 選一個已經聊過幾輪、且日誌裏存在模型請求記錄的會話(空會話沒有
request/header,會報no-model-route)。 - 會話行右側「…」→「AI 重新生成標題」→ 在預覽裏覈對模型與標題文案 → 確認寫回。
驗證 bundle 是否登記(Web profile):
dsh --profile web --dump-config | Select-String title-regen
路由是否註冊(裸 curl 可能被瀏覽器信任柵欄返回 401/403,屬預期):
curl -X POST http://127.0.0.1:3080/api/dsh-session-title-regen/generate
更新 Web 端可重跑同一安裝命令取默認分支最新;固定版本可用 github:wyewyewye/dsh-session-title-regen#v0.1.0(tag 與 GitHub Release 同步)。更新後同樣需重啓宿主。
卸載 Web:
dsh plugin --profile web remove dsh-session-title-regen
已寫入的標題仍是普通會話標題事件,卸載後照常顯示,無插件專屬殘留文件。
適用場景與注意¶
適合:側邊欄會話多、希望按最近討論內容批量整理標題,且希望標題模型與該會話裏實際用過的模型一致,而不想改全局自動標題策略的 DSH 用戶。
注意:
- 「…」裏沒有菜單項:依次檢查
dsh.profile.bundles、是否重啓宿主、node_modules\dsh-session-title-regen是否爲真實目錄而非 junction。 session-not-found:會話已刪或冷日誌路徑異常。- llama.cpp 等後端若報
empty-title:可能與默認開啓思考、輸出預算被思考 token 佔滿有關;README 建議在 profile 的reasoningEfforts裏把 off 檔映射爲後端認的顯式關閉值(如off: none);插件自 v0.1.1 起將輸出預算提到 512 token。 - DSH 大版本若變更事件格式或 UI 槽位,插件可能需適配;以
package.json的compatibility爲準。
DeepSeek Harness 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-session-title-regen 把「重命名會話」做成一次可預覽的、基於本機日誌與 Session 級模型路由的 LLM 調用:零配置、不寫獨立配置表,卸載乾淨。需要安裝說明與 FAQ 時,以倉庫 README 爲準。