DeepSeek Harness 插件

ZK-Andy/dsh-continual-evolve

Star 数 ★ 19 下载量(近 30 天) 3,059 分类 开发与运行时 收录于 2026-08-14 npm dsh-continual-evolve

持续自进化:从会话轨迹沉淀版本化、可审计、可回滚的 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 | 中文

CI

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 可将近重复内容并入幸存原条目

工作原理

  1. 沉淀——模型经 evolve_add 创建条目,或由专用 Memory Agent 消费成功回合后的增量 snapshot。通用 review/planner 保持手动,除非另行显式调用。
  2. 能力感知的辅助调用——memory loop、review、planner、wrapup、fate 通过 src/llm-text.ts 解析精确 provider/model 能力并使用模型公布的最低开启 reasoning effort,同时转发 host session id 供 provider 路由;只有没有开启档时才回退关闭档,没有 reasoning 元数据时使用 provider 默认行为。
  3. 守卫——代码强制校验:编辑 schema、blast-radius 与作用域一致性、晋升政策(项目专属标记 / 过薄内容 / 近似重复检测 / 凭据筛查保持全局库干净——密钥类内容在所有写入出口被拒,含 mount 物化)。全局 create 与既有条目高度相似(≥0.8)时写入即拒;中等重叠带 conflictHint 供后续合并。
  4. 审批——全局与项目写入需明确人工批准;弹窗展示有界结构化编辑 diff 与冲突提示,弹窗丢失/响应畸形会重试,不会被误记为拒绝。
  5. 应用与注入——memory 批次先完成所有持久化审批,写前重查 abort;后续 scope 失败时补偿回滚先前写入,成功 scope 仍保留快照与审计。prompt 补充与委派规格注入系统提示词(封顶、按相关性排序、被证伪条目降权、空 store 零 token);memory/skill 以按相关性排序的目录索引出现([memory:type:id] 标题钩子)。
  6. 验证与回滚——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 笔记)

文档与出处

License

MIT。独立项目——与 DeepSeek 无关联。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。