dsh-session-title-interval-llm

by Townrain

1 会话与消息github未核验到 manifest收录于 08-16

DeepSeek Harness 自动会话标题插件(间隔节奏 LLM 提供商)Every-N-prompts

Every-N-prompts automatic session-title plugin for DeepSeek Harness (interval cadence LLM provider)

安装

dsh plugin --profile web add github:Townrain/dsh-session-title-interval-llm

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

English | 中文

一个 DeepSeek Harness 插件,让侧栏会话标题跟上整段对话:可选的 ctx.sessionTitle 提供方在第一条符合条件的提示词上发起一次便宜的 LLM 标题请求,此后每 interval 条新的人类提示词重新命名一次。它注册了 interval 节奏——harness 在 first-prompt 与 all-prompts 之外的第三种自动模式——于是部署可以把标题路由到便宜模型(如 deepseek-v4-flash),干活模型完全不受影响。

仓库包含两个包:packages/session-title-interval-llm(插件本体)与 packages/session-title-llm(其内嵌的共享标题 LLM 辅助包:组帧、限额、超时、session-title-llm 设置分节与实时重新注册)。辅助包随仓库内置,插件可作为一个自包含仓库安装;上游 harness 以 @deepseek-ai/dsh-session-title-llm 发布同名包,插件采用能解析到的那个版本。

两种集成模式

  • 注入模式——零 harness 改动。 在插件配置里写 mode: 'injected':插件监听 session/event,按会话统计符合条件的人类消息,并直接追加 session/title 事件。确定性回退、标题折叠与手动改名钉住照常工作,因为所有界面都读日志。/retitle 斜杠命令(组合了 commands 服务时注册)按需重新生成并刻意解钉手动改名。这是自包含路径:仅凭本仓库即可在 stock harness 上交付完整功能。
  • 提供方模式(默认)。 在会话标题服务上注册 interval 节奏,需要服务带有 interval 节奏的 harness 构建(deepseek-ai/deepseek-harness 的上游改动,Townrain fork 已承载)。它集成所有服务持有的界面:自动调度、显式刷新与 Web 会话行的"重新生成标题"操作。

安装

把两个包 junction 进 profile 的 node_modules,然后挂载插件行:

New-Item -ItemType Junction -Path $env:USERPROFILE\.dsh\profiles\node_modules\@deepseek-ai\dsh-session-title-interval-llm -Target <本仓库>\packages\session-title-interval-llm
New-Item -ItemType Junction -Path $env:USERPROFILE\.dsh\profiles\node_modules\@deepseek-ai\dsh-session-title-llm -Target <本仓库>\packages\session-title-llm

然后在 profiles/<profile>/cordis.patch.yml 中追加(先禁用 bundle 默认的标题提供方,再插入本插件):

- id: session-title-llm
  disabled: true
- insert:
    - id: session-title-interval
      name: '@deepseek-ai/dsh-session-title-interval-llm'
      config:
        targetWords: 5
        targetCjkCharacters: 10
        maxInputBytes: 4096
        maxOutputTokens: 64
        timeoutMs: 60000
        interval: 5
        provider: deepseek-official
        model: deepseek-v4-flash
        mode: injected

重启 harness。mode: 'injected' 下,stock harness 的侧栏标题就开始跟随对话:第一条符合条件提示词立即命名,此后每 interval 条命名一次;/retitle 按需重新生成(并解钉)标题。在带有 interval 节奏的 harness(上述 fork)上,省略 mode 走提供方路径,此时 设置 → 插件 → 插件配置 中还会出现标题模型、间隔与自动标题开关(共享的 session-title-llm 设置分节),每个会话行三点菜单也会多出重新生成标题。

stock harness 上的会话行「重新生成标题」

injected 模式同样给 stock harness 提供行菜单表面:插件注册了一个 webserver 桥 POST /plugins/session-title/retitle({ "sessionId": "..." }),通过 sessions.get 解析任意已持久化会话(不需要活跃 agent,历史会话行也能用),走与 /retitle 完全相同的重新生成路径——包括主动解除手动重命名钉。

要把它变成菜单项,搭配 dsh-session-title-settings-card 使用:该插件向 stock 会话行菜单注入重新生成标题项,并修补 fork 所携带的两处 stock 接缝(其 scripts/patch-stock.mjs 幂等——每次升级 dsh 后重跑即可)。不装卡片插件时,桥本身仍可直接调用(curl 或其他客户端)。

配置

共享必填字段(targetWords、targetCjkCharacters、maxInputBytes、maxOutputTokens、timeoutMs、可选成对的 provider/model、可选 enabled)见 packages/session-title-llm/README.md;interval 节奏约定见 packages/session-title-interval-llm/README.md。

provider 与 model 两者都不写则继承每条主请求记录的路由;两者都写则标题生成独立于干活模型。

许可证

MIT——见 LICENSE。

原始 README: https://github.com/Townrain/dsh-session-title-interval-llm/blob/main/README.zh.md ↗