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

首轮自动命名 apherchin/dsh-rename-title-after-first-turn

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

主会话首轮结束后自动生成一次标题并冻结

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 主会话首轮后自动命名
  • 仅命名一次并冻结
  • 不影响子代理与队友会话

仅宿主侧插件:主会话跑完第一轮后自动命名一次;子代理与队友会话不受影响。

README

由 DeepSeek 最新模型翻译生成
dsh-rename-title-after-first-turn 中文 | English 主会话「第一轮对话结束后,自动总结命名一次」的 host-only DSH 插件(不改 app.asar,无 client 半边)。 它解决什么 DSH 自带的兜底命名是「首条消息截到 40 字节」,经常读起来不像个标题;而内置的 first-prompt 标题 provider 在本机近乎必失败。本插件在第一轮真正结束之后(已有提问、已有回答)用一次模型调用总结出标题,此后永久不再改。 行为 - 触发:turn/end 且 turn >= 1。turn === 1 是第一次机会;成功落库后永久冻结(后续轮次被幂等守卫跳过)。第一次机会失败时,允许在后续轮次重试,上限 maxAttempts。 - 只碰主会话:session.header 必须是对象、parentSession 为空、且 delegationDepth 缺失或为 0;subagent / teammate 会话一律不动。判据是 fail-closed(形状不认识就不碰),因为它是兑现这条硬要求的唯一守卫。 - 素材:第一轮的「首条人类提问 + turn === 1 的所有助手 text 块」(reasoning 与工具调用一律排除)。重试时素材仍只取第一轮。
展开完整文档(README 剩余 1 节)
dsh-rename-title-after-first-turn

中文 | English

主会话「第一轮对话结束后,自动总结命名一次」的 host-only DSH 插件(不改 app.asar,无 client 半边)。

它解决什么

DSH 自带的兜底命名是「首条消息截到 40 字节」,经常读起来不像个标题;而内置的 first-prompt 标题 provider 在本机近乎必失败。本插件在第一轮真正结束之后(已有提问、已有回答)用一次模型调用总结出标题,此后永久不再改。

行为

- 触发:turn/end 且 turn >= 1。turn === 1 是第一次机会;成功落库后永久冻结(后续轮次被幂等守卫跳过)。第一次机会失败时,允许在后续轮次重试,上限 maxAttempts。
- 只碰主会话:session.header 必须是对象、parentSession 为空、且 delegationDepth 缺失或为 0;subagent / teammate 会话一律不动。判据是 fail-closed(形状不认识就不碰),因为它是兑现这条硬要求的唯一守卫。
- 素材:第一轮的「首条人类提问 + turn === 1 的所有助手 text 块」(reasoning 与工具调用一律排除)。重试时素材仍只取第一轮。
- 落库:session.append("session/title", { title, messageSeqs: [首条人类消息 seq], source: { kind: "provider", provider: "session-title-first-turn", model } })。宿主按 higher-seq-wins 推给客户端 ⇒ 侧栏自动改名,无需刷新页面。
- 用户手改的名字永不覆盖。
- 失败一律降级为「保持 DSH 自带兜底名」,只记一行 warn,绝不外抛(插件跑在宿主 Node 进程里,抛错会波及整个应用)。

安装

dsh plugin --profile <你的 profile> add dsh-rename-title-after-first-turn

包内声明了 dsh.bundle.patch,所以 dsh plugin 会自动把它记进 dsh.profile.bundles,无需手工编辑 profile 文件。然后重启 DSH(打包版没有「刷新页面」)。

手动兜底(不用 dsh plugin 时):pnpm add dsh-rename-title-after-first-turn,再在 cordis.patch.yml 追加

- insert:
- id: session-title-first-turn
name: "dsh-rename-title-after-first-turn"

可选:想让本插件独占命名权,同时停用内置的 first-prompt provider(把 - id: session-title-llm + disabled: true 加进 profile 补丁)。包里的 cordis.patch.yml 有这两行的注释版本——默认不启用,因为它会改变别人的默认行为。

配置(profile 那条 insert 的 config,全部可选)

| 键 | 默认 | 允许范围 | 含义 |
| targetCjkCharacters | 12 | 1–60 | 中文目标字数 |
| targetWords | 6 | 1–30 | 非中文目标词数 |
| maxInputBytes | 8192 | 256–1000000 | 素材字节上限(分数向下取整) |
| maxOutputTokens | 2048 | 32–32000 | 输出上限(内置 provider 是 64,疑似被推理 token 吃光 ⇒ 本机 28/30 失败) |
| timeoutMs | 60000 | 1000–900000 | 端到端超时;是硬边界(Promise.race),适配器不看 signal 也会返回 |
| maxAttempts | 3 | 1–10 | 每个会话最多尝试次数(1 = 只试第一轮)。含「无路由」那种没打到模型的尝试 |
| maxTitleBytes | 80 | 8–512 | 落库标题的 UTF-8 字节上限 |

非法/越界值一律回退缺省,不抛错。

兼容性

- 实测环境:DSH 桌面壳 0.1.7-rc.2(Windows)。
- host-only:没有 client 半边 ⇒ 不参与渲染端「每条 client entry 必须 active」的全有全无启动门禁。
- 用到的服务:llm(ctx.llm.stream);订阅 session/event、session/disposed。
- 零 npm 依赖、无安装脚本、无构建步骤。

合规(按官方 cordis-plugin-development 对齐)

- bundle 形态:package.json 声明 dsh.bundle.patch(官方交付单位;缺它 install_bundle 会回滚整次安装)。
- 不 import 任何 @deepseek-ai/ 运行时包(只读 ctx 上的服务)。
- 不 append 新的 session 事件类型:只 append 官方的 session/title,并带 source.kind = "provider",满足宿主「provider 来源必须 cite 更早的 user 消息」这条不变量。
- apply 与所有回调绝不外抛,出错只记一行 warn。

测试

⚠️ 本机沙箱禁止命名管道 ⇒ node --test 会 spawn EPERM 并给出误导性的 # fail 1。逐文件跑(任意 cwd):

Get-ChildItem test -Filter '.test.mjs' | ForEach-Object { node $_.FullName; "exit=$LASTEXITCODE $($_.Name)" }
期望合计 47 pass / 0 fail(normalize 5 / first-turn 4 / stream 7 / prompt 10 / guard 7 / plugin-core 14)。
三个变异点(去掉 text 块过滤 / isMainSession 恒 true / messageSeqs 置空)都会让对应断言变红。

已知取舍

- 路由长期不可用 ⇒ maxAttempts 用尽后该会话静默永久放弃(只剩历史 warn 可查)。
- 超时用 Promise.race 保证调用方不被挂住、in-flight 一定释放;被放弃的那次迭代若适配器永不结束,仍会在后台悬着。
- attempts / inFlight 只在 session/disposed 时清理(与首方 dsh-session-title 同形)。
- 素材信封固定 128 字节:maxInputBytes < 128 时返回值会略超预算、128 ≤ 预算 ≲ 173 时返回空信封(配置下限 256,正常不可达)。

停用 / 卸载

- 按包名装的:dsh plugin --profile <你的 profile> remove dsh-rename-title-after-first-turn
- 按绝对路径 insert 装的:从 ~\.dsh\profiles\<profile>\cordis.patch.yml 删掉 id: session-title-first-turn 那条 insert
- 两种都要重启 DSH(已加载插件文件的内容改动不热重载)。

一个仅宿主侧的 DSH 插件,在主会话第一轮结束后命名一次,此后不再碰它。

- 触发:turn/end 且 turn >= 1。第 1 轮是第一次机会;标题一旦落地,会话即冻结(幂等守卫)。首次尝试失败可重试,最多 maxAttempts 次。
- 仅主会话:session.header 必须是对象,parentSession 为空,delegationDepth 缺失或为 0。子代理和队友会话绝不触碰 —— 这个判定是 fail-closed 的,因为它是那条硬性要求的唯一守卫。
- 素材:第一轮的第一个人类提问,加上 turn === 1 的全部 assistant text 块(reasoning 和工具调用排除在外)。重试仍然只喂第 1 轮。
- 持久化:session.append("session/title", …),source.kind = "provider",这样侧边栏自己就改了名(higher-seq-wins),不用刷新页面。手动改名绝不会被覆盖。
- 失败降级为 DSH 内置的兜底名称,只留一行 warn;apply 永不抛错。

安装

dsh plugin --profile <your-profile> add dsh-rename-title-after-first-turn

包内声明了 dsh.bundle.patch,所以 dsh plugin 也会把它记进 dsh.profile.bundles —— 不用改 profile 文件。装完重启 DSH。

配置(全部可选)

targetCjkCharacters 12 · targetWords 6 · maxInputBytes 8192 · maxOutputTokens 2048 · timeoutMs 60000 · maxAttempts 3 · maxTitleBytes 80。取值越界会回落到默认值,不会抛错。

兼容性

在 DSH desktop 0.1.7-rc.2(Windows)上测过。用到 llm(ctx.llm.stream),并订阅 session/event / session/disposed。没有 npm 依赖,没有构建步骤;因为是仅宿主侧,它不参与渲染进程那条「每个客户端入口都必须激活」的全有或全无启动门禁。

测试

Get-ChildItem test -Filter '*.test.mjs' | ForEach-Object { node $_.FullName; "exit=$LASTEXITCODE $($_.Name)" }

预期:47 pass / 0 fail。不要在禁止命名管道的 Windows 沙箱里用 node --test —— 运行器会以一条误导性的 # fail 1 失败。

License

MIT
预览分享卡片长什么样 ↓apherchin/dsh-rename-title-after-first-turn
分享 · DeepSeek Harness Hub
apherchin/dsh-rename-title-after-first-turn

主会话首轮结束后自动生成一次标题并冻结

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部