DSH(DeepSeek Harness)的核心理念是「一切皆插件」。在工程化开发中,如何让新会话无缝接续旧进度、如何让单次产出的价值沉淀为长期资产,是常见痛点。dsh-ledger-memory 针对这一场景,为 DSH 提供了一套宿主侧的记忆管理方案。
它不管理原始对话记录,而是为每个项目建立独立的、可回溯的长期记忆载体 —— 台账。围绕台账,插件提供了活动日志、上下文压缩与跨会话交接能力。
核心机制¶
1. 会话接续与注入¶
新会话开始时,插件会将活跃台账全文注入上下文。若内容未变更,则不重复注入,以避免破坏 prompt 缓存。
回合结束时,插件会要求模型将本次产出的状态(已完成 / 受阻 / 下一步)写回活跃台账。
2. 上下文压缩与逐字胶囊¶
台账内容会随会话增长。当水位达到阈值(默认 70%)时,插件会触发压缩。
在压缩之前,插件会将用户原话、报错原文、变更文件清单持久化为逐字胶囊。压缩后的内容连同胶囊指针一起注回上下文,确保细节不丢失。
3. 分流压缩(Triage)¶
压缩并非简单截断,而是通过 ledger_triage 将内容划为三桶:
* 留(keep):当前状态、未验证假设。压缩后逐字注回。
* 落(stash):后续可能需要查阅的依据。写入 _stash/ 目录,永不注入。
* 丢(drop):已被取代的内容,仅记录日志。
4. 跨会话交接¶
插件会生成交接单,并在新会话的首轮注入中提供指针,使新对话无需使用者主动查询即可接手。
安装与启用¶
环境要求:Node.js ≥ 22.19。
# 走 npm 安装
npm install dsh-ledger-memory
# 或走 DSH 自带的插件命令
dsh plugin add dsh-ledger-memory
安装完成后,必须重启客户端才生效。内核对已加载的插件不会因文件改动自动重载。
使用方式¶
安装后无需额外配置。在一个项目目录中开始工作,插件会自动检测台账状态。
常用命令¶
在对话中敲 /ledger(不带参数会弹出卡片),或使用子命令:
/ledger status:查看状态(台账是否存在、使用的文件、行数、Git 状态)。/ledger show:将当前活跃台账全文输出。/ledger init:初始化台账(由 AI 依据项目类型设计结构)。/ledger update:让 AI 将本次会话的进展写回台账。/ledger archive:将最旧的已完成条目移入归档目录。/ledger compact:立刻执行一次全量压缩。/ledger light:轻量压缩(仅压缩上一个回复的一段,需显式使用)。/ledger log:查看活动日志(L0-L4)。/ledger handoff:生成交接单。/ledger lock [路径]:将本场对话锁定到指定项目目录(用于总工作区下的子项目管理)。/ledger principles:查看根本原则(仅限使用者本人执行)。
锁定子项目¶
若会话建立在包含多个项目的总工作区上,插件默认将操作落在当前目录。此时可通过锁定指定目标:
/ledger lock 20-DSH插件/04-其余插件/10.项目台账
锁定后,本场对话的全部工具调用均落在该目录。锁定状态会跨重启保持。
文件结构¶
插件管理以下文件,语义分离:
LEDGER.md:当前状态,每回合注入。JOURNAL.md:回合流水,只追加,不注入。decisions/:长期决策,一卡一文件。_ledger-log/:活动日志 L0-L4,只追加,永不注入。_stash/:分流中的”落”部分,只追加。_handoff/:交接单。goals/:目标树。lessons/:经验与教训,一卡一文件。PRINCIPLES.md:根本原则,仅使用者本人可修改。
注意事项¶
- 不自动写入:插件负责在适当时机向模型注入指令,由模型调用
ledger_write等工具落盘。模型忽略指令时,回合不会落盘。插件会在后续步骤再次要求(闸门机制)。 - 日志不注入:活动日志(L0-L4)主要用于排查,永远不会注入到上下文中。
- 原则修改:
/ledger principles仅限使用者本人执行,模型只能提议或请求授权窗口。
总结¶
dsh-ledger-memory 通过台账、胶囊与分流压缩机制,解决了 DSH 在工程化场景下记忆碎片化、上下文截断与项目交接难的问题。它让每一次对话都能成为项目长期资产的一部分。
- 插件目录:https://www.skillhub.cn/plugins/18477514055/dsh-ledger-memory
- 源码地址:https://github.com/18477514055/dsh-ledger-memory