@evomap/evolver 1.89.18 → 1.89.19

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 (64) hide show
  1. package/index.js +183 -1
  2. package/package.json +7 -2
  3. package/src/adapters/claudeCode.js +8 -39
  4. package/src/adapters/hookAdapter.js +68 -5
  5. package/src/adapters/scripts/evolver-session-start.js +98 -0
  6. package/src/evolve/guards.js +1 -1
  7. package/src/evolve/pipeline/collect.js +1 -1
  8. package/src/evolve/pipeline/dispatch.js +1 -1
  9. package/src/evolve/pipeline/enrich.js +1 -1
  10. package/src/evolve/pipeline/hub.js +1 -1
  11. package/src/evolve/pipeline/select.js +1 -1
  12. package/src/evolve/pipeline/signals.js +1 -1
  13. package/src/evolve/utils.js +1 -1
  14. package/src/evolve.js +1 -1
  15. package/src/gep/a2aProtocol.js +1 -1
  16. package/src/gep/antiAbuseTelemetry.js +1 -1
  17. package/src/gep/autoDistillConv.js +1 -1
  18. package/src/gep/autoDistillLlm.js +1 -1
  19. package/src/gep/candidateEval.js +1 -1
  20. package/src/gep/candidates.js +1 -1
  21. package/src/gep/contentHash.js +1 -1
  22. package/src/gep/conversationDistiller.js +1 -1
  23. package/src/gep/conversationSniffer.js +1 -1
  24. package/src/gep/crypto.js +1 -1
  25. package/src/gep/curriculum.js +1 -1
  26. package/src/gep/deviceId.js +1 -1
  27. package/src/gep/envFingerprint.js +1 -1
  28. package/src/gep/epigenetics.js +1 -1
  29. package/src/gep/execBridge.js +1 -1
  30. package/src/gep/explore.js +1 -1
  31. package/src/gep/hash.js +1 -1
  32. package/src/gep/hubFetch.js +1 -1
  33. package/src/gep/hubReview.js +1 -1
  34. package/src/gep/hubSearch.js +1 -1
  35. package/src/gep/hubVerify.js +1 -1
  36. package/src/gep/learningSignals.js +1 -1
  37. package/src/gep/memoryGraph.js +1 -1
  38. package/src/gep/memoryGraphAdapter.js +1 -1
  39. package/src/gep/mutation.js +1 -1
  40. package/src/gep/narrativeMemory.js +1 -1
  41. package/src/gep/openPRRegistry.js +1 -1
  42. package/src/gep/personality.js +1 -1
  43. package/src/gep/policyCheck.js +1 -1
  44. package/src/gep/prompt.js +1 -1
  45. package/src/gep/recallInject.js +1 -1
  46. package/src/gep/recallVerifier.js +1 -1
  47. package/src/gep/reflection.js +1 -1
  48. package/src/gep/savingsCore.js +1 -1
  49. package/src/gep/selector.js +1 -1
  50. package/src/gep/skill2gep.js +329 -43
  51. package/src/gep/skill2gepAudit.js +303 -0
  52. package/src/gep/skillDistiller.js +1 -1
  53. package/src/gep/solidify.js +1 -1
  54. package/src/gep/strategy.js +1 -1
  55. package/src/gep/tokenSavings.js +1 -1
  56. package/src/gep/trajectoryExport.js +1 -0
  57. package/src/gep/workspaceKeychain.js +1 -1
  58. package/src/proxy/extensions/traceControl.js +1 -1
  59. package/src/proxy/index.js +3 -0
  60. package/src/proxy/inject.js +1 -1
  61. package/src/proxy/router/messages_route.js +52 -1
  62. package/src/proxy/sync/outbound.js +7 -2
  63. package/src/proxy/trace/extractor.js +1 -1
  64. package/src/proxy/trace/usage.js +1 -1
@@ -290,6 +290,7 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
290
290
  inboundHeaders,
291
291
  upstreamMode,
292
292
  });
293
+ if (upstream.traceRequestBody !== undefined) trace?.setRequestBody(upstream.traceRequestBody);
293
294
  } catch (err) {
294
295
  trace?.record({ status: 502, error: err, upstreamMode, model: chosenModel });
295
296
  throw err;
@@ -352,6 +353,7 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
352
353
  // — but that loses the original 503 body, so cache it here too and
353
354
  // restore it on the throw path.
354
355
  let drainedFirst = '';
356
+ let firstAttemptResponseBody = {};
355
357
  if (upstream.text) {
356
358
  // Bound response-body drain to 10s to prevent hanging on large or
357
359
  // slow-streaming error responses. If the drain times out, log it
@@ -389,14 +391,47 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
389
391
  if (drainTimer) clearTimeout(drainTimer);
390
392
  }
391
393
  }
394
+ if (drainedFirst.length > 0) {
395
+ try {
396
+ firstAttemptResponseBody = JSON.parse(drainedFirst);
397
+ } catch {
398
+ firstAttemptResponseBody = { error: drainedFirst };
399
+ }
400
+ }
401
+ trace?.recordAttempt({
402
+ attempt_index: 0,
403
+ status: upstream.status,
404
+ requestBody: upstream.traceRequestBody !== undefined ? upstream.traceRequestBody : outboundBody,
405
+ responseBody: firstAttemptResponseBody,
406
+ upstreamMode,
407
+ model: chosenModel,
408
+ headers: upstream.headers,
409
+ });
410
+ let retryBody = body;
392
411
  try {
393
- const retryBody = rewriteModel(body, originalModel);
412
+ retryBody = rewriteModel(body, originalModel);
394
413
  finalUpstream = await anthropicProxy('/v1/messages', retryBody, {
395
414
  inboundHeaders,
396
415
  upstreamMode,
397
416
  });
417
+ trace?.setRequestBody(finalUpstream.traceRequestBody !== undefined ? finalUpstream.traceRequestBody : retryBody);
418
+ trace?.recordAttempt({
419
+ attempt_index: 1,
420
+ requestBody: finalUpstream.traceRequestBody !== undefined ? finalUpstream.traceRequestBody : retryBody,
421
+ upstreamMode,
422
+ model: originalModel,
423
+ headers: finalUpstream.headers,
424
+ });
398
425
  finalModel = originalModel;
399
426
  } catch (err) {
427
+ trace?.recordAttempt({
428
+ attempt_index: 1,
429
+ status: 502,
430
+ requestBody: retryBody,
431
+ error: err,
432
+ upstreamMode,
433
+ model: originalModel,
434
+ });
400
435
  // Replay the drained first response so the caller still sees the
401
436
  // original 503 + body, not an empty stream.
402
437
  finalUpstream = {
@@ -425,6 +460,7 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
425
460
  upstreamMode,
426
461
  model: finalModel,
427
462
  headers: forwardHeaders,
463
+ attempt_index: finalModel === originalModel && chosenModel !== originalModel ? 1 : undefined,
428
464
  });
429
465
  return {
430
466
  status: finalUpstream.status,
@@ -461,6 +497,21 @@ function buildMessagesHandler({ anthropicProxy, logger, routerEnabled, traceStor
461
497
  }));
462
498
  }
463
499
  }
500
+ if (
501
+ enabled
502
+ && chosenModel
503
+ && chosenModel !== originalModel
504
+ && finalModel === originalModel
505
+ ) {
506
+ trace?.recordAttempt({
507
+ attempt_index: 1,
508
+ status: finalUpstream.status,
509
+ responseBody: respBody,
510
+ upstreamMode,
511
+ model: finalModel,
512
+ headers: finalUpstream.headers,
513
+ });
514
+ }
464
515
  trace?.record({
465
516
  status: finalUpstream.status,
466
517
  responseBody: respBody,
@@ -74,6 +74,12 @@ function serializeOutboundBody(senderId, messages) {
74
74
  });
75
75
  }
76
76
 
77
+ function outboundEndpoint(hubUrl, senderId) {
78
+ const endpoint = new URL(`${String(hubUrl || '').replace(/\/+$/, '')}/a2a/mailbox/outbound`);
79
+ if (senderId) endpoint.searchParams.set('sender_id', senderId);
80
+ return endpoint.toString();
81
+ }
82
+
77
83
  function outboundBodyBytes(senderId, messages) {
78
84
  return Buffer.byteLength(serializeOutboundBody(senderId, messages), 'utf8');
79
85
  }
@@ -181,10 +187,9 @@ class OutboundSync {
181
187
  }
182
188
  let dropped = rejectedTraceUploads.length;
183
189
 
184
- const endpoint = `${this.hubUrl}/a2a/mailbox/outbound`;
185
-
186
190
  try {
187
191
  const senderId = this.store.getState('node_id');
192
+ const endpoint = outboundEndpoint(this.hubUrl, senderId);
188
193
  const prepared = buildSizedOutboundBatch(
189
194
  senderId,
190
195
  pending,