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

会话标题索引 gtaifu/dsh-title-index

DeepSeek Harness
gtaifu62 天前有提交已提供中文文档扫描:含敏感能力

为会话标题查询加磁盘索引,@ 提及秒出结果

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

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

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

状态速览

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

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

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

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 10 处,展示前 10 条)
  • 读取本地文件
    lib/index.js:128
    const fresh = await stat(file.file);
  • 读取本地文件
    lib/index.js:162
    cwdDirs = await readdir(this._tiRoot, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:171
    sessionDirs = await readdir(cwdPath, { withFileTypes: true });
  • 读取本地文件
    lib/index.js:180
    const info = await stat(file);
  • 读取本地文件
    lib/index.js:207
    raw = JSON.parse(await readFile(this._tiIndexPath, "utf8"));
  • 写入本地文件
    lib/index.js:229
    await mkdir(dirname(this._tiIndexPath), { recursive: true });
  • 写入本地文件
    lib/index.js:230
    await writeFile(tmp, body, "utf8");
  • 写入本地文件
    lib/index.js:231
    await rename(tmp, this._tiIndexPath);
  • 删除本地文件
    lib/bench.mjs:73
    if (!PROD) await rm(TMP_INDEX, { force: true });
  • 删除本地文件
    lib/bench.mjs:91
    if (!PROD) await rm(TMP_INDEX, { force: true });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

功能亮点

  • 已废弃
  • 替代方案已内置

这个插件已废弃。DSH 0.1.2rc 已实现新的 `@` 功能,速度更快。

README

由 DeepSeek 最新模型翻译生成
dsh-title-index EN — 一个为 DeepSeek Harness Web GUI 的会话标题查询提供加速的即插即用插件。它用一个子类替换官方的 session-query-sqlite 行,该子类从以 (sessionId, mtimeMs, size) 为键的磁盘索引提供 readTitleSnapshots,而不是在每次 @ 提及按键时解压并重放每个会话日志。官方引擎的其他一切行为都保持不变。在真实的 114 会话语料上:top-50 @ 菜单标题从 约 9.7 秒降至约 0.3 秒,且结果逐字段一致。 为 dsh Web 端会话标题读取加磁盘索引的插件。 问题 Web 输入框的 @ 会话候选(dsh-session-reference)为给出每个候选的“最新标题”,会对每个持久化会话完整解压并逐行解析 session.jsonl.zstd 来折叠标题(sessionQuery.readTitleSnapshots)。会话一多,每次按键都要扫几十上百份日志;而解析结果 LRU 只缓存 5 个,重复查询同样慢。
展开完整文档(README 剩余 1 节)
dsh-title-index

EN — 一个为 DeepSeek Harness Web GUI 的会话标题查询提供加速的即插即用插件。它用一个子类替换官方的 session-query-sqlite 行,该子类从以 (sessionId, mtimeMs, size) 为键的磁盘索引提供 readTitleSnapshots,而不是在每次 @ 提及按键时解压并重放每个会话日志。官方引擎的其他一切行为都保持不变。在真实的 114 会话语料上:top-50 @ 菜单标题从 约 9.7 秒降至约 0.3 秒,且结果逐字段一致。

为 dsh Web 端会话标题读取加磁盘索引的插件。

问题

Web 输入框的 @ 会话候选(dsh-session-reference)为给出每个候选的“最新标题”,会对每个持久化会话完整解压并逐行解析 session.jsonl.zstd 来折叠标题(sessionQuery.readTitleSnapshots)。会话一多,每次按键都要扫几十上百份日志;而解析结果 LRU 只缓存 5 个,重复查询同样慢。

方案

本插件通过 cordis.patch.yml 禁用官方 session-query-sqlite 行并插入同服务的新行(session-query-title-index,注入名 dsh-title-index),继承官方 SqliteSessionQueryEngine,只 override readTitleSnapshots:

- 磁盘索引(默认 /title-index.json)以 (sessionId, mtimeMs, size) 为失效键;
- 命中 → 直接返回缓存的标题快照(毫秒级);
- 未命中(新会话/日志有追加)→ 走官方折叠,并把结果连同折叠后的文件 stat 写回索引;
- 活动中的(live)会话、官方读取失败、索引损坏,全部原样回退官方路径,行为不会劣化。

其余方法(listSessions、readSurface、搜索、lineage、授权语义)全部保持官方实现。标题被标题生成插件重写时日志文件 mtime 变化,缓存自动失效。

为什么是“禁用 + 插入”而不是改行名? dsh 的补丁机制(applyEntryPatches)允许修改已有行的 config/disabled,但不允许修改 name;而两个引擎类发布的服务名都固定为 sessionQuery,消费者按服务名注入,因此换行对它们完全透明。

实测(114 个会话,约 60MB zstd 日志)

| 场景 | 官方引擎 | 本插件 |
| @ 菜单 top-50 标题读取 | ~9.7 s(全量折叠) | 0.30 s |
| 全量 114 会话标题读取 | ~8.5–9.7 s | 0.34 s |
| 单会话 | ~0.5 s | ~0 s |
| 结果与官方逐字段等价 | — | 109 对全等,0 差异 |

冷启动一次约 8–9 s(仅发生在索引缺失或格式升级后);正在写入的会话每次追加都会失效重折叠,追加间歇由索引承接。

安装(web profile)

1. 在 profile 的 package.json 中添加依赖与 bundle(dsh.profile.bundles 中必须排在 @deepseek-ai/dsh-web-app 之后,保证补丁在官方行定义之后生效):

{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-title-index" // ← 排在 web-app 之后 ] } },
"dependencies": {
"dsh-title-index": "github:gtaifu/dsh-title-index"
}
}

2. 重新安装 profile 依赖:

dsh plugin --profile web install

3. 重启 dsh web。首次冷启动会全量折叠一次以填充索引;可用下面的预热命令提前完成。

配置(接管行的 config)

| Key | 默认值 | 说明 |
| path / openAt / 其余官方键 | 官方默认 | 原样转发给官方引擎;web 部署沿用 :memory: + never |
| root | "" | 持久化会话根目录;空值时插件完全惰性(等价官方引擎) |
| indexPath | /../title-index.json | 索引文件位置 |

补丁内置的默认配置:

- insert:
- id: session-query-title-index
name: 'dsh-title-index'
config:
path: ':memory:'
openAt: never
root: !!js dshHomePath('sessions')

基准与预热

node /node_modules/dsh-title-index/lib/bench.mjs
对照官方引擎计时 + 逐字段等价校验(索引写入临时文件,结束即删)

$env:DSH_TITLE_INDEX_PROD = "1"; node /node_modules/dsh-title-index/lib/bench.mjs
预热生产索引文件(DSH_HOME\title-index.json),重启后第一次 @ 即为热查询
环境变量:DSH_TITLE_INDEX_ROOT 覆盖语料根目录;DSH_HOME 缺省回退到 ~/.dsh。

兼容性

- 依赖官方引擎的内部行为:@deepseek-ai/dsh-session-query-sqlite@^0.1.1-rc.2、@deepseek-ai/schemastery@^3.18.1(peerDependencies,由 dsh 安装目录解析,无需另装);
- Node ≥ 22(与 dsh 自身要求一致);
- 索引文件带格式版本号(INDEX_FORMAT_VERSION),未来条目结构变化时会自动丢弃重建。

License

MIT
预览分享卡片长什么样 ↓gtaifu/dsh-title-index
分享 · DeepSeek Harness Hub
gtaifu/dsh-title-index

为会话标题查询加磁盘索引,@ 提及秒出结果

回到顶部