dsh-memory-lite:按工作区隔离的 DSH 长期记忆

前言

在 DeepSeek Harness(DSH)里跑智能体时,会话上下文会随对话结束而清空。项目约定、工具链选择、上次排查的结论,如果只靠当次对话里的 system prompt 或人工复述,跨会话很难稳定复用。常见做法是自建笔记、RAG 或外部记忆服务,但往往要接网络、维护索引,还可能触发额外的模型调用。

下面介绍社区插件 dsh-memory-lite(维护者 Alexis-ray,分类:记忆)。它在本地用纯 Markdown 文件做长期记忆,按工作区目录隔离;不发起网络请求,也不自动调用模型。适合希望记忆落在磁盘、可读可改、且与 DSH 工具链直接集成的开发者。

这是什么

dsh-memory-lite 是面向 DeepSeek Harness 的工作区级长期记忆插件:同一路径下打开的会话共享同一套项目记忆;换目录则看不到该项目的记忆,除非条目保存为 global 作用域。每条记忆对应磁盘上的一个 Markdown 文件,带 YAML front matter,可用任意文本编辑器查看和编辑。

仓库:https://github.com/Alexis-ray/dsh-memory-lite
社区目录页:https://www.skillhub.cn/plugins/Alexis-ray/dsh-memory-lite

当前 package 版本为 0.1.0,许可证 MIT。DSH 社区目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与许可证。插件在 DSH 进程权限下运行,vault 目录与记忆内容均落在本机。

核心功能

五个工具

智能体通过以下工具读写记忆(名称与行为以 README 为准):

工具 主要输入 说明
memory_save title(≤80 字符)、body、scope?(project | global)、tags?、confidence? 默认 project;正文若匹配凭证类模式会被拒绝
memory_search query、scope?(both | project | global)、limit? 词法打分:标题 ×3、标签 ×2、正文 ×1;中文按二元组匹配;默认 limit 8,最大 50
memory_get id 返回完整记录;找不到会报错,不返回空结果
memory_list scope? 仅标题索引,不读正文
memory_forget id 将文件移到 .archive/,可手动移回恢复

memory_get 与 memory_forget 只能访问当前工作区可见的记忆及 global;其他工作区的 id 无法读取或归档。

会话启动时的标题索引

会话开始时,插件可向 system prompt 注入一段简短的「标题索引」(standing section),让智能体知道已有哪些记忆,而无需逐个读文件。注入内容强调:记忆是数据而非指令,正文须通过 memory_get 获取。可通过配置关闭或限制条数与字符预算(见下文)。

工作区隔离

项目键为 sha256(normalizePath(cwd)).slice(0, 12):normalizePath 会统一盘符大小写、将 \ 转为 /、合并重复分隔符并去掉末尾分隔符;不解析符号链接,因此重命名目录会视为新项目。global 记忆在所有工作区可见;可将 allowGlobalScope 设为 false 禁止写入 global。

设计取舍(README 已写明)

  • 零网络:测试套件在运行时 stub fetch、http.request 等,断言无任何外呼。
  • 无索引、无数据库:列表与搜索直接读 .md 文件。
  • 归档而非硬删:memory_forget 移入 .archive/。
  • 仅词法搜索:无 embedding,同义词召回较弱。
  • 无更新工具:需保存新条目并 forget 旧条目。

环境与依赖

  • DSH Desktop 2.0.18,@deepseek-ai/dsh-* 0.2.1-rc.2(engines.dsh 限定为 >=0.2.1-rc.2 <0.2.2)
  • @deepseek-ai/cordis 4.0.5
  • Node.js >= 20
  • 从源码构建时需要 pnpm

若 DSH 升级超出上述 engines.dsh 范围,bundle 可能被跳过,需等插件更新范围(详见仓库 INSTALL.md)。

安装与启用

在指定 profile(例如 desktop)下注册插件,并会把 dsh-memory-lite 追加到 dsh.profile.bundles。若新建会话看不到 memory_* 工具,需重启客户端。

从 GitHub 直接安装:

dsh plugin --profile <name> add git+https://github.com/Alexis-ray/dsh-memory-lite.git

从本地检出安装(需先构建):

pnpm install
pnpm build
dsh plugin --profile <name> add <path-to-repo>

仓库已提交 lib/ 构建产物,从 git 安装通常无需本地 build。完整验证、升级与卸载步骤见 INSTALL.md(中文)。

磁盘布局与单条记忆格式

默认 vault 根目录为 <DSH_HOME>/memory-vault(未设置 DSH_HOME 时为 %USERPROFILE%\.dsh\memory-vault)。结构示意:

<vault>/
  global/
    <slug>-<id>.md
  projects/
    <key>/
      project.json
      <slug>-<id>.md
  .archive/
    <slug>-<id>.md

单条记忆示例(front matter + 正文):

---
id: 20261020-1730-ab12
title: This repo uses pnpm
scope: project
projectPath: c:/work/demo
tags:
  - toolchain
  - conventions
confidence: medium
createdAt: 2026-10-20T09:30:00.000Z
updatedAt: 2026-10-20T09:30:00.000Z
---

Install dependencies, run tests, and build with pnpm. Do not use npm or
yarn; the lockfile is pnpm-lock.yaml.

写入采用临时文件 + fsync + rename;超过 maxFileBytes(默认 65536)的条目会被拒绝而非截断。

配置项

在插件的 cordis.patch.yml 或 profile 里针对该插件 id 的 patch 中设置;未写的键使用默认值。

键 默认值 含义
vaultPath 见上 vault 根目录
injectStanding true 是否向 system prompt 注入标题索引
standingMaxItems 8 索引最多条数(最小 1)
standingBudgetChars 1200 索引字符预算(最小 200)
allowGlobalScope true 是否允许 memory_save 使用 scope: global
redactSecrets true 是否拒绝疑似凭证的正文
maxFileBytes 65536 单文件最大字节(最小 1024)
autoSavePolicy off hint 时注册引导智能体主动保存的 system 段落;off 不注册

典型用法

智能体侧没有固定 CLI,一般通过工具调用完成流程:

  1. 会话开始后,若启用了 standing,system 中会出现已有记忆的标题列表;需要细节时调用 memory_get。
  2. 要把约定写下来:调用 memory_save,title 简短,body 写清事实;仅跨项目共享时用 scope: global。
  3. 回忆模糊关键词:调用 memory_search,必要时指定 scope 与 limit。
  4. 浏览当前可见条目标题:调用 memory_list。
  5. 作废旧条目:调用 memory_forget;需要恢复时到 vault 的 .archive/ 将文件移回原位置。

插件不提供「更新」工具:改内容应 save 新 id,再 forget 旧 id。

适用场景与注意

适合:希望在 DSH 内用文件型、可审计的长期记忆;强调离线、无自动模型调用;按仓库/工作目录隔离项目记忆,偶尔用 global 放通用偏好。

注意:

  • 词法搜索不理解语义,同义词需靠标题/标签/正文用词覆盖。
  • 重命名项目目录后,旧 key 下的记忆仍留在磁盘,但新目录下不会自动关联(project.json 记录的是旧路径)。
  • vault 仅在本机,无内置跨机同步;需要时请自行同步目录。
  • DSH 版本需落在 engines.dsh 声明的区间内。

结尾

dsh-memory-lite 把 DSH 的长期记忆做成工作区作用域下的 Markdown vault:五个 memory_* 工具、可选的标题索引注入、归档式删除,以及测试保证的零网络行为。若你正在 DSH 生态里找「记忆」类插件,可从社区目录页或 GitHub README 对照安装命令与 INSTALL.md 完成启用。

  • 目录页:https://www.skillhub.cn/plugins/Alexis-ray/dsh-memory-lite
  • GitHub:https://github.com/Alexis-ray/dsh-memory-lite
羽毛球分组比赛记分
小程序二维码

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

小夜