持续自进化:从会话轨迹沉淀版本化、可审计、可回滚的 harness 状态(提示词/记忆/技能/子代理规格),带审查门禁与技能热加载。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-continual-evolve
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:ZK-Andy/dsh-continual-evolve
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 中文
DeepSeek Harness(dsh)的持续自进化插件:一套版本化、可审计、可回滚的 harness 状态层——提示词补充、记忆、技能、子代理规格——从会话轨迹中沉淀而来。
模型提议,代码保证。 每一项机械化安全属性——schema 校验、原子写入、快照、版本、审计、接受决策——都由代码强制,从不依赖提示词自觉。
为什么
Agent 在每个会话里积累可复用经验(重复失败、持久事实、可复用流程),下个会话就忘掉。本插件把这些经验变成一等公民的持久状态:
- 三作用域与合并语义(global < project < local):local 本会话暂存、project 本项目跨会话库、global 跨项目——配合机械化晋升守卫,只有可携带、有分量、非重复的知识才能进全局
- 类型化单条记忆:每条 memory 带召回类型(
user | feedback | project | reference);踩坑(feedback)必须含 Why + How to apply - 专用后台记忆 Agent:成功回合通过机械 eligibility 后,有界 ZCode 式 loop 检索冻结的 memory manifest,并经闭集工具提出纯 memory 编辑;不能调用 Agent、MCP、网络,也不能写源码。该 listener 不运行通用 review/planner/fate
- 记忆召回、投影与回执:
evolve_recall按 query/kind/scope/type 精确读回记忆全文;每次 memory 落盘同时生成可读的MEMORY.md索引 + 单事实文件;每次提取留统一审计回执(no-op/applied/declined + 耗时与轮次统计),只有实际沉淀才通知会话 - 确定性回滚:逆操作编辑由已应用结果生成——不靠 LLM 重新猜测
- benchmark 闭环:候选沉淀先经冻结用例 + 独立评分者评估再接受(rubric 加密落盘)
- store 卫生:
/evolve consolidate把写入时冲突提示与零使用陈旧条目变成一次批准、完全可逆的批量归档——加merge可将近重复内容并入幸存原条目
工作原理
- 沉淀——模型经
evolve_add创建条目,或由专用 Memory Agent 消费成功回合后的增量 snapshot。通用 review/planner 保持手动,除非另行显式调用。 - 能力感知的辅助调用——memory loop、review、planner、wrapup、fate 通过
src/llm-text.ts解析精确 provider/model 能力并使用模型公布的最低开启 reasoning effort,同时转发 host session id 供 provider 路由;只有没有开启档时才回退关闭档,没有 reasoning 元数据时使用 provider 默认行为。 - 守卫——代码强制校验:编辑 schema、blast-radius 与作用域一致性、晋升政策(项目专属标记 / 过薄内容 / 近似重复检测 / 凭据筛查保持全局库干净——密钥类内容在所有写入出口被拒,含 mount 物化)。全局 create 与既有条目高度相似(≥0.8)时写入即拒;中等重叠带
conflictHint供后续合并。 - 审批——全局与项目写入需明确人工批准;弹窗展示有界结构化编辑 diff 与冲突提示,弹窗丢失/响应畸形会重试,不会被误记为拒绝。
- 应用与注入——memory 批次先完成所有持久化审批,写前重查 abort;后续 scope 失败时补偿回滚先前写入,成功 scope 仍保留快照与审计。prompt 补充与委派规格注入系统提示词(封顶、按相关性排序、被证伪条目降权、空 store 零 token);memory/skill 以按相关性排序的目录索引出现(
[memory:type:id] 标题钩子)。 - 验证与回滚——benchmark 用冻结用例为候选打分;被拒候选确定性回滚,并自动沉淀为 draft 回归用例(
auto_regression基准)。
安装
# 从 npm(安装即激活——自带 bundle patch)
dsh plugin add dsh-continual-evolve
# 或从源码(首次 GitHub 安装需批准 allowBuilds 构建步骤)
dsh plugin add ZK-Andy/dsh-continual-evolve
安装或更新后,重启你实际使用的 DSH profile(dsh web 或桌面宿主)。
使用
会话内命令:
| 命令 | 效果 |
|---|---|
/evolve |
帮助 + 当前 local store |
/evolve list · history · rollback <id> |
查看与回滚(加 project 操作本项目库,global 操作跨项目库) |
/evolve plan [msg] |
对 store 运行 LLM 规划器 |
/evolve wrapup |
收尾本会话 local 条目:晋升 / 归档 / 保留 |
/evolve archive · unarchive · demote <id> |
从注入中隐藏(数据保留可恢复)——demote 针对全局噪声 |
/evolve recall [scope] <query…> |
定向记忆召回:全文 + 版本 + 来源 + 过时信号 |
/evolve remember <type> [scope] <text…> |
立即持久化一条类型化记忆(`user |
/evolve forget [scope] <query…> |
按 query 定位一条记忆并归档(可恢复);多义只列候选不写 |
/evolve consolidate [apply] [merge] |
报告(或应用)冲突提示 + 零使用陈旧全局条目的批量归档;merge 将近重复内容并入幸存原条目 |
/evolve failures |
失败类聚合(门禁 + benchmark) |
/evolve log [tail N] [session <id>] |
插件日志 |
/evolve export · import <path> |
备份 / 恢复 store |
/evolve mount · unmount <skillId> |
把可执行技能热挂载为 live 插件 |
/evolve goal [objective · done · block] |
回合驱动的自进化目标 |
/evolve benchmark … |
用例生命周期、运行、接受决策 |
/evolve pause · resume · status |
暂停/恢复自动门禁(手动工具不受影响)、门禁状态 |
/evolve usage |
每条目注入次数 + memory/review/planner/wrapup/fate 直属调用的 provider 精确 token(不含 benchmark 宿主子代理) |
模型工具:evolve_list / add / update / delete / rollback / recall(evolve_delete 支持 id 或批量 ids 数组——一次 refinement、一次审批;evolve_recall 按 query/kind/scope/memoryType/limit 过滤,返回全文 + 版本 + 来源 + 过时信号)。
第三方消费:每次进化落地(门禁或手动)都会向 reviews.jsonl 追加结构化 evolve_complete 事件(shape 见 src/evolve-event.ts),与人类可读的审计记录并存。
/evolve usage 还会读取 evolve/token-usage.jsonl:插件直属 memory Agent、review、planner、手动 wrapup 与自动 fate 调用的 provider 精确 input/cache/output/total token。报告只覆盖保留尾部而非终身累计,单独显示 provider 未返回 usage 的调用,并明确排除宿主 benchmark 子代理、其 agent-loop 调用与逐条 memory 注入归因。
注入形态:prompt 补充与委派规格带内容注入(每 kind ≤6 条 × 180 字符,按相关性排序)。memory/skill 以按相关性排序的目录索引出现([memory:type:id] 标题钩子,15 行封顶 + 折叠计数行)——全文经 evolve_recall(精确)或 evolve_list 获取。每次 memory 落盘同时刷新 store 目录下的可读 MEMORY.md 索引 + 单事实文件。空 store = 零注入 token。
配置
| 键 | 默认 | 含义 |
|---|---|---|
baseDir |
解析后的 DSH home | evolve/ 存储根目录 |
autoReview |
false |
没有 evolve/runtime.json 时 Memory Agent 的初始默认;监听器始终注册,因此它不是注册门 |
memoryMinUserWords |
3 |
ZCode 风格:单个直接用户文本至少包含的词数;使用 CJK 分词 |
sessionCloseDrainMs |
15000 |
会话关闭时在途提取的有界 drain(毫秒,0 立即 abort) |
reviewIntervalTurns |
6 |
local-fate 的兼容节奏;成功回合 review 不再等待这个间隔 |
maxReviewInputChars |
40000 |
交给门禁的轨迹切片 |
reviewBudgetTokens |
4096 |
门禁调用输出预算 |
notifyOnAutoReview |
true |
门禁应用后发可见跟进通知 |
requireGlobalApproval |
true |
全局与项目写入需明确批准 |
localFate |
false |
可选的本地条目晋升/归档 fate 评估;listener 以 memory-only 运行时不可达,只对直接/完整调用者生效 |
fateIntervalTurns |
跟随 reviewIntervalTurns |
归宿评估的最小回合间隔 |
goalBlockedWrapupTurns |
3 |
连续阻塞目标的门禁轮数触发一次归宿评估(0 关闭) |
promotionBlockPatterns |
POSIX 路径、session id、~/.dsh |
内容命中即判定项目专属,永不晋升全局 |
promotionMinChars |
100 |
低于此长度的整体晋升留在本地 |
injectionDirectoryLines |
15 |
每次构建的目录行数上限,超出折叠为计数行 |
sectionOrder |
118 |
系统提示词 section 顺序 |
skillsDir |
<dshHome>/skills |
技能条目物化为 SKILL.md 的根目录 |
rubricKey |
自动生成本地密钥文件 | benchmark rubric 的 AES-256-GCM 口令(DSH_EVOLVE_RUBRIC_KEY 可覆盖) |
logToFile / logLevel / logMaxBytes |
true / 1 / 5 MiB |
插件自带 JSONL 文件日志带轮转 |
autoRollbackOnReject |
true |
benchmark 拒绝后自动确定性回滚 |
autoCase |
true |
失败的进化尝试自动沉淀为 draft 回归用例(auto_regression 基准) |
reviewModel |
agent 自身 | 专用 memory Agent 与 review 门禁可选更便宜的模型("provider/model") |
plannerPrefixCache |
auto |
有缓存证据时用会话前缀输入(session 总是前缀,off 保持旧扁平文本) |
plannerPrefixMaxChars |
12000 |
Route A 会话前缀预算(字符) |
historyRetain |
{snapshots: 20, refinements: 500, reviews: 500, tokenUsage: 500} |
存储卫生:每 store 快照数、每 store 历史尾行、共享 reviews.jsonl 尾行、直属调用 token-usage.jsonl 尾行 |
profile patch 示例:
- id: continual-evolve
config:
autoReview: true
reviewIntervalTurns: 6
即使 autoReview 为 false,Memory Agent 监听器也会注册——autoReview 只提供初始默认值,装完即用,无需改 profile。使用 /evolve resume 立即开启成功回合 snapshot,使用 /evolve pause 抑制新 snapshot 与模型调用,使用 /evolve status 查看配置默认值与运行时状态。开关保存在 evolve/runtime.json;手动 evolve_* 工具和 /evolve 命令不受暂停影响。自动运行只有 Memory Agent:通用 review/planner、prompt/skill 写入与 local fate 都不由该 listener 触达。Memory 触发采用 ZCode 的轻量 eligibility:单个直接用户文本至少包含 memoryMinUserWords 个词(使用 CJK 分词);空增量、内部 Agent、直接 memory 写入会跳过,压缩不会额外触发 memory-only 管线。每次提取都在 reviews.jsonl 留统一审计回执(noop/applied/declined + 耗时与轮次/检索统计);只有实际沉淀才排队前台通知,关闭的会话让在途提取在 sessionCloseDrainMs 内收尾再 abort。
开发
pnpm install && pnpm build # 依赖 + tsc -> lib/
pnpm test # vitest(1075 例)
pnpm test:coverage # v8 覆盖率,CI 强制阈值
pnpm coverage:gaps # 定位各文件未覆盖行(只读)
pnpm lint # oxlint src test
目录结构:
├── src/ # 引擎、工具、命令、memory Agent、召回、投影、门禁、fate、benchmark、注入 + token 用量…
├── test/ # vitest 测试套件(58 个文件)
├── lib/ # 构建产物(tsc)
├── docs/
│ ├── design.md # 完整设计文档(硬化矩阵)
│ ├── FAQ.md # 真实踩坑记录
│ ├── gap-analysis.md # 对照 prime-agent /refine + penguin-harness
│ ├── research/pi-dsh-competitor-gap-analysis.md # pi/dsh 生态竞品差距分析
│ ├── experiment-bootstrap.md
│ ├── archive/ # 已完结的一次性报告
│ └── research/ # penguin 报告 + prime-agent 注释源码
├── examples/README.md # 种子 benchmark 用例
└── .agents/ # AI 协作层(AGENTS.md、技能、ADR 笔记)
文档与出处
- 设计:
docs/design.md· 踩坑:docs/FAQ.md· 差距分析:docs/gap-analysis.md· D2 实验:docs/experiment-bootstrap.md - 血统:penguin-harness(概念;Apache-2.0)——报告见
docs/research/penguin-harness-self-evolution.md;prime-agent/refine(工程形态;MIT)——注释参考源码见docs/research/prime-agent-refinement.ts。本包是面向 DSH 插件表面的原创实现。
License
MIT。独立项目——与 DeepSeek 无关联。
链接
同类插件
yjh051108/dsh-routing-suite★ 7000
一个仓库三件套:DSH 插件包的运行时注入器(注入、热重载、卸载、开发侧挂区一键转正、路由自愈,外带设置页插件管理:列出、卸载、拖入文件夹内化)、任务感知的思维模式路由 agent 预设(router-standard / router-spec / router-react)、以及分级两级任务协议(commit_star / lock_stage / revise_do / edit_plan / mark_task / redteam_verdict 六个工具,任务状态落盘)。注入器实现直接在库内,安装的是它自己的行为而不是一份依赖清单。
strukto-ai/mirage#dsh★ 3663
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
hust-open-atom-club/oh-dsh★ 325
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
weijiafu14/pi2dsh★ 206
Pi Host ABI 兼容引擎:装一次之后,npm 上的 Pi 扩展原包经 `dsh plugin add <pi-package>` 直接作为 DSH 原生插件挂载。已在官方 DSH 上端到端验证 pi-mcp-adapter(完整 MCP 管理面:OAuth、resources、prompts、MCP Apps、elicitation、sampling)、@tintinweb/pi-subagents、pi-code、pi-hermes-memory、pi-background-tasks;`pi2dsh inspect` 在安装前报告一个包的兼容情况。
lire1131/dsh-undo-savepoint★ 165
DSH 撤销/回退系统:配置变更自动存档,一键撤销/恢复/回退到任意版本,支持 WebUI 与离线 CLI/GUI 工具(DSH 启动失败也能救)。
Fishquito7/dsh-skill-mcp-panel★ 152
在 DSH Web 设置中管理技能与 MCP 服务器:技能卡片热启停、工作区作用域、分组、批量迁移与拖拽导入,以及 stdio/HTTP MCP 增删改查、连接测试、密钥脱敏,并附带统一 dsh-panel 命令行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。