@evomap/evolver 1.80.6 → 1.80.7

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.
Files changed (41) hide show
  1. package/assets/gep/candidates.jsonl +2 -2
  2. package/index.js +33 -1
  3. package/package.json +1 -1
  4. package/src/adapters/opencode.js +137 -2
  5. package/src/evolve/guards.js +1 -1
  6. package/src/evolve/pipeline/collect.js +1 -1
  7. package/src/evolve/pipeline/dispatch.js +1 -1
  8. package/src/evolve/pipeline/enrich.js +1 -1
  9. package/src/evolve/pipeline/hub.js +1 -1
  10. package/src/evolve/pipeline/select.js +1 -1
  11. package/src/evolve/pipeline/signals.js +1 -1
  12. package/src/evolve/utils.js +1 -1
  13. package/src/evolve.js +1 -1
  14. package/src/gep/.integrity +0 -0
  15. package/src/gep/a2aProtocol.js +1 -1
  16. package/src/gep/candidateEval.js +1 -1
  17. package/src/gep/candidates.js +1 -1
  18. package/src/gep/contentHash.js +1 -1
  19. package/src/gep/crypto.js +1 -1
  20. package/src/gep/curriculum.js +1 -1
  21. package/src/gep/deviceId.js +1 -1
  22. package/src/gep/envFingerprint.js +1 -1
  23. package/src/gep/explore.js +1 -1
  24. package/src/gep/hubReview.js +1 -1
  25. package/src/gep/hubSearch.js +1 -1
  26. package/src/gep/hubVerify.js +1 -1
  27. package/src/gep/integrityCheck.js +1 -1
  28. package/src/gep/learningSignals.js +1 -1
  29. package/src/gep/memoryGraph.js +1 -1
  30. package/src/gep/memoryGraphAdapter.js +1 -1
  31. package/src/gep/mutation.js +1 -1
  32. package/src/gep/narrativeMemory.js +1 -1
  33. package/src/gep/personality.js +1 -1
  34. package/src/gep/policyCheck.js +1 -1
  35. package/src/gep/prompt.js +1 -1
  36. package/src/gep/reflection.js +1 -1
  37. package/src/gep/selector.js +1 -1
  38. package/src/gep/shield.js +1 -1
  39. package/src/gep/skillDistiller.js +1 -1
  40. package/src/gep/solidify.js +1 -1
  41. package/src/gep/strategy.js +1 -1
@@ -1,2 +1,2 @@
1
- {"type":"CapabilityCandidate","id":"cand_b9a66a5c","title":"Harden session log detection and fallback behavior","source":"signals","created_at":"2026-05-09T09:04:20.466Z","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-05-09T09:04:49.711Z","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-05-09T10:55:54.018Z","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-05-09T10:56:23.120Z","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
@@ -1559,12 +1559,43 @@ async function main() {
1559
1559
  }
1560
1560
 
1561
1561
  } else if (command === 'setup-hooks') {
1562
- const { setupHooks } = require('./src/adapters/hookAdapter');
1562
+ const hookAdapter = require('./src/adapters/hookAdapter');
1563
+ const { setupHooks, resolveConfigRoot, detectPlatform, loadAdapter } = hookAdapter;
1563
1564
 
1564
1565
  const platformFlag = args.find(a => typeof a === 'string' && a.startsWith('--platform='));
1565
1566
  const platform = platformFlag ? platformFlag.slice('--platform='.length) : undefined;
1566
1567
  const force = args.includes('--force');
1567
1568
  const uninstall = args.includes('--uninstall');
1569
+ const verifyOnly = args.includes('--verify');
1570
+
1571
+ if (verifyOnly) {
1572
+ // Read-only verification: do not touch any files, just report whether
1573
+ // the previously-installed hooks/plugin look healthy. Lets users answer
1574
+ // "is the plugin actually loaded?" without grepping opencode logs.
1575
+ try {
1576
+ const platformId = platform || detectPlatform(process.cwd());
1577
+ if (!platformId) {
1578
+ console.error('[setup-hooks] --verify: could not detect platform. Pass --platform=opencode|cursor|claude-code|codex|kiro');
1579
+ process.exit(2);
1580
+ }
1581
+ const adapter = loadAdapter(platformId);
1582
+ if (!adapter || typeof adapter.verify !== 'function') {
1583
+ console.error('[setup-hooks] --verify: platform ' + platformId + ' does not support verification yet.');
1584
+ process.exit(2);
1585
+ }
1586
+ const configRoot = resolveConfigRoot(platformId, process.cwd());
1587
+ const report = adapter.verify({ configRoot });
1588
+ if (typeof adapter.printVerifyReport === 'function') {
1589
+ adapter.printVerifyReport(report);
1590
+ } else {
1591
+ console.log(JSON.stringify(report, null, 2));
1592
+ }
1593
+ process.exit(report.ok ? 0 : 1);
1594
+ } catch (verifyErr) {
1595
+ console.error('[setup-hooks] --verify error:', verifyErr && verifyErr.message || verifyErr);
1596
+ process.exit(1);
1597
+ }
1598
+ }
1568
1599
 
1569
1600
  try {
1570
1601
  const result = await setupHooks({
@@ -1685,6 +1716,7 @@ async function main() {
1685
1716
  - --platform=cursor|claude-code|codex|kiro|opencode (auto-detect if omitted)
1686
1717
  - --force (overwrite existing config)
1687
1718
  - --uninstall (remove evolver hooks)
1719
+ - --verify (read-only: print install health for the chosen platform)
1688
1720
  - asset-log flags:
1689
1721
  - --run=<run_id> (filter by run ID)
1690
1722
  - --action=<action> (filter: hub_search_hit, hub_search_miss, asset_reuse, asset_reference, asset_publish, asset_publish_skip)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evomap/evolver",
3
- "version": "1.80.6",
3
+ "version": "1.80.7",
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": {
@@ -127,7 +127,8 @@ function install({ configRoot, evolverRoot, force }) {
127
127
 
128
128
  if (!force && isEvolverManagedPluginFile(pluginPath)) {
129
129
  console.log('[opencode] Evolver plugin already installed. Use --force to overwrite.');
130
- return { ok: true, skipped: true };
130
+ printPostInstallNotice(pluginPath);
131
+ return { ok: true, skipped: true, plugin_path: pluginPath };
131
132
  }
132
133
 
133
134
  fs.mkdirSync(opencodeDir, { recursive: true });
@@ -144,15 +145,147 @@ function install({ configRoot, evolverRoot, force }) {
144
145
  }
145
146
 
146
147
  console.log('[opencode] Installation complete.');
147
- console.log('[opencode] opencode auto-loads plugins from .opencode/plugins/ -- restart opencode to activate.');
148
+ printPostInstallNotice(written);
148
149
 
149
150
  return {
150
151
  ok: true,
151
152
  platform: 'opencode',
153
+ plugin_path: written,
152
154
  files: [written, agentsMdPath, ...copied],
153
155
  };
154
156
  }
155
157
 
158
+ function printPostInstallNotice(pluginPath) {
159
+ // The opencode TUI "Plugins" tab only lists TUI plugins (registered via
160
+ // tui.json with `default export { id, tui }`). Server plugins like ours,
161
+ // auto-loaded from .opencode/plugins/, are functional but invisible in
162
+ // that tab. This is by opencode design, not a bug. See:
163
+ // https://github.com/sst/opencode -> packages/opencode/specs/tui-plugins.md
164
+ // Surfacing this proactively here prevents the "is it actually loaded?"
165
+ // confusion that motivated EvoMap/evolver issue #531.
166
+ console.log('');
167
+ console.log('[opencode] Restart opencode for the plugin to take effect.');
168
+ console.log('[opencode] Note: this is a SERVER plugin (event hooks). It will NOT appear in');
169
+ console.log('[opencode] the TUI "Plugins" tab -- that tab only lists TUI plugins');
170
+ console.log('[opencode] (registered via tui.json). The plugin is still loaded and');
171
+ console.log('[opencode] running silently in the background.');
172
+ console.log('[opencode] To verify the plugin is loaded, run:');
173
+ console.log('[opencode] opencode --print-logs --log-level INFO debug config 2>&1 | grep ' + JSON.stringify(pluginPath));
174
+ console.log('[opencode] Or run:');
175
+ console.log('[opencode] evolver setup-hooks --platform=opencode --verify');
176
+ }
177
+
178
+ // Walk the install state and report what is healthy / what is missing.
179
+ // Used by the `--verify` flag to give users a definitive answer to
180
+ // "is the plugin actually installed and loadable?". Returns a structured
181
+ // result so callers (CLI, future TUI plugin) can format it as they like.
182
+ function verify({ configRoot }) {
183
+ const opencodeDir = path.join(configRoot, '.opencode');
184
+ const hooksDir = path.join(opencodeDir, HOOK_SCRIPTS_DIR_NAME);
185
+ const pluginsDir = path.join(opencodeDir, PLUGINS_DIR_NAME);
186
+ const pluginPath = path.join(pluginsDir, PLUGIN_FILE_NAME);
187
+ const agentsMdPath = path.join(configRoot, 'AGENTS.md');
188
+ const expectedScripts = [
189
+ 'evolver-session-start.js',
190
+ 'evolver-signal-detect.js',
191
+ 'evolver-session-end.js',
192
+ ];
193
+
194
+ const checks = [];
195
+
196
+ const pluginExists = fs.existsSync(pluginPath);
197
+ checks.push({
198
+ id: 'plugin_file_present',
199
+ ok: pluginExists,
200
+ detail: pluginExists ? pluginPath : 'missing: ' + pluginPath,
201
+ });
202
+
203
+ const managed = pluginExists && isEvolverManagedPluginFile(pluginPath);
204
+ checks.push({
205
+ id: 'plugin_managed_marker',
206
+ ok: managed,
207
+ detail: managed
208
+ ? 'first line contains _evolver_managed: true'
209
+ : 'plugin file is not evolver-managed (was it edited or replaced by another tool?)',
210
+ });
211
+
212
+ let pluginLoadable = false;
213
+ let pluginLoadError = null;
214
+ if (pluginExists) {
215
+ try {
216
+ // Require the plugin in an isolated module cache slot to confirm it
217
+ // parses and exports the expected shape. opencode does an ESM dynamic
218
+ // import; CommonJS require here is a strict subset of that, so a
219
+ // failure here is a guaranteed failure under opencode too.
220
+ delete require.cache[require.resolve(pluginPath)];
221
+ const mod = require(pluginPath);
222
+ const fn = mod && (mod.Evolver || mod.default);
223
+ pluginLoadable = typeof fn === 'function';
224
+ if (!pluginLoadable) pluginLoadError = 'no Evolver/default function export';
225
+ } catch (err) {
226
+ pluginLoadError = (err && err.message) || String(err);
227
+ }
228
+ }
229
+ checks.push({
230
+ id: 'plugin_loadable',
231
+ ok: pluginLoadable,
232
+ detail: pluginLoadable
233
+ ? 'require() succeeded and exports Evolver()'
234
+ : 'require() failed: ' + (pluginLoadError || 'unknown'),
235
+ });
236
+
237
+ const missingScripts = expectedScripts.filter(
238
+ (name) => !fs.existsSync(path.join(hooksDir, name))
239
+ );
240
+ checks.push({
241
+ id: 'hook_scripts_present',
242
+ ok: missingScripts.length === 0,
243
+ detail: missingScripts.length === 0
244
+ ? 'all 3 hook scripts present in ' + hooksDir
245
+ : 'missing: ' + missingScripts.join(', '),
246
+ });
247
+
248
+ let agentsMdHasSection = false;
249
+ try {
250
+ if (fs.existsSync(agentsMdPath)) {
251
+ agentsMdHasSection = fs.readFileSync(agentsMdPath, 'utf8').includes(EVOLVER_MARKER);
252
+ }
253
+ } catch { /* ignore */ }
254
+ checks.push({
255
+ id: 'agents_md_section',
256
+ ok: agentsMdHasSection,
257
+ detail: agentsMdHasSection
258
+ ? 'AGENTS.md contains evolution memory section'
259
+ : 'AGENTS.md is missing or has no evolution section (re-run install)',
260
+ });
261
+
262
+ const allOk = checks.every((c) => c.ok);
263
+
264
+ return {
265
+ ok: allOk,
266
+ plugin_path: pluginPath,
267
+ hooks_dir: hooksDir,
268
+ config_root: configRoot,
269
+ checks,
270
+ note: allOk
271
+ ? 'Plugin is installed and loadable. opencode\'s TUI "Plugins" tab will not list it -- that tab only shows TUI plugins. Run `opencode --print-logs --log-level INFO debug config` and grep for the plugin path to confirm opencode loads it at startup.'
272
+ : 'One or more checks failed. Re-run `evolver setup-hooks --platform=opencode --force` to repair.',
273
+ };
274
+ }
275
+
276
+ function printVerifyReport(report) {
277
+ console.log('[opencode] Verify report');
278
+ console.log('[opencode] plugin path : ' + report.plugin_path);
279
+ console.log('[opencode] hooks dir : ' + report.hooks_dir);
280
+ console.log('[opencode] config root : ' + report.config_root);
281
+ console.log('[opencode] Checks:');
282
+ for (const c of report.checks) {
283
+ console.log('[opencode] ' + (c.ok ? '[OK] ' : '[FAIL]') + ' ' + c.id + ' -- ' + c.detail);
284
+ }
285
+ console.log('[opencode] ' + (report.ok ? 'All checks passed.' : 'Some checks failed.'));
286
+ console.log('[opencode] ' + report.note);
287
+ }
288
+
156
289
  function uninstall({ configRoot }) {
157
290
  const opencodeDir = path.join(configRoot, '.opencode');
158
291
  const hooksDir = path.join(opencodeDir, HOOK_SCRIPTS_DIR_NAME);
@@ -193,6 +326,8 @@ function uninstall({ configRoot }) {
193
326
  module.exports = {
194
327
  install,
195
328
  uninstall,
329
+ verify,
330
+ printVerifyReport,
196
331
  buildPluginSource,
197
332
  isEvolverManagedPluginFile,
198
333
  PLUGIN_FILE_NAME,