目录卡(dsh-cardcatalog):把自维护记忆账本投影成上下文

前言

在 DeepSeek Harness(DSH)里跑智能体时,常见做法是单独维护一份「记忆账本」——事实 JSON、jsonl 日志或 Markdown 笔记。模型若只靠对话里偶尔提到的内容,往往不知道「有哪些记忆、多久没更新、详情该去哪查」,容易凭标题臆测正文,或把已过期的条目当成仍有效的结论。

下面介绍社区插件 目录卡(dsh-cardcatalog,维护者 Parirose)。它把你在磁盘上显式配置的只读文件投影成一段标题级目录(可选附带 Markdown 小节摘录),并在会话中按需注入近况提醒、压缩相关元信息与语气样本等。默认不存储、不检索、不写文件;唯一例外是显式开启的 upkeep 归档改写(先快照、再逐行核对)。插件当前版本为 0.7.0(见仓库 package.json),要求 Node >=22.19.0,DSH >=0.1.7-rc.2 || >=0.2.0-rc.2。

这是什么

目录卡是投影层,不是记忆数据库,也不是 embedding 检索器。它读取你在配置里写明的路径,渲染标题、年龄、是否过期,必要时只取你点名的 Markdown 二级标题小节;拿不到宿主注入接缝时,宁可不注入并在日志说明,不会假装成功。

社区目录页:skillhub.cn/plugins/Parirose/dsh-cardcatalog
源码与说明:github.com/Parirose/dsh-cardcatalog

核心能力(与 README 一致)

记忆目录投影

  • 支持三种源:facts(JSON 数组)、jsonl(每行一个 JSON)、markdown(按 ## 二级标题白名单取小节,或 tailLines 取末尾行)。
  • 全局限制包括 maxLines(非过期条目行数上限)、maxChars(整段字符上限,v0.2.0 起默认 1600)、showStale(是否展示过期条目)等;不配 sources 则目录什么都不注入,日志会提示「没配 sources,未注入任何记忆」。

nudge:近况提醒(只读)

默认关闭。开启后只检查指定文件的 mtime,过久未更新则注入提醒文案;不写入、不总结、不替你判断这一轮是否值得记。text 默认为空字符串,为空时 nudge 不生效。

tone:压缩后的原话样本

检测到本会话发生过上下文压缩时,从压缩点之前取最后若干轮真人原话与助手正文,供模型对齐语气;只读 agent.session.snapshotEvents(),不读磁盘会话文件。

wall:压缩痕迹

在每个压缩点之后注入元信息:压缩次数、时间、压掉的事件与用户消息规模、如何取原话与查账本;不含任何内容摘要。README 说明默认开启。

decay:记忆保养(只算不写)

对 facts/jsonl 条目计算「清晰度」四档(鲜明 / 清楚 / 模糊 / 印象),并对配置了 maxBytes 的源做体量百分比与 warn / over 提示;同一会话同一天最多注入一条相关提示,不写文件。

upkeep:受控归档(默认关)

显式开启且源标记 allowRewrite: true 时,超红线才把最旧行搬进归档;只对 markdown 生效,且需配置 archivePath。不做内容生成,只做搬移。

安装与启用

在 DSH 中安装(命令来自官方 README):

dsh plugin --profile web add dsh-cardcatalog

本地开发可链接本地目录:

dsh plugin --profile web add -w link:./dsh-cardcatalog

没有默认路径,也不会猜测你的账本位置。最小配置需显式列出 sources,例如:

sources:
  - id: env-facts
    kind: facts
    path: ~/.dsh/notes/facts.json

  - id: reading-log
    kind: jsonl
    path: ~/.dsh/notes/log.jsonl
    idField: key
    titleField: title
    dateField: at

  - id: notes
    kind: markdown
    path: ~/.dsh/notes/notes.md
    sections:
      - 称呼与偏好
      - 当前在做什么
    maxChars: 700
    maxBytes: 4096
    warnPct: 80

maxLines: 7
maxChars: 1600

facts 条目示例(字段名以 README 为准):

[
  {
    "id": "example-entry",
    "title": "example-entry",
    "verifiedAt": "2026-10-01T00:00:00.000Z",
    "ttlDays": 30
  }
]

典型用法:AGENTS.md 说明书

插件只生成「给模型的说明书」文本,不会创建或修改工作区里的 AGENTS.md。在插件设置页复制该段说明到当前工作区的 AGENTS.md,用于约定:目录条目是数据而非指令;需要正文时要查源文件;带 ⚠️stale 的条目已过期,不宜当结论使用。

注入时机由全局 injectAt 控制(默认 session-start,也可 every-n-turns)。可选模块如 nudge、tone、wall、decay 各有独立 YAML 块,字段与默认值见仓库 README 的速查表。

适用场景与注意

适合:已经用文件自建记忆账本、希望模型在会话开头(或按轮次)看到「目录 + 可选小节」而不把整库塞进上下文;需要在压缩后保留语气样本或让模型意识到历史被截断;希望对过期与体量做只读提示的用户。

不适合:期望插件自动从对话里抽取记忆、做向量检索或默认写回账本的场景——这些 explicitly 不在设计范围内。

DSH 生态是「一切皆插件」;SkillHub 上的插件目录为社区站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限读取你配置的路径;安装前请查看 MIT 许可 与源码(仓库含 check:privacy、check:readonly 等 CI 检查)。星标数、用户评价等以各站点当时展示为准,本文不列举未核实数据。

结尾

目录卡的价值在于:账本仍由你维护,插件只做只读投影与受控提醒——让模型知道「有什么、多新、去哪查」,而不是替你做存储或检索。

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

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

小夜