@evomap/evolver 1.29.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/LICENSE +22 -0
- package/README.md +290 -0
- package/README.zh-CN.md +236 -0
- package/SKILL.md +132 -0
- package/assets/gep/capsules.json +79 -0
- package/assets/gep/events.jsonl +7 -0
- package/assets/gep/genes.json +108 -0
- package/index.js +479 -0
- package/package.json +38 -0
- package/src/canary.js +13 -0
- package/src/evolve.js +1704 -0
- package/src/gep/a2a.js +173 -0
- package/src/gep/a2aProtocol.js +736 -0
- package/src/gep/analyzer.js +35 -0
- package/src/gep/assetCallLog.js +130 -0
- package/src/gep/assetStore.js +297 -0
- package/src/gep/assets.js +36 -0
- package/src/gep/bridge.js +71 -0
- package/src/gep/candidates.js +142 -0
- package/src/gep/contentHash.js +65 -0
- package/src/gep/deviceId.js +209 -0
- package/src/gep/envFingerprint.js +68 -0
- package/src/gep/hubReview.js +206 -0
- package/src/gep/hubSearch.js +237 -0
- package/src/gep/issueReporter.js +262 -0
- package/src/gep/llmReview.js +92 -0
- package/src/gep/memoryGraph.js +771 -0
- package/src/gep/memoryGraphAdapter.js +203 -0
- package/src/gep/mutation.js +186 -0
- package/src/gep/narrativeMemory.js +108 -0
- package/src/gep/paths.js +113 -0
- package/src/gep/personality.js +355 -0
- package/src/gep/prompt.js +566 -0
- package/src/gep/questionGenerator.js +212 -0
- package/src/gep/reflection.js +127 -0
- package/src/gep/sanitize.js +67 -0
- package/src/gep/selector.js +250 -0
- package/src/gep/signals.js +417 -0
- package/src/gep/skillDistiller.js +499 -0
- package/src/gep/solidify.js +1681 -0
- package/src/gep/strategy.js +126 -0
- package/src/gep/taskReceiver.js +528 -0
- package/src/gep/validationReport.js +55 -0
- package/src/ops/cleanup.js +80 -0
- package/src/ops/commentary.js +60 -0
- package/src/ops/health_check.js +106 -0
- package/src/ops/index.js +11 -0
- package/src/ops/innovation.js +67 -0
- package/src/ops/lifecycle.js +168 -0
- package/src/ops/self_repair.js +72 -0
- package/src/ops/skills_monitor.js +143 -0
- package/src/ops/trigger.js +33 -0
package/src/gep/a2a.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const { readAllEvents } = require('./assetStore');
|
|
3
|
+
const { computeAssetId, SCHEMA_VERSION } = require('./contentHash');
|
|
4
|
+
const { unwrapAssetFromMessage } = require('./a2aProtocol');
|
|
5
|
+
|
|
6
|
+
function nowIso() { return new Date().toISOString(); }
|
|
7
|
+
|
|
8
|
+
function isAllowedA2AAsset(obj) {
|
|
9
|
+
if (!obj || typeof obj !== 'object') return false;
|
|
10
|
+
var t = obj.type;
|
|
11
|
+
return t === 'Gene' || t === 'Capsule' || t === 'EvolutionEvent';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function safeNumber(x, fallback) {
|
|
15
|
+
if (fallback === undefined) fallback = null;
|
|
16
|
+
var n = Number(x);
|
|
17
|
+
return Number.isFinite(n) ? n : fallback;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getBlastRadiusLimits() {
|
|
21
|
+
var maxFiles = safeNumber(process.env.A2A_MAX_FILES, 5);
|
|
22
|
+
var maxLines = safeNumber(process.env.A2A_MAX_LINES, 200);
|
|
23
|
+
return {
|
|
24
|
+
maxFiles: Number.isFinite(maxFiles) ? maxFiles : 5,
|
|
25
|
+
maxLines: Number.isFinite(maxLines) ? maxLines : 200,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isBlastRadiusSafe(blastRadius) {
|
|
30
|
+
var lim = getBlastRadiusLimits();
|
|
31
|
+
var files = blastRadius && Number.isFinite(Number(blastRadius.files)) ? Math.max(0, Number(blastRadius.files)) : 0;
|
|
32
|
+
var lines = blastRadius && Number.isFinite(Number(blastRadius.lines)) ? Math.max(0, Number(blastRadius.lines)) : 0;
|
|
33
|
+
return files <= lim.maxFiles && lines <= lim.maxLines;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function clamp01(n) {
|
|
37
|
+
var x = Number(n);
|
|
38
|
+
if (!Number.isFinite(x)) return 0;
|
|
39
|
+
return Math.max(0, Math.min(1, x));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function lowerConfidence(asset, opts) {
|
|
43
|
+
if (!opts) opts = {};
|
|
44
|
+
var factor = Number.isFinite(Number(opts.factor)) ? Number(opts.factor) : 0.6;
|
|
45
|
+
var receivedFrom = opts.source || 'external';
|
|
46
|
+
var receivedAt = opts.received_at || nowIso();
|
|
47
|
+
var cloned = JSON.parse(JSON.stringify(asset || {}));
|
|
48
|
+
if (!isAllowedA2AAsset(cloned)) return null;
|
|
49
|
+
if (cloned.type === 'Capsule') {
|
|
50
|
+
if (typeof cloned.confidence === 'number') cloned.confidence = clamp01(cloned.confidence * factor);
|
|
51
|
+
else if (cloned.confidence != null) cloned.confidence = clamp01(Number(cloned.confidence) * factor);
|
|
52
|
+
}
|
|
53
|
+
if (!cloned.a2a || typeof cloned.a2a !== 'object') cloned.a2a = {};
|
|
54
|
+
cloned.a2a.status = 'external_candidate';
|
|
55
|
+
cloned.a2a.source = receivedFrom;
|
|
56
|
+
cloned.a2a.received_at = receivedAt;
|
|
57
|
+
cloned.a2a.confidence_factor = factor;
|
|
58
|
+
if (!cloned.schema_version) cloned.schema_version = SCHEMA_VERSION;
|
|
59
|
+
if (!cloned.asset_id) { try { cloned.asset_id = computeAssetId(cloned); } catch (e) {} }
|
|
60
|
+
return cloned;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function readEvolutionEvents() {
|
|
64
|
+
var events = readAllEvents();
|
|
65
|
+
return Array.isArray(events) ? events.filter(function (e) { return e && e.type === 'EvolutionEvent'; }) : [];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function normalizeEventsList(events) {
|
|
69
|
+
return Array.isArray(events) ? events : [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function computeCapsuleSuccessStreak(params) {
|
|
73
|
+
var capsuleId = params.capsuleId;
|
|
74
|
+
var events = params.events;
|
|
75
|
+
var id = capsuleId ? String(capsuleId) : '';
|
|
76
|
+
if (!id) return 0;
|
|
77
|
+
var list = normalizeEventsList(events || readEvolutionEvents());
|
|
78
|
+
var streak = 0;
|
|
79
|
+
for (var i = list.length - 1; i >= 0; i--) {
|
|
80
|
+
var ev = list[i];
|
|
81
|
+
if (!ev || ev.type !== 'EvolutionEvent') continue;
|
|
82
|
+
if (!ev.capsule_id || String(ev.capsule_id) !== id) continue;
|
|
83
|
+
var st = ev.outcome && ev.outcome.status ? String(ev.outcome.status) : 'unknown';
|
|
84
|
+
if (st === 'success') streak += 1; else break;
|
|
85
|
+
}
|
|
86
|
+
return streak;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function isCapsuleBroadcastEligible(capsule, opts) {
|
|
90
|
+
if (!opts) opts = {};
|
|
91
|
+
if (!capsule || capsule.type !== 'Capsule') return false;
|
|
92
|
+
var score = capsule.outcome && capsule.outcome.score != null ? safeNumber(capsule.outcome.score, null) : null;
|
|
93
|
+
if (score == null || score < 0.7) return false;
|
|
94
|
+
var blast = capsule.blast_radius || (capsule.outcome && capsule.outcome.blast_radius) || null;
|
|
95
|
+
if (!isBlastRadiusSafe(blast)) return false;
|
|
96
|
+
var events = Array.isArray(opts.events) ? opts.events : readEvolutionEvents();
|
|
97
|
+
var streak = computeCapsuleSuccessStreak({ capsuleId: capsule.id, events: events });
|
|
98
|
+
if (streak < 2) return false;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function exportEligibleCapsules(params) {
|
|
103
|
+
if (!params) params = {};
|
|
104
|
+
var list = Array.isArray(params.capsules) ? params.capsules : [];
|
|
105
|
+
var evs = Array.isArray(params.events) ? params.events : readEvolutionEvents();
|
|
106
|
+
var eligible = list.filter(function (c) { return isCapsuleBroadcastEligible(c, { events: evs }); });
|
|
107
|
+
for (var i = 0; i < eligible.length; i++) {
|
|
108
|
+
var c = eligible[i];
|
|
109
|
+
if (!c.schema_version) c.schema_version = SCHEMA_VERSION;
|
|
110
|
+
if (!c.asset_id) { try { c.asset_id = computeAssetId(c); } catch (e) {} }
|
|
111
|
+
}
|
|
112
|
+
return eligible;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function isGeneBroadcastEligible(gene) {
|
|
116
|
+
if (!gene || gene.type !== 'Gene') return false;
|
|
117
|
+
if (!gene.id || typeof gene.id !== 'string') return false;
|
|
118
|
+
if (!Array.isArray(gene.strategy) || gene.strategy.length === 0) return false;
|
|
119
|
+
if (!Array.isArray(gene.validation) || gene.validation.length === 0) return false;
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function exportEligibleGenes(params) {
|
|
124
|
+
if (!params) params = {};
|
|
125
|
+
var list = Array.isArray(params.genes) ? params.genes : [];
|
|
126
|
+
var eligible = list.filter(function (g) { return isGeneBroadcastEligible(g); });
|
|
127
|
+
for (var i = 0; i < eligible.length; i++) {
|
|
128
|
+
var g = eligible[i];
|
|
129
|
+
if (!g.schema_version) g.schema_version = SCHEMA_VERSION;
|
|
130
|
+
if (!g.asset_id) { try { g.asset_id = computeAssetId(g); } catch (e) {} }
|
|
131
|
+
}
|
|
132
|
+
return eligible;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function parseA2AInput(text) {
|
|
136
|
+
var raw = String(text || '').trim();
|
|
137
|
+
if (!raw) return [];
|
|
138
|
+
try {
|
|
139
|
+
var maybe = JSON.parse(raw);
|
|
140
|
+
if (Array.isArray(maybe)) {
|
|
141
|
+
return maybe.map(function (item) { return unwrapAssetFromMessage(item) || item; }).filter(Boolean);
|
|
142
|
+
}
|
|
143
|
+
if (maybe && typeof maybe === 'object') {
|
|
144
|
+
var unwrapped = unwrapAssetFromMessage(maybe);
|
|
145
|
+
return unwrapped ? [unwrapped] : [maybe];
|
|
146
|
+
}
|
|
147
|
+
} catch (e) {}
|
|
148
|
+
var lines = raw.split('\n').map(function (l) { return l.trim(); }).filter(Boolean);
|
|
149
|
+
var items = [];
|
|
150
|
+
for (var i = 0; i < lines.length; i++) {
|
|
151
|
+
try {
|
|
152
|
+
var obj = JSON.parse(lines[i]);
|
|
153
|
+
var uw = unwrapAssetFromMessage(obj);
|
|
154
|
+
items.push(uw || obj);
|
|
155
|
+
} catch (e) { continue; }
|
|
156
|
+
}
|
|
157
|
+
return items;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function readTextIfExists(filePath) {
|
|
161
|
+
try {
|
|
162
|
+
if (!filePath) return '';
|
|
163
|
+
if (!fs.existsSync(filePath)) return '';
|
|
164
|
+
return fs.readFileSync(filePath, 'utf8');
|
|
165
|
+
} catch { return ''; }
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
module.exports = {
|
|
169
|
+
isAllowedA2AAsset, lowerConfidence, isBlastRadiusSafe,
|
|
170
|
+
computeCapsuleSuccessStreak, isCapsuleBroadcastEligible,
|
|
171
|
+
exportEligibleCapsules, isGeneBroadcastEligible,
|
|
172
|
+
exportEligibleGenes, parseA2AInput, readTextIfExists,
|
|
173
|
+
};
|