dsh-session-auto-title:統一會話標題命名規範

前言

DeepSeek Harness(DSH)的設計理念是「一切皆插件」。在開發或使用 DSH 進行多輪對話時,會話標題往往雜亂無章,缺乏統一的上下文標識。

嘗試使用外部腳本定期重命名會話是行不通的。DSH 的會話日誌在同一時刻只有一個寫入者(跨進程內核鎖),持有寫句柄的正是當前運行對話的進程。外部腳本會遭遇 SessionAlreadyOwnedError: 會話正被運行中的 Harness 獨佔。

因此,只有會話運行進程內的 ctx.sessionTitle 通道能夠安全地修改標題。本插件正是基於此原理,註冊一個 provider 而非腳本,實現在對話過程中動態重命名。

是什麼

cn-scuo-oo/dsh-session-auto-title 是一個 DSH 插件。它在每輪對話結束後通過一次輔助模型調用,將會話標題重寫爲固定格式 MMDD|類型|主題。

該插件掛載後即可使用,全部字段均有默認值。若需覆蓋默認值,可在 profile 的 loader 配置中指定。

行爲與約定

插件強制執行統一的命名規範,以確保會話標題的可讀性和一致性。

1. 格式
標題格式爲 MMDD|類型|主題,分隔符爲全角豎線 |(U+FF5C)。

2. 字段說明
* MMDD:上海時區日期,取自該會話首條人類消息的時間,不由模型臆造。
* 類型:必須從以下列表中選恰好一個:功能|設計|修復|優化|發佈|探索|文檔|研究。
* 主題:簡體中文,長度上限爲 20 個字符。不得包含工作區、項目、目錄或文件名,且不得重複類型詞。

3. 安全與校驗
* 注入防護:源消息以 JSON 數組框架化後送入,防止用戶正文破壞分隔符或僞造字段。
* 輸出校驗:模型輸出先歸一化再按約定重建。若輸出不合規,插件會拋錯並記錄 warn,絕不寫入半成品,標題保持原標題。
* 長度護欄:整串按 78 字節歸一化,保證前綴永遠不會被截斷。

安裝與啓用

安裝過程需要本地文件依賴和配置修改。

  1. 添加本地依賴
    將插件目錄放入任意位置,作爲 profile 的本地依賴。需使用與 profile 相同的包管理器(pnpm 或 npm):
    cd ~/.dsh/profiles/<profile>
    pnpm add file:/absolute/path/to/dsh-session-auto-title
> 注意:`file:` 依賴會被**拷貝**進 `node_modules`(非軟鏈)。修改源代碼後需重新運行上述安裝命令。
  1. 配置 Bundle
    在同一個 profile 的 package.json 中,將插件加入 bundles 列表:
    { "dsh": { "profile": { "bundles": ["...", "dsh-session-auto-title"] } } }
  1. 重啓
    重啓 DSH 客戶端。插件自帶的 cordis.patch.yml 會自動禁用內置的 session-title-llm provider 並插入本 provider(ctx.sessionTitle 只接受一個 provider 註冊)。

配置

插件提供若干可配置項,默認值已滿足大多數場景。需覆蓋時在 profile 的 loader 配置中給出:

字段 默認 作用
provider / model 未設 顯式指定標題模型路由;兩字段必須同時給出,否則沿用該輪已記錄的請求路由
maxSourceMessages 8 標題模型能看到的末尾人類消息條數
maxInputBytes 8192 框架化輸入的字節上限,超限即放棄本次命名
maxOutputTokens 96 輔助調用輸出上限
timeoutMs 60000 單次輔助調用超時
maxTopicCharacters 20 主題長度上限(按碼點計)
unpinSessions [] 需要交還自動命名的會話 id,釋放一次後自動移出
afterEveryTurn true 是否每輪結束後重命名

設計要點與限制

1. 節奏驅動
插件採用 afterEveryTurn 模式,在 turn/end 時調用 sessionTitle.refresh()。這是爲了解決服務自帶節奏在長生命週期會話中“靜默停止更新”的問題:服務自身的 all-prompts 節奏依賴 request/header 落盤,而一個請求序列只記一條 header,新輪次無法觸發更新。插件從 turn 邊界驅動刷新。

2. 手動改名支持
用戶手動改名的標題其 source.kind === "user"。插件檢測到此狀態會直接跳過,保持“釘住”狀態。若需釋放一次釘子,可將會話 id 填入 unpinSessions,之後恢復常規自動命名。

3. 已知限制
* 額外調用:每個對話輪次多一次模型調用,增加少量 token 成本與幾十毫秒到數秒的延遲。
* 標題漂移:標題會隨對話推進而漂移,每輪都是重新生成,不是隻在首輪定稿。
* 兜底機制:會話首次命名前若模型調用失敗,標題保持平臺兜底值(通常是首條消息截斷),不會報錯。

依賴

作爲 DSH 插件運行,需要宿主提供以下包:
@deepseek-ai/schemastery、@deepseek-ai/dsh-llm、@deepseek-ai/dsh-session-title、@deepseek-ai/dsh-util-values。

結語

dsh-session-auto-title 通過內部 provider 的方式,解決了 DSH 會話重命名的權限與同步問題,提供了嚴格的結構化標題。對於追求會話管理規範的開發者,這是一個可以直接掛載使用的工具。

插件目錄
GitHub 倉庫

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

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

小夜