前言¶
在 DSH 里做多轮开发时,会话会不断产生决策、纠正、禁止项和未收尾的工作。这些内容若只靠上下文窗口携带,换会话或窗口变长后容易丢失;若全部写进仓库里的 AGENTS.md 或 STATE.md,又会和「机器环境、个人偏好、本机陷阱」混在一起,且记忆类信息未必适合进版本库。
dsh-memory-curator(维护者 linx2568)面向上述缺口:在 Harness 进程内自动沉淀、分层召回、合并重复并处理新旧冲突,数据落在 $DSH_HOME 下的本地 JSON,不单独联网、不需要账号或 API Key;模型调用复用 Harness 的 llm 服务,与当前 provider、凭据和重试策略一致。插件在 SkillHub 目录 的分类为「记忆」;源码见 GitHub(MIT,当前 package 版本 1.1.1,要求 Node >=20.3.0)。
这是什么¶
一句话:dsh-memory-curator 是 Cordis bundle 形态的 DSH 插件,提供自动捕获、渐进式披露召回、重复折叠与新旧冲突解析,并在 Web 客户端左侧边栏增加 Memory 管理入口。
宿主侧挂载捕获、召回、策展逻辑以及六个 memory_* 工具;浏览器侧通过包内自带的 cordis.patch.yml 完成插件行与默认配置的注入,无需单独构建步骤,也无额外运行时依赖。
核心功能¶
自动捕获(Auto-capture)¶
每轮对话结束时,插件监听 session/event 的 turn/end,以「即发即忘」方式把本轮新消息交给一次有边界的辅助 LLM 调用,蒸馏出值得跨会话保留的条目(技术参考、架构决策、明确纠正、禁止项、未完成工作等),校验后写入存储。记忆相关逻辑不能拖慢或导致一轮对话失败。
渐进式召回(Progressive recall)¶
为避免记忆库变大后系统提示词成本线性上涨,召回分三层:
| 层级 | 行为 |
|---|---|
| Tier 0 | 常驻目录注入 system prompt:优先列出会改变行为的条目(决策、纠正、禁止、未完成),再列最近事实;每条条目一行索引。 |
| Tier 1 | memory_search 返回带 id 的短摘要。 |
| Tier 2 | memory_detail 返回完整正文,并记录本次阅读(影响排序与衰减)。 |
策展(Curation)¶
每次插入及周期性任务中:
- 确定性合并:同一主题的决策类条目冲突时,较新者生效,较旧者保留为历史并带
supersededBy指针。 - 模型辅助:对确定性规则无法判定的「相似主题」成对条目做裁决,偏向
coexist,避免误删真实记忆。
刻意不记什么¶
插件用明确规则避免与仓库已有载体重复。满足下列任一类则不写入记忆(信息应留在代码/git、AGENTS.md / CLAUDE.md、STATE.md / 待办 / issue,或完成事项本身的产物里):
- 未来会话可从仓库直接得到的:架构、路径、构建测试命令、依赖、目录结构、git 历史等。
- 项目级「始终/从不」类约定(应进
AGENTS.md/CLAUDE.md,记忆仅本机可见)。 - 任务进度与计划(应进
STATE.md、待办或 issue)。 - 仅报告「刚做完某事」的叙述(产物即记录)。
蒸馏时会带上仓库上下文(存在时的 AGENTS.md / CLAUDE.md bounded 文本,以及 README.md、STATE.md 等文件名列表),按 mtime/size 缓存读取。写入前在 lib/store.js 统一脱敏凭据形态字符串(如 sk-…、ghp_…、JWT、PEM 私钥等),用 [redacted] 替换密钥而保留句子其余部分。常驻召回指引还要求:若某条记忆实质是项目规则,应提升到 AGENTS.md / CLAUDE.md 后调用 memory_forget,避免两处漂移。
遗忘与衰减¶
条目退役不删正文,仅停止被召回,状态包括:
| 状态 | 含义 |
|---|---|
superseded / merged |
被更新陈述替代或重复折叠,带 supersededBy。 |
forgotten |
主动退役(memory_forget 或面板 Forget)。 |
decayed |
在 decayAfterDays 内未被阅读且超过 decayGraceDays 年龄。决策类(含 open)与 reference 不参与衰减;decayAfterDays: 0 可关闭衰减。 |
召回度量与侧栏¶
memory_detail 会更新 recallCount、lastRecalledAt;侧栏按条目展示召回次数,页头展示全库合计。只读脚本 npm run audit:recall 解析 DSH 会话日志,统计 agent 实际调用了哪些 memory 工具、全文打开次数、索引注入时隐藏比例等(插件自身不写 recall 事件日志)。
子代理:DSH 在会话头标记 origin: 'subagent'、delegationDepth 时,子代理会话可使用 memory 工具,但不注入常驻索引(README 中基于实测的说明)。
安装与启用¶
插件是纯 Cordis bundle,无构建步骤。官方 README 给出的方式如下(路径需换成你本机 clone 或下载后的目录;勿使用未在文档中出现的 dsh plugin add github:… 拼接命令)。
# 1. 安装到实际运行 DSH 的 profile
cd "${DSH_HOME:-$HOME/.dsh}/profiles/desktop" # 换成你的 profile 目录
pnpm add link:/path/to/dsh-memory-curator
# 2. 在该 profile 的 package.json 中把 bundle 列入 dsh.profile.bundles,例如:
# "dsh": { "profile": { "bundles": [
# "@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-memory-curator" ] } }
重启 DSH。也可在 Settings → Plugins 使用同样的 link: 规格,由插件管理器完成上述两步;刷新页面即可,无需 rebuild。
典型用法¶
宿主暴露六个 memory_* 工具(README 与审计示例中出现的有 memory_add、memory_search、memory_detail、memory_forget、memory_stats、memory_curate)。常见流程是:日常对话依赖 turn/end 自动捕获;模型在 tier 0 索引中看到一行摘要后,用 memory_search 缩小范围,再用 memory_detail 拉全文;需要人工或 agent 主动写入时用 memory_add,淘汰条目用 memory_forget,需要触发或查看整理时用 memory_curate / memory_stats。
侧栏 Memory 面板可浏览与管理条目(含 Forget)。本地自检召回行为:
npm run audit:recall
适用场景与注意¶
适合:长期在同一台机器上用 DSH 做项目开发,希望跨会话保留「本机环境、工具踩坑、你对 agent 的纠正与禁止、未闭环事项」,又不想把一切都塞进 git 或无限膨胀上下文。
注意:
- 记忆仅存于本机
$DSH_HOME下 JSON,团队成员默认看不到;项目级规则应进AGENTS.md/CLAUDE.md。 - 插件以当前 DSH 进程权限运行,辅助 LLM 会读取会话与配置的仓库上下文;安装前请阅读 源码与 LICENSE,确认符合你的安全与合规要求。
- SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标与版本以你安装时仓库与目录页为准。
结尾¶
dsh-memory-curator 把「该记什么、怎么记、怎么召回、怎么合并冲突」做成 Harness 内的一体化能力:本地存储、分层提示、工具与侧栏并用。若你在 DSH 生态里找「记忆」类插件,可从目录页了解简介,并在 GitHub README 跟进安装与 audit:recall 等细节。
- 目录页:https://www.skillhub.cn/plugins/linx2568/dsh-memory-curator
- GitHub:https://github.com/linx2568/dsh-memory-curator