前言¶
在 DeepSeek Harness(DSH)里做智能体或长期协作开发时,会话会分散在多个工作区、多条线程里。想找回「上次在哪条会话里说过某句话、跑过哪条命令」,常见做法是翻侧边栏或去 grep 压缩日志,成本高,且内置的 session_search 对中文分词几乎不可用、索引还在内存里、重启即失。下面介绍社区插件 dsh-plugin-sessiongraph:把本机全部 DSH 会话建成落盘索引,支持跨工作区全文检索,并为中文两字词做了专门分词;索引路径可选 Rust 原生内核,大库下比纯 TypeScript 回落路径更快。
这是什么¶
dsh-plugin-sessiongraph(维护者 CC19990113,GitHub 仓库 CC19990113/dsh-plugin-sessiongraph)是 DSH 生态里分类为「记忆」相关能力的一类插件:它不替你做记忆抽取,而是把会话原文(用户消息、助手文本、工具调用名与参数、会话标题等)索引成可检索语料。一句话定位:记忆回答「结论是什么」,内置 session_search 回答「哪个会话提到过」,sessiongraph 回答「当时到底说了什么」。
插件以 MIT 许可证发布;当前仓库根 package.json 显示版本 0.1.15,要求 Node ^22.19.0 || >=24.0.0。SkillHub 目录页:dsh-plugin-sessiongraph(社区站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
检索与作用域¶
- 跨会话全文搜索:模型工具
sessiongraph的search可按workspace、after、before、kinds过滤,返回标题、工作区、时间、轮次与带高亮的片段。 - 全机跨工作区:与仅覆盖「调用方工作区」的内置检索不同,索引覆盖本机各工作区的会话。
- 中文两字词:自建 bigram 分词(与 SQLite 默认
unicode61无 CJK 处理、两字词在trigram下也难命中形成对比);查询侧 token 引号后AND连接,偏召回而非短语精确匹配。
读索引的其它入口¶
| 能力 | 说明 |
|---|---|
session |
按完整 id 或唯一前缀打开会话:元信息、有序条目、子会话 |
timeline |
按时间列会话(可限工作区),新→旧 |
workspaces |
工作区清单与统计 |
status |
索引状态;唯一在尚未建库时也能正常回答的操作 |
写侧由 sessiongraph_index 负责建库或刷新(独立 300 秒预算;源文件 mtime+size 未变则跳过;会话超过 1000 条时可转后台 job 并返回 jobId)。
Rust 内核与引擎选择¶
索引写入走 napi-rs 原生模块(Rayon + rusqlite),非 WASM,以便直接读写文件系统与 SQLite、处理 GB 级数据。README 给出的参考数据(同一机器、两库内容一致):Rust 全量约 6.76s、增量 59–107ms、查询 0.1–6.9ms、索引约 170 MB;TypeScript 回落全量 19.22s、增量 230ms。配置项 engine: 'auto' | 'native' | 'typescript',默认 auto:有原生则用,缺失二进制时静默回落,不算错误。
自动索引(默认无需手工建库)¶
装完后默认有四道自动机制:首次无索引时在会话创建后台建库(autoBuild,默认开);已有索引时在 agent/created 做增量;查询前若 status.json 的 indexedAt 超过 5 分钟则先增量;当前未落盘的 live 会话通过宿主 ctx.sessionQuery 纳入。若希望完全手动:autoBuild: false 关首次建库,autoIndex: false 关增量,之后只用 sessiongraph_index 或 /sessiongraph index。
架构要点(与扩展相关)¶
六个包沿 ctx.sessiongraph 缝隙分层:加 store 或 indexer 不必改模型工具。查询路由为「恰好一个认领者」:并发问所有 store,0 个或多个认领者分别抛 SESSIONGRAPH_UNAVAILABLE / SESSIONGRAPH_CONFLICT,注册顺序与热重载不改变结果。
安装与启用¶
在 DSH 中安装官方文档给出的命令:
dsh plugin add dsh-plugin-sessiongraph
开发时可 link 本地目录(profile 的 dependencies 与 dsh.profile.bundles,路径按你的 clone 位置填写)。装完重启 DSH;README 说明首次可调用 sessiongraph_index 建库,之后以自动增量为主。
可选配置(均来自 README):injectCommandResults: true 将斜杠命令结果以 plugin/notice 回灌对话(默认关,因命令跑在宿主主线程);updateCheck / updateCheckIntervalMs 控制工具调用后检查 registry 新版本的提醒。
典型用法¶
1. 让模型查历史¶
直接提问,例如:「上次讨论开屏广告是哪个会话?」模型会调用 sessiongraph 工具。
2. 斜杠命令¶
/sessiongraph status
/sessiongraph index
/sessiongraph index --force
/sessiongraph search <词>
/sessiongraph workspaces
无参数的 /sessiongraph 等同于 status。search 会打印前 10 条命中;workspaces 用 * 标当前工作区。
3. 与内置检索、记忆的分工¶
| 需求 | 更合适的选择 |
|---|---|
| 偏好、决策、实体等「结论」 | OpenViking / MEMORY.md 类记忆 |
| 英文关键词、最近会话里的提及 | DSH 内置 session_search |
| 原话、命令参数、中文两字词、跨工作区 | sessiongraph |
一段对话可能永远不进记忆阈值,但仍会进入 sessiongraph 的原文索引;记忆条目则常已脱离上下文,核对细节仍要回会话原文。
适用场景与注意¶
适合谁:在本机长期用 DSH、会话多工作区、需要按字面或中文短词找回历史发言与工具调用的人;尤其当内置 session_search 在中文或跨工作区场景下不够用时。
安全与权限:插件在当前 DSH 进程权限下运行,会扫描并索引本地会话日志、写入 SQLite 索引库。安装前应阅读 GitHub 源码 与 MIT 许可证,确认可接受其读写的路径与数据范围。
其它注意:索引有意跳过 tool/result 正文、reasoning 块等(详见 README「索引什么」);斜杠命令默认不回灌,避免曾在 handler 中 agent.inject 导致桌面卡住的问题;插件不能自升级,新版本需通过宿主更新 profile 依赖。
结尾¶
dsh-plugin-sessiongraph 把本机 DSH 会话变成可增量维护、可毫秒级查询的全文库,并在中文两字词与跨工作区范围上补足了内置检索的短板。目录与源码: