🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话智能标题 y2zyyr/smart-session-title

DeepSeek Harness
y2zyyr33 天前有提交已提供中文文档扫描:未发现敏感能力

自动为每个会话生成简洁准确的任务标题

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add y2zyyr/smart-session-title
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 33 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

写入剪贴板(不计风险)
查看扫描证据(共 1 处,展示前 1 条)
  • 写入剪贴板
    client.js:1901
    return window.navigator.clipboard.writeText(props.sessionId);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm@deepseek-ai/dsh-session-title@deepseek-ai/schemastery@deepseek-ai/dsh-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 自动生成会话标题
  • 基于对话模型
  • 附中英文文档

用对话模型给 DeepSeek Harness 自动生成会话标题,附中英文文档。

README

由 DeepSeek 最新模型翻译生成
smart-session-title DeepSeek Harness 会话智能标题插件。0.5.0-rc.17 — 发布候选版本,发布时使用 npm next 标签。 功能 本版新增标题预览与批量旧/新标题对比:先生成候选,确认后只应用勾选项。修复排除词删除后重组、最终标题长度、设置列表越界、生成中锁定、兜底覆盖用户路由、永久错误重复调用,以及 Goal 编辑后再次重生成的问题。 设置页采用分组表单与蓝色操作按钮,通过「标题设置/批量优化」切换页面。常用标题规则直接展示,高级参数和详细说明折叠;底部「保存设置」按钮统一保存并显示结果。批量页支持自动加载、标题或 ID 搜索和项目筛选,旧/新标题并排显示,窄窗口改为上下对照。批量路由显示已保存配置;固定模型模式隐藏重复的自动兜底选项。日期格式仅在添加日期时显示。 自动把会话任务概括为短标题。默认直接使用该会话实际使用的 provider/model,无需另选模型。 压缩过长、代码密集的输入,拒绝无任务含义的问候和无用模型输出;保留 DSH 的 fallback、人工标题保护、持久化、投影与并发控制。 - 提供 /retitle 与标题旁的重新生成按钮,显式重新生成可覆盖人工标题,且不受弱提示过滤限制(全为 继续写 / 发布 这类短命令的会话也能改名;自动生成照旧过滤)。
展开完整文档(README 剩余 1 节)
smart-session-title

DeepSeek Harness 会话智能标题插件。0.5.0-rc.17 — 发布候选版本,发布时使用 npm next 标签。

功能

本版新增标题预览与批量旧/新标题对比:先生成候选,确认后只应用勾选项。修复排除词删除后重组、最终标题长度、设置列表越界、生成中锁定、兜底覆盖用户路由、永久错误重复调用,以及 Goal 编辑后再次重生成的问题。

设置页采用分组表单与蓝色操作按钮,通过「标题设置/批量优化」切换页面。常用标题规则直接展示,高级参数和详细说明折叠;底部「保存设置」按钮统一保存并显示结果。批量页支持自动加载、标题或 ID 搜索和项目筛选,旧/新标题并排显示,窄窗口改为上下对照。批量路由显示已保存配置;固定模型模式隐藏重复的自动兜底选项。日期格式仅在添加日期时显示。

自动把会话任务概括为短标题。默认直接使用该会话实际使用的 provider/model,无需另选模型。
压缩过长、代码密集的输入,拒绝无任务含义的问候和无用模型输出;保留 DSH 的 fallback、人工标题保护、持久化、投影与并发控制。

- 提供 /retitle 与标题旁的重新生成按钮,显式重新生成可覆盖人工标题,且不受弱提示过滤限制(全为 继续写 / 发布 这类短命令的会话也能改名;自动生成照旧过滤)。
- 标题格式与内容:字数上限、日期前缀/后缀,以及标题风格(默认/简短任务名/动作+对象)与语言(自动/中文/英文)。
- 标题排除词:把客户名、内部代号等词从生成流程中删除,并复核最终标题;只约束本插件生成的标题。
- 标题锁定:会话标题旁的锁按钮;自动生成跳过、重新生成拒绝、批量默认排除。
- 批量优化历史会话标题:列表勾选、进度条、关闭设置页后继续跑,并且随时可停。
- 设置页页脚显示当前插件版本,便于反馈问题时指明构建版本。

为什么需要它

已验证的 DSH 内建 provider 在输入超过 4096 bytes 时不调用模型。本插件会压缩再生成;15,536-byte 原始测试提示已通过真实模型验证。
它只替换 provider,不修改 Core 或 app.asar,不自建 LLM HTTP client。

安装

手动管理的 profile 可在其目录内执行:

npm install smart-session-title@next --legacy-peer-deps

运行时 Core 依赖由 DSH 提供;此参数避免 npm 安装另一套 Core。请确认下方兼容版本。

从 npm 安装:smart-session-title@next(当前为 RC 版本)。将包放入所选 profile 的 node_modules/smart-session-title,在该 profile 的 package.json 中把 bundle 放在 base/Web bundle 之后:

{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"smart-session-title"
]
}
}
}

保留 profile 中原有的其他 bundles。备份 profile 的 package.json 和 cordis.patch.yml 后再编辑,重启 DSH。
cordis.patch.yml 会禁用内建 session-title-llm,然后注册本插件。
启动日志应包含 smart-session-title provider registered ... automatic=all-prompts。

移除 bundle 并重启即可恢复内建 provider。不要直接禁用本插件行而留下禁用内建 provider 的 patch。
已在真实 DSH Desktop profile 完成安装和启动验证。

兼容性

上一次完成真实安装与启动验证的环境:DSH Desktop 2.0.9、Core 0.1.5-rc.1、Cordis 4.0.2、Schemastery 3.18.2,Node ≥22.15.0。
官方 deepseek-harness v0.2.0-rc.1 release 及其 registry packages 使用 Core 0.2.0-rc.1。本机 DSH Desktop 2.0.9 的 app.asar 提供 Core 0.2.0-rc.2、Cordis 4.0.4、Schemastery 3.18.4。已对照官方 rc.1 文档和本机 rc.2 bundle 检查本插件所需的 API 契约,但尚未在 Core 0.2 上完成插件启动验证。peerDependencies 覆盖 Core 两代:DSH 运行时包使用 ^0.1.5-rc.1 || ^0.2.0-rc.1,Schemastery 使用 ~3.18.2。
其他 Core 版本尚未验证。
启动时检查 title service、LLM;注册 provider 前会验证设置。Core 0.1 使用 settings.register / settingsScope;Core 0.2 使用 volatile plugin Config / configForms。
Web 端使用 DSH 原生 slots、locale 和 Remote commands。
插件不按版本字符串硬编码拒绝。

设置

Core 0.1 打开 设置 → 智能会话标题;Core 0.2 可在 设置 → 智能会话标题 或 插件 → 已安装 → smart-session-title 打开相同设置页。
Core 0.1 通过 DSH 官方 settings service 写入 $DSH_HOME/settings.yaml 的 smart-session-title namespace; Core 0.2 将相同字段存入当前 DSH profile 中本插件的 volatile Config。两者都由 DSH 负责原子写入、revision 和变更通知。
没有插件自建 sidecar、watcher 或 HTTP 服务。下一次生成实时使用新设置,当前进行中的请求保持开始时的配置;新设的标题锁例外,会中断生成并阻止结果写入。
设置页页脚显示当前插件版本。

| 字段 | 默认 | 含义 |
| enabled | true | AI 标题总开关 |
| mode | 未选择时跟随会话¹ | current-session / configured / disabled |
| provider | 未设置 | 已在 DSH 中配置的 provider ID |
| model | 未设置 | 同一 provider 下的 model ID |
| timeoutMs | 15000 | 每次尝试期限;UI 范围 1000–120000 ms |
| maxAttempts | 2 | 总尝试数;范围 1–3 |
| maxTitleCharacters | 未设置(继承 80 字节) | 整个标题的字数上限,包含日期(Unicode 码点);范围 8–120 |
| titleDatePosition | 未设置(不加日期) | prefix / suffix:把会话创建日期放在标题前或后 |
| titleDateFormat | ymd | ymd(2026-09-13)或 md(09-13);未选位置时该项无作用 |
| titleStyle | 未设置(插件默认,当前为「动作+对象」) | action-object(动作+对象)或 short-name(简短任务名) |
| titleLanguage | 未设置(跟随任务主要语言) | zh(中文)或 en(英文),强制生效 |
| titleExclusions | 未设置(不排除) | 字符串数组:不希望出现在生成标题里的词,最多 50 条、每条 ≤ 64 字符 |
| lockedSessionIds | 未设置(无锁定) | 字符串数组:标题被锁定、任何入口都不得改写的会话 id,最多 500 条 |

¹ 兼容原 Phase 1/2 部署:若在 bundle 行配置中明确钉住了 provider/model,且用户从未选择模式,仍保留该路由。
显式选择 current-session 后始终使用会话路由。本插件随附配置没有钉住模型。

选择「固定模型」后,先填完整 provider/model,再点击「保存设置」,一次提交完整路由。
ID 来自 DSH 的 Models 页面;本插件没有模型浏览器,也不接受凭据字段。
所有设置先编辑,再点击页面底部的「保存设置」统一生效;保存失败保留填写内容。切换页面保留未保存的草稿,批量优化使用最后保存的模型配置。模型提示与标题操作说明位于页面底部的「使用说明」。

标题格式与内容(字数、日期、风格、语言、排除词)

设置页直接展示 标题规则,不需要展开「高级设置」:

- 标题最大字数:留空表示继承部署配置,也就是 DSH 的 maxTitleBytes: 80(约 26 个汉字或 80 个西文字符)。
填写 8–120 后,先按字节截断、再按字数截断,两个上限同时成立;截断优先落在分隔符处,避免切断单词。
- 日期位置 / 日期格式:日期取会话创建时间(session.header.createdAt,本地时区),不是「生成时刻」——重新生成标题、或对历史会话批量补标题,日期都保持该会话自己的那天。位置可选前缀(2026-09-13 标题)或后缀(标题 · 2026-09-13),也可选「不添加」。
- 前缀与后缀都会先从 80 字节预算里扣除再截断正文:DSH 对超长标题是按字节从尾部截断的,不预留的话后缀会第一个被吃掉。字数上限也包含日期,正文可用字数会减去日期占用的空间。若不足以为正文留下 4 个字符,则省略日期;例如字数上限为 8 时不添加完整年月日。
- 日期本身命中排除词,或在正文与日期的连接处拼出排除词时,省略日期。
- 日期取不到(会话头缺少 createdAt、或时区不可解析)时不加前后缀,而不是生成一个坏标题。
- 该日期只作用于本插件生成的标题:AI 关闭时的 fallback 标题、以及你手动重命名的标题由 DSH Core 生成/写入,不会带上它。

风格与语言

| 设置 | 同一段任务「检查登录接口并解决超时问题」的标题 |
| 默认(或动作+对象)+自动 | 修复登录接口超时 |
| 简短任务名+中文 | 登录接口超时 |
| 动作+对象+英文 | Fix login API timeout |

- 语言「自动」(默认)跟随任务内容的主要语言,技术名称(React、API、错误标识符)保持原样;选中文或英文则强制翻译,技术名称同样保持原样。
- 这两项替换系统提示里对应的默认规则,而不是叠加:选「简短任务名」时不会同时要求「动词+对象」,重试指令也跟随同一设置,所以不会出现「第一次遵守、重试又变回去」。
- 三者(自动生成、手动重新生成、批量处理)走同一个入口,因此设置对三种场景同时生效。
- 修改设置不会重写已有标题——标题已写在会话日志里,只有下一次生成才会用新设置。
- 边界:AI 关闭时的 fallback 标题、以及模型失败时保留的旧标题,都不受风格/语言影响。

标题排除词

在 标题排除词 里每行填一个词(例如客户名、内部项目代号),最多 50 条、每条 ≤ 64 字符:

客户甲内部项目代号

任务是「修复客户甲的订单导出错误」时,生成结果可以是「修复订单导出错误」。两层处理:

1. 生成前:这些词会从送给模型的提示文本中删除(词本身不会出现在提示或日志里),并告知模型「部分名称已被移除,需要用概括性称呼,不要猜测或还原」。
2. 生成后:对最终要入库的那个标题字符串再检查一次;仍命中时先带强化指令重试一次。

最后一次尝试仍命中时,直接把这个词从标题里删掉,而不是放弃这个标题。原因是:放弃会让 DSH 的 fallback 标题留在侧栏上,而 fallback 正是取首条用户消息的开头——那才是真正会把客户名显示出来的路径。
若删词后标题已经空到无法通过校验,本次生成明确失败(侧栏保留原样),不做无意义的兜底。

匹配规则:按字面匹配。含英文字母的词忽略大小写(Acme 命中 ACME),其余按原文精确匹配;不存在词形还原、别名或翻译——客户甲 / ClientA / 甲方 需要分别添加。

它只能约束本插件生成的标题,这是刻意不扩大宣传的边界:

- DSH 的 fallback 标题(新会话在模型回答前显示的就是它,取自首条消息原文)不受影响;
- 你手动重命名的标题不受影响;
- 对话原文当然不会被修改——发给主模型的对话内容与本设置无关;
- 排除词表本身以明文存在 DSH 管理的设置中:Core 0.1 是 settings.yaml,Core 0.2 是当前 profile 配置。

因此它的准确名字是「标题排除词」,不是隐私或脱敏功能。它最实际的用途是配合批量优化历史标题,把一批历史标题里的名字一次性去掉。

标题锁定

会话标题旁的锁定按钮(在「重新生成标题」右边)用于把某个标题钉死。锁定状态由按钮本身显示:闭合的锁表示已锁定,鼠标悬停与无障碍标签始终说明点击会做什么(「锁定标题」/「解锁标题」)。

锁定覆盖自动生成、/retitle、预览、应用预览及批量处理:

| 你的规则 | 实际行为 |
| 自动生成跳过锁定会话 | provider 直接弃权(locked),不发起模型调用 |
| 手动重新生成提示已锁定 | 重新生成按钮变为禁用并显示「标题已锁定,请先解锁」 |
| 批量列表排除锁定会话 | 列表不显示它们,并在计数旁显示「已跳过已锁定会话: N」 |
| 批量运行覆盖不到它们 | 连「全选」也选不中锁定行 |

- 生成中锁定会立即中断模型流;接受结果前再次读取锁定状态,避免遗漏通知后仍然写入。达到 500 个锁定项后仍可解锁,但新增项会在写入前被拒绝。
- 锁定状态保存在插件自己的 DSH 托管配置(lockedSessionIds), 不是浏览器 localStorage:换窗口、清浏览器数据、重启 DSH 后锁定都还在。
- 没有「仍然包含」的覆盖开关——解锁是一个明确动作。这是刻意的:锁定若能被某个入口绕过就不叫锁定。
- 锁不住的两件事(与排除词同类的边界):① 会话还没有标题时,DSH Core 仍会写入取自首条消息的 fallback 标题;② 你自己在 DSH 界面手动改名不受影响。锁定保护的是已有标题不被本插件的自动、重新生成与批量路径改写。
- 代价(诚实说明):会话 id 列表存在配置文件里,且「重置设置」或还原配置备份会一并丢掉锁定。

批量优化历史标题

同一页面会列出已存储的会话及各自当前标题,用于给插件安装之前产生的会话补做标题优化:勾选要处理的行(可按项目目录筛选后全选)再开始;单次最多渲染 300 行,历史很多时先用项目目录筛选。

- 每次只处理一个会话,严格串行。每个会话可能按 maxAttempts 重试,自动兜底还会增加调用;预览也调用模型,应用预览不再调用。
- 被选中的标题会被重写,包括你手动改过的标题——显式 /retitle 是 DSH 设计上解开人工标题钉住的方式。
- 没有可用用户消息的会话与子代理会话会被跳过(前者无内容可生成,后者 host 拒绝恢复)。
- 进度(已完成 / 成功 / 失败)由插件作用域的运行器持有,而不是页面状态:关闭设置页不会中断批次,重新打开设置页会继续显示实时进度。只有刷新整个 DSH 窗口才会中断;已完成会话的新标题都已落盘。
停止是即时的:commands/execute 接受尾部 AbortSignal,因此当前会话的生成会被真正中断,队列不再继续,被中断的会话既不算成功也不算失败。停止入口有两个:设置页内按钮,以及全局的小进度浮标(shell.overlay)——后者让「设置页已关闭」的后台批次也能随时停。
- 失败项会显示 host 给出的真实原因(路由失效 / 超时 / maxOutputTokens / 无可用消息),而不是笼统的「失败」; 重试失败项 会用当前生效的路由设置只重跑这些会话。
- 路由注意:跟随当前会话模型 使用每个已存储会话自己记录的模型;旧会话记录的 provider/model 可能已不存在、或凭据已失效,这类失败会在毫秒级返回。此时切到 指定模型 选一个可用组合,再点 重试失败项。
- 列表会显示每个会话记录的模型(取自 DSH 的 modelSelection 投影),并在开跑前标出 DSH 已不再提供的那些并给出数量:这些会话在「跟随当前会话模型」下必然失败。
- 自动兜底(默认关闭,需手动勾选):已保存「指定模型」时,跑完一批后会用该路由只重跑失败的会话一次,结束后仅在仍拥有临时路由时恢复原来的标题模式;用户中途保存的 mode/provider/model(包括同值模式)会保留。重跑期间是一次真实的设置写入,因此默认不开启。
勾选状态记在浏览器本地存储,而不是会跨窗口和重启共享的 DSH 设置中;它只控制当前浏览器的批量行为。

标题预览与应用

在会话标题旁点击「预览标题」,查看原标题和候选标题。预览调用标题模型,但不写入 session/title。点击「应用此标题」后,才通过 DSH 官方 sessionTitle.rename() 保存该候选,应用不再次调用模型。确认的标题按人工标题保护,自动生成不会覆盖。

在「批量优化」页选择会话后点击「预览所选」,查看并排的原/候选标题;窄窗口自动改为上下对照。预览完成后,会话选择区收起,可通过「重新选择会话」展开。搜索和项目筛选也适用于候选标题,筛选不会清掉已有勾选;底部会显示全部已勾选候选数。取消不满意项的勾选,再点击底部「应用所选」。已应用项会标记,失败项保留原因。「直接优化」会直接生成并保存;它的兜底选项收在「直接优化与兜底设置」中。预览、应用均串行处理并支持停止,关闭设置页保留进度和对比;刷新整个窗口会清空客户端队列与对比视图。

预览使用当前已保存的路由,不执行临时切换设置的自动兜底;修正路由并保存后,应重新预览。host 内存中最多保留 500 个候选,有效期一小时。新增用户输入、Goal 变更、标题变化或相关标题规则/路由变化后,旧候选拒绝应用;应用前还会检查锁定和 AI 开关。host 重启或插件卸载会清空缓存。

对应命令为 /title-preview(返回带 previewId 的 JSON 候选)和 /title-apply <previewId>。候选 ID 仅属于原会话,成功应用后不能重复使用。DSH 仍按常规记录命令执行与结果;预览不改标题,也不追加伪造的用户消息。

模型模式

- current-session:使用 request.route,即当前会话实际的 provider/model,不替换成全局默认模型。
- configured:仅标题使用保存的 provider/model;主会话模型不变。缺任一字段立即拒绝保存。
- disabled(或关闭 Enabled):标题 LLM calls = 0,provider title events = 0;fallback、人工改名、标题投影照常。

Configured 模式支持标题与主会话使用不同的 provider/model。

重新生成

使用 /retitle,或点击会话标题旁的重新生成按钮。普通用户输入走官方 SessionTitleService.refresh();纯 Goal 会话走下文的受保护恢复路径。
按钮在请求中禁用并显示 loading,完成后恢复;重复点击合并同一会话的请求。
显式重新生成可以替换人工标题;自动生成始终保护人工标题。失败保留旧标题,取消不重试。
AI 关闭时 /retitle 返回 AI title generation is disabled.,不调用模型。
第三方直接调用裸 refresh() 不会获得本插件显式覆盖人工标题的 token。

显式 /retitle 不受弱提示过滤限制:当会话里没有任何「有任务」的消息时(典型是写作模式,人工消息只有 继续写 / 发布 这类短祈使句),/retitle 会取最新一条这类短命令生成标题,而不是直接失败。自动生成照旧过滤:问候、纯 URL/路径/代码、纯标点、指代不明的短句仍然弃权。

仅由 DSH /goal 驱动的会话也支持显式 /retitle:Goal objective 不属于 Core 普通 user/message 标题输入,插件会在显式请求时读取最新 Goal objective 作为临时标题输入;不会向会话追加伪造消息。
这条恢复路径只用于显式操作,不会让自动标题调度改写 Goal 会话。/goal edit 后再次 /retitle 会使用新 objective,即使已有标题也会重新生成。新的生成会取消旧请求;期间输入、路由或人工标题发生变化时,旧结果拒绝写入。Goal 标题通过官方 rename() 保存,按人工标题保护。

UNKNOWN_MODEL、NO_ADAPTER、AUTH、无效凭据等永久错误不重试。临时错误使用可取消的退避等待(250 ms、500 ms);providerRetryAfterMs 只有在不超过 5 秒且不超过 timeoutMs 时才等待后重试,超过窗口则明确失败,不提前重试。输出质量重试仍受 maxAttempts 限制。

弱语义首条消息

你好 → 谢谢 → 在吗 → 帮我审计数据库性能:前三条 0 次标题调用,真实任务出现后才生成一次。
后续消息不会使 provider 标题漂移,子会话不会自动生成标题。
决策读取 Core 回放的消息和标题,不依赖插件内存历史。
/retitle 是显式请求,会放宽这条过滤——但只放宽「短祈使句」这一类,且取最新一条;其余弱消息形态(问候、纯 URL/路径/代码、纯标点、指代不明)即使显式请求也仍然拒绝。

隐私

标题生成是额外的 LLM 请求;默认使用当前会话模型,失败时最多重试到 maxAttempts。
configured 模式会把压缩后的首条有效任务发送给所选 provider,该 provider 可能不同于会话 provider。
标题不会进入模型上下文;插件不额外保存 session/title-llm-request 提示副本。

插件 Settings 只允许十四个声明字段,unknown-key guard 拒绝 apiKey、token、cookie、credential、secret、password 等未知字段。
UI 只处理模型 ID 和运行参数,凭据完全由 DSH 管理。
诊断不写完整 Prompt、完整模型响应或凭据;adapter 原始错误文本也不写入插件日志,避免错误回显敏感输入。

本地诊断

插件使用 ctx.logger。DSH Desktop 的正式 FileExporter / LogFileSink 将其持久化至 <DSH userData>/logs/host/dsh-YYYY-MM-DD.log,warn/error 同时进入 .error.log。
本机通常为 ~/Library/Application Support/DSH Desktop/logs/host/;请以实际 userData 为准。
日志级别需允许 info 才能看到成功/abstain;warn 包含失败/超时。

检索 smart-session-title generation:字段包括 sessionId、route、attempt、rawBytes、preparedBytes、elapsedMs、result/outcome、failureReason。
结果区分 generated、abstained、failed、timed-out、retried、cancelled。
DSH 自己的日志脱敏器可能把 sessionId 显示为 **;插件不绕过它。
/title-status 可查看当前进程内计数;计数重启归零,持久历史以日志为准。
纯 SDK/Web 运行器未必默认配置文件 exporter;本插件不会自行创建文件 sink。
Phase 3 已在隔离真实 DSH runtime 挂载原装 Desktop exporter,确认成功和失败日志真正落盘。

插件冲突

全局只能有一个标题 provider。already registered 表示另一个 provider 仍活跃,启动应失败。
不要同时启用内建标题 provider 或其他第三方标题插件。本 bundle 已负责替换内建 provider。

故障排查

| Problem | Likely cause / 处理 |
| Always fallback | 模型失败、输出被拒绝或 AI disabled;检查本地诊断 |
| already registered | 另一个标题 provider 活跃;移除冲突 bundle |
| /retitle says disabled | AI 总开关关闭或 mode=disabled |
| configured model fails | provider/model 不可用或模型输出不适合短标题;选择 Current session model |
| title never updates | 检查 smart-session-title 日志;已有人工/provider 标题会受保护 |
| greeting remains | 尚无 meaningful task;发送真实任务 |
| 设置启动失败 | 无效值或未知字段;修正该 namespace,provider 不会部分加载 |
| 日志文件没有成功记录 | 检查 Desktop logLevel 和正式文件 exporter 是否启用 |
| 批量时大量旧会话 model error: upstream failure | 这些会话记录的 provider/model 已不在 DSH 中,「跟随当前会话模型」对它们必然失败;列表会提前标出,切「指定模型」(或勾选自动兜底)后点「重试失败项」 |
| 选了「固定模型」但标题仍跟随会话模型 | provider+model 未保存。选择完整 provider/model 后点击底部「保存设置」;所有修改保存前都只是本地草稿 |
| 刷新窗口后批次不见了 | 运行器在客户端半:关闭设置页不受影响,但整个窗口刷新会中断;已写入的标题不会回滚 |
| 点了停止好像没停 | 停止会 abort 在飞的生成;若仍拖住说明 adapter 忽略了取消,按日志里那个会话排查 |

发布内容

此仓库仅包含可安装插件、中英文说明和许可证。开发报告、会话记录、本机测试资料不公开。

已知限制

- REASONING_CONTROL_UNAVAILABLE_CONFIRMED:没有跨 adapter 的统一 reasoning-disabled 控制。插件不硬塞 off,沿用 adapter 默认行为。
- reasoning 模型的思考也计入输出预算:早期 96-token 的上限会让它们返回 max-tokens 却没有标题正文。
现在默认 maxOutputTokens: 1024,且「一个文本块都没有的 max-tokens」按预算不足处理并重试一次;已经产出正文却停不下来的模型仍按协议失败处理(不把整段解释救成标题)。
- Configured 模式的 provider/model 从 DSH 已注册的模型中选择,取不到列表时回退手动输入;设置页与标题按钮文案跟随 DSH 界面语言(中英双语词典,其他语言回退英文)。
- 批量运行器位于 Web 客户端半而非 host:关闭设置页不会中断,但刷新 DSH 窗口会中断;host 模块 lib/.js 已入库且随包发布,原始 TypeScript 源码不可用,因此直接维护 JavaScript,并同步维护 lib/.d.ts。目前未实现持久任务队列与 host 层路由回退。
- 自动兜底的勾选状态与批次队列不持久化:刷新窗口后回到空闲态(已写入的标题不受影响)。
- 不做任务漂移自动重命名、快捷键、云同步、遥测、独立数据库或复杂模型管理。

许可证

MIT

开发验证

使用 Node.js 22.15 或更新版本运行 npm test。仓库包含客户端/i18n、host 策略和 provider 行为测试,无需新增依赖。files 白名单保证验证文件不随 npm 包发布。

设置界面会解释数字越界或非整数错误,并在写入后核对实际保存值。自动兜底保留整批会话统计,单独显示重试进度;停止重试会显示已停止,恢复路由时保留期间观察到的用户模式修改。兜底偏好存于浏览器 localStorage,批量队列不持久化,刷新后回到空闲状态。
排除词的验证用假模型流驱动真实 provider:断言排除词不会进入提示的任何一半、残留时恰好重试一次随后被删除、以及整段内容都是排除词时直接弃权且不发起模型调用。
锁定的验证覆盖四个入口:provider 弃权且不消耗 /retitle 令牌、/retitle 处理器拒绝、客户端按钮本地禁用并给出原因、批量列表排除锁定行且「全选」也选不中。
短祈使句的验证同时覆盖两侧:全为 继续写 / 发布 的会话在自动调度下仍弃权且零模型调用,显式 /retitle 则取最新一条生成并覆盖人工标题,而问候/URL/代码类纯噪声会话即使显式请求也仍然弃权。
输出上限的验证覆盖两侧:max-tokens 且没有文本块时重试一次(并断言两次调用的 maxTokens 都是配置值),而有文本块的 max-tokens 仍是终态协议失败、只调用一次。

设置页直接展示模型选择和标题规则,底部提供统一保存按钮;高级参数与使用说明默认折叠。两个页面通过标签切换,批量页支持搜索、项目过滤和勾选应用。布局适配窄窗口与 DSH 深色主题,表单关联标签并提供清晰的键盘焦点提示。

「标题规则」采用两栏表单,窄窗口切为单栏,排除词使用整行输入框。
详细规则收在折叠说明中,避免长文案挤占控件空间。

复制当前 SessionId

对话顶部以浅灰色小字号等宽字体显示当前会话 ID。点击复制完整 ID(不受显示省略影响),悬停可查看完整值。粘贴到其他对话可帮助 agent 定位此会话;读取需要相应工具与权限。复制其他会话的 ID 需先打开该会话。剪贴板写入失败时提供只读输入框,方便手动复制。

在插件设置中使用 显示 Session ID 开关,点击「保存设置」后显示或隐藏。默认开启,通过 showSessionId 持久保存,独立于 AI 标题生成和标题锁定,不修改会话标题。

在 DSH Desktop 2.0.9 中,ID 单独显示在标题工具栏下方、“对话 / 轨迹”标签上方,并与标签左对齐。此布局使用已核实的 host CSS 类;升级后若类名变化,将回退为标题栏内显示。

会话顶部的「重新生成标题」会按当前标题设置替换现有标题(包括人工标题),不会重新运行对话。「锁定标题」阻止本插件自动、手动和批量生成标题;锁定后显示「标题已锁定」,点击可解锁。锁定不影响聊天、人工改名或 DSH 兜底标题。设置页底部的「使用说明」中也提供这些说明。

设置页统一控件高度、间距与按钮层级,主要操作固定在底部;批量候选标题用浅蓝底突出,完成状态与在途进度分别显示,标题操作说明默认折叠。

标题模型请求从第一次调用起就省略可选 sessionId 会话关联,maxAttempts: 1 时同样如此,保留 rc.16 对会话关联扩展的隔离。全局 REQUEST_EXTENSION 仍失败时明确报错且不重复调用;所有模型调用仍走 ctx.llm.stream()。

保留 rc.16 的 Core 0.2 全局设置入口、延迟加载设置服务的挂载、受支持的刷新图标,以及避免设置面板挤成窄列的查询容器宽度设置。

新增验证覆盖:删除后重新拼出的排除词、压缩占位符与系统提示示例、包含日期的最终字数上限、两代设置 schema、生成中锁定、永久/临时错误及退避中取消、预览的一次性应用/过期/会话变化拒绝、批量勾选应用,以及已有标题的 Goal 编辑和生成竞争。React 替身追踪 effect 依赖与 cleanup,并验证 effect 重放及卸载取消。
预览分享卡片长什么样 ↓y2zyyr/smart-session-title
分享 · DeepSeek Harness Hub
y2zyyr/smart-session-title

自动为每个会话生成简洁准确的任务标题

这是你的仓库?认领条目

回到顶部