dsh-session-title:讓 DSH 會話標題跟着實際工作走

前言

在 DeepSeek Harness(DSH)裏開發插件或做多輪排錯時,側邊欄裏的會話名往往還停在第一句提示詞上。工作已經從「新建一個插件」推進到提供方、調度器、測試和打包,標題卻不變,找歷史會話只能靠猜。DSH 默認用第一句提示詞命名會話,對單輪問答夠用,對真實的多輪工作流並不貼切。下面介紹社區插件 dsh-session-title(維護者 icrefin,分類:工作流):它按會話實際做過的任務命名,並在後續回合有實質進展時更新標題。

這是什麼

dsh-session-title 是 DSH 的 Cordis 插件 bundle,當前版本 0.4.0(MIT 許可證)。它通過 ctx.sessionTitle.register() 成爲會話唯一的標題提供方,替代隨包自帶的「第一句提示詞」提供方(session-title-llm),並在 harness 已有的標題服務之上負責調度、摘要、一次輔助模型調用,以及持久的 session/title 事件。

插件在 dsh 0.2.1-rc.5(桌面端)上測試;運行環境要求 Node.js >= 22.17.0。

核心功能

從日誌摺疊「工作摘要」

人寫的提示詞表示被要求做什麼;會話日誌表示實際做了什麼:改過的文件、執行的命令、待辦、回合結束時的結論。插件把 turn/start、用戶消息、工具調用、助手消息、turn/end 等事件摺疊成 JSON 形式的工作摘要,再請模型據此生成一行標題。todo_write 與 exit_plan_mode 會按任務名特殊處理;其餘工具調用優先用調用自身的標註(如 bash 的 description、路徑、搜索模式)寫成「工具: 目標」一行小結。

何時改寫標題

三道閘門須同時滿足,避免標題抖動或空跑模型:

  1. 有進展 — 完成一個回合(turn/end),或當前回合內已完成不少於 minStepsBetweenUpdates 個步驟。
  2. 有間隔 — 距上次嘗試至少 minUpdateIntervalMs(默認 120000 ms)。
  3. 有新穎度 — 摘要指紋與當前標題所描述的工作不一致。

用戶手動改過的標題會被標記爲 user 來源並釘住,調度器不會覆蓋。子會話(subagent fork)默認不參與,除非開啓 includeChildSessions。新會話仍保留服務自帶的 first-prompt 節奏,先快速給一個初名,再由調度器接管。

設置頁與命名模型

Settings → Session titles 可配置命名模型與改寫節奏,字段爲 volatile:寫入 Host 文檔後 Loader 就地更新,無需重啓插件即可在下次標題請求生效(bundle 補丁本身仍須在 Harness 重啓 後生效,見安裝一節)。

命名模型可選:

  • 跟隨各會話自己的模型(默認)— 使用該會話已記錄請求的路由。
  • 始終使用同一個模型 — 在宿主公佈的目錄中釘死 provider 與 model;也可輸入宿主能解析的任意 model id。

模型列表通過只讀路由 GET /api/dsh-session-title/catalog 讀取 ctx.llm.listProviders();列表失敗的提供方仍會展示並附原因,頁面可回退爲自由文本。

每次改寫僅一次輔助請求,受 maxInputBytes、maxOutputTokens 約束,主對話不增加 token;標題服務在主請求之後異步執行。

README 中的前後對比示例(十四輪工作後):

Before, after fourteen turns of work:      After:
  Create a new plugin that                   Session-title provider with turn scheduler

安裝與啓用

安裝步驟以倉庫 README.zh-CN.md 爲準,概要如下。

先在插件源碼目錄構建並打包:

pnpm check            # typecheck, build, tests
scripts/install.sh    # packs dist/dsh-session-title-0.4.0.tgz

將生成的 tarball 裝進運行 harness 的 profile(示例路徑爲桌面 profile):

cd ~/.dsh/profiles/desktop
pnpm add file:/absolute/path/to/dsh-session-title-0.4.0.tgz

把 "dsh-session-title" 加入該 profile 的 package.json 裏 dsh.profile.bundles(與其他插件 bundle 並列)。重啓 Harness:bundle 在啓動時組合,替換標題提供方的補丁在重啓時生效;已有會話保留當前標題,直到下一回合完成並有新工作時纔會按規則改寫。

移除該 bundle 並重啓後,會恢復隨包自帶的標題提供方。

社區目錄頁(與 DeepSeek / 幻方無官方從屬關係):https://www.skillhub.cn/plugins/icrefin/dsh-session-title

主要配置項

初始默認值由 bundle 補丁 cordis.patch.yml 提供,可在 Settings → Session titles 中 live 修改。常用字段如下(完整表見 README):

字段 默認值 含義
targetWords 6 非 CJK 標題目標長度
targetCjkCharacters 12 CJK 標題目標長度
maxInputBytes 8192 摘要框架字節上限
maxOutputTokens 2048 單次標題調用輸出上限
timeoutMs 30000 單次調用端到端超時
maxTurnsInDigest 10 摘要攜帶的最近回合數
minTurnsBetweenUpdates 1 改寫前需完成的回合數
minStepsBetweenUpdates 2 回合中途改寫所需步驟數
minUpdateIntervalMs 120000 兩次嘗試最小間隔
includeChildSessions false 是否包含子代理會話

可選 provider / model 須成對配置;省略則繼承會話自己的路由。

典型用法

  1. 按上一節完成安裝並重啓 DSH,新開或繼續一個多輪開發會話。
  2. 打開 Settings → Session titles,按需選擇「跟隨會話模型」或釘死 provider + model,並調整標題長度與「turns · steps · interval」等改寫節奏。
  3. 正常對話與工具調用;當進展、間隔、新穎度三門均通過時,側邊欄標題會改寫爲更貼近當前工作的短名。若你手動改過標題,插件不會自動覆蓋。

開發者在本地可用 pnpm test 驗證摘要、調度與提供方邏輯;側邊欄標題變化的目視確認仍需裝入運行中的 Harness。

適用場景與注意

適合:長期多輪插件開發、排錯、規劃執行類會話,希望側邊欄可讀、便於回溯。

注意:

  • 插件以當前 DSH 進程權限運行;安裝前請閱讀源碼與 MIT 許可證,確認 tarball 來源可信。
  • 一個會話只能有一個標題提供方;若 profile 同時啓用上游實驗 bundle dsh-experimental-session-titles-bundle,會出現兩個提供方並在掛載時報錯。
  • 標題更新是「閘門放行後的改寫」,不是實時游標;繁忙會話可能在最長 minUpdateIntervalMs 內顯示略舊的名稱。
  • 摘要超過 maxInputBytes 時調用會失敗而非截斷,舊標題會保留到下次成功改寫。
  • 是否保留已有標題依賴模型遵循提示詞,並非硬性語義校驗。

結尾

dsh-session-title 把 DSH 會話標題從「第一句提示詞」換成「日誌裏真實做過的事」,並用調度與摘要控制成本。需要詳情、貢獻方式與限制說明時,見 GitHub 倉庫:https://github.com/icrefin/dsh-session-title ;安裝與版本信息也可在社區目錄 https://www.skillhub.cn/plugins/icrefin/dsh-session-title 查看。

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

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

小夜