kira905/dsh-session-title-live ↗★ 0
dsh-session-title-live
Live session-title provider for dsh: regenerates the session title after EVERY user message (automatic: "all-prompts"), summarizing the most recent messages within a byte budget. Zero dependencies. 适合需要实时、精准且符合字节预算的会话标题更新的用户。
インストール
検証済み bundle がないか、互換性チェックに失敗しています。先にリポジトリの説明を読んでください。 README 全文を読む ↗
ドキュメント
README 全文を読む ↗四、配置
三层合并,后者覆盖前者:
lib/config.js里的默认值(即示例文件里的值);SESSION_TITLE_LIVE_CONFIG指向的 JSON 文件(不设这个环境变量就不会读任何文件);- 宿主
cordis.patch.yml里该插件config:段。
对象段(marks / killSwitch)深合并(只覆盖你写的那几个键);非法值会被清洗成默认值
并打一条 warn 日志(不会让插件起不来)。
目录解析(home)走 SESSION_TITLE_LIVE_HOME > DSH_HOME > ~/.dsh,跨平台,没有机器路径硬编码。
| 键 | 默认值 | 说明 |
|---|---|---|
targetWords | 5 | 非 CJK 语言的标题目标词数(只写进提示词) |
targetCjkCharacters | 10 | CJK 目标字数(只写进提示词) |
maxInputBytes | 32768 | 送进模型的输入字节预算(超了从最新消息往前收拢) |
maxOutputTokens | 128 | 标题输出 token 上限 |
maxTitleBytes | 80 | 标题落盘的 UTF-8 字节上限(与主包标题上限一致) |
timeoutMs | 30000 | 单次生成超时 |
provider / model | 不设 | 成对配置则用独立路由生成标题;都不写 = 跟随会话主请求的路由 |
promptIntro | 见示例 | 送进模型的 JSON 数组前的引导句 |
systemPrompt | 不设 | 自定义系统提示词(字符串或字符串数组),省略 = 内置 |
selfSchedule | true | 自建调度总开关(false = 退回主包调度原状,多数情况下标题就不会刷新了) |
selfScheduleMaxHumans | 32 | 每会话内存里保留的人类消息条数上限 |
minIncrementChars | 20 | 最小值门槛:新增字数低于它就不重生成(0 = 关) |
themeAnchorMax | 6 | 主题锚(上一版标题依据)保留条数上限(0 = 关锚) |
turnMarks | true | 回合边界自动打前缀总开关 |
markBaseBudgetBytes | 64 | 加前缀前的基名字节预算 |
markProvider | dsh-session-title-live#turn-mark | 打标写回时 source.provider 的名字(用于识别"这条是我们写的") |
marks.prefix | {running:'【运行】', done:'【完成】'} | 状态 → 前缀文本 |
marks.textToState | {运行:running, 完成:done, 待命:idle, 已中断:interrupted} | 前缀文本 → 状态(键不要带括号) |
marks.baseFallback | 会话 | 标题只剩前缀时的兜底基名 |
killSwitch.file | dsh-session-title-live.json | 活开关文件名(相对 home)或绝对路径 |
killSwitch.moduleId | session-title-live | 开关文件里 modules..enabled 的 id |
killSwitch.cacheMs | 3000 | 读盘缓存(手改文件 ≤ 该毫秒数生效) |
killSwitch.enabled | true | 直接停用(等价于开关文件里写 enabled:false) |
killSwitch.resumeHint | 见源码 | 关闭后打进日志 / 错误信息的恢复提示 |
⚠️ 改了
marks.prefix记得让marks.textToState能认出你写出去的前缀形状。 本插件把两个来源合并成识别表(prefix的字面值 +textToState的键),所以像[RUN]这种自定义前缀也能被认出来、不会在下一轮叠一层;但如果你把前缀改成"无包裹"的裸词(例如运行), 建议同时把它加进textToState以免误伤正文。
活开关(kill switch)
// /dsh-session-title-live.json
{ "modules": { "session-title-live": { "enabled": false, "why": "在查别的问题,先别刷标题" } } }
也支持顶层简写 { "enabled": false }。enabled:true = 开。
- fail-safe:文件读不到 / 坏 JSON / 没有该模块键 → 继续工作(缺文件 ≠ 要求关闭)。
- 环境变量:
SESSION_TITLE_LIVE_DISABLED=1立即停(优先于文件;容器 / CI 用)。 - 关闭后:不打标、不生成、零写入零 token(每次回合 / 每次生成前现读,≤3s 生效,不必重启)。
1) 静态验证(语法 + 配置层行为 + 脱敏扫描;要在本机覆盖实名规则时注入 BUILD_* 见脚本头部)
2) 干净路径端到端(自建临时 home + 非默认配置,跑完自动清理;--keep 保留以便排障)
node scripts/test-e2e.mjs