@moxt-ai/mobius 0.0.154 → 0.0.155
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/cli.js +34 -317
- package/dist/cli.js.map +4 -4
- package/dist/daemon-turn-registry.d.ts +13 -13
- package/dist/index.js +33 -316
- package/dist/index.js.map +4 -4
- package/dist/relay-connection/run-relay-connection.d.ts.map +1 -1
- package/dist/relay-connection/run-relay-connection.js +2 -15
- package/dist/relay-connection/run-relay-connection.js.map +1 -1
- package/dist/relay-connection/session-event-publisher.d.ts +4 -9
- package/dist/relay-connection/session-event-publisher.d.ts.map +1 -1
- package/dist/relay-connection/session-event-publisher.js +26 -140
- package/dist/relay-connection/session-event-publisher.js.map +1 -1
- package/dist/run-daemon.js +1 -1
- package/dist/run-daemon.js.map +1 -1
- package/dist/runtime.js +37 -320
- package/dist/runtime.js.map +4 -4
- package/package.json +1 -1
- package/dist/relay-connection/session-event-queue.d.ts +0 -14
- package/dist/relay-connection/session-event-queue.d.ts.map +0 -1
- package/dist/relay-connection/session-event-queue.js +0 -75
- package/dist/relay-connection/session-event-queue.js.map +0 -1
package/dist/runtime.js
CHANGED
|
@@ -20741,16 +20741,8 @@ function decodeSessionQueuedEvent(encoded) {
|
|
|
20741
20741
|
function decodeRuntimeLivenessReadyEvent(encoded) {
|
|
20742
20742
|
const value = parseJson2(encoded);
|
|
20743
20743
|
assertKind(value, RUNTIME_LIVENESS_READY_KIND);
|
|
20744
|
-
|
|
20745
|
-
|
|
20746
|
-
return { kind: RUNTIME_LIVENESS_READY_KIND };
|
|
20747
|
-
}
|
|
20748
|
-
assertExactKeys(value, ["kind", "sessionEventDelivery"]);
|
|
20749
|
-
const sessionEventDelivery = readString(value, "sessionEventDelivery", 32);
|
|
20750
|
-
if (sessionEventDelivery !== "reliable-v1") {
|
|
20751
|
-
throw new ProtocolMessageError("Unsupported Session event delivery mode");
|
|
20752
|
-
}
|
|
20753
|
-
return { kind: RUNTIME_LIVENESS_READY_KIND, sessionEventDelivery };
|
|
20744
|
+
assertExactKeys(value, ["kind"]);
|
|
20745
|
+
return { kind: RUNTIME_LIVENESS_READY_KIND };
|
|
20754
20746
|
}
|
|
20755
20747
|
function decodeRuntimeHeartbeatEvent(encoded) {
|
|
20756
20748
|
const value = parseJson2(encoded);
|
|
@@ -21217,60 +21209,13 @@ var encodeNativeSessionCancel = (value) => JSON.stringify(nativeSessionCancelSch
|
|
|
21217
21209
|
|
|
21218
21210
|
// ../protocol/src/session-events.ts
|
|
21219
21211
|
var SESSION_EVENT_KIND = "session.event";
|
|
21220
|
-
var SESSION_EVENT_ACK_KIND = "session.event.ack";
|
|
21221
|
-
var SESSION_EVENT_DEFERRED_KIND = "session.event.deferred";
|
|
21222
|
-
var SESSION_EVENT_REJECTED_KIND = "session.event.rejected";
|
|
21223
21212
|
var SESSION_FORKED_KIND = "session.forked";
|
|
21224
|
-
var SessionEventRejectionCode = {
|
|
21225
|
-
IdempotencyConflict: "idempotency_conflict",
|
|
21226
|
-
InvalidEvent: "invalid_event",
|
|
21227
|
-
RecordingRejected: "recording_rejected"
|
|
21228
|
-
};
|
|
21229
21213
|
var MAX_RECORDED_EVENT_LENGTH = 8 * 1024 * 1024;
|
|
21230
|
-
var
|
|
21231
|
-
kind: external_exports.literal(SESSION_EVENT_KIND),
|
|
21232
|
-
payload: external_exports.string().min(2).max(MAX_RECORDED_EVENT_LENGTH),
|
|
21233
|
-
sessionId: identifierStringSchema
|
|
21234
|
-
}).readonly();
|
|
21235
|
-
var reliableDeliverySchema = external_exports.strictObject({
|
|
21236
|
-
eventId: identifierStringSchema,
|
|
21237
|
-
kind: external_exports.literal("reliable"),
|
|
21238
|
-
sourceSeq: external_exports.string().regex(/^(?:0|[1-9][0-9]*)$/u).max(40),
|
|
21239
|
-
streamId: identifierStringSchema
|
|
21240
|
-
}).readonly();
|
|
21241
|
-
var reliableSessionEventEnvelopeSchema = external_exports.strictObject({
|
|
21242
|
-
delivery: reliableDeliverySchema,
|
|
21214
|
+
var sessionEventEnvelopeSchema = external_exports.strictObject({
|
|
21243
21215
|
kind: external_exports.literal(SESSION_EVENT_KIND),
|
|
21244
21216
|
payload: external_exports.string().min(2).max(MAX_RECORDED_EVENT_LENGTH),
|
|
21245
21217
|
sessionId: identifierStringSchema
|
|
21246
21218
|
}).readonly();
|
|
21247
|
-
var eventEnvelopeSchema = external_exports.union([ephemeralEventEnvelopeSchema, reliableSessionEventEnvelopeSchema]).readonly();
|
|
21248
|
-
var acknowledgementOutcomeSchema = external_exports.discriminatedUnion("kind", [
|
|
21249
|
-
external_exports.strictObject({ kind: external_exports.literal("relayed") }).readonly(),
|
|
21250
|
-
external_exports.strictObject({
|
|
21251
|
-
kind: external_exports.literal("recorded"),
|
|
21252
|
-
providerId: identifierStringSchema,
|
|
21253
|
-
recordingEpoch: identifierStringSchema
|
|
21254
|
-
}).readonly()
|
|
21255
|
-
]);
|
|
21256
|
-
var eventAcknowledgementSchema = external_exports.strictObject({
|
|
21257
|
-
eventId: identifierStringSchema,
|
|
21258
|
-
kind: external_exports.literal(SESSION_EVENT_ACK_KIND),
|
|
21259
|
-
outcome: acknowledgementOutcomeSchema,
|
|
21260
|
-
sessionId: identifierStringSchema
|
|
21261
|
-
}).readonly();
|
|
21262
|
-
var eventDeferredSchema = external_exports.strictObject({
|
|
21263
|
-
eventId: identifierStringSchema,
|
|
21264
|
-
kind: external_exports.literal(SESSION_EVENT_DEFERRED_KIND),
|
|
21265
|
-
retryAfterMilliseconds: external_exports.number().int().min(100).max(6e4),
|
|
21266
|
-
sessionId: identifierStringSchema
|
|
21267
|
-
}).readonly();
|
|
21268
|
-
var eventRejectedSchema = external_exports.strictObject({
|
|
21269
|
-
code: external_exports.enum(SessionEventRejectionCode),
|
|
21270
|
-
eventId: identifierStringSchema,
|
|
21271
|
-
kind: external_exports.literal(SESSION_EVENT_REJECTED_KIND),
|
|
21272
|
-
sessionId: identifierStringSchema
|
|
21273
|
-
}).readonly();
|
|
21274
21219
|
var SESSION_QUEUE_CHANGED_KIND = "session.queue.changed";
|
|
21275
21220
|
var sessionQueueChangedSchema = external_exports.strictObject({ kind: external_exports.literal(SESSION_QUEUE_CHANGED_KIND), sessionId: identifierStringSchema }).readonly();
|
|
21276
21221
|
var sessionForkedSchema = external_exports.strictObject({
|
|
@@ -21303,14 +21248,8 @@ var encode4 = (message, schema) => {
|
|
|
21303
21248
|
}
|
|
21304
21249
|
return JSON.stringify(decoded.data);
|
|
21305
21250
|
};
|
|
21306
|
-
var decodeSessionEventEnvelope = (encoded) => decode5(encoded,
|
|
21307
|
-
var encodeSessionEventEnvelope = (message) => encode4(message,
|
|
21308
|
-
var decodeSessionEventAcknowledgement = (encoded) => decode5(encoded, eventAcknowledgementSchema);
|
|
21309
|
-
var encodeSessionEventAcknowledgement = (message) => encode4(message, eventAcknowledgementSchema);
|
|
21310
|
-
var decodeSessionEventDeferred = (encoded) => decode5(encoded, eventDeferredSchema);
|
|
21311
|
-
var encodeSessionEventDeferred = (message) => encode4(message, eventDeferredSchema);
|
|
21312
|
-
var decodeSessionEventRejected = (encoded) => decode5(encoded, eventRejectedSchema);
|
|
21313
|
-
var encodeSessionEventRejected = (message) => encode4(message, eventRejectedSchema);
|
|
21251
|
+
var decodeSessionEventEnvelope = (encoded) => decode5(encoded, sessionEventEnvelopeSchema);
|
|
21252
|
+
var encodeSessionEventEnvelope = (message) => encode4(message, sessionEventEnvelopeSchema);
|
|
21314
21253
|
function decodeRecordedSessionEvent(encoded) {
|
|
21315
21254
|
const kind = decodeMessageKind(encoded);
|
|
21316
21255
|
switch (kind) {
|
|
@@ -21484,21 +21423,6 @@ var serviceToDaemonSignatures = {
|
|
|
21484
21423
|
encodeSessionElicitationRespondCommand,
|
|
21485
21424
|
decodeSessionElicitationRespondCommand
|
|
21486
21425
|
),
|
|
21487
|
-
[SESSION_EVENT_ACK_KIND]: defineMessageSignature(
|
|
21488
|
-
SESSION_EVENT_ACK_KIND,
|
|
21489
|
-
encodeSessionEventAcknowledgement,
|
|
21490
|
-
decodeSessionEventAcknowledgement
|
|
21491
|
-
),
|
|
21492
|
-
[SESSION_EVENT_DEFERRED_KIND]: defineMessageSignature(
|
|
21493
|
-
SESSION_EVENT_DEFERRED_KIND,
|
|
21494
|
-
encodeSessionEventDeferred,
|
|
21495
|
-
decodeSessionEventDeferred
|
|
21496
|
-
),
|
|
21497
|
-
[SESSION_EVENT_REJECTED_KIND]: defineMessageSignature(
|
|
21498
|
-
SESSION_EVENT_REJECTED_KIND,
|
|
21499
|
-
encodeSessionEventRejected,
|
|
21500
|
-
decodeSessionEventRejected
|
|
21501
|
-
),
|
|
21502
21426
|
[SESSION_LIVE_HISTORY_LOAD_KIND]: defineMessageSignature(
|
|
21503
21427
|
SESSION_LIVE_HISTORY_LOAD_KIND,
|
|
21504
21428
|
encodeSessionLiveHistoryLoad,
|
|
@@ -26793,7 +26717,7 @@ function createDaemonConfig(connection, agents = [], installableAgents = [], loc
|
|
|
26793
26717
|
}
|
|
26794
26718
|
|
|
26795
26719
|
// src/run-daemon.ts
|
|
26796
|
-
import { createHash as createHash5, randomUUID as
|
|
26720
|
+
import { createHash as createHash5, randomUUID as randomUUID6 } from "node:crypto";
|
|
26797
26721
|
import { join as join17 } from "node:path";
|
|
26798
26722
|
import { styleText } from "node:util";
|
|
26799
26723
|
|
|
@@ -42479,7 +42403,6 @@ async function runRelayConnection({
|
|
|
42479
42403
|
}) {
|
|
42480
42404
|
const relayUrl = new URL(config2.relayUrl);
|
|
42481
42405
|
relayUrl.searchParams.set("liveness", "1");
|
|
42482
|
-
relayUrl.searchParams.set("sessionEventDelivery", "reliable-v1");
|
|
42483
42406
|
const socket = await connectRelay(relayUrl, signal);
|
|
42484
42407
|
diagnostics.connectionOpened(connectionEpoch);
|
|
42485
42408
|
const connectionController = new AbortController();
|
|
@@ -42599,10 +42522,7 @@ async function runRelayConnection({
|
|
|
42599
42522
|
const message = decodeServiceToDaemonMessage(encoded);
|
|
42600
42523
|
const kind = message.kind;
|
|
42601
42524
|
if (kind === RUNTIME_LIVENESS_READY_KIND) {
|
|
42602
|
-
publisher.connect(
|
|
42603
|
-
socket,
|
|
42604
|
-
message.sessionEventDelivery === "reliable-v1" ? "reliable" : "ephemeral"
|
|
42605
|
-
);
|
|
42525
|
+
publisher.connect(socket);
|
|
42606
42526
|
connectionLiveness.start();
|
|
42607
42527
|
return;
|
|
42608
42528
|
}
|
|
@@ -42610,18 +42530,6 @@ async function runRelayConnection({
|
|
|
42610
42530
|
connectionLiveness.acknowledge(message);
|
|
42611
42531
|
return;
|
|
42612
42532
|
}
|
|
42613
|
-
if (kind === SESSION_EVENT_ACK_KIND) {
|
|
42614
|
-
publisher.acknowledge(message);
|
|
42615
|
-
return;
|
|
42616
|
-
}
|
|
42617
|
-
if (kind === SESSION_EVENT_DEFERRED_KIND) {
|
|
42618
|
-
publisher.defer(message);
|
|
42619
|
-
return;
|
|
42620
|
-
}
|
|
42621
|
-
if (kind === SESSION_EVENT_REJECTED_KIND) {
|
|
42622
|
-
publisher.reject(message);
|
|
42623
|
-
return;
|
|
42624
|
-
}
|
|
42625
42533
|
commands.handle(message);
|
|
42626
42534
|
} catch (error62) {
|
|
42627
42535
|
console.error("Mobius daemon rejected a message", error62);
|
|
@@ -42648,233 +42556,42 @@ async function runRelayConnection({
|
|
|
42648
42556
|
|
|
42649
42557
|
// src/relay-connection/session-event-publisher.ts
|
|
42650
42558
|
import { WebSocket as WebSocket9 } from "undici";
|
|
42651
|
-
|
|
42652
|
-
// src/relay-connection/session-event-queue.ts
|
|
42653
|
-
import { randomUUID as randomUUID6 } from "node:crypto";
|
|
42654
|
-
var STANDARD_EVENT_BYTES = 96 * 1024 * 1024;
|
|
42655
|
-
var CRITICAL_EVENT_BYTES = 128 * 1024 * 1024;
|
|
42656
|
-
var SessionEventQueueCapacityError = class extends Error {
|
|
42657
|
-
code = "session_event_queue_full";
|
|
42658
|
-
constructor() {
|
|
42659
|
-
super("The in-memory Session event queue is full");
|
|
42660
|
-
this.name = "SessionEventQueueCapacityError";
|
|
42661
|
-
}
|
|
42662
|
-
};
|
|
42663
|
-
var SessionEventQueue = class {
|
|
42664
|
-
#streamId = randomUUID6();
|
|
42665
|
-
#events = /* @__PURE__ */ new Map();
|
|
42666
|
-
#nextSourceSeq = 1;
|
|
42667
|
-
#totalBytes = 0;
|
|
42668
|
-
enqueueBatch = (sessionId, payloads, critical) => {
|
|
42669
|
-
if (payloads.length < 1 || payloads.length > 32) {
|
|
42670
|
-
throw new Error("A Session event batch must contain between 1 and 32 events");
|
|
42671
|
-
}
|
|
42672
|
-
if (!Number.isSafeInteger(this.#nextSourceSeq + payloads.length)) {
|
|
42673
|
-
throw new Error("The Session event source sequence is exhausted");
|
|
42674
|
-
}
|
|
42675
|
-
const entries = payloads.map((payload, index) => {
|
|
42676
|
-
const envelope2 = {
|
|
42677
|
-
delivery: {
|
|
42678
|
-
eventId: randomUUID6(),
|
|
42679
|
-
kind: "reliable",
|
|
42680
|
-
sourceSeq: (this.#nextSourceSeq + index).toString(),
|
|
42681
|
-
streamId: this.#streamId
|
|
42682
|
-
},
|
|
42683
|
-
kind: SESSION_EVENT_KIND,
|
|
42684
|
-
payload,
|
|
42685
|
-
sessionId
|
|
42686
|
-
};
|
|
42687
|
-
return { envelope: envelope2, byteLength: Buffer.byteLength(encodeSessionEventEnvelope(envelope2), "utf8") };
|
|
42688
|
-
});
|
|
42689
|
-
const byteLength = entries.reduce((total, entry) => total + entry.byteLength, 0);
|
|
42690
|
-
if (this.#totalBytes + byteLength > (critical ? CRITICAL_EVENT_BYTES : STANDARD_EVENT_BYTES)) {
|
|
42691
|
-
throw new SessionEventQueueCapacityError();
|
|
42692
|
-
}
|
|
42693
|
-
for (const entry of entries) {
|
|
42694
|
-
this.#events.set(entry.envelope.delivery.eventId, entry);
|
|
42695
|
-
}
|
|
42696
|
-
this.#nextSourceSeq += entries.length;
|
|
42697
|
-
this.#totalBytes += byteLength;
|
|
42698
|
-
};
|
|
42699
|
-
pending = (limit, excludedEventIds) => {
|
|
42700
|
-
const result = [];
|
|
42701
|
-
for (const [eventId, entry] of this.#events) {
|
|
42702
|
-
if (!excludedEventIds.has(eventId)) {
|
|
42703
|
-
result.push(entry.envelope);
|
|
42704
|
-
if (result.length === limit) {
|
|
42705
|
-
break;
|
|
42706
|
-
}
|
|
42707
|
-
}
|
|
42708
|
-
}
|
|
42709
|
-
return result;
|
|
42710
|
-
};
|
|
42711
|
-
remove = (eventId, sessionId) => {
|
|
42712
|
-
const entry = this.#events.get(eventId);
|
|
42713
|
-
if (entry === void 0 || entry.envelope.sessionId !== sessionId) {
|
|
42714
|
-
return false;
|
|
42715
|
-
}
|
|
42716
|
-
this.#events.delete(eventId);
|
|
42717
|
-
this.#totalBytes -= entry.byteLength;
|
|
42718
|
-
return true;
|
|
42719
|
-
};
|
|
42720
|
-
clear = () => {
|
|
42721
|
-
this.#events.clear();
|
|
42722
|
-
this.#totalBytes = 0;
|
|
42723
|
-
};
|
|
42724
|
-
};
|
|
42725
|
-
|
|
42726
|
-
// src/relay-connection/session-event-publisher.ts
|
|
42727
|
-
var SESSION_EVENT_REPLAY_WINDOW = 16;
|
|
42728
|
-
var SESSION_EVENT_REPLAY_BYTE_LIMIT = 32 * 1024 * 1024;
|
|
42729
|
-
function reservesSessionEventCapacity(event) {
|
|
42730
|
-
if (event.kind === SESSION_COMPLETED_KIND || event.kind === SESSION_FAILED_KIND || event.kind === SESSION_FORKED_KIND || event.kind === SESSION_READY_KIND) {
|
|
42731
|
-
return true;
|
|
42732
|
-
}
|
|
42733
|
-
return event.kind === AGENT_ACTIVITY_KIND && (event.activityType === "progress" || event.activityType === "reasoning") && (event.status === "completed" || event.status === "failed");
|
|
42734
|
-
}
|
|
42559
|
+
var MAX_BUFFERED_BYTES = 32 * 1024 * 1024;
|
|
42735
42560
|
var DaemonSessionEventPublisher = class {
|
|
42736
|
-
#
|
|
42737
|
-
|
|
42738
|
-
|
|
42739
|
-
#timer;
|
|
42740
|
-
#connection = { kind: "disconnected" };
|
|
42741
|
-
#deferredReplay = null;
|
|
42742
|
-
#inFlightBytes = 0;
|
|
42743
|
-
constructor(timer) {
|
|
42744
|
-
this.#timer = timer;
|
|
42745
|
-
}
|
|
42746
|
-
acknowledge = (acknowledgement) => {
|
|
42747
|
-
if (!this.#queue.remove(acknowledgement.eventId, acknowledgement.sessionId)) {
|
|
42748
|
-
return;
|
|
42749
|
-
}
|
|
42750
|
-
this.#removeInFlight(acknowledgement.eventId);
|
|
42751
|
-
this.#publishNextBatch();
|
|
42752
|
-
};
|
|
42753
|
-
close = () => {
|
|
42754
|
-
this.#deferredReplay?.cancel();
|
|
42755
|
-
this.#deferredReplay = null;
|
|
42756
|
-
this.#connection = { kind: "disconnected" };
|
|
42757
|
-
this.#clearInFlight();
|
|
42758
|
-
this.#queue.clear();
|
|
42759
|
-
};
|
|
42760
|
-
connect = (socket, delivery) => {
|
|
42761
|
-
this.#connection = { delivery, kind: "connected", socket };
|
|
42762
|
-
this.#clearInFlight();
|
|
42763
|
-
this.#publishNextBatch();
|
|
42764
|
-
};
|
|
42765
|
-
defer = (deferred) => {
|
|
42766
|
-
if (!this.#inFlight.has(deferred.eventId)) {
|
|
42767
|
-
return;
|
|
42768
|
-
}
|
|
42769
|
-
this.#clearInFlight();
|
|
42770
|
-
if (this.#deferredReplay !== null) {
|
|
42771
|
-
return;
|
|
42772
|
-
}
|
|
42773
|
-
this.#deferredReplay = this.#timer.schedule(() => {
|
|
42774
|
-
this.#deferredReplay = null;
|
|
42775
|
-
this.#publishNextBatch();
|
|
42776
|
-
}, deferred.retryAfterMilliseconds);
|
|
42561
|
+
#socket = null;
|
|
42562
|
+
connect = (socket) => {
|
|
42563
|
+
this.#socket = socket;
|
|
42777
42564
|
};
|
|
42778
42565
|
disconnect = (socket) => {
|
|
42779
|
-
if (this.#
|
|
42780
|
-
|
|
42781
|
-
}
|
|
42782
|
-
this.#connection = { kind: "disconnected" };
|
|
42783
|
-
this.#clearInFlight();
|
|
42784
|
-
};
|
|
42785
|
-
publish = (sessionId, event) => {
|
|
42786
|
-
try {
|
|
42787
|
-
this.#queue.enqueueBatch(
|
|
42788
|
-
sessionId,
|
|
42789
|
-
[encodeRecordedSessionEvent(event)],
|
|
42790
|
-
reservesSessionEventCapacity(event)
|
|
42791
|
-
);
|
|
42792
|
-
} catch (error62) {
|
|
42793
|
-
if (!(error62 instanceof SessionEventQueueCapacityError)) {
|
|
42794
|
-
throw error62;
|
|
42795
|
-
}
|
|
42796
|
-
if (!this.#reportedCapacityKinds.has(event.kind)) {
|
|
42797
|
-
this.#reportedCapacityKinds.add(event.kind);
|
|
42798
|
-
console.warn(`Mobius daemon could not buffer "${event.kind}" because the Session event queue is full`);
|
|
42799
|
-
}
|
|
42800
|
-
return;
|
|
42801
|
-
}
|
|
42802
|
-
this.#publishNextBatch();
|
|
42803
|
-
};
|
|
42804
|
-
publishBatch = (sessionId, events) => {
|
|
42805
|
-
const critical = events.some(reservesSessionEventCapacity);
|
|
42806
|
-
this.#queue.enqueueBatch(sessionId, events.map(encodeRecordedSessionEvent), critical);
|
|
42807
|
-
this.#publishNextBatch();
|
|
42808
|
-
};
|
|
42809
|
-
reject = (rejection) => {
|
|
42810
|
-
if (!this.#queue.remove(rejection.eventId, rejection.sessionId)) {
|
|
42811
|
-
return;
|
|
42566
|
+
if (this.#socket === socket) {
|
|
42567
|
+
this.#socket = null;
|
|
42812
42568
|
}
|
|
42813
|
-
this.#removeInFlight(rejection.eventId);
|
|
42814
|
-
console.error(`Mobius Relay rejected Session event ${rejection.eventId} with code ${rejection.code}`);
|
|
42815
|
-
this.#publishNextBatch();
|
|
42816
42569
|
};
|
|
42817
|
-
|
|
42818
|
-
this.#
|
|
42819
|
-
this.#inFlightBytes = 0;
|
|
42570
|
+
close = () => {
|
|
42571
|
+
this.#socket = null;
|
|
42820
42572
|
};
|
|
42821
|
-
|
|
42822
|
-
|
|
42573
|
+
publish = (sessionId, event) => {
|
|
42574
|
+
const socket = this.#socket;
|
|
42575
|
+
if (socket === null || socket.readyState !== WebSocket9.OPEN) {
|
|
42823
42576
|
return;
|
|
42824
42577
|
}
|
|
42825
|
-
|
|
42826
|
-
|
|
42827
|
-
|
|
42828
|
-
|
|
42829
|
-
|
|
42830
|
-
|
|
42831
|
-
|
|
42832
|
-
const encoded = encodeDaemonToServiceMessage(
|
|
42833
|
-
this.#connection.delivery === "reliable" ? envelope2 : {
|
|
42834
|
-
kind: envelope2.kind,
|
|
42835
|
-
payload: envelope2.payload,
|
|
42836
|
-
sessionId: envelope2.sessionId
|
|
42837
|
-
}
|
|
42838
|
-
);
|
|
42839
|
-
const byteLength = Buffer.byteLength(encoded, "utf8");
|
|
42840
|
-
if (this.#inFlightBytes + byteLength > SESSION_EVENT_REPLAY_BYTE_LIMIT) {
|
|
42841
|
-
return;
|
|
42842
|
-
}
|
|
42843
|
-
if (!this.#send(encoded)) {
|
|
42844
|
-
this.#clearInFlight();
|
|
42845
|
-
return;
|
|
42846
|
-
}
|
|
42847
|
-
if (this.#connection.delivery === "ephemeral") {
|
|
42848
|
-
this.#queue.remove(envelope2.delivery.eventId, envelope2.sessionId);
|
|
42849
|
-
sent += 1;
|
|
42850
|
-
continue;
|
|
42851
|
-
}
|
|
42852
|
-
this.#inFlight.set(envelope2.delivery.eventId, { byteLength });
|
|
42853
|
-
this.#inFlightBytes += byteLength;
|
|
42854
|
-
sent += 1;
|
|
42855
|
-
}
|
|
42856
|
-
if (sent === 0) {
|
|
42857
|
-
return;
|
|
42858
|
-
}
|
|
42859
|
-
}
|
|
42860
|
-
};
|
|
42861
|
-
#removeInFlight = (eventId) => {
|
|
42862
|
-
const inFlight = this.#inFlight.get(eventId);
|
|
42863
|
-
if (inFlight === void 0) {
|
|
42578
|
+
const encoded = encodeDaemonToServiceMessage({
|
|
42579
|
+
kind: SESSION_EVENT_KIND,
|
|
42580
|
+
payload: encodeRecordedSessionEvent(event),
|
|
42581
|
+
sessionId
|
|
42582
|
+
});
|
|
42583
|
+
if (socket.bufferedAmount + Buffer.byteLength(encoded, "utf8") > MAX_BUFFERED_BYTES) {
|
|
42584
|
+
socket.close(1013, "Live event transport overloaded");
|
|
42864
42585
|
return;
|
|
42865
42586
|
}
|
|
42866
|
-
this.#inFlight.delete(eventId);
|
|
42867
|
-
this.#inFlightBytes -= inFlight.byteLength;
|
|
42868
|
-
};
|
|
42869
|
-
#send = (encoded) => {
|
|
42870
|
-
if (this.#connection.kind !== "connected" || this.#connection.socket.readyState !== WebSocket9.OPEN) {
|
|
42871
|
-
return false;
|
|
42872
|
-
}
|
|
42873
42587
|
try {
|
|
42874
|
-
|
|
42875
|
-
return true;
|
|
42588
|
+
socket.send(encoded);
|
|
42876
42589
|
} catch {
|
|
42877
|
-
|
|
42590
|
+
}
|
|
42591
|
+
};
|
|
42592
|
+
publishBatch = (sessionId, events) => {
|
|
42593
|
+
for (const event of events) {
|
|
42594
|
+
this.publish(sessionId, event);
|
|
42878
42595
|
}
|
|
42879
42596
|
};
|
|
42880
42597
|
};
|
|
@@ -42936,7 +42653,7 @@ async function installDetectedAgentIntegrations(config2, installations, signal)
|
|
|
42936
42653
|
{
|
|
42937
42654
|
agentId: agent.id,
|
|
42938
42655
|
kind: AGENT_INSTALL_REQUEST_KIND,
|
|
42939
|
-
requestId: `automatic-integration-${
|
|
42656
|
+
requestId: `automatic-integration-${randomUUID6()}`
|
|
42940
42657
|
},
|
|
42941
42658
|
signal
|
|
42942
42659
|
);
|
|
@@ -42958,7 +42675,7 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
|
|
|
42958
42675
|
join17(stateDirectory, "sessions", `${createHash5("sha256").update(config2.channelId).digest("hex")}.sqlite`)
|
|
42959
42676
|
);
|
|
42960
42677
|
const operations = new DaemonOperationState();
|
|
42961
|
-
const publisher = new DaemonSessionEventPublisher(
|
|
42678
|
+
const publisher = new DaemonSessionEventPublisher();
|
|
42962
42679
|
const activeTurns = new DaemonTurnRegistry(operations);
|
|
42963
42680
|
const recordSessionEvent = (sessionId, event) => {
|
|
42964
42681
|
publisher.publish(sessionId, activeTurns.recordEvent(event));
|
|
@@ -43150,7 +42867,7 @@ import { basename as basename7, resolve as resolve7 } from "node:path";
|
|
|
43150
42867
|
import { fetch as fetch4 } from "undici";
|
|
43151
42868
|
|
|
43152
42869
|
// src/storage/runtime-installation-store.ts
|
|
43153
|
-
import { createHash as createHash6, randomUUID as
|
|
42870
|
+
import { createHash as createHash6, randomUUID as randomUUID7 } from "node:crypto";
|
|
43154
42871
|
import { mkdir as mkdir4, open as open5, readdir as readdir3, rename as rename3, unlink, writeFile as writeFile3 } from "node:fs/promises";
|
|
43155
42872
|
import { dirname as dirname5, join as join18, resolve as resolve6 } from "node:path";
|
|
43156
42873
|
var APPLICATION_ID_PATTERN = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+){1,31}$/;
|
|
@@ -43280,10 +42997,10 @@ function parseRelayOrigin(value) {
|
|
|
43280
42997
|
return origin;
|
|
43281
42998
|
}
|
|
43282
42999
|
function connectionId() {
|
|
43283
|
-
return `mcn_${
|
|
43000
|
+
return `mcn_${randomUUID7().replaceAll("-", "")}`;
|
|
43284
43001
|
}
|
|
43285
43002
|
function installationId() {
|
|
43286
|
-
return `min_${
|
|
43003
|
+
return `min_${randomUUID7().replaceAll("-", "")}`;
|
|
43287
43004
|
}
|
|
43288
43005
|
function channelIndexFileName(channelId) {
|
|
43289
43006
|
return `mci_${createHash6("sha256").update(channelId).digest("hex")}.json`;
|
|
@@ -43395,7 +43112,7 @@ async function readJsonFile(path2, signal, missingCode) {
|
|
|
43395
43112
|
async function writeJsonAtomically(path2, value, signal) {
|
|
43396
43113
|
signal.throwIfAborted();
|
|
43397
43114
|
const directory = dirname5(path2);
|
|
43398
|
-
const temporaryPath = join18(directory, `.${
|
|
43115
|
+
const temporaryPath = join18(directory, `.${randomUUID7()}.tmp`);
|
|
43399
43116
|
try {
|
|
43400
43117
|
await mkdir4(directory, { mode: 448, recursive: true });
|
|
43401
43118
|
signal.throwIfAborted();
|