dsh-memory-index:用 SQLite FTS5 检索已有 Markdown 记忆树

前言

在 DeepSeek Harness(DSH)里给智能体接「记忆」,常见做法是换一套存储格式,或再挂向量服务、Embedding API。若你已经在磁盘上维护 MEMORY.md、按日期的笔记、wiki 和归档会话,更希望文件仍是权威来源、能用 git diff 编辑,同时又能在 Harness 里全文搜到——需要的是索引层,而不是迁移整棵树。

下面介绍社区插件 dsh-memory-index(维护者 yinguobing,分类:记忆)。它把现有 Markdown 记忆目录编入本地 SQLite FTS5,向 DSH 提供 memory_search、memory_read、memory_write,以及可选的启动摘要;不用 Embedding、不用 API Key、不跑旁路进程,也不搬文件。

这是什么

dsh-memory-index 的定位是:为 DeepSeek Harness 提供全文记忆索引。默认索引 MEMORY.md、memory/、wiki/、archive/sessions/ 等路径;索引库落在 workspace 下的 SQLite 文件(默认 .memory/index.sqlite)。当前为词法检索优先版本(README 说明语义检索计划作为可选层,不替代文件树)。包版本 0.1.0,许可证 MIT,依赖 Node ^22.19.0 || >=24.0.0、DSH >=0.2.1-rc.2。

插件目录页:https://www.skillhub.cn/plugins/yinguobing/dsh-memory-index
源码与文档:https://github.com/yinguobing/dsh-memory-index

核心功能

索引与检索

  • 将已存在的 Markdown 记忆树编入单个本地 SQLite FTS5 数据库;支持 FTS5 trigram(若 SQLite 构建支持),否则回退 unicode61,并对 CJK 做 3-gram 扩展,便于中文子串检索。
  • memory_search:在配置的 roots 内搜索,返回 path:line 与片段;可选 scope 限定来源(core / daily / wiki / session)。
  • 排序:FTS5 bm25,同分按 sourcePriority;短词等场景有 lexical LIKE 回退。

读写工具

  • memory_read:读取 workspace 内配置记忆根下的文件。
  • memory_write:向今日笔记追加、向核心文件追加,或在 write root 下创建/替换文件;需在配置中设 writeMode: readwrite。默认 writeMode: readonly,且核心 MEMORY.md 为仅追加。

命令与可选启动行为

命令 作用
/memory-status 查看索引状态
/memory-rebuild 重建索引;加 fts 可从零重建全文表
  • autoRecall:默认 off;设为 startup 时,可将 digest 配置的摘录注入 workspace 智能体上下文。
  • buildOnStart:默认 false;为 true 时在插件加载后后台建索引。

安全与边界(README 摘要)

路径均解析在 workspace 内,拒绝 .. 与越界绝对路径;读取拒绝已有 symlink 组件;不写网络、无遥测;.env* 与含 credentials 的路径不纳入索引。

安装与启用

该包尚未发布到 npm。README 给出两种方式:本地 checkout,或 GitHub Release v0.1.0 附带的预构建 tarball。

本地 checkout:

dsh plugin --profile web add "link:/absolute/path/to/dsh-memory-index"
dsh --profile web

预打包 tarball:

dsh plugin --profile web add /absolute/path/to/dsh-memory-index-0.1.0.tgz
dsh --profile web

将来发布后,命令将变为:

dsh plugin --profile web add dsh-memory-index

安装后,在 profile 的 cordis.patch.yml 里把 workspace 设为包含记忆树的目录(bundle 默认用 Harness 进程目录,避免猜测个人路径)。示例:

- id: memory-index
  config:
    workspace: /home/you/notes
    writeMode: readonly
    autoRecall: off
    buildOnStart: false

在新会话中先执行一次 /memory-rebuild,再执行 /memory-status 确认索引就绪。

完整配置字段见仓库 README;常用项包括 roots、writeRoots、indexDb、digest、timeZone(默认示例为 Asia/Shanghai)、maxResults(默认 8)等。roots 与 writeRoots 可独立配置:例如索引 wiki/ 与会话归档,但只允许写入 memory/。

典型用法

  1. 配置 workspace 指向已有记忆目录(含 MEMORY.md 等)。
  2. 启动 DSH 后运行 /memory-rebuild 建立 FTS 索引。
  3. 在对话中让智能体调用 memory_search 查历史笔记、wiki 或 archive/sessions 里的会话 Markdown。
  4. 命中后用 memory_read 拉取完整上下文(检索结果的行号为块起始行,近似值)。
  5. 若启用 readwrite,可用 memory_write 追加今日笔记或核心记忆;该写入会即时更新索引。外部手改文件需再次 /memory-rebuild(或依赖 buildOnStart),插件无文件 watcher。

需要启动时带一点上下文时,配置 digest 并将 autoRecall 设为 startup(注意 maxDigestChars 总字符预算)。

适用场景与注意

适合谁

  • 已用 Markdown 文件树做长期记忆,希望 DSH 内可搜、可读、可选写,且不想换存储格式或接向量服务。
  • 需要把归档会话与日记、wiki 放在同一索引里做词法检索的场景。

不适合替代

  • 原子事实库、独立向量记忆服务,或带审批流的 AGENTS.md 编辑器;本插件解决的是「让已有记忆树在 DSH 里可搜」这一较窄问题。

使用注意

  • 检索是词法级,不是语义相似度;Embedding 混合检索在 roadmap 中,尚未作为当前版本能力写入。
  • 插件以当前 DSH 进程权限读写 workspace 与 SQLite;安装前应阅读源码与 MIT 许可证,确认 workspace 路径不含不应被索引或写入的内容。
  • Linux 为 README 写明已测试环境;Windows/macOS 路径逻辑已实现但 CI 未覆盖。多进程并发写 SQLite 未做协调。
  • DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-memory-index 在不动 Markdown 文件权威性的前提下,用本地 FTS5 把记忆树接进 Harness 工具面,默认只读、无网络,适合已有笔记体系的用户先做全文检索。进一步了解可访问插件目录页与 GitHub 仓库 README(含 README.zh.md)。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye