dsh-session-title-dated
Manifest validNames every new DSH session DATE | CATEGORY | NAME from the session model, with a deterministic local fallback.
dsh-session-title-dated
English | 中文
A DeepSeek Harness title provider that names every new session in the form:
DATE | CATEGORY | NAME
For example:
1028 | 分析 | 绿洲短剧平台验证
1027 | 整改 | 四台设备第十题验收返修
1026 | 部署 | Ubuntu 环境初始化
Dates are computed by the plugin from the session's creation time, never by the model. Categories are chosen from a small configurable taxonomy and validated locally. The model only proposes the category and the name; the provider owns the final format. If the model is unavailable, times out, or returns invalid output, a deterministic local fallback still produces a correctly shaped title.
Why
Long-lived workspaces collect dozens of sessions whose titles are either the
first few words of the first message or an auto-summary that drifts. A fixed
date | category | name convention makes the sidebar scannable across projects,
and mirrors conventions used by other coding agents.
Requirements
- DeepSeek Harness
>=0.2.1-rc.3 <0.3.0. - A working model route for the session; the title request uses the session's current provider/model unless configured otherwise.
Install
DSH Desktop / Web with Discover
Add this market index source in Plugins → Discover → Index sources:
https://cdn.jsdelivr.net/gh/xuedipiaofei/dsh-session-title-dated@v0.1.0/market/index.json
Then install Dated session titles from the list. The plugin installs as a profile bundle and appears in the Plugins page, where it can be enabled or disabled like any other bundle. The index pins a GitHub commit for reproducible installs; the package is also published on npm.
CLI
From GitHub:
dsh plugin --profile <profile> add github:xuedipiaofei/dsh-session-title-dated
The package is also on npm, so the shorter form works:
dsh plugin --profile <profile> add dsh-session-title-dated
For a local checkout:
dsh plugin --profile <profile> add ./dsh-session-title-dated
The Electron Desktop profile is managed by the application; use its Plugins
page rather than dsh plugin --profile desktop.
The bundle patch disables the shipped session-title-llm row and inserts this
provider. Do not enable the official
@deepseek-ai/dsh-experimental-session-titles-bundle at the same time: both
replace the same provider slot, and the title service accepts only one provider.
How it works
cordis.patch.ymldisablessession-title-llmand inserts thesession-title-datedrow from this package.lib/index.jsregisters a provider throughctx.sessionTitle.register()and reuses@deepseek-ai/dsh-session-title-llmfor route selection, timeouts, cancellation, token limits, and exact auxiliary-request logging.lib/format.jsis dependency-free: date formatting, category validation, name sanitizing, composition, and UTF-8 byte truncation.
The provider computes the date from session.header.createdAt in the configured
time zone, asks the model for {"category":"...","name":"..."}, validates the
category against the configured taxonomy, clips the name to the title service's
byte budget, and writes one session/title event.
Configuration
Override the row in the profile's cordis.patch.yml:
- id: session-title-dated
config:
cadence: first-prompt
dateFormat: YYMM
timeZone: Asia/Shanghai
categories:
- Analysis
- Build
- Fix
- Debug
- QA
- Deploy
- Docs
- Other
maxNameChars: 20
| Field | Default | Meaning |
|---|---|---|
cadence | first-prompt | Name once after the first eligible message, or all-prompts to retitle as the task evolves |
dateFormat | MMDD | MMDD (1028), YYMM (2610), or YYYYMMDD (20261028) |
timeZone | Asia/Shanghai | Time zone used to derive the date |
categories | Chinese 8-item set | Categories the model may choose; labels are also used by the local fallback classifier |
maxNameChars | 20 | Character cap for the name before the byte cap applies |
maxTitleBytes | service cap (80) | Effective cap is the smaller of this and session-title's maxTitleBytes |
maxInputBytes | 8192 | Input budget for the title request |
maxOutputTokens | 4096 | Output cap, including reasoning tokens |
timeoutMs | 60000 | End-to-end title-request deadline |
provider / model | session route | Optional pair to route title generation independently |
The default taxonomy is Chinese. Supply categories to use any other language
or domain; the prompt lists the configured labels and the local fallback maps
common English and Chinese keywords onto them.
1028 | 分析 | occupies 16 UTF-8 bytes, leaving about 21 Chinese characters
within the default 80-byte title budget. Longer names are truncated at a
code-point boundary.
Privacy and cost
- By default (
first-prompt) the first eligible user message is sent to the model. Withall-prompts, the first message plus up to five recent messages are sent. Message text is framed as JSON to keep user content from breaking delimiters. - The request uses the session's configured provider/model, or the optional
provider/modeloverride. The plugin makes no other network calls and collects no telemetry. - One auxiliary request is made per session by default.
all-promptsmakes one per new user message. Title work is asynchronous and never delays the main agent response;maxOutputTokens,maxInputBytes, andtimeoutMsbound it. - The resulting title is stored in the session log as a normal
session/titleevent. A manual rename pins the title and later automatic revisions do not overwrite it.
Compatibility notes
- This package targets the DSH 0.2 line.
engines.dshrefuses to install it on 0.3+ until it is updated against the new title API. - The bundle assumes the shipped row id
session-title-llm. If another title provider is already registered, activation fails rather than silently winning; disable the other provider first. - The provider imports
@deepseek-ai/dsh-session-title-llmdynamically. A missing or incompatible executor degrades to local naming, but a changedctx.sessionTitleAPI can prevent registration. Pin the DSH range when publishing a release.
Development
The repository has no runtime or build dependencies.
npm test # format tests, provider tests with a stubbed executor, metadata/index checks
npm run validate:index # optional: validate market/index.json with the official validator if installed
npm run pack:check # inspect the npm tarball contents
The provider test redirects @deepseek-ai/dsh-session-title-llm to
test/support/stub-executor.mjs with Node's module.registerHooks, so it
exercises the real provider without a DSH install or model credentials.
Release steps are in PUBLISHING.md.
License
MIT © 2026 xuedipiaofei
Comments
Loading…
Similar plugins
Reformats dsh session titles as "date | type | topic" (type and topic are summarized by a model from the full conversation), and hides unused sessions from the sidebar without deleting them.
★ 2
↓ 275/wk
MIT
TypeScript
dsh plugin --profile web add dsh-session-title-patternby 9Ashwin
DSH plugin: a model-facing rename_session tool, so the agent can retitle a session from inside the conversation.
★ 0
MIT
JavaScript
Sep 13, 2026
dsh plugin --profile web add dsh-session-renameAuto-renames DSH sessions with LLM-summarized titles: runs after the first prompt and on /handoff, or manually via a header button or /autotitle, with configurable title language and max title bytes.
★ 0
↓ 509/wk
dsh plugin --profile web add @lyxx/dsh-session-autotitleby y2zyyr
Automatic session titles for DeepSeek Harness, using the conversation model. English and Chinese documentation.
★ 0
MIT
JavaScript
Oct 4, 2026
dsh plugin --profile web add smart-session-titleby ZilongYang
Generate a title for a whole DSH session on demand, then confirm before it is applied.
★ 0
MIT
JavaScript
Oct 1, 2026
dsh plugin --profile web add dsh-session-titlerby CHIP-PHILO-GH
DeepSeek Harness「新建会话」命名插件:点新建会话先弹一个轻量对话框填会话名,留空则按第一条消息自动命名。Ask for a session name when starting a new conversation.
★ 0
MIT
JavaScript
Sep 15, 2026
dsh plugin --profile web add dsh-session-namer