ly6170/dsh-session-title ↗★ 0

dsh-session-title

DeepSeek Harness 插件:给模型一个按使用者自定义规则设置会话标题的工具,规则在设置页「会话标题」里配置 适合需要规范化管理会话标题,并希望由模型自动按规则命名的用户。

Package
dsh-session-title
Compatibility
Unverified
Version
0.1.0
License
MIT
Last updated
Sep 24, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ly6170/dsh-session-title

配置规则

配置有两条途径:设置页(推荐,改完即时生效)或 profile 的 config:。两者写的是同一份配置,都无需重启。

配置项类型默认说明
enabledbooleanfalse是否启用;关闭后模型看不到这个工具(运行中切换即时生效)
patternstring^(\d{4}) | ([^|]+) | ([^|]+)$标题必须匹配的正则(JS 语法,不带动界符)
patternModematch / search / nonematchmatch 全串匹配;search 允许包含;none 关闭正则校验
patternHintstring""正则不匹配时给模型看的提示,留空用默认提示
maxTitleBytesnumber80整标题的 UTF-8 字节上限
forbidTrailingPunctuationbooleantrue禁止以句末标点结尾
forbidControlCharactersbooleantrue禁止换行、制表符等控制字符
normalizeSeparatorSpacingbooleantrue把 | 前后的空白规范化为单空格
caseInsensitivebooleanfalse正则忽略大小写

默认规则是 MMDD | 版本或 tag | 描述,只是个开箱即用的示例——改成你自己的约定即可。

未启用时设置页会明确提示「当前未启用:模型看不到 set_session_title 工具」,不会让人误以为插件坏了。正则字段始终会预填当前值,所以你可以先把规则调好、再打开开关。

改动规则后,工具说明会自动重写:模型看到的描述里会带上当前生效的正则和字节上限,因此它不必盲猜格式。

不会写正则?让 LLM 帮你写

设置页说明文字下方有个折叠块「示例提示词:让 LLM 帮你写一条正则」,点开是一段可直接复制的提示词,末尾留了「我的命名需求」让你填。复制后发给任意 LLM,把返回的正则粘进「标题正则」字段即可。

提示词里刻意写死了几条输出约束(不带 / 定界符、不带 flags、不要代码块、不要解释、用 ^/$ 锚定整串、段内不含竖线用 [^|]+),否则模型经常返回没法直接粘贴的东西。它也明确说了「句末标点、字节长度、换行不用你管」——那些是本插件另外的开关,不需要塞进正则。

完整提示词(与插件内一致):

我在用 DeepSeek Harness 的 dsh-session-title 插件管理会话标题,需要你帮我写一条校验标题的正则。

请只输出正则本身:一行、不带 / 定界符、不带 flags、不要代码块、不要解释。并且:
1. 用 ^ 和 $ 锚定整串;
2. 需要单独校验的分段用括号 () 捕获;
3. 某段不允许出现竖线 | 时,用 [^|]+ 表示(| 是分段分隔符);
4. 不要处理句末标点、字节长度、换行 —— 这些插件会另外校验。

我的命名需求:

参考:插件当前的默认正则是 ^(\d{4}) \| ([^|]+) \| ([^|]+)$ ,含义是「四位日期 | 版本或 tag | 描述」。

用配置文件预设

想跳过设置页、直接预设初值,就编辑 profile 的 cordis.patch.yml(这是 schema 默认值的覆盖):

- insert:
    - id: session-title-tool
      name: dsh-session-title
      config:
        enabled: true
        # 用 [BUG]/[FEAT] 前缀
        pattern: '^\[(BUG|FEAT)\] .+$'
        maxTitleBytes: 60
      config:
        enabled: true
        # 完全不校验格式,只保留字节上限与标点规则
        patternMode: none
        maxTitleBytes: 120

关于 maxTitleBytes

宿主 session-title 服务的 maxTitleBytes 是硬上限:rename() 会按它做归一化和截断。本插件的 maxTitleBytes 是前置校验,应设置为小于或等于宿主配值,否则模型会拿到一个通过了本插件校验、却被宿主截断的标题。

base 组合里宿主配值是 80(packages/bundle/base/cordis.patch.yml),所以这里默认也取 80。

用配置文件预设

想跳过设置页、直接预设初值,就编辑 profile 的 cordis.patch.yml(这是 schema 默认值的覆盖):

- insert:
    - id: session-title-tool
      name: dsh-session-title
      config:
        enabled: true
        # 用 [BUG]/[FEAT] 前缀
        pattern: '^\[(BUG|FEAT)\] .+$'
        maxTitleBytes: 60
      config:
        enabled: true
        # 完全不校验格式,只保留字节上限与标点规则
        patternMode: none
        maxTitleBytes: 120