shinjiyu/deepseek-harness-evolver ↗★ 1
plugin-evolve
DSH 插件进化控制器,支持在内存中试验、校验、打分并固化 Cordis 插件。
AI 分析
核心用途是为 DSH 的“创造模式”提供闭环管理,支持对动态生成的插件进行安全校验、试运行打分,并最终决定固化保存或回滚。适合探索 AI 自主编写并热加载插件的高级开发者。
安裝
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:shinjiyu/deepseek-harness-evolver說明文件
閱讀完整 README ↗plugin-evolve
官方 创造模式 的原话是:检查当前运行时、在内存中试验 Cordis 插件,并据此组合和创作新的模式。架构是 一切皆插件。
这个控制器是补充,不是替代。官方已经把热挂(ctx.plugin、可逆副作用)做完了。我们补的是试验之后的闭环:信号 → 提案 → 校验 → 本进程挂上 → 打分 → 固化到盘上或回滚。重启还在。
不是「已经自动自进化」。不会改 agent-loop / session / loader。
Host-agnostic controller for evolving tool plugins, plus a DeepSeek Harness bundle that live-mounts a passing trial into the current process.
状态机:
signals → analysis → abstract → stage → validate → mount → score → solidify | rollback
↘ rejected
CLI mount 只写盘。dsh 插件的 evolve_mount 还会 ctx.plugin,新工具立刻出现在本轮会话里。
Install
npm install plugin-evolve
Node >= 18. 零运行时依赖。
Library
import { createController } from "plugin-evolve";
const evolve = createController({ root: process.cwd() });
await evolve.init();
const advice = await evolve.recordSignals([
{ kind: "tool_error", payload: { tool: "bash" } },
]);
const report = await evolve.analysis();
// report.ready = points that should be evolved now
if (advice.shouldPropose || report.ready.length > 0) {
const draft = await evolve.abstract(); // or { stage: true }
await evolve.stage({
manifest: draft.manifest,
files: { "plugin.js": draft.source },
signalKind: draft.signalKind,
});
}
await evolve.validate();
await evolve.mount();
// next process:
const { evolved, trial } = await evolve.loadout();
for (const plugin of [...evolved, trial].filter(Boolean)) {
await import(plugin.entryPath);
}
await evolve.score({ samples: 10, successDelta: 2, retryDelta: -1 });
await evolve.solidify({ confirm: true }); // first 3 keeps need confirm
CLI
npx plugin-evolve init --root .
npx plugin-evolve analysis
npx plugin-evolve abstract
npx plugin-evolve abstract --point tool_error:web_fetch --stage
npx plugin-evolve signal --kind tool_error --json "{\"tool\":\"bash\"}"
npx plugin-evolve stage ./examples/retry-on-429 --signal-kind tool_error
npx plugin-evolve validate
npx plugin-evolve mount
npx plugin-evolve score --samples 10 --success-delta 2 --retry-delta -1
npx plugin-evolve solidify --confirm
npx plugin-evolve loadout
npx plugin-evolve events --tail 20
npx plugin-evolve rollback
所有命令默认打印 JSON。
Layout
/.evolve/
state.json
events.jsonl # append-only
mounted.json # at most one in-flight trial
candidates//
abstracts/
/ # last abstracted draft
evolved/
/v/
同时最多一个 trial。候选必须是扁平目录:manifest.json + 入口 + 可选 README/LICENSE。
Manifest
{
"id": "retry-on-429",
"kind": "tool",
"purpose": "Retry idempotent HTTP calls after a 429 response",
"inject": ["tools"],
"entry": "plugin.js",
"constraints": { "network": false, "shell": false }
}
入口必须导出 apply。控制器不执行这段代码,只做静态检查。
Policy
| 规则 | 默认 |
|---|---|
只允许 kind: "tool" | 是 |
允许的 inject | ["tools"] |
network / shell | 必须 false |
| 体积 | 32 KiB |
| 禁止 | fs / net / http / child_process / eval / new Function |
| 禁止的 id | session loader agent-loop evolve controller plugin-evolve |
| 打分通过 | samples >= 10 且 successDelta > 0 且 retryDelta /。--stage / stage:true 会直接送进 trial。 |
Workspace state is /.evolve/. Override with PLUGIN_EVOLVE_ROOT or plugin config root.
What this is not
- 不是 EvoMap/evolver,也不连 Hub
- 不会改 agent-loop / session / loader
- 会按信号点抽象出小工具插件草稿,但不会改 agent-loop / 不会替你改业务工程
Case: HTTP 429
模拟宿主里 web_fetch 连续 429。控制器建议写工具插件;宿主挂上 examples/retry-on-429 后按它的 backoff 再打 10 次,用真实成功率打分并固化。
npm run case:429
Develop
npm install
npm test
Repo: shinjiyu/deepseek-harness-evolver · 介绍帖:Show and tell #1720