@evomap/evolver 1.75.0 → 1.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja-JP.md +2 -0
- package/README.ko-KR.md +2 -0
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/assets/gep/candidates.jsonl +2 -3
- package/index.js +202 -1
- package/package.json +1 -1
- package/src/evolve.js +1 -1
- package/src/gep/.integrity +0 -0
- package/src/gep/a2aProtocol.js +1 -1
- package/src/gep/candidateEval.js +1 -1
- package/src/gep/candidates.js +1 -1
- package/src/gep/contentHash.js +1 -1
- package/src/gep/crypto.js +1 -1
- package/src/gep/curriculum.js +1 -1
- package/src/gep/deviceId.js +1 -1
- package/src/gep/envFingerprint.js +1 -1
- package/src/gep/explore.js +1 -1
- package/src/gep/hubReview.js +1 -1
- package/src/gep/hubSearch.js +1 -1
- package/src/gep/hubVerify.js +1 -1
- package/src/gep/integrityCheck.js +1 -1
- package/src/gep/learningSignals.js +1 -1
- package/src/gep/memoryGraph.js +1 -1
- package/src/gep/memoryGraphAdapter.js +1 -1
- package/src/gep/mutation.js +1 -1
- package/src/gep/narrativeMemory.js +1 -1
- package/src/gep/personality.js +1 -1
- package/src/gep/policyCheck.js +1 -1
- package/src/gep/prompt.js +1 -1
- package/src/gep/questionGenerator.js +2 -2
- package/src/gep/reflection.js +1 -1
- package/src/gep/selector.js +1 -1
- package/src/gep/shield.js +1 -1
- package/src/gep/skillDistiller.js +1 -1
- package/src/gep/solidify.js +1 -1
- package/src/gep/strategy.js +1 -1
- package/src/gep/validator/index.js +7 -1
package/README.ja-JP.md
CHANGED
|
@@ -180,6 +180,8 @@ evolver --loop
|
|
|
180
180
|
| ループ (`evolver --loop`) | 適応的スリープ付きのデーモンループで上記を繰り返す |
|
|
181
181
|
| OpenClaw 内 | ホストランタイムが `sessions_spawn(...)` などの stdout ディレクティブを解釈 |
|
|
182
182
|
|
|
183
|
+
> **`--loop` は「動作中のエージェントをリアルタイムで支援する」モードではありません。** ループモードはバックグラウンドの自己メンテナンス(validator 実行、worker タスク、ATP マーチャント自動配信、solidify)のためのもので、その stdout は evolver 自身が消費します。したがって、たとえ OpenClaw / Cursor / Claude Code がインストールされていても、ループモードで出力される `sessions_spawn(...)` ディレクティブはこれらのホストには届きません。evolver にライブセッションを観察・補助させたい場合は、そのエージェントセッションの **内部から** `evolver run` を呼び出してください(OpenClaw はその単一ランの stdout ディレクティブを取り込みます)。OpenClaw ユーザーはさらに、`AGENT_NAME`(または `AGENT_SESSIONS_DIR`)が実際にセッションを生成しているエージェントのディレクトリ(`~/.openclaw/agents/<名前>/sessions/`)を指していることを確認してください -- さもないと evolver は自身のログにフォールバックし、「空転している」ように見えます。
|
|
184
|
+
|
|
183
185
|
## 対象ユーザー
|
|
184
186
|
|
|
185
187
|
**向いている**
|
package/README.ko-KR.md
CHANGED
|
@@ -179,6 +179,8 @@ evolver --loop
|
|
|
179
179
|
| 루프 (`evolver --loop`) | 적응형 슬립이 포함된 데몬 루프에서 위 과정을 반복 |
|
|
180
180
|
| OpenClaw 내부 | 호스트 런타임이 `sessions_spawn(...)` 등 stdout 지시문을 해석 |
|
|
181
181
|
|
|
182
|
+
> **`--loop`은 "실행 중인 에이전트를 실시간으로 보조하는" 모드가 아닙니다.** 루프 모드는 백그라운드 자가 유지보수(validator 실행, worker 작업, ATP 상인 자동 배달, solidify)를 위한 것이며, 그 stdout은 evolver 자신이 소비합니다. 따라서 OpenClaw / Cursor / Claude Code가 설치되어 있더라도, 루프 모드에서 출력되는 `sessions_spawn(...)` 지시문은 이 호스트들에 전달되지 않습니다. 라이브 세션을 evolver가 관찰·보조하게 하려면, 해당 에이전트 세션 **내부에서** `evolver run`을 호출하세요(OpenClaw는 그 단일 실행의 stdout 지시문을 처리합니다). OpenClaw 사용자는 추가로, `AGENT_NAME`(또는 `AGENT_SESSIONS_DIR`)이 실제로 세션을 생성하는 에이전트 디렉터리(`~/.openclaw/agents/<이름>/sessions/`)를 가리키는지 확인하세요 -- 그렇지 않으면 evolver는 자신의 로그로 폴백하며, "빈 사이클만 돌고 있는" 것처럼 보입니다.
|
|
183
|
+
|
|
182
184
|
## 대상 사용자
|
|
183
185
|
|
|
184
186
|
**적합한 경우**
|
package/README.md
CHANGED
|
@@ -178,6 +178,8 @@ When running inside a host runtime (e.g., [OpenClaw](https://openclaw.com)), the
|
|
|
178
178
|
| Loop (`evolver --loop`) | Repeats the above in a daemon loop with adaptive sleep |
|
|
179
179
|
| Inside OpenClaw | Host runtime interprets stdout directives like `sessions_spawn(...)` |
|
|
180
180
|
|
|
181
|
+
> **`--loop` is not a real-time agent assistant.** Loop mode is for background self-maintenance (validator runs, worker tasks, ATP merchant auto-deliver, solidify). Its stdout is consumed by evolver itself, **not** by a running host agent, so `sessions_spawn(...)` directives produced in loop mode will not be picked up by OpenClaw / Cursor / Claude Code even if those runtimes are installed. If you want evolver to observe and advise a live agent session, call `evolver run` from **inside** that agent session (OpenClaw will pick up the stdout directives on that single run). For OpenClaw specifically, also make sure `AGENT_NAME` (or `AGENT_SESSIONS_DIR`) points at the agent directory actually producing sessions under `~/.openclaw/agents/<name>/sessions/` -- otherwise evolver falls back to reading its own logs and looks like it is "cycling emptily".
|
|
182
|
+
|
|
181
183
|
## Who This Is For / Not For
|
|
182
184
|
|
|
183
185
|
**For**
|
package/README.zh-CN.md
CHANGED
|
@@ -177,6 +177,8 @@ evolver --loop
|
|
|
177
177
|
| 循环模式 (`evolver --loop`) | 在守护进程循环中重复上述流程,带自适应休眠 |
|
|
178
178
|
| 在 OpenClaw 中 | 宿主运行时解释 stdout 中的指令(如 `sessions_spawn(...)`) |
|
|
179
179
|
|
|
180
|
+
> **`--loop` 不是"实时辅助正在干活的 agent"的模式。** 循环模式用于后台自维护任务(validator 验证、worker 任务、ATP 商家自动交付、solidify),它的 stdout 是被 evolver 自己消费的,**不会**传给正在运行的 OpenClaw / Cursor / Claude Code agent——即使这些宿主已经安装,`sessions_spawn(...)` 指令在循环模式下也不会被它们接收。如果你想让 evolver 观察并辅助一次具体的 agent 会话,请在那个 agent 会话内部调用 `evolver run`(一次一轮),OpenClaw 会在这次运行中接管 stdout 指令。对 OpenClaw 用户还要特别注意:`AGENT_NAME`(或 `AGENT_SESSIONS_DIR`)必须指向真正在产生 session 的那个 agent 目录(`~/.openclaw/agents/<名字>/sessions/`),否则 evolver 会回退到读自己的日志,看上去就像在"空转"。
|
|
181
|
+
|
|
180
182
|
## 适用 / 不适用场景
|
|
181
183
|
|
|
182
184
|
**适用**
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
{"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-04-
|
|
2
|
-
{"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-04-
|
|
3
|
-
{"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-04-28T12:54:24.039Z","signals":["memory_missing","user_missing","session_logs_missing"],"tags":["memory_missing","user_missing","session_logs_missing","area:memory"],"shape":{"title":"Harden session log detection and fallback behavior","input":"Recent session transcript + memory snippets + user instructions","output":"A safe, auditable evolution patch guided by GEP assets","invariants":"Protocol order, small reversible patches, validation, append-only events","params":"Signals: memory_missing, user_missing, session_logs_missing","failure_points":"Missing signals, over-broad changes, skipped validation, missing knowledge solidification","evidence":"Signal present: session_logs_missing"}}
|
|
1
|
+
{"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-04-30T13:31:51.491Z","signals":["memory_missing","user_missing","session_logs_missing"],"tags":["memory_missing","user_missing","session_logs_missing","area:memory"],"shape":{"title":"Harden session log detection and fallback behavior","input":"Recent session transcript + memory snippets + user instructions","output":"A safe, auditable evolution patch guided by GEP assets","invariants":"Protocol order, small reversible patches, validation, append-only events","params":"Signals: memory_missing, user_missing, session_logs_missing","failure_points":"Missing signals, over-broad changes, skipped validation, missing knowledge solidification","evidence":"Signal present: session_logs_missing"}}
|
|
2
|
+
{"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-04-30T13:31:54.079Z","signals":["memory_missing","user_missing","session_logs_missing"],"tags":["memory_missing","user_missing","session_logs_missing","area:memory"],"shape":{"title":"Harden session log detection and fallback behavior","input":"Recent session transcript + memory snippets + user instructions","output":"A safe, auditable evolution patch guided by GEP assets","invariants":"Protocol order, small reversible patches, validation, append-only events","params":"Signals: memory_missing, user_missing, session_logs_missing","failure_points":"Missing signals, over-broad changes, skipped validation, missing knowledge solidification","evidence":"Signal present: session_logs_missing"}}
|
package/index.js
CHANGED
|
@@ -194,6 +194,35 @@ async function main() {
|
|
|
194
194
|
}
|
|
195
195
|
console.log(`Loop mode enabled (internal daemon, bridge=${process.env.EVOLVE_BRIDGE}, verbose=${isVerbose}).`);
|
|
196
196
|
|
|
197
|
+
// Startup diagnostic: in daemon mode evolver consumes its own stdout
|
|
198
|
+
// instead of handing `sessions_spawn(...)` directives to a host
|
|
199
|
+
// runtime (OpenClaw). If the operator expects real-time agent assist
|
|
200
|
+
// they are likely using the wrong mode; if they intend daemon mode
|
|
201
|
+
// they still need AGENT_NAME / AGENT_SESSIONS_DIR pointing at a live
|
|
202
|
+
// agent or the loop will just cycle on its own logs. Emit a single
|
|
203
|
+
// warning at startup so "empty cycling" has a visible breadcrumb.
|
|
204
|
+
try {
|
|
205
|
+
const { diagnoseSessionSourceEmpty } = require('./src/evolve');
|
|
206
|
+
const diag = diagnoseSessionSourceEmpty();
|
|
207
|
+
const hasAnySource = diag.agentSessionsDirExists ||
|
|
208
|
+
diag.cursorDirExists || diag.claudeDirExists || diag.codexDirExists ||
|
|
209
|
+
Boolean(diag.cursorTranscriptsDir);
|
|
210
|
+
if (!hasAnySource) {
|
|
211
|
+
console.warn('[Daemon] No session sources detected at startup. Loop mode runs background self-maintenance but cannot observe a live agent without at least one of:');
|
|
212
|
+
console.warn(` - ~/.openclaw/agents/<AGENT_NAME>/sessions/ (current AGENT_NAME=${diag.agentName}, exists=${diag.agentSessionsDirExists})`);
|
|
213
|
+
console.warn(' - ~/.cursor / ~/.claude / ~/.codex (IDE transcripts)');
|
|
214
|
+
console.warn(' - EVOLVER_CURSOR_TRANSCRIPTS_DIR (explicit override)');
|
|
215
|
+
if (diag.availableOpenClawAgents.length > 0) {
|
|
216
|
+
console.warn(` Available OpenClaw agents under ~/.openclaw/agents/: ${diag.availableOpenClawAgents.join(', ')}`);
|
|
217
|
+
console.warn(' Set AGENT_NAME=<agent> or AGENT_SESSIONS_DIR=<abs path> to the one actually doing work.');
|
|
218
|
+
}
|
|
219
|
+
for (const hint of diag.hints) {
|
|
220
|
+
console.warn(` HINT: ${hint}`);
|
|
221
|
+
}
|
|
222
|
+
console.warn(' If you want real-time agent assist (not background self-maintenance), run `evolver run` from inside the agent session instead of `evolver --loop`.');
|
|
223
|
+
}
|
|
224
|
+
} catch (_diagErr) { /* diagnostics must never block startup */ }
|
|
225
|
+
|
|
197
226
|
const { getEvolutionDir, getEvolverLogPath } = require('./src/gep/paths');
|
|
198
227
|
const solidifyStatePath = path.join(getEvolutionDir(), 'evolution_solidify_state.json');
|
|
199
228
|
|
|
@@ -996,6 +1025,175 @@ async function main() {
|
|
|
996
1025
|
process.exit(1);
|
|
997
1026
|
}
|
|
998
1027
|
|
|
1028
|
+
} else if (command === 'sync') {
|
|
1029
|
+
const { getHubUrl, getNodeId, buildHubHeaders, sendHelloToHub, getHubNodeSecret } = require('./src/gep/a2aProtocol');
|
|
1030
|
+
const { upsertGene, upsertCapsule, loadGenes, loadCapsules } = require('./src/gep/assetStore');
|
|
1031
|
+
|
|
1032
|
+
const hubUrl = getHubUrl();
|
|
1033
|
+
if (!hubUrl) {
|
|
1034
|
+
console.error('[sync] A2A_HUB_URL is not configured.');
|
|
1035
|
+
process.exit(1);
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
try {
|
|
1039
|
+
if (!getHubNodeSecret()) {
|
|
1040
|
+
console.log('[sync] No node_secret found. Sending hello to Hub to register...');
|
|
1041
|
+
const helloResult = await sendHelloToHub();
|
|
1042
|
+
if (!helloResult || !helloResult.ok) {
|
|
1043
|
+
console.error('[sync] Failed to register with Hub:', helloResult && helloResult.error || 'unknown');
|
|
1044
|
+
process.exit(1);
|
|
1045
|
+
}
|
|
1046
|
+
console.log('[sync] Registered as ' + getNodeId());
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
const nodeId = getNodeId();
|
|
1050
|
+
const baseUrl = hubUrl.replace(/\/+$/, '');
|
|
1051
|
+
const typeFilter = (function () {
|
|
1052
|
+
const f = args.find(function (a) { return typeof a === 'string' && a.startsWith('--type='); });
|
|
1053
|
+
return f ? f.slice('--type='.length) : null;
|
|
1054
|
+
})();
|
|
1055
|
+
const dryRun = args.includes('--dry-run');
|
|
1056
|
+
const limitPerPage = 100;
|
|
1057
|
+
|
|
1058
|
+
console.log('[sync] Fetching purchased assets from Hub...');
|
|
1059
|
+
let allAssets = [];
|
|
1060
|
+
let cursor = null;
|
|
1061
|
+
let page = 0;
|
|
1062
|
+
|
|
1063
|
+
while (true) {
|
|
1064
|
+
page++;
|
|
1065
|
+
let url = baseUrl + '/a2a/assets/purchased?node_id=' + encodeURIComponent(nodeId) + '&limit=' + limitPerPage;
|
|
1066
|
+
if (cursor) url += '&cursor=' + encodeURIComponent(cursor);
|
|
1067
|
+
if (typeFilter) url += '&type=' + encodeURIComponent(typeFilter);
|
|
1068
|
+
|
|
1069
|
+
const resp = await fetch(url, {
|
|
1070
|
+
method: 'GET',
|
|
1071
|
+
headers: buildHubHeaders(),
|
|
1072
|
+
signal: AbortSignal.timeout(30000),
|
|
1073
|
+
});
|
|
1074
|
+
|
|
1075
|
+
if (!resp.ok) {
|
|
1076
|
+
const body = await resp.text().catch(function () { return ''; });
|
|
1077
|
+
console.error('[sync] Hub returned HTTP ' + resp.status + ': ' + body.slice(0, 500));
|
|
1078
|
+
process.exit(1);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
const data = await resp.json();
|
|
1082
|
+
if (Array.isArray(data.assets)) {
|
|
1083
|
+
allAssets = allAssets.concat(data.assets);
|
|
1084
|
+
}
|
|
1085
|
+
if (isVerbose) console.log('[sync] Page ' + page + ': ' + (data.count || 0) + ' assets (total so far: ' + allAssets.length + ')');
|
|
1086
|
+
|
|
1087
|
+
if (data.has_more && data.next_cursor) {
|
|
1088
|
+
cursor = data.next_cursor;
|
|
1089
|
+
} else {
|
|
1090
|
+
break;
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
if (allAssets.length === 0) {
|
|
1095
|
+
console.log('[sync] No purchased assets found on Hub.');
|
|
1096
|
+
process.exit(0);
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
console.log('[sync] Found ' + allAssets.length + ' purchased asset(s). Syncing to local store...');
|
|
1100
|
+
|
|
1101
|
+
const existingGenes = loadGenes();
|
|
1102
|
+
const existingCapsules = loadCapsules();
|
|
1103
|
+
const localGeneIds = new Set(existingGenes.filter(function (g) { return g && g.id; }).map(function (g) { return g.id; }));
|
|
1104
|
+
const localCapsuleIds = new Set(existingCapsules.filter(function (c) { return c && c.id; }).map(function (c) { return c.id; }));
|
|
1105
|
+
|
|
1106
|
+
let synced = 0;
|
|
1107
|
+
let skipped = 0;
|
|
1108
|
+
let fetchErrors = 0;
|
|
1109
|
+
|
|
1110
|
+
for (const asset of allAssets) {
|
|
1111
|
+
const assetId = asset.asset_id;
|
|
1112
|
+
const assetType = asset.asset_type;
|
|
1113
|
+
|
|
1114
|
+
if (assetType === 'Gene' && localGeneIds.has(asset.local_id || assetId)) {
|
|
1115
|
+
skipped++;
|
|
1116
|
+
continue;
|
|
1117
|
+
}
|
|
1118
|
+
if (assetType === 'Capsule' && localCapsuleIds.has(asset.local_id || assetId)) {
|
|
1119
|
+
skipped++;
|
|
1120
|
+
continue;
|
|
1121
|
+
}
|
|
1122
|
+
if (assetType !== 'Gene' && assetType !== 'Capsule') {
|
|
1123
|
+
skipped++;
|
|
1124
|
+
continue;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
if (dryRun) {
|
|
1128
|
+
console.log(' [dry-run] Would sync: ' + assetType + ' ' + assetId);
|
|
1129
|
+
synced++;
|
|
1130
|
+
continue;
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
try {
|
|
1134
|
+
const detailResp = await fetch(baseUrl + '/a2a/assets/' + encodeURIComponent(assetId) + '?detailed=true', {
|
|
1135
|
+
method: 'GET',
|
|
1136
|
+
headers: buildHubHeaders(),
|
|
1137
|
+
signal: AbortSignal.timeout(15000),
|
|
1138
|
+
});
|
|
1139
|
+
|
|
1140
|
+
if (!detailResp.ok) {
|
|
1141
|
+
if (isVerbose) console.warn(' [sync] Failed to fetch detail for ' + assetId + ' (HTTP ' + detailResp.status + ')');
|
|
1142
|
+
fetchErrors++;
|
|
1143
|
+
continue;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
const detail = await detailResp.json();
|
|
1147
|
+
const payload = detail.payload || {};
|
|
1148
|
+
|
|
1149
|
+
if (assetType === 'Gene') {
|
|
1150
|
+
const geneObj = {
|
|
1151
|
+
type: 'Gene',
|
|
1152
|
+
id: payload.id || asset.local_id || assetId,
|
|
1153
|
+
category: payload.category || 'unknown',
|
|
1154
|
+
signals: Array.isArray(payload.signals) ? payload.signals : [],
|
|
1155
|
+
strategy: Array.isArray(payload.strategy) ? payload.strategy : [],
|
|
1156
|
+
avoid: Array.isArray(payload.avoid) ? payload.avoid : [],
|
|
1157
|
+
validation: payload.validation || {},
|
|
1158
|
+
summary: payload.summary || detail.summary || asset.summary || '',
|
|
1159
|
+
hub_asset_id: assetId,
|
|
1160
|
+
synced_at: new Date().toISOString(),
|
|
1161
|
+
};
|
|
1162
|
+
upsertGene(geneObj);
|
|
1163
|
+
localGeneIds.add(geneObj.id);
|
|
1164
|
+
} else {
|
|
1165
|
+
const capsuleObj = {
|
|
1166
|
+
type: 'Capsule',
|
|
1167
|
+
id: payload.id || asset.local_id || assetId,
|
|
1168
|
+
gene: payload.gene || null,
|
|
1169
|
+
genes_used: Array.isArray(payload.genes_used) ? payload.genes_used : [],
|
|
1170
|
+
outcome: payload.outcome || {},
|
|
1171
|
+
execution_trace: payload.execution_trace || {},
|
|
1172
|
+
summary: payload.summary || detail.summary || asset.summary || '',
|
|
1173
|
+
hub_asset_id: assetId,
|
|
1174
|
+
synced_at: new Date().toISOString(),
|
|
1175
|
+
};
|
|
1176
|
+
upsertCapsule(capsuleObj);
|
|
1177
|
+
localCapsuleIds.add(capsuleObj.id);
|
|
1178
|
+
}
|
|
1179
|
+
synced++;
|
|
1180
|
+
} catch (fetchErr) {
|
|
1181
|
+
if (isVerbose) console.warn(' [sync] Error fetching ' + assetId + ': ' + (fetchErr && fetchErr.message || fetchErr));
|
|
1182
|
+
fetchErrors++;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
console.log('[sync] Done. synced=' + synced + ' skipped=' + skipped + ' errors=' + fetchErrors);
|
|
1187
|
+
if (dryRun) console.log('[sync] (dry-run mode: no files were modified)');
|
|
1188
|
+
} catch (error) {
|
|
1189
|
+
if (error && error.name === 'TimeoutError') {
|
|
1190
|
+
console.error('[sync] Request timed out. Check your network and A2A_HUB_URL.');
|
|
1191
|
+
} else {
|
|
1192
|
+
console.error('[sync] Error: ' + (error && error.message || error));
|
|
1193
|
+
}
|
|
1194
|
+
process.exit(1);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
999
1197
|
} else if (command === 'asset-log') {
|
|
1000
1198
|
const { summarizeCallLog, readCallLog, getLogPath } = require('./src/gep/assetCallLog');
|
|
1001
1199
|
|
|
@@ -1140,10 +1338,13 @@ async function main() {
|
|
|
1140
1338
|
}
|
|
1141
1339
|
|
|
1142
1340
|
} else {
|
|
1143
|
-
console.log(`Usage: node index.js [run|/evolve|solidify|review|distill|fetch|asset-log|setup-hooks|buy|orders|verify|atp-complete] [--loop]
|
|
1341
|
+
console.log(`Usage: node index.js [run|/evolve|solidify|review|distill|fetch|sync|asset-log|setup-hooks|buy|orders|verify|atp-complete] [--loop]
|
|
1144
1342
|
- fetch flags:
|
|
1145
1343
|
- --skill=<id> | -s <id> (skill ID to download)
|
|
1146
1344
|
- --out=<dir> (output directory, default: ./skills/<skill_id>)
|
|
1345
|
+
- sync flags:
|
|
1346
|
+
- --type=Gene|Capsule (filter by asset type)
|
|
1347
|
+
- --dry-run (preview without writing to local store)
|
|
1147
1348
|
- solidify flags:
|
|
1148
1349
|
- --dry-run
|
|
1149
1350
|
- --no-rollback
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@evomap/evolver",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.77.0",
|
|
4
4
|
"description": "A GEP-powered self-evolution engine for AI agents. Features automated log analysis and Genome Evolution Protocol (GEP) for auditable, reusable evolution assets.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|