coding-agents
vectorize-io/hindsightHindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
DeepSeek Harness 持久记忆插件:记忆读写/检索工具、回合自动记录、项目作用域召回注入、管理界面,可非破坏导入 Claude Code 记忆。
一个面向 DeepSeek Harness(DSH) 的第三方持久记忆插件,参考并复刻 CC-HAHA 的项目记忆使用体验。
[!IMPORTANT] 本项目不是 CC-HAHA 官方组件,也不隶属于 CC-HAHA 或 DeepSeek。记忆理念与交互流程参考 CC-HAHA,插件代码使用 DSH 原生事件、工具、LLM 和 Web UI 接口独立实现。
memory_remember 工具调用;只有返回 saved: true 后才确认已记住。MEMORY.md 维护简洁索引。sessionMaxBytes(默认 60KB)后只保留索引——对齐 CC-HAHA 的 alreadySurfaced + MAX_SESSION_BYTES。仓库根目录的 package.json 包含 DSH 原生插件声明:
{
"dsh": {
"bundle": { "patch": "./cordis.patch.yml" },
"client": {
"platform": "web",
"inject": ["@deepseek-ai/dsh-client-runtime"]
}
}
}
cordis.patch.yml 负责挂载 host 插件,lib/client.js 负责加载会话页记忆 UI。
要求:已经安装并能正常启动 DSH。
dsh plugin --profile web add github:yihefeikong-rgb/dsh-cc-haha-memory
安装后重启 DSH Web:
dsh web
进入任意会话后,顶部应出现“记忆”标签。首次验证可以发送:
请记住:这个项目使用 Rust 和 Tauri。
正常轨迹应包含:
Read MEMORY.md → memory_remember → saved: true
记忆文件默认位于:
~/.dsh/memory/
├── MEMORY.md
├── 通用/
└── <当前项目>/
└── <主题>.md
默认配置位于 cordis.patch.yml:
- insert:
- id: dsh-memory
name: dsh-memory
config:
reviewEnabled: true
reviewInterval: 5
主要选项:
| 选项 | 默认值 | 说明 |
|---|---|---|
reviewEnabled | true | 是否启用回合后自动评审 |
reviewInterval | 1(schema)/ 5(本包 patch) | 每多少回合评审一次 |
reviewTimeoutMs | 120000 | 后台评审总超时 |
recallOrder | 117 | 索引 context 的注入顺序 |
recallMaxBytes | 25000 | 注入索引最大字节数(另有 200 行硬上限) |
recallRelevantMaxBytes | 16000 | 单次相关正文最大字节数 |
sessionMaxBytes | 61440 | 本会话相关正文累计上限(0=不限) |
dedupeRelevant | true | 同一会话内已注入过的正文不再重复注入 |
relevantBodiesEnabled | true | 是否按当前查询注入相关正文。设 false = 每会话只在开场注入一次:索引冻结 + 无正文 → 记忆块在会话内恒定,harness 不再逐轮追加注入;细节改用 memory_search/memory_read 取(这正是上游 cc-haha 的默认形态) |
freezeIndexPerSession | true | 索引片段每会话只渲染一次(对齐上游 getUserContext 的 memoize)。否则会话中途写记忆会让索引变化 → 多一次注入 |
selectEnabled | true | LLM 语义相关性选择(失败/关闭时回落关键词评分) |
selectTimeoutMs | 12000 | 相关性选择超时 |
guidanceEnabled | true | 把「引用记忆前的核验」指南注册成系统提示词的静态 section(内容不变 → 走前缀缓存) |
recentToolsEnabled | true | 把「最近使用过的工具」交给选择器,避免注入正在使用的工具的参考类记忆 |
recentToolsWindow | 8 | 「最近使用过的工具」保留个数 |
skipReviewAfterAgentWrite | true | 本回合主 agent 自己写过记忆时跳过该回合的后台评审(对齐上游 hasMemoryWritesSince) |
索引(
MEMORY.md)每次被重写前会先备份上一版到~/.dsh/memory/.history/_index/,只保留最近 20 份。 「引用记忆前的核验」指南与「最近用过的工具」排除规则对齐上游 cc-haha 的TRUSTING_RECALL_SECTION/MEMORY_DRIFT_CAVEAT(src/memdir/memoryTypes.ts)与findRelevantMemories的选择器提示词;上游选择器用json_schema强制结构化输出, DSH 的llm.stream无此能力,故改为把同一约束写进提示词。
插件注册 8 个工具:
memory_remember:显式“记住”的单次可见入口。memory_write:新建记忆。memory_read:读取完整记忆。memory_update:按 ID 更新并保存历史版本。memory_delete:删除并保存历史版本。memory_search:当前作用域全文搜索。memory_list:列出当前作用域索引。memory_suggest_tags:推荐已有标签。pnpm install --frozen-lockfile
pnpm test
pnpm run build
构建输出:
lib/index.js:DSH host 插件。lib/client.js:DSH Web UI 插件。本项目重点参考了 CC-HAHA 的以下记忆设计:
MEMORY.md 只保存短索引。参考基线:NanmiCoder/cc-haha,本地审查提交 d52bbec707246f807416c2bc6b1cd67445cfe622,相关设计位于其 src/memdir/。
感谢 CC-HAHA 作者与贡献者提供优秀的记忆交互设计。完整署名与许可证见 THIRD_PARTY_NOTICES.md。
An unofficial persistent-memory plugin for DeepSeek Harness, inspired by the project-memory workflow of CC-HAHA. It stores memories as project-scoped Markdown files, exposes visible memory tool calls, injects only global plus current-project context, and includes a Web UI memory tab.