前言¶
在 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 存储域。
典型用法¶
- 按上文命令把插件加入 profile,确认
dump-config中出现dsh-recall。 - 在正常对话中完成若干 turn,让插件自动归档;用
/runs查看当前目录最近 Run,或/runs search 关键词检索。 - 需要 Agent 自行查历史时,依赖模型调用
recall/recall_message;展开单条消息示例:recall_message传入r12/m3。 - 全局未整理 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。