dsh-codex-memories:为 DSH 提供 Codex 式文件化长期记忆

前言

在 DeepSeek Harness(DSH)里,每个会话默认彼此隔离。昨天你纠正过的工作方式、某个仓库里「真正能跑」的命令、已经排查过的故障与修复——下一轮对话不会自动带上,除非你再次口述。社区里常见做法是手写项目说明、把要点贴进 system prompt,或依赖单次会话里的上下文窗口;这些方式要么难维护,要么无法跨会话沉淀。

下面介绍维护者 Lushdawn 发布的 DSH 插件 dsh-codex-memories(包名 @lushdawn/dsh-codex-memories,分类:记忆)。它在本地用纯 Markdown 落盘,复现 Codex 记忆体系的两阶段结构:先按会话抽取,再合并成可检索的手册,并在每轮对话前注入精简摘要。

这是什么

dsh-codex-memories 是面向 DSH 的 Codex 风格长期记忆插件:跨会话摄入已结束的对话,合并为可搜索手册,并在每轮之前向 prompt 注入紧凑摘要。持久产物均为可读、可编辑、可版本管理的 Markdown 文件;索引与任务状态保存在 index.json。

插件当前版本为 0.1.1(见仓库 package.json),许可证 MIT,要求 Node >= 20。在 SkillHub 目录中归类为「记忆」;GitHub 星标为 0(以目录页信息为准)。

工作原理

整体流程可以概括为:

session goes idle for N seconds
   └─ Stage 1  one model call per session -> session_summaries/<slug>.md + raw_memories.md
        └─ Stage 2  once enough memory accumulates -> MEMORY.md + memory_summary.md
             └─ before each turn, memory_summary.md is injected into the prompt

先做 Stage 1:会话空闲达到配置时长后,对每个会话发起一次模型调用,写出 session_summaries/<slug>.md,并追加到 raw_memories.md。当待合并记忆达到阈值后执行 Stage 2,生成或更新 MEMORY.md 与 memory_summary.md。之后每一轮对话开始前,会把 memory_summary.md 注入 prompt(长度受 maxInjectChars 限制)。

设计意图是让智能体记住:你希望它如何工作、某个仓库里事实来源与可执行命令、以及「某种失败对应哪种修复」——而不必每次重讲。

核心功能

斜杠命令

在 DSH 中可使用以下命令(摘自 README):

命令 作用
/memory status 查看记忆根目录、已抽取会话、待合并项、最近时间戳
/memory show 打印当前 memory_summary.md
/memory extract 立即抽取当前会话
/memory backfill 扫描已存储会话,抽取尚未处理的条目
/memory consolidate 立即将待合并记忆写入 MEMORY.md
/memory forget <sessionId\|all> 删除抽取记录(手册正文保留)
/memory on / off 开关本进程内的自动抽取

模型工具

当配置项 dedicatedTools 为 true(默认)时,会向模型暴露:

工具 作用
memory_search 在记忆文件上做行级关键词检索(any / all / on_same_line)
memory_read 按行范围读取单个记忆文件
memory_list 列出记忆目录与待处理工作
memory_note 追加一条临时笔记(模型侧唯一的写入路径)

模型被要求以 MEMORY.md:12-14|note=[...] 形式引用记忆。手册正文不能由模型直接改写;合并由独立的 Stage 2 完成,避免单轮对话损坏长期记忆。

磁盘布局

默认根目录为 $DSH_HOME/memories/(可通过 storageDir 覆盖):

$DSH_HOME/memories/
├── MEMORY.md                    # 持久手册,按 Task Group 组织
├── memory_summary.md            # 注入 prompt 的层;首行须为 v1
├── raw_memories.md              # Stage 1 机械合并,按会话 id 升序
├── session_summaries/<slug>.md  # 每个会话一份结构化回顾
├── extensions/ad_hoc/notes/     # 你或模型写的笔记
└── index.json                   # 抽取缓存、任务记录、合并水位

与 Codex 的对应关系

插件行为规格来自对 Codex 本身的逆向(磁盘形态与 codex.exe 内嵌 prompt 模板)。例如 Codex 的 ~/.codex/memories/ 对应 $DSH_HOME/memories/;rollout_summaries/*.md 对应 session_summaries/*.md;SQLite 索引在此实现中为 index.json。检索为关键词/行级,非语义向量,与 Codex 侧 tradeoff 一致;可在 MEMORY.md 里用 keywords 做路由。

安装与启用

在 DSH 中从 web profile 安装(命令须与 README 一致):

dsh plugin --profile web add @lushdawn/dsh-codex-memories

本地开发可链接目录:

dsh plugin --profile web add link:<absolute path to this directory>

安装后重启 DSH,或等待 live profile 热加载。

配置通过 profile patch 覆盖;各字段均有安全默认值,节选如下:

- insert:
    - id: dsh-codex-memories
      name: dsh-codex-memories
      config:
        storageDir: ''            # default $DSH_HOME/memories
        generate: true
        use: true
        dedicatedTools: true
        model: ''                 # e.g. deepseek-official/deepseek-flash
        extractModel: ''          # falls back to model
        consolidationModel: ''    # falls back to model
        idleSeconds: 120
        maxSessionsPerRun: 3
        maxSessionAgeDays: 30
        consolidationThreshold: 2
        maxInjectChars: 9000
        minSessionMessages: 4
        extractMaxTokens: 8000
        consolidateMaxTokens: 16000

model 为空时,插件读取当前默认模型,再回退到 deepseek-official/deepseek-flash。

典型用法

  1. 安装插件并确认 use: true、generate: true(默认即为开启)。
  2. 正常完成若干轮对话;会话空闲默认 120 秒(idleSeconds)后触发 Stage 1。消息数少于 4 条的会话会被跳过。
  3. 用 /memory status 查看已抽取会话与待合并数量;需要时用 /memory extract 手动抽取当前会话。
  4. 待合并条数达到 consolidationThreshold(默认 2)后会自动 Stage 2;也可执行 /memory consolidate 立即合并。
  5. 用 /memory show 查看即将注入的摘要;长会话历史可通过 memory_search / memory_read 按需拉取。
  6. 若进程在空闲窗口内未存活,下次启动时的 backfill 会补扫未处理会话(README 说明的启动 sweep)。

历史会话补抽:

# 在 DSH 对话中执行斜杠命令,而非 shell
/memory backfill

适用场景与注意

适合谁:长期在 DSH 里维护固定仓库、反复纠正 agent 行为、或需要记住「命令/路径/排障结论」的开发者;希望记忆可审计、可 git 管理、不依赖外部记忆服务时,文件化手册较合适。

成本:每个会话 Stage 1 一次模型调用,每次合并 Stage 2 一次调用;每轮 sweep 最多处理 3 个会话(maxSessionsPerRun)。memory_summary.md 每轮进入 prompt,受 maxInjectChars(默认 9000)限制。

隐私与权限:数据仅存本地文件;除调用的模型 API 外无额外网络访问。插件以当前 dsh 进程权限 读写 $DSH_HOME/memories/;安装前应在 GitHub 阅读源码与 MIT 许可证,自行判断是否纳入工作流。

已知限制(README):Stage 2 单次回复需生成两份完整文档,手册很大时可能触达输出上限,此时保留旧文件并报错而非写入损坏内容;自动抽取需在空闲窗口内进程仍存活;检索非语义搜索。

DSH 生态强调「一切皆插件」;SkillHub(https://www.skillhub.cn/plugins/Lushdawn/dsh-codex-memories)为社区目录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-codex-memories 把 Codex 的两阶段记忆流程落到 DSH:会话级抽取、手册级合并、摘要级注入,外加搜索/读取/列表/笔记工具。若你受困于跨会话重复交代上下文,可先按上文命令安装,用 /memory status 与目录下的 Markdown 核对行为是否符合预期。

  • 目录页:https://www.skillhub.cn/plugins/Lushdawn/dsh-codex-memories
  • 源码与文档:https://github.com/Lushdawn/dsh-codex-memories
羽毛球分组比赛记分
小程序二维码

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

Xiaoye