GLFzr
dsh-hermes-memory-bridge
Bridge DeepSeek Harness (DSH) session compaction summaries into Hermes Agent persistent memory. 把 DSH 会话压缩总结自动桥接进 Hermes 永久记忆。
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-hermes-memory-bridge
把 DeepSeek Harness(DSH)的会话压缩总结,自动桥接进 Hermes Agent 的永久记忆。
DSH(DeepSeek Harness)是 DeepSeek 的开源 agent harness("一切皆插件"),每个项目独立会话;Hermes Agent(Nous Research)是自带四层记忆与学习闭环的自进化 agent。本工具让两者互补:
- DSH 负责执行:项目级任务,会话压缩总结(
<compacted-summary>)是天然的"项目快照" - Hermes 负责记忆:MEMORY.md 常驻注入 + SQLite 全文检索,成为跨项目的全局记忆中枢
- 本桥接器负责搬运:发现 DSH 的新压缩总结 → 交给 Hermes 吸收,无需人工干预
架构
DSH 会话(多帧 zstd JSONL)
│ 内置 dsh-compaction-basic 自动/手动触发压缩
▼
compaction/summary 事件(含 <compacted-summary> 总结块)
│ watcher 每 60 秒轮询(bridge-state.json 去重)
▼
dsh-hermes-bridge.mjs
├─ mode=file:总结全文 → 项目 AGENTS.md「DSH 记忆总结」节
│ + 指针行 → Hermes MEMORY.md(2200 字符预算控制)
└─ mode=chat(推荐):hermes -z 让 Hermes 自行蒸馏进记忆
(失败自动回退 file 模式,保证不丢)
▼
Hermes:MEMORY.md 蒸馏行 + 会话记录(session_search 可检索)
+ 项目 AGENTS.md 归档 → 下次会话自动注入,跨项目"记得"DSH 做过的一切
快速开始
# 依赖:Node.js ≥ 22.12(node:zlib 自带 zstd)、本机已安装 hermes CLI
# 单次扫描(调试)
node dsh-hermes-bridge.mjs --once --mode chat
# 常驻轮询(60s 间隔)
node dsh-hermes-bridge.mjs --daemon --mode chat
# 备选模式:不调用 hermes,纯文件路由(AGENTS.md + MEMORY.md 指针)
node dsh-hermes-bridge.mjs --daemon --mode file
配置(环境变量,全部可选)
| 变量 | 默认值 | 说明 |
|---|---|---|
DSH_HOME | ~/.dsh | DSH 数据目录(会话在 $DSH_HOME/sessions) |
HERMES_HOME | ~/.hermes | Hermes 数据目录 |
HERMES_EXE | win32: $HERMES_HOME/hermes-agent/venv/Scripts/hermes.exe,其他: hermes | hermes 可执行文件 |
HERMES_MEMORY | $HERMES_HOME/memories/MEMORY.md | Hermes 记忆文件 |
BRIDGE_STATE | $DSH_HOME/bridge-state.json | 去重状态文件 |
BRIDGE_LOCK | $DSH_HOME/bridge-daemon.lock | daemon 锁文件 |
三种模式(B / A / C)
| 模式 | 谁写记忆 | 用途 |
|---|---|---|
| B · file | 桥接器自己(全文进 AGENTS.md,指针进 MEMORY.md) | 手动/验证,无 LLM 开销 |
| A · watcher | 轮询自动化机制 | 与 B/C 组合使用 |
| C · chat(推荐) | Hermes 自己决定(蒸馏、修剪、归档) | 生产终态;MEMORY.md 满时 Hermes 会自我管理预算 |
工作原理细节
- 会话解码:DSH 会话存档是"多帧 zstd"追加写(
session.jsonl.zstd),按帧魔数拆分逐帧解压;也兼容明文.jsonl - 事件提取:只认
type === "compaction/summary"且带data.summary的事件,提取 text 块并剥掉<compacted-summary>标签 - 去重:
(会话文件 + compactionId)记录在BRIDGE_STATE,重启不重放 - 项目归属:从会话头事件的
cwd字段定位工作区,各项目 AGENTS.md 独立维护(互不污染),每个项目保留最近 5 条 - 失败安全:chat 调用失败自动回退 file 模式;单个事件异常不影响整轮扫描;daemon 用 PID 锁防重复实例;hermes 超时(240s)会杀掉整个进程树
测试与验证
仓库自带测试工具(均为合成事件,格式与 dsh-compaction-basic 写入 schema 一致):
make-test-event.mjs— 生成单个格式真实的压缩事件gen-deep-tests.mjs— 生成深度测试事件集(真实 zstd 帧 / 跨项目 / 回退 / 回读)scan-compactions.mjs— 只读扫描 DSH 会话里的压缩总结(不写任何东西)
已通过的验证路径:
| 测试 | 内容 | 结果 |
|---|---|---|
| T1 | 真实 zstd 多帧文件 + 追加帧 → 解码提取 | ✅ |
| T2 | 两个项目事件 → 各自 AGENTS.md 隔离 | ✅ |
| T3 | hermes 不可用 → 自动回退 file 模式 | ✅ |
| T4 | 吸收 → 全新 Hermes 会话回读测试标记(引用 MEMORY.md 与 AGENTS.md 两个来源) | ✅ |
已知限制
- Hermes
MEMORY.md官方上限 2200 字符;已满时 file 模式的指针行会跳过(chat 模式无此问题,Hermes 自己会修剪) hermes -z每次吸收消耗一次 LLM 调用(本机默认 DeepSeek V4 Pro)- DSH 为开发者预览版,会话存储格式未来可能变化