Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dsh-Memory-Evolution

让 DeepSeek Harness(dsh)Agent 自进化的 Cordis 插件。

它把 CowAgent 五层自进化机制逐层映射到 dsh 的扩展点上——让 Agent 越用越懂你、越用越少犯错。记忆在对话中自然积累,复盘在空闲时自动发生,核心记忆在夜间被蒸馏精炼,一切改动都可追溯、可回滚。

设计原则:改得克制、改得可控。每一次自主修改都隔离执行、留有备份、可被回滚。

五层自进化

层级 做什么 何时触发 dsh 扩展点
1 基础记忆 记忆与知识维护 对话进行中 systemPrompt.section() 注入 MEMORY.mdtools.register() 暴露记忆/知识工具
2 上下文总结 把压缩摘要落地到天级记忆 上下文超限时 监听 session/eventcompaction/summary,写入当日记忆
3 会话复盘 从对话中提炼记忆、固化技能、沉淀任务 会话空闲后 agent/status 空闲 + 轮次阈值 → runMaintenance() 隔离执行 → followup() 通知
4 梦境整理 蒸馏天级记忆为精炼核心记忆 每天定时(默认 23:55) 插件内定时器 → 蒸馏 + 写梦境日记 → inject() 静默注入
5 源码自更新 Agent 改写自身源码 被动/主动 默认关闭rewrite_self 工具 + /self-restart 自检命令

安装

npm install @deepseek-ai/dsh-evolution

需同时安装下列 peer 依赖(dsh 运行时框架):

@deepseek-ai/cordis
@deepseek-ai/dsh-agent
@deepseek-ai/dsh-commands
@deepseek-ai/dsh-llm
@deepseek-ai/dsh-session
@deepseek-ai/dsh-system-prompt
@deepseek-ai/dsh-tools

快速上手

在 profile 的 cordis.patch.yml 里挂载插件(完整示例见 cordis.yml.example):

- insert:
    - id: evolution
      name: '@deepseek-ai/dsh-evolution'
      config:
        enabled: true

挂载后 Agent 自动获得记忆能力。对话中它会主动记录值得长期记住的内容;空闲 10 分钟后自动复盘;每晚 23:55 自动整理核心记忆。你也可以随时手动驱动:

/evolution status      # 查看当前状态
/evolution reflect     # 立即复盘
/evolution dream       # 立即梦境整理
/evolution undo 3      # 回滚最近 3 次重写

模型工具

插件向 Agent 暴露以下工具,由模型在对话中自主调用:

工具 作用
record_memory 记录持久事实、偏好、决策或教训(core 每次注入提示词 / daily 当日日志)
read_memory 按关键词检索核心记忆与天级记忆
record_knowledge 将可复用知识存为 Markdown 笔记
search_knowledge 按关键词检索知识库
rewrite_self 改写 srcDir 内的源码文件(默认关闭,路径隔离 + 自动备份)

命令

命令 说明
/evolution status 展示记忆条数、各层开关与运行参数
/evolution reflect 立即触发一次复盘
/evolution dream 立即触发一次梦境整理
/evolution undo [N] 回滚最近 N 次破坏性重写(默认 1)
/self-restart 轻量自检(仅在第 5 层开启时可用)

目录结构

dsh-evolution/
├── package.json            # 包元信息
├── tsconfig.json           # 独立 TS 配置(ESM)
├── cordis.yml.example      # 挂载示例
└── src/
    ├── index.ts            # 插件入口:Config schema + apply(),串起五层
    ├── memory.ts           # MemoryStore:核心/天级记忆、知识库、备份、审计日志、undo
    ├── llm.ts              # 一次性模型调用(askModel / resolveRoute)
    ├── tools.ts            # 第 1 层:记忆/知识工具
    ├── reflect.ts          # 第 3 层:复盘引擎(触发 + 执行 + 通知)
    ├── dream.ts            # 第 4 层:梦境蒸馏
    ├── skills.ts           # 技能落盘(写入 .dsh/skills)
    ├── selfupdate.ts       # 第 5 层:源码自更新(默认关闭)
    └── commands.ts         # /evolution 命令注册

磁盘记忆布局

所有记忆落在工作空间的项目根目录(最近含 .git 的祖先,否则为 cwd)下:

<projectRoot>/
├── .dsh/
│   ├── skills/                 # 技能目录(rank-100 本地发现根)
│   └── evolution/              # 记忆根(可配 memoryDir)
│       ├── MEMORY.md           # 核心记忆,每次会话注入提示词(≤ maxCoreMemories 条)
│       ├── memory/             # 天级记忆  YYYY-MM-DD.md
│       ├── knowledge/          # Markdown 知识库
│       ├── dream/              # 梦境日记
│       ├── TASKS.md            # 复盘沉淀的未完成任务
│       ├── change-log.md       # 审计日志(每次自主改动一行)
│       └── backups/            # 改动前备份(undo 用)

配置参考

{
  enabled: true,
  memoryDir: '.dsh/evolution',   // 记忆根(相对项目根)
  skillsDir: '.dsh/skills',      // 技能输出目录
  maxCoreMemories: 50,           // 核心记忆条数上限
  reflect: {
    enabled: true,
    idleMs: 600000,              // 空闲多久后触发复盘(默认 10 分钟)
    minTurns: 6,                 // 至少积累多少轮才复盘
    maxTranscriptChars: 60000,   // 复盘时发送给模型的上下文预算
  },
  dream: {
    enabled: true,
    at: '23:55',                 // 每天梦境整理时间(本地时区 HH:MM)
    maxCoreMemories: 50,
  },
  sourceRewrite: {
    enabled: false,              // 源码自更新,默认关闭
    srcDir: '.',                 // 允许改写的源码目录(路径隔离边界)
  },
  model: {
    provider: '',                // 可选:复盘/梦境专用 provider 覆盖
    model: '',                   // 可选:专用 model 覆盖(留空则借用 agent 自身路由)
  },
}

安全模型

所有自主改动遵循「隔离执行 → 备份 → 留痕 → 可回滚」的链路:

  • 隔离执行:复盘跑在 agent.runMaintenance() 内,不开新轮、不污染主对话;模型调用是一次性 ctx.llm.stream()
  • 变更可回滚:每次破坏性重写(核心记忆、技能、知识、源码)先备份旧文件到 backups/,再写入,并记一行到 change-log.md/evolution undo [N] 可回滚最近 N 次重写。
  • 变更可追溯change-log.md 记录 时间戳 rewrite|append 文件路径
  • 未变更则不打扰:复盘/梦境只在确实有改动时才通知(复盘用 followup() 主动推送,梦境用 inject() 静默注入)。
  • 路径隔离rewrite_self 只能写 srcDir 之内的文件,越界直接拒绝。
  • 绝不空覆写:梦境在没有当天新日记、或模型返回空核心记忆时直接跳过,不会用空内容覆盖已有核心记忆。

假设与已知限制

  • 第 2 层依赖部署里已挂载的 dsh-compaction-basicctx.compaction 缝);本插件只做「总结落地到天级记忆」,不做重复压缩。
  • 技能发现依赖 dsh-skill-filesystem(dsh 内置本地 provider,扫描 .dsh/skills)。本插件只写文件、不直接依赖 ctx.skills,因此即便技能能力未挂载,记忆/复盘/梦境仍可正常工作。
  • 第 5 层源码自更新默认关闭,且只做「路径隔离 + 备份 + 留痕 + 轻量自检」;完整的运行自检(导入/类型检查)与进程接力重启属于部署层(对应 CowAgent 的 cow self-restart CLI),本插件不越权实现。
  • 一次性模型调用默认借用 agent 自身的 provider / model 路由;无活跃 agent 且未配置 model 覆盖时,复盘/梦境会静默跳过。
  • 天级记忆的追加(appendLine)不做备份(追加是低风险可加性操作),undo 只回滚破坏性重写。

构建与发布

npm install
npm run build      # tsc 编译到 lib/
npm pack           # 生成可发布的 tarball
npm publish        # 发布到 npm(access: public)

License

MIT

About

让 DeepSeek Harness(dsh)Agent 自进化的 Cordis 插件——持久记忆、上下文总结落地、会话复盘、夜间梦境蒸馏与可回滚的源码自更新,越用越懂你、越用越少犯错。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages