@sjawhar/pi-legion-envoy 5.30.3 → 5.30.4
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/dist/envoy.js +96 -23
- package/dist/legion.js +18 -1
- package/package.json +1 -1
package/dist/envoy.js
CHANGED
|
@@ -30475,6 +30475,23 @@ var EnvelopeSchema = exports_external.object({
|
|
|
30475
30475
|
urgency: exports_external.enum(["low", "med", "high", "blocking"]).optional(),
|
|
30476
30476
|
expects_reply: exports_external.enum(["none", "optional", "required"]).optional()
|
|
30477
30477
|
});
|
|
30478
|
+
var MINTED_DEDUPE_KEY_PATTERN = "^(?:envoy\\.role\\.forward\\.)?(?:publish|agent\\.[^.]+)\\.(?:[0-9a-f]{32}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$";
|
|
30479
|
+
var mintedDedupeKey = new RegExp(MINTED_DEDUPE_KEY_PATTERN);
|
|
30480
|
+
function dedupeKeyNamesItsEvent(envelope) {
|
|
30481
|
+
const key = envelope.dedupe_key;
|
|
30482
|
+
if (key === undefined)
|
|
30483
|
+
return false;
|
|
30484
|
+
if (envelope.source === "dispatch" || mintedDedupeKey.test(key))
|
|
30485
|
+
return true;
|
|
30486
|
+
switch (envelope.source) {
|
|
30487
|
+
case "github":
|
|
30488
|
+
case "slack":
|
|
30489
|
+
case "ghostwispr":
|
|
30490
|
+
return envelope.source_event_id !== undefined && envelope.source_event_id !== "" && key === `${envelope.source}.${envelope.source_event_id}`;
|
|
30491
|
+
default:
|
|
30492
|
+
return false;
|
|
30493
|
+
}
|
|
30494
|
+
}
|
|
30478
30495
|
// ../contracts/src/handoff-schema.ts
|
|
30479
30496
|
var HANDOFF_SCHEMA_VERSION = 1;
|
|
30480
30497
|
var HANDOFF_PHASES = ["architect", "plan", "implement", "test", "review"];
|
|
@@ -31612,6 +31629,7 @@ var InboundSenderSchema = exports_external.object({
|
|
|
31612
31629
|
var InboundEnvelopeSchema = exports_external.object({
|
|
31613
31630
|
event_id: exports_external.string().optional(),
|
|
31614
31631
|
source: exports_external.string(),
|
|
31632
|
+
source_event_id: exports_external.string().optional(),
|
|
31615
31633
|
source_session: exports_external.string().optional(),
|
|
31616
31634
|
topic: exports_external.string().optional(),
|
|
31617
31635
|
dedupe_key: exports_external.string().optional(),
|
|
@@ -31655,13 +31673,72 @@ async function postDeliveryReply(config2, sessionId, delivery, result) {
|
|
|
31655
31673
|
function expectsLaneReceipt(frame) {
|
|
31656
31674
|
return frame.reply !== undefined && frame.reply !== "" && frame.subject === frame.directSubject && frame.envelopeTopic !== undefined && frame.envelopeTopic !== frame.directSubject;
|
|
31657
31675
|
}
|
|
31658
|
-
|
|
31659
|
-
|
|
31660
|
-
|
|
31661
|
-
|
|
31662
|
-
|
|
31663
|
-
|
|
31664
|
-
|
|
31676
|
+
var DedupeIdentitySchema = exports_external.object({
|
|
31677
|
+
event_id: exports_external.string().min(1).optional(),
|
|
31678
|
+
dedupe_key: exports_external.string().min(1).optional(),
|
|
31679
|
+
source: exports_external.string().optional(),
|
|
31680
|
+
source_event_id: exports_external.string().optional()
|
|
31681
|
+
});
|
|
31682
|
+
var DELIVERY_DEDUPE_KEY_LIMIT = 250000;
|
|
31683
|
+
var DELIVERY_EVENT_ID_LIMIT = 1e4;
|
|
31684
|
+
function createDeliveryDedupe(now = Date.now) {
|
|
31685
|
+
const keys = new Map;
|
|
31686
|
+
let events = new Map;
|
|
31687
|
+
let olderEvents = new Map;
|
|
31688
|
+
let claims = 0;
|
|
31689
|
+
return {
|
|
31690
|
+
claim(frame) {
|
|
31691
|
+
const eventId = frame?.event_id;
|
|
31692
|
+
if (eventId !== undefined && (events.has(eventId) || olderEvents.has(eventId))) {
|
|
31693
|
+
return;
|
|
31694
|
+
}
|
|
31695
|
+
const key = frame?.dedupe_key;
|
|
31696
|
+
const named = frame !== undefined && key !== undefined && dedupeKeyNamesItsEvent(frame);
|
|
31697
|
+
const at = now();
|
|
31698
|
+
if (named) {
|
|
31699
|
+
const claimedAt = keys.get(key);
|
|
31700
|
+
if (claimedAt !== undefined && at - claimedAt < DELIVERY_DUPLICATE_WINDOW_MS) {
|
|
31701
|
+
return;
|
|
31702
|
+
}
|
|
31703
|
+
for (const [oldest, deliveredAt] of keys) {
|
|
31704
|
+
if (at - deliveredAt < DELIVERY_DUPLICATE_WINDOW_MS)
|
|
31705
|
+
break;
|
|
31706
|
+
keys.delete(oldest);
|
|
31707
|
+
}
|
|
31708
|
+
keys.delete(key);
|
|
31709
|
+
if (keys.size >= DELIVERY_DEDUPE_KEY_LIMIT) {
|
|
31710
|
+
const oldest = keys.keys().next();
|
|
31711
|
+
if (oldest.done !== true)
|
|
31712
|
+
keys.delete(oldest.value);
|
|
31713
|
+
}
|
|
31714
|
+
keys.set(key, at);
|
|
31715
|
+
}
|
|
31716
|
+
const claim = ++claims;
|
|
31717
|
+
if (eventId !== undefined) {
|
|
31718
|
+
if (events.size >= DELIVERY_EVENT_ID_LIMIT / 2) {
|
|
31719
|
+
olderEvents = events;
|
|
31720
|
+
events = new Map;
|
|
31721
|
+
}
|
|
31722
|
+
events.set(eventId, claim);
|
|
31723
|
+
}
|
|
31724
|
+
let released = false;
|
|
31725
|
+
return {
|
|
31726
|
+
release() {
|
|
31727
|
+
if (released)
|
|
31728
|
+
return;
|
|
31729
|
+
released = true;
|
|
31730
|
+
if (named && keys.get(key) === at)
|
|
31731
|
+
keys.delete(key);
|
|
31732
|
+
if (eventId === undefined)
|
|
31733
|
+
return;
|
|
31734
|
+
if (events.get(eventId) === claim)
|
|
31735
|
+
events.delete(eventId);
|
|
31736
|
+
if (olderEvents.get(eventId) === claim)
|
|
31737
|
+
olderEvents.delete(eventId);
|
|
31738
|
+
}
|
|
31739
|
+
};
|
|
31740
|
+
}
|
|
31741
|
+
};
|
|
31665
31742
|
}
|
|
31666
31743
|
function isCommentTargetedDelivery(delivery) {
|
|
31667
31744
|
return "comment_id" in delivery;
|
|
@@ -35893,7 +35970,7 @@ function envoyExtension(pi) {
|
|
|
35893
35970
|
};
|
|
35894
35971
|
const client = createEnvoyClient({ baseUrl: defaults.envoyUrl, fetch });
|
|
35895
35972
|
const subscriptions = new Map;
|
|
35896
|
-
const
|
|
35973
|
+
const delivered = createDeliveryDedupe();
|
|
35897
35974
|
let connection;
|
|
35898
35975
|
let sessionDirectory = "";
|
|
35899
35976
|
let sessionID = "";
|
|
@@ -36051,9 +36128,8 @@ function envoyExtension(pi) {
|
|
|
36051
36128
|
}
|
|
36052
36129
|
for (const topic of subscriptionRemovedTopics(raw, sessionID) ?? [])
|
|
36053
36130
|
closeIntentionally(topic);
|
|
36054
|
-
const
|
|
36055
|
-
|
|
36056
|
-
if (!duplicate && !rendered.skip) {
|
|
36131
|
+
const claim2 = rendered.skip ? undefined : delivered.claim(rendered.envelope);
|
|
36132
|
+
if (claim2 !== undefined) {
|
|
36057
36133
|
const envelope2 = rendered.envelope;
|
|
36058
36134
|
if (envelope2 !== undefined) {
|
|
36059
36135
|
inbox.unshift({
|
|
@@ -36065,30 +36141,28 @@ function envoyExtension(pi) {
|
|
|
36065
36141
|
if (inbox.length > 50)
|
|
36066
36142
|
inbox.pop();
|
|
36067
36143
|
}
|
|
36144
|
+
const refuse = async (delivery, error48) => {
|
|
36145
|
+
claim2.release();
|
|
36146
|
+
await postDispatchReply(delivery, { error: error48 });
|
|
36147
|
+
};
|
|
36068
36148
|
try {
|
|
36069
36149
|
if (rendered.rejectedDelivery !== undefined) {
|
|
36070
36150
|
console.warn(`[envoy] rejecting malformed Dispatch targeted delivery ${rendered.rejectedDelivery.id}`);
|
|
36071
|
-
await
|
|
36072
|
-
error: "Invalid Dispatch targeted delivery frame"
|
|
36073
|
-
});
|
|
36151
|
+
await refuse(rendered.rejectedDelivery, "Invalid Dispatch targeted delivery frame");
|
|
36074
36152
|
} else if (rendered.malformedDelivery === true) {
|
|
36075
36153
|
console.warn("[envoy] dropping malformed Dispatch targeted delivery without a reply address");
|
|
36076
36154
|
} else if (rendered.delivery?.mode === "btw") {
|
|
36077
36155
|
const answer = sideTurn(pi, activeSessionContext);
|
|
36078
36156
|
if (shuttingDown) {
|
|
36079
|
-
await
|
|
36080
|
-
error: "This OMP session is shutting down"
|
|
36081
|
-
});
|
|
36157
|
+
await refuse(rendered.delivery, "This OMP session is shutting down");
|
|
36082
36158
|
} else if (answer === undefined) {
|
|
36083
|
-
await
|
|
36084
|
-
error: "This OMP host does not support BTW delivery"
|
|
36085
|
-
});
|
|
36159
|
+
await refuse(rendered.delivery, "This OMP host does not support BTW delivery");
|
|
36086
36160
|
} else {
|
|
36087
36161
|
try {
|
|
36088
36162
|
const reply2 = await answer({ prompt: rendered.delivery.body });
|
|
36089
36163
|
await postDispatchReply(rendered.delivery, { body: reply2.replyText });
|
|
36090
36164
|
} catch (error48) {
|
|
36091
|
-
await
|
|
36165
|
+
await refuse(rendered.delivery, messageFor(error48));
|
|
36092
36166
|
}
|
|
36093
36167
|
}
|
|
36094
36168
|
} else {
|
|
@@ -36104,11 +36178,10 @@ function envoyExtension(pi) {
|
|
|
36104
36178
|
}
|
|
36105
36179
|
}
|
|
36106
36180
|
} catch (error48) {
|
|
36181
|
+
claim2.release();
|
|
36107
36182
|
console.warn(`[envoy] failed to deliver envelope ${envelope2?.event_id ?? "unknown"}`, error48);
|
|
36108
36183
|
throw error48;
|
|
36109
36184
|
}
|
|
36110
|
-
if (dedupeKey !== undefined)
|
|
36111
|
-
rememberBounded(dedupeKeys, dedupeKey, 1000);
|
|
36112
36185
|
}
|
|
36113
36186
|
};
|
|
36114
36187
|
const RESUBSCRIBE_DELAY_MS = Number(process.env.ENVOY_RESUBSCRIBE_DELAY_MS ?? "") || 5000;
|
package/dist/legion.js
CHANGED
|
@@ -30644,6 +30644,23 @@ var EnvelopeSchema = exports_external.object({
|
|
|
30644
30644
|
urgency: exports_external.enum(["low", "med", "high", "blocking"]).optional(),
|
|
30645
30645
|
expects_reply: exports_external.enum(["none", "optional", "required"]).optional()
|
|
30646
30646
|
});
|
|
30647
|
+
var MINTED_DEDUPE_KEY_PATTERN = "^(?:envoy\\.role\\.forward\\.)?(?:publish|agent\\.[^.]+)\\.(?:[0-9a-f]{32}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$";
|
|
30648
|
+
var mintedDedupeKey = new RegExp(MINTED_DEDUPE_KEY_PATTERN);
|
|
30649
|
+
function dedupeKeyNamesItsEvent(envelope) {
|
|
30650
|
+
const key = envelope.dedupe_key;
|
|
30651
|
+
if (key === undefined)
|
|
30652
|
+
return false;
|
|
30653
|
+
if (envelope.source === "dispatch" || mintedDedupeKey.test(key))
|
|
30654
|
+
return true;
|
|
30655
|
+
switch (envelope.source) {
|
|
30656
|
+
case "github":
|
|
30657
|
+
case "slack":
|
|
30658
|
+
case "ghostwispr":
|
|
30659
|
+
return envelope.source_event_id !== undefined && envelope.source_event_id !== "" && key === `${envelope.source}.${envelope.source_event_id}`;
|
|
30660
|
+
default:
|
|
30661
|
+
return false;
|
|
30662
|
+
}
|
|
30663
|
+
}
|
|
30647
30664
|
// ../contracts/src/handoff-schema.ts
|
|
30648
30665
|
var HANDOFF_SCHEMA_VERSION = 1;
|
|
30649
30666
|
var HANDOFF_PHASES = ["architect", "plan", "implement", "test", "review"];
|
|
@@ -33685,7 +33702,7 @@ import { logger } from "@oh-my-pi/pi-utils";
|
|
|
33685
33702
|
// package.json
|
|
33686
33703
|
var package_default = {
|
|
33687
33704
|
name: "@sjawhar/pi-legion-envoy",
|
|
33688
|
-
version: "5.30.
|
|
33705
|
+
version: "5.30.4",
|
|
33689
33706
|
type: "module",
|
|
33690
33707
|
omp: {
|
|
33691
33708
|
extensions: [
|