2001Y/dsh-session-title-idle-refresh ↗★ 0

dsh-session-title-idle-refresh

DSH session-title provider that titles from all human messages (not just the first), plus idle retitling: sessions idle past a threshold get one refresh() so their title catches up with the conversation. Replaces the stock first-prompt provider. 适合希望会话标题能根据后续对话内容自动更新、不再局限于首条消息的用户。

Package
dsh-session-title-idle-refresh
Compatibility
Unverified
Harness peer range
^0.2.1-rc.2
Cordis peer range
^4.0.1
Version
0.1.0
License
MIT
Last updated
Oct 26, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:2001Y/dsh-session-title-idle-refresh

dsh-session-title-idle-refresh

DSH (DeepSeek Harness 0.2.1) session-title plugin built for Yoshiki Tamura.

  • Registers the session-title provider with automatic: "first-prompt" — the initial title is generated exactly once, as with the stock provider — but generation reads all human messages (stock all-prompts policy, including its keep-an-adequate-title stability rules, with the input trimmed to the byte budget).
  • A timer scans live sessions every scanMs. A session is refreshed once via ctx.sessionTitle.refresh() when all hold:
    • its title does not yet cover the latest human message,
    • the last event and the last human message are older than idleMs (default 30 min),
    • it has at least minMessages human messages (default 2),
    • it is not a subagent child session,
    • its title is not user-pinned (rename). Attempts per uncovered tail are recorded in memory; a refresh is never retried for the same tail before max(idleMs, 30min) passes.

Install (web profile)

dsh plugin --profile web add dsh-session-title-idle-refresh
# then restart dsh web

The package ships a bundle patch (cordis.patch.yml) that inserts the provider row with the defaults below and disables the stock session-title-llm row — only one title provider may be registered, and this plugin replaces it (the same swap pattern the official session-titles bundle uses for its all-prompts provider). To tune, restate the row in your profile's cordis.patch.yml:

- id: session-title-idle-refresh
  config:
    idleMs: 1800000
    scanMs: 60000

Config defaults

idleMs 1800000 · scanMs 60000 · minMessages 2 · maxPerScan 3 · targetWords 5 · targetCjkCharacters 10 · maxInputBytes 16384 · maxOutputTokens 4096 · timeoutMs 60000. No provider/model is pinned: titles use each session's own logged route, like the stock provider.

Upstream

An in-tree version of this behavior (a third automatic mode, idle, for the session-title service) was prototyped against deepseek-ai/deepseek-harness and is kept here as upstream-idle-mode.patch. It is shelved for now: the upstream repository does not accept external PRs, and the maintainer prefers the plugin form.