@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.
- package/index.js +183 -1
- package/package.json +7 -2
- package/src/adapters/claudeCode.js +8 -39
- package/src/adapters/hookAdapter.js +68 -5
- package/src/adapters/scripts/evolver-session-start.js +98 -0
- package/src/evolve/guards.js +1 -1
- package/src/evolve/pipeline/collect.js +1 -1
- package/src/evolve/pipeline/dispatch.js +1 -1
- package/src/evolve/pipeline/enrich.js +1 -1
- package/src/evolve/pipeline/hub.js +1 -1
- package/src/evolve/pipeline/select.js +1 -1
- package/src/evolve/pipeline/signals.js +1 -1
- package/src/evolve/utils.js +1 -1
- package/src/evolve.js +1 -1
- package/src/gep/a2aProtocol.js +1 -1
- package/src/gep/antiAbuseTelemetry.js +1 -1
- package/src/gep/autoDistillConv.js +1 -1
- package/src/gep/autoDistillLlm.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/conversationDistiller.js +1 -1
- package/src/gep/conversationSniffer.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/epigenetics.js +1 -1
- package/src/gep/execBridge.js +1 -1
- package/src/gep/explore.js +1 -1
- package/src/gep/hash.js +1 -1
- package/src/gep/hubFetch.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/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/openPRRegistry.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/recallInject.js +1 -1
- package/src/gep/recallVerifier.js +1 -1
- package/src/gep/reflection.js +1 -1
- package/src/gep/savingsCore.js +1 -1
- package/src/gep/selector.js +1 -1
- package/src/gep/skill2gep.js +329 -43
- package/src/gep/skill2gepAudit.js +303 -0
- package/src/gep/skillDistiller.js +1 -1
- package/src/gep/solidify.js +1 -1
- package/src/gep/strategy.js +1 -1
- package/src/gep/tokenSavings.js +1 -1
- package/src/gep/trajectoryExport.js +1 -0
- package/src/gep/workspaceKeychain.js +1 -1
- package/src/proxy/extensions/traceControl.js +1 -1
- package/src/proxy/index.js +3 -0
- package/src/proxy/inject.js +1 -1
- package/src/proxy/router/messages_route.js +52 -1
- package/src/proxy/sync/outbound.js +7 -2
- package/src/proxy/trace/extractor.js +1 -1
- 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
|
-
|
|
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,
|