dsh-recall:把每个 turn 归档为 Run,让 Agent 检索自己的执行历史

前言

在 DSH 里跑 Agent,上下文通常只覆盖当前会话的最近几轮。更早做过什么、定过什么、试错过什么,换会话或压缩上下文后就很难追溯。常见做法是手写笔记、靠外部向量库,或让模型「凭印象」回答——这些都和宿主会话日志脱节,Agent 也很难在对话里主动查自己的历史。

下面介绍社区插件 dsh-recall(维护者 liu-zhengdong):在 DSH 侧把每个 turn 落成一条可检索的 Run,后台异步生成摘要,并提供工具与 /runs 命令供 Agent 与人浏览同一份归档。插件归类为「记忆」,仓库 GitHub,目录页 skillhub.cn。DSH 生态是「一切皆插件」;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-recall 是 DeepSeek Harness 的记忆类插件:完成一个 turn 就归档一条 Run(起止时间、工作目录、状态、目标、摘要等),不复制消息正文——正文仍由宿主会话日志持有,检索时通过 ctx.sessionQuery.readSession() 回读。行为契约自 pi-experiencev2 移植,存储与注入机制按 DSH 插件面重写;与 pi-experiencev2 相比,Run 边界为 turn/start → turn/end(一个 turn = 一条 Run),界面侧为 /runs、回忆设置页与左侧复盘会话,配置写在 profile 的 cordis.patch.yml(schemastery Config)。

核心功能

归档与摘要

turn/end 提交时,从会话日志折叠该 turn 的边界并写入 run_archive 存储域。复盘会话本身不归档、不生成摘要,其过程与报告在独立的 dream 存储域。

归档后异步排队调用模型生成中文概述;摘要失败只记 summaryError,归档照常。当前 package 版本为 0.2.11(以仓库 package.json 为准)。

检索、展开与删除

工具 作用
recall 按关键词 / Run ID / 时间 / 工作目录检索;命中摘要与正文,分页
recall_message 按 r3/m2 读一条消息全文;format=raw 返回原始 JSON
forget 在用户明确要求下批量删除 Run;未知 ID 整批拒绝
dream 查询保存的审计报告、固定材料范围与来源
dream_complete 复盘会话提交有来源的审计报告并在正常结束后完成

recall 按字面关键词在摘要与正文里查;工具结果与卡片均按「历史证据」措辞——记录已保存不等于任务成功。

新会话启动索引

主 Agent 新会话开始时,可将当前目录最近若干条 Run 收成一段索引注入上下文,只注入一次。子代理、fork 会话、复盘会话、恢复已有会话、清空和压缩等场景不注入;当前目录不够配置条数时不从其他目录补。

自动复盘

全局积累 30 条未整理 Run 后(门槛可配),自动启动独立复盘会话:回顾这批经历、把值得长期记下的写进记忆,并留下可审阅的审计报告;左侧「复盘」可查看过程与结果。细节见仓库文档 自动复盘。

/runs 命令

在 DSH 中可直接输入:

/runs                 当前目录最近的 Run
/runs search <关键词>  检索当前目录
/runs all             全库最近的 Run
/runs r12             展开某条 Run 的消息列表
/runs r12/m3          读某条消息
/runs summary r12     只看某条 Run 的摘要
/runs debug           诊断信息(条数、墓碑数、摘要失败数)

输入不是以上任一形式时,整行按关键词检索当前目录。

安装与启用

本包未发布到 npm,add dsh-recall 会失败。官方安装方式如下:

# 从 GitHub
dsh plugin --profile <profile> add github:liu-zhengdong/dsh-recall

# 本地 checkout(开发用)
dsh plugin --profile <profile> add /abs/path/to/dsh-recall

包声明了 dsh.bundle.patch,添加后包名会追加进该 profile 的 dsh.profile.bundles。可用下面命令确认配置已挂上:

dsh --profile <profile> --dump-config | grep -B2 -A6 dsh-recall

package.json 中声明与 DSH 0.2.0-rc.2、0.2.1-rc.2 兼容;Node 引擎为 ^22.19.0 || >=24.0.0。许可证 MIT。

配置要点

配置字段在 profile 的 cordis.patch.yml 中,常用项如下(完整说明见 README):

字段 默认 说明
overviewLimit 200 每条 Run 摘要目标 Unicode 字符数(1–2000)
noSummary false 关闭 Run 摘要
summaryProvider / summaryModel "" 须同时填写才指定摘要模型;都留空则用当前会话路由;只填一半视为配置错误
autoDream true 达门槛时自动复盘
dreamThreshold 30 自动复盘门槛(1–1000),每批最多 30 条
dreamProvider / dreamModel "" 同时留空用宿主默认;同时填写可指定复盘模型
startupRecall true 新会话是否注入最近 Run 索引
startupRecallCount 10 注入条数(1–100)
startupRecallScope cwd cwd 仅当前工作目录;all 含全部目录并标出目录

数据落盘位置

<dsh home>/storages/run_archive/
  runs/<sessionId>__<turn>.json
  tombstones/<sessionId>__<turn>.json

存储域名 run_archive,后端由 profile 的 storage-domain 决定(默认 json)。复盘相关数据在独立 dream 存储域。

典型用法

  1. 按上文命令把插件加入 profile,确认 dump-config 中出现 dsh-recall。
  2. 在正常对话中完成若干 turn,让插件自动归档;用 /runs 查看当前目录最近 Run,或 /runs search 关键词 检索。
  3. 需要 Agent 自行查历史时,依赖模型调用 recall / recall_message;展开单条消息示例:recall_message 传入 r12/m3。
  4. 全局未整理 Run 达到 dreamThreshold 且 autoDream 为 true 时,关注左侧「复盘」与 dream 工具返回的审计报告;长期记忆文件的改动以审计报告记载为准,不在 run_archive 内。

适用场景与注意

适合:长期在同一 DSH profile 下做编码、排查、多轮决策,希望 Agent 能检索「自己以前在这台机器、这个目录里做过什么」,并可选地把批量 Run 整理成长期记忆。

注意:

  • 插件以当前 dsh 进程权限运行,安装前请阅读源码与 MIT 许可证,确认归档与复盘行为符合你的合规要求。
  • 不存储消息正文副本,删除 Run(forget)后留下墓碑,序号不复用。
  • 社区目录星标等信息以站点展示为准(撰写时 GitHub 星标为 0),版本更新需维护者升 package.json 的 version 并打 tag,市场侧先比版本号。

结尾

dsh-recall 把「每个 turn 一条 Run + 摘要 + 检索 + 可选自动复盘」接到 DSH 会话生命周期上,让执行历史成为 Agent 可查询的证据,而不是散落在上下文外的笔记。进一步了解可打开 目录页 与 GitHub 仓库 README。

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

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

Xiaoye