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

会话标题生成 ZilongYang/dsh-session-titler

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

按需为整个会话生成标题,确认后才写入

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
  • 发起网络请求
    client.js:239
    const response = await fetch(ROUTE, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 按需生成会话标题
  • 应用前确认

按需为整个 DSH 会话生成标题,应用前先确认。

README

由 DeepSeek 最新模型翻译生成
dsh-session-titler 按需把整个 DeepSeek Harness 会话总结成一条标题 —— 写入前先确认。 Host + Web Client 双半插件:只提供两个入口,一个标题栏按钮和一个会话行菜单项,你不点「确认」就什么都不写。它不注册标题服务商,所以自动标题仍走你已装的其它方案。 快速开始(EN) —— 桌面版:在应用内插件页安装(desktop profile 由应用独占,dsh plugin --profile desktop … 会拒绝)。命令行管理的 profile:dsh plugin --profile <profile> add dsh-session-titler。然后在会话标题栏点 ✦ Generate title,或在会话行「…」菜单里点 Generate title,改好提案,再点 Apply —— 在此之前不会写入任何内容。 快速开始 1. 安装 桌面版(DeepSeek Harness.app) —— desktop profile 由应用独占,命令行不接管它(dsh plugin --profile desktop … 会直接报 profile "desktop" is managed exclusively by the Electron application)。
展开完整文档(README 剩余 1 节)
dsh-session-titler

按需把整个 DeepSeek Harness 会话总结成一条标题 —— 写入前先确认。 Host + Web Client 双半插件:只提供两个入口,一个标题栏按钮和一个会话行菜单项,你不点「确认」就什么都不写。它不注册标题服务商,所以自动标题仍走你已装的其它方案。

快速开始(EN) —— 桌面版:在应用内插件页安装(desktop profile 由应用独占,dsh plugin --profile desktop … 会拒绝)。命令行管理的 profile:dsh plugin --profile <profile> add dsh-session-titler。然后在会话标题栏点 ✦ Generate title,或在会话行「…」菜单里点 Generate title,改好提案,再点 Apply —— 在此之前不会写入任何内容。

快速开始

1. 安装

桌面版(DeepSeek Harness.app) —— desktop profile 由应用独占,命令行不接管它(dsh plugin --profile desktop … 会直接报 profile "desktop" is managed exclusively by the Electron application)。
请在应用内左侧「插件」页安装;插件市场收录后,也可以直接在里面搜 titler 一键装(收录状态见 PR,通常一天内生效)。

命令行管理的 profile(web / main / 自建 profile 等)—— dsh plugin 是 pnpm 透传,一条命令即可:

从 npm 安装(推荐)
dsh plugin --profile <你的profile> add dsh-session-titler

从 GitHub 源码安装(想跟 main 分支时)
dsh plugin --profile <你的profile> add github:ZilongYang/dsh-session-titler#main

本地开发:把本仓库直接挂进去
dsh plugin --profile <你的profile> add link:/绝对路径/dsh-session-titler

2. 使用

1. 打开任意一个已经有内容的会话;
2. 点标题栏里的 ✦ 生成标题 —— 它在「创造模式」右边、「费用 ¥0」左边;或点左侧会话行 「...」菜单 → 生成标题(在「重命名」下面一行);
3. 等 2–4 秒,弹窗给出标题提案,可以直接改;
4. 点 确认修改 —— 左侧标题立即更新,刷新页面也还在。

点「取消 / Esc / 点遮罩」都不会写任何数据;空白会话没有可总结的内容,按钮会置灰。

3. 卸载

dsh plugin --profile <你的profile> remove dsh-session-titler

桌面版在应用内「插件」页停用或卸载。

装完没看到按钮?Host 半是进程内模块,重启一次 dsh/应用再刷新页面即可(Client 半刷新页面就生效)。

入口在哪(两处,都在现有 Web UI 上,不新增页面)

| 入口 | 位置 |
| 顶栏按钮「✦ 生成标题」 | 会话标题栏里,conversation.session.header.actions 的 order: -8 —— 紧跟「创造模式」芯片 agent-preset(-10)右侧,排在费用芯片 cost-meter(-5)之前,从而让 费用 ¥0 与 费用明细(1)保持相邻 |
| 会话行菜单项「生成标题」 | 会话行「...」菜单 sidebar.workspaces.session.menu.item 的 order: 250 —— 在「重命名」(200)下面一行、「分叉会话」(300)上面 |

点击后:生成 → 居中确认弹窗(标题可编辑,另有「重新生成 / 取消」)→ 点「确认修改」才真正改标题。取消、Esc、点遮罩都不会写任何数据。

它是怎么工作的

顶栏按钮 / 会话菜单项 │ store.open({ sessionId, currentTitle }) ▼ Client store ──POST /session-titler/propose { sessionId }──► Host 路由(只读) ▲ ├─ ctx.sessionQuery.readSurface(sessionId) │ │ (当前「模型表面」,已考虑压缩/替换) │ ├─ 组装 transcript(32 KiB 预算,条目级截断) │ ├─ 路由 = session.requestHeader().config │ │ → 冷会话扫日志最后一条 request/header │ │ → 兜底 agentDefaultModel 默认模型 │ └─ ctx.llm.stream({ …, purpose:'session-title' })
│ { ok:true, value:{ title, provider, model, messages, truncated } }
▼
确认弹窗(可编辑) │ 点「确认修改」 ▼
ctx.sessions.using(id, { source:'workspaceOperation' }, ref =>
ref.binding.session.rename(title)) ← 与官方「重命名」菜单同一条写入路径
▼
Host 追加 session/title 事件(source: user)→ 列表标题刷新、刷新页面仍保持

关键取舍:不注册 ctx.sessionTitle 的 provider。那是独占的,会顶掉 DSH 自带的自动标题 provider,而且 automatic 只有 first-prompt / all-prompts,没有「只在用户点击时才生成」的档位。所以本插件走自己的显式调用,并保证生成阶段完全不写会话日志。

目录

| 文件 | 作用 |
| package.json | bundle 补丁声明 + dsh.client(web 平台、客户端模块依赖) |
| cordis.patch.yml | 往 profile 插一行 host 插件(id: session-titler) |
| index.js | Host 半:注册 /session-titler/propose,做请求围栏、体积上限、错误映射 |
| title.js | Host 半:读会话 → 选模型路由 → 组装/裁剪 transcript → 调 ctx.llm.stream → 标题归一化 |
| fence.js | Host 半:loopback / 同源请求校验(DNS-rebinding、CSRF 防护,不是鉴权) |
| client.js | Client 半:手写模块产物,注册 3 个座位 + 状态 store + 确认弹窗 |
| locale/{zh,en}.json | 插件卡片显示用的 meta.title / meta.description |

HTTP 契约

POST /session-titler/propose,请求体 ≤ 8 KiB:{ "sessionId": "session-…" }

成功:

{ "ok": true, "value": { "title": "…", "provider": "…", "model": "…", "messages": 14, "truncated": false } }

失败:{ "ok": false, "error": { "code": "…", "message": "…" } }

| code | HTTP | 触发 |
| forbidden | 403 | 围栏未通过(非 loopback/可信 Host、跨站标记、异源 Origin) |
| method-error | 405 | 非 POST |
| bad-request | 400 | JSON 坏 / sessionId 缺失 |
| too-large | 413 | 请求体超限 |
| not-found | 404 | 会话不存在或读不出来 |
| no-content | 409 | 表面里没有 user / assistant 文本 |
| timeout | 504 | 20 s 未回 |
| llm-error | 502 | finish 非 stop、模型未产出文本、无可用路由 |
| internal | 500 | 其它 |

可调参数

集中在 title.js 顶部的 POLICY(本插件不带 Config 段,改完需要重启 Host 才生效):

| 键 | 默认 | 含义 |
| maxInputBytes | 32768 | 送进模型的 transcript 字节上限 |
| maxOutputTokens | 256 | 标题输出的 token 上限(DSH 自带的首条消息 provider 用 64;整段会话会让推理模型把 64 全花在思考上,故放宽) |
| timeoutMs | 30000 | 单次标题调用的墙钟预算 |
| maxTitleBytes | 120 | 接受标题的 UTF-8 字节上限 |
| userCharsPerMessage / assistantCharsPerMessage | 2000 / 3000 | 单条消息裁剪上限 |

超长会话的处理:先按单条裁剪,再从中间整条丢弃(保留开头=任务目标、结尾=当前状态),仍然超就截尾部字符,并在返回值里给 truncated: true。

标题取模型回答里第一条可用行(跳过空行、剥掉解释段落),再按 DSH 的 normalizeSessionTitle 归一化:剥 OSC/CSI/ESC 控制序列、C0/C1 控制符、方向性不可见字符 → 空白折叠成单行 → 按 code point 截到 120 字节,绝不切坏字符。max-tokens 结束但已产出可用标题行时按成功处理(模型只是话多了,反正要用户确认)。

本机开发(改代码时看这节)

安装与卸载见上面的「快速开始」。日常改代码用本地挂载最省事:

让 Agent 代为安装(Host + Web 同 profile) plugin_manager install_bundle target=<本目录绝对路径> 或者命令行
dsh plugin --profile <你的profile> add link:/绝对路径/dsh-session-titler

- 本仓库以 link: 方式挂进 profile,所以改代码不用重装。
- Client 半(client.js):刷新页面生效;插件刚装好时 Host 会推送模块图变更,通常无需刷新就会激活。
- Host 半(index.js / title.js / fence.js):必须重启 DSH。宿主进程内的 ESM 模块缓存不会因装卸载而失效——这是本插件开发中真实踩到的:改完 title.js 后路由行为不变,重启后才生效。

已知限制

- 只服务 loopback 或 webRuntime.trustedHosts 里的主机。经隧道/局域网用非受信 Host 访问时,本路由返回 403(这是有意的 DNS-rebinding 防护)。
- 弹窗是自写组件(按官方规范不 import dsh-client-ui-primitives),样式只引用 --dsw-alias- / --dsw-radius- / --dsw-elevation-* token;视觉与宿主的 Modal / 菜单行对齐,但不共享宿主组件的行为升级。
- 不做自动标题:不会在后台为任何会话生成标题,也不会改动 DSH 自带的标题 provider。
- 每次点击消耗一次模型调用(输出 ≤ 256 token,输入 ≤ 32 KiB),且只读,不写会话。

设计与发布文档

- docs/01-plugin-design-and-implementation.md —— 插件设计与实现计划,含落地偏差记录与最终验证数据。
- docs/02-open-source-and-marketplace.md —— 开源、npm 发布与社区插件市场上架流程。

License

MIT
预览分享卡片长什么样 ↓ZilongYang/dsh-session-titler
分享 · DeepSeek Harness Hub
ZilongYang/dsh-session-titler

按需为整个会话生成标题,确认后才写入

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