@moxt-ai/mobius 0.0.149 → 0.0.150
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 +459 -40
- package/dist/cli.js.map +4 -4
- package/dist/daemon-turn-registry.d.ts +13 -13
- package/dist/index.js +458 -39
- 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 +15 -2
- package/dist/relay-connection/run-relay-connection.js.map +1 -1
- package/dist/relay-connection/session-event-outbox.d.ts +19 -0
- package/dist/relay-connection/session-event-outbox.d.ts.map +1 -0
- package/dist/relay-connection/session-event-outbox.js +228 -0
- package/dist/relay-connection/session-event-outbox.js.map +1 -0
- package/dist/relay-connection/session-event-publisher.d.ts +10 -4
- package/dist/relay-connection/session-event-publisher.d.ts.map +1 -1
- package/dist/relay-connection/session-event-publisher.js +140 -32
- package/dist/relay-connection/session-event-publisher.js.map +1 -1
- package/dist/run-daemon.d.ts.map +1 -1
- package/dist/run-daemon.js +3 -1
- package/dist/run-daemon.js.map +1 -1
- package/dist/runtime.js +464 -45
- package/dist/runtime.js.map +4 -4
- package/package.json +1 -1
package/dist/run-daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-daemon.js","sourceRoot":"","sources":["../src/run-daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-daemon.js","sourceRoot":"","sources":["../src/run-daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -20740,9 +20740,17 @@ function decodeSessionQueuedEvent(encoded) {
|
|
|
20740
20740
|
}
|
|
20741
20741
|
function decodeRuntimeLivenessReadyEvent(encoded) {
|
|
20742
20742
|
const value = parseJson2(encoded);
|
|
20743
|
-
assertExactKeys(value, ["kind"]);
|
|
20744
20743
|
assertKind(value, RUNTIME_LIVENESS_READY_KIND);
|
|
20745
|
-
|
|
20744
|
+
if (value["sessionEventDelivery"] === void 0) {
|
|
20745
|
+
assertExactKeys(value, ["kind"]);
|
|
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 };
|
|
20746
20754
|
}
|
|
20747
20755
|
function decodeRuntimeHeartbeatEvent(encoded) {
|
|
20748
20756
|
const value = parseJson2(encoded);
|
|
@@ -21192,12 +21200,59 @@ var encodeNativeSessionCancel = (value) => JSON.stringify(nativeSessionCancelSch
|
|
|
21192
21200
|
|
|
21193
21201
|
// ../protocol/src/session-events.ts
|
|
21194
21202
|
var SESSION_EVENT_KIND = "session.event";
|
|
21203
|
+
var SESSION_EVENT_ACK_KIND = "session.event.ack";
|
|
21204
|
+
var SESSION_EVENT_DEFERRED_KIND = "session.event.deferred";
|
|
21205
|
+
var SESSION_EVENT_REJECTED_KIND = "session.event.rejected";
|
|
21206
|
+
var SessionEventRejectionCode = {
|
|
21207
|
+
IdempotencyConflict: "idempotency_conflict",
|
|
21208
|
+
InvalidEvent: "invalid_event",
|
|
21209
|
+
RecordingRejected: "recording_rejected"
|
|
21210
|
+
};
|
|
21195
21211
|
var MAX_RECORDED_EVENT_LENGTH = 8 * 1024 * 1024;
|
|
21196
|
-
var
|
|
21212
|
+
var ephemeralEventEnvelopeSchema = external_exports.strictObject({
|
|
21197
21213
|
kind: external_exports.literal(SESSION_EVENT_KIND),
|
|
21198
21214
|
payload: external_exports.string().min(2).max(MAX_RECORDED_EVENT_LENGTH),
|
|
21199
21215
|
sessionId: identifierStringSchema
|
|
21200
21216
|
}).readonly();
|
|
21217
|
+
var reliableDeliverySchema = external_exports.strictObject({
|
|
21218
|
+
eventId: identifierStringSchema,
|
|
21219
|
+
kind: external_exports.literal("reliable"),
|
|
21220
|
+
sourceSeq: external_exports.string().regex(/^(?:0|[1-9][0-9]*)$/u).max(40),
|
|
21221
|
+
streamId: identifierStringSchema
|
|
21222
|
+
}).readonly();
|
|
21223
|
+
var reliableEventEnvelopeSchema = external_exports.strictObject({
|
|
21224
|
+
delivery: reliableDeliverySchema,
|
|
21225
|
+
kind: external_exports.literal(SESSION_EVENT_KIND),
|
|
21226
|
+
payload: external_exports.string().min(2).max(MAX_RECORDED_EVENT_LENGTH),
|
|
21227
|
+
sessionId: identifierStringSchema
|
|
21228
|
+
}).readonly();
|
|
21229
|
+
var eventEnvelopeSchema = external_exports.union([ephemeralEventEnvelopeSchema, reliableEventEnvelopeSchema]).readonly();
|
|
21230
|
+
var acknowledgementOutcomeSchema = external_exports.discriminatedUnion("kind", [
|
|
21231
|
+
external_exports.strictObject({ kind: external_exports.literal("relayed") }).readonly(),
|
|
21232
|
+
external_exports.strictObject({
|
|
21233
|
+
kind: external_exports.literal("recorded"),
|
|
21234
|
+
providerId: identifierStringSchema,
|
|
21235
|
+
recordingEpoch: identifierStringSchema
|
|
21236
|
+
}).readonly()
|
|
21237
|
+
]);
|
|
21238
|
+
var eventAcknowledgementSchema = external_exports.strictObject({
|
|
21239
|
+
eventId: identifierStringSchema,
|
|
21240
|
+
kind: external_exports.literal(SESSION_EVENT_ACK_KIND),
|
|
21241
|
+
outcome: acknowledgementOutcomeSchema,
|
|
21242
|
+
sessionId: identifierStringSchema
|
|
21243
|
+
}).readonly();
|
|
21244
|
+
var eventDeferredSchema = external_exports.strictObject({
|
|
21245
|
+
eventId: identifierStringSchema,
|
|
21246
|
+
kind: external_exports.literal(SESSION_EVENT_DEFERRED_KIND),
|
|
21247
|
+
retryAfterMilliseconds: external_exports.number().int().min(100).max(6e4),
|
|
21248
|
+
sessionId: identifierStringSchema
|
|
21249
|
+
}).readonly();
|
|
21250
|
+
var eventRejectedSchema = external_exports.strictObject({
|
|
21251
|
+
code: external_exports.enum(SessionEventRejectionCode),
|
|
21252
|
+
eventId: identifierStringSchema,
|
|
21253
|
+
kind: external_exports.literal(SESSION_EVENT_REJECTED_KIND),
|
|
21254
|
+
sessionId: identifierStringSchema
|
|
21255
|
+
}).readonly();
|
|
21201
21256
|
var SESSION_QUEUE_CHANGED_KIND = "session.queue.changed";
|
|
21202
21257
|
var sessionQueueChangedSchema = external_exports.strictObject({ kind: external_exports.literal(SESSION_QUEUE_CHANGED_KIND), sessionId: identifierStringSchema }).readonly();
|
|
21203
21258
|
function decode5(encoded, schema) {
|
|
@@ -21226,6 +21281,12 @@ var encode4 = (message, schema) => {
|
|
|
21226
21281
|
};
|
|
21227
21282
|
var decodeSessionEventEnvelope = (encoded) => decode5(encoded, eventEnvelopeSchema);
|
|
21228
21283
|
var encodeSessionEventEnvelope = (message) => encode4(message, eventEnvelopeSchema);
|
|
21284
|
+
var decodeSessionEventAcknowledgement = (encoded) => decode5(encoded, eventAcknowledgementSchema);
|
|
21285
|
+
var encodeSessionEventAcknowledgement = (message) => encode4(message, eventAcknowledgementSchema);
|
|
21286
|
+
var decodeSessionEventDeferred = (encoded) => decode5(encoded, eventDeferredSchema);
|
|
21287
|
+
var encodeSessionEventDeferred = (message) => encode4(message, eventDeferredSchema);
|
|
21288
|
+
var decodeSessionEventRejected = (encoded) => decode5(encoded, eventRejectedSchema);
|
|
21289
|
+
var encodeSessionEventRejected = (message) => encode4(message, eventRejectedSchema);
|
|
21229
21290
|
function decodeRecordedSessionEvent(encoded) {
|
|
21230
21291
|
const kind = decodeMessageKind(encoded);
|
|
21231
21292
|
switch (kind) {
|
|
@@ -21397,6 +21458,21 @@ var serviceToDaemonSignatures = {
|
|
|
21397
21458
|
encodeSessionElicitationRespondCommand,
|
|
21398
21459
|
decodeSessionElicitationRespondCommand
|
|
21399
21460
|
),
|
|
21461
|
+
[SESSION_EVENT_ACK_KIND]: defineMessageSignature(
|
|
21462
|
+
SESSION_EVENT_ACK_KIND,
|
|
21463
|
+
encodeSessionEventAcknowledgement,
|
|
21464
|
+
decodeSessionEventAcknowledgement
|
|
21465
|
+
),
|
|
21466
|
+
[SESSION_EVENT_DEFERRED_KIND]: defineMessageSignature(
|
|
21467
|
+
SESSION_EVENT_DEFERRED_KIND,
|
|
21468
|
+
encodeSessionEventDeferred,
|
|
21469
|
+
decodeSessionEventDeferred
|
|
21470
|
+
),
|
|
21471
|
+
[SESSION_EVENT_REJECTED_KIND]: defineMessageSignature(
|
|
21472
|
+
SESSION_EVENT_REJECTED_KIND,
|
|
21473
|
+
encodeSessionEventRejected,
|
|
21474
|
+
decodeSessionEventRejected
|
|
21475
|
+
),
|
|
21400
21476
|
[SESSION_LIVE_HISTORY_LOAD_KIND]: defineMessageSignature(
|
|
21401
21477
|
SESSION_LIVE_HISTORY_LOAD_KIND,
|
|
21402
21478
|
encodeSessionLiveHistoryLoad,
|
|
@@ -26691,7 +26767,7 @@ function createDaemonConfig(connection, agents = [], installableAgents = [], loc
|
|
|
26691
26767
|
}
|
|
26692
26768
|
|
|
26693
26769
|
// src/run-daemon.ts
|
|
26694
|
-
import { createHash as createHash5, randomUUID as
|
|
26770
|
+
import { createHash as createHash5, randomUUID as randomUUID7 } from "node:crypto";
|
|
26695
26771
|
import { join as join17 } from "node:path";
|
|
26696
26772
|
import { styleText } from "node:util";
|
|
26697
26773
|
|
|
@@ -42240,6 +42316,7 @@ async function runRelayConnection({
|
|
|
42240
42316
|
}) {
|
|
42241
42317
|
const relayUrl = new URL(config2.relayUrl);
|
|
42242
42318
|
relayUrl.searchParams.set("liveness", "1");
|
|
42319
|
+
relayUrl.searchParams.set("sessionEventDelivery", "reliable-v1");
|
|
42243
42320
|
const socket = await connectRelay(relayUrl, signal);
|
|
42244
42321
|
diagnostics.connectionOpened(connectionEpoch);
|
|
42245
42322
|
const connectionController = new AbortController();
|
|
@@ -42359,6 +42436,10 @@ async function runRelayConnection({
|
|
|
42359
42436
|
const message = decodeServiceToDaemonMessage(encoded);
|
|
42360
42437
|
const kind = message.kind;
|
|
42361
42438
|
if (kind === RUNTIME_LIVENESS_READY_KIND) {
|
|
42439
|
+
publisher.connect(
|
|
42440
|
+
socket,
|
|
42441
|
+
message.sessionEventDelivery === "reliable-v1" ? "reliable" : "ephemeral"
|
|
42442
|
+
);
|
|
42362
42443
|
connectionLiveness.start();
|
|
42363
42444
|
return;
|
|
42364
42445
|
}
|
|
@@ -42366,6 +42447,18 @@ async function runRelayConnection({
|
|
|
42366
42447
|
connectionLiveness.acknowledge(message);
|
|
42367
42448
|
return;
|
|
42368
42449
|
}
|
|
42450
|
+
if (kind === SESSION_EVENT_ACK_KIND) {
|
|
42451
|
+
publisher.acknowledge(message);
|
|
42452
|
+
return;
|
|
42453
|
+
}
|
|
42454
|
+
if (kind === SESSION_EVENT_DEFERRED_KIND) {
|
|
42455
|
+
publisher.defer(message);
|
|
42456
|
+
return;
|
|
42457
|
+
}
|
|
42458
|
+
if (kind === SESSION_EVENT_REJECTED_KIND) {
|
|
42459
|
+
publisher.quarantine(message);
|
|
42460
|
+
return;
|
|
42461
|
+
}
|
|
42369
42462
|
commands.handle(message);
|
|
42370
42463
|
} catch (error62) {
|
|
42371
42464
|
console.error("Mobius daemon rejected a message", error62);
|
|
@@ -42380,7 +42473,6 @@ async function runRelayConnection({
|
|
|
42380
42473
|
socket.addEventListener("close", handleClose);
|
|
42381
42474
|
socket.addEventListener("error", handleError);
|
|
42382
42475
|
socket.addEventListener("message", handleMessage);
|
|
42383
|
-
publisher.connect(socket);
|
|
42384
42476
|
if (signal.aborted) {
|
|
42385
42477
|
stop();
|
|
42386
42478
|
}
|
|
@@ -42391,54 +42483,377 @@ async function runRelayConnection({
|
|
|
42391
42483
|
}
|
|
42392
42484
|
}
|
|
42393
42485
|
|
|
42486
|
+
// src/relay-connection/session-event-outbox.ts
|
|
42487
|
+
import { randomUUID as randomUUID6 } from "node:crypto";
|
|
42488
|
+
import { mkdirSync as mkdirSync3 } from "node:fs";
|
|
42489
|
+
import { dirname as dirname5 } from "node:path";
|
|
42490
|
+
import { DatabaseSync } from "node:sqlite";
|
|
42491
|
+
var DEFAULT_STANDARD_EVENT_BYTES = 96 * 1024 * 1024;
|
|
42492
|
+
var DEFAULT_CRITICAL_EVENT_BYTES = 128 * 1024 * 1024;
|
|
42493
|
+
var MAX_DEAD_LETTERS = 1024;
|
|
42494
|
+
var DEFAULT_LIMITS = {
|
|
42495
|
+
criticalEventBytes: DEFAULT_CRITICAL_EVENT_BYTES,
|
|
42496
|
+
standardEventBytes: DEFAULT_STANDARD_EVENT_BYTES
|
|
42497
|
+
};
|
|
42498
|
+
var SessionEventOutboxCapacityError = class extends Error {
|
|
42499
|
+
code = "session_event_outbox_full";
|
|
42500
|
+
constructor() {
|
|
42501
|
+
super("The persistent Session event outbox is full");
|
|
42502
|
+
this.name = "SessionEventOutboxCapacityError";
|
|
42503
|
+
}
|
|
42504
|
+
};
|
|
42505
|
+
function rowNumber(row, field) {
|
|
42506
|
+
const value = typeof row === "object" && row !== null ? Reflect.get(row, field) : void 0;
|
|
42507
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
|
|
42508
|
+
throw new Error(`SQLite returned an invalid ${field} value`);
|
|
42509
|
+
}
|
|
42510
|
+
return value;
|
|
42511
|
+
}
|
|
42512
|
+
function rowString(row, field) {
|
|
42513
|
+
const value = typeof row === "object" && row !== null ? Reflect.get(row, field) : void 0;
|
|
42514
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
42515
|
+
throw new Error(`SQLite returned an invalid ${field} value`);
|
|
42516
|
+
}
|
|
42517
|
+
return value;
|
|
42518
|
+
}
|
|
42519
|
+
function validateLimits(limits) {
|
|
42520
|
+
if (!Number.isSafeInteger(limits.standardEventBytes) || limits.standardEventBytes < 1 || !Number.isSafeInteger(limits.criticalEventBytes) || limits.criticalEventBytes < limits.standardEventBytes) {
|
|
42521
|
+
throw new Error("Session event outbox limits are invalid");
|
|
42522
|
+
}
|
|
42523
|
+
}
|
|
42524
|
+
var SessionEventOutbox = class {
|
|
42525
|
+
#database;
|
|
42526
|
+
#limits;
|
|
42527
|
+
constructor(path2, limits = DEFAULT_LIMITS) {
|
|
42528
|
+
validateLimits(limits);
|
|
42529
|
+
mkdirSync3(dirname5(path2), { mode: 448, recursive: true });
|
|
42530
|
+
this.#limits = limits;
|
|
42531
|
+
this.#database = new DatabaseSync(path2);
|
|
42532
|
+
this.#database.exec("PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL; PRAGMA busy_timeout = 5000;");
|
|
42533
|
+
this.#database.exec(`
|
|
42534
|
+
CREATE TABLE IF NOT EXISTS relay_session_event_outbox (
|
|
42535
|
+
ordinal INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42536
|
+
event_id TEXT NOT NULL UNIQUE,
|
|
42537
|
+
session_id TEXT NOT NULL,
|
|
42538
|
+
source_seq INTEGER NOT NULL UNIQUE,
|
|
42539
|
+
byte_length INTEGER NOT NULL,
|
|
42540
|
+
envelope_json TEXT NOT NULL
|
|
42541
|
+
) STRICT;
|
|
42542
|
+
CREATE INDEX IF NOT EXISTS relay_session_event_outbox_order
|
|
42543
|
+
ON relay_session_event_outbox(source_seq);
|
|
42544
|
+
CREATE TABLE IF NOT EXISTS relay_session_event_outbox_state (
|
|
42545
|
+
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
42546
|
+
stream_id TEXT NOT NULL,
|
|
42547
|
+
next_source_seq INTEGER NOT NULL,
|
|
42548
|
+
total_bytes INTEGER NOT NULL
|
|
42549
|
+
) STRICT;
|
|
42550
|
+
CREATE TABLE IF NOT EXISTS relay_session_event_dead_letters (
|
|
42551
|
+
ordinal INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42552
|
+
event_id TEXT NOT NULL UNIQUE,
|
|
42553
|
+
session_id TEXT NOT NULL,
|
|
42554
|
+
rejection_code TEXT NOT NULL,
|
|
42555
|
+
envelope_json TEXT NOT NULL
|
|
42556
|
+
) STRICT;
|
|
42557
|
+
`);
|
|
42558
|
+
this.#database.prepare(
|
|
42559
|
+
`INSERT OR IGNORE INTO relay_session_event_outbox_state (
|
|
42560
|
+
singleton, stream_id, next_source_seq, total_bytes
|
|
42561
|
+
) VALUES (1, ?, 1, 0)`
|
|
42562
|
+
).run(randomUUID6());
|
|
42563
|
+
}
|
|
42564
|
+
acknowledge = (acknowledgement) => this.#remove(acknowledgement.eventId, acknowledgement.sessionId);
|
|
42565
|
+
close = () => {
|
|
42566
|
+
this.#database.close();
|
|
42567
|
+
};
|
|
42568
|
+
enqueue = (sessionId, payload, critical) => {
|
|
42569
|
+
this.#database.exec("BEGIN IMMEDIATE");
|
|
42570
|
+
try {
|
|
42571
|
+
const state = this.#database.prepare(
|
|
42572
|
+
`SELECT stream_id, next_source_seq, total_bytes
|
|
42573
|
+
FROM relay_session_event_outbox_state
|
|
42574
|
+
WHERE singleton = 1`
|
|
42575
|
+
).get();
|
|
42576
|
+
const sourceSeq = rowNumber(state, "next_source_seq");
|
|
42577
|
+
if (sourceSeq < 1 || !Number.isSafeInteger(sourceSeq + 1)) {
|
|
42578
|
+
throw new Error("The Session event source sequence is exhausted");
|
|
42579
|
+
}
|
|
42580
|
+
const envelope2 = {
|
|
42581
|
+
delivery: {
|
|
42582
|
+
eventId: randomUUID6(),
|
|
42583
|
+
kind: "reliable",
|
|
42584
|
+
sourceSeq: sourceSeq.toString(),
|
|
42585
|
+
streamId: rowString(state, "stream_id")
|
|
42586
|
+
},
|
|
42587
|
+
kind: SESSION_EVENT_KIND,
|
|
42588
|
+
payload,
|
|
42589
|
+
sessionId
|
|
42590
|
+
};
|
|
42591
|
+
const encoded = encodeSessionEventEnvelope(envelope2);
|
|
42592
|
+
const byteLength = Buffer.byteLength(encoded, "utf8");
|
|
42593
|
+
const maximumBytes = critical ? this.#limits.criticalEventBytes : this.#limits.standardEventBytes;
|
|
42594
|
+
if (rowNumber(state, "total_bytes") + byteLength > maximumBytes) {
|
|
42595
|
+
throw new SessionEventOutboxCapacityError();
|
|
42596
|
+
}
|
|
42597
|
+
this.#database.prepare(
|
|
42598
|
+
`INSERT INTO relay_session_event_outbox (
|
|
42599
|
+
event_id, session_id, source_seq, byte_length, envelope_json
|
|
42600
|
+
) VALUES (?, ?, ?, ?, ?)`
|
|
42601
|
+
).run(envelope2.delivery.eventId, sessionId, sourceSeq, byteLength, encoded);
|
|
42602
|
+
this.#database.prepare(
|
|
42603
|
+
`UPDATE relay_session_event_outbox_state
|
|
42604
|
+
SET next_source_seq = next_source_seq + 1,
|
|
42605
|
+
total_bytes = total_bytes + ?
|
|
42606
|
+
WHERE singleton = 1`
|
|
42607
|
+
).run(byteLength);
|
|
42608
|
+
this.#database.exec("COMMIT");
|
|
42609
|
+
return envelope2;
|
|
42610
|
+
} catch (error62) {
|
|
42611
|
+
this.#database.exec("ROLLBACK");
|
|
42612
|
+
throw error62;
|
|
42613
|
+
}
|
|
42614
|
+
};
|
|
42615
|
+
pending = (limit, excludedEventIds) => {
|
|
42616
|
+
if (!Number.isSafeInteger(limit) || limit < 1) {
|
|
42617
|
+
throw new Error("Session event replay limit must be a positive integer");
|
|
42618
|
+
}
|
|
42619
|
+
const exclusion = excludedEventIds.length === 0 ? "" : `WHERE event_id NOT IN (${excludedEventIds.map(() => "?").join(", ")})`;
|
|
42620
|
+
return this.#database.prepare(
|
|
42621
|
+
`SELECT envelope_json
|
|
42622
|
+
FROM relay_session_event_outbox
|
|
42623
|
+
${exclusion}
|
|
42624
|
+
ORDER BY source_seq
|
|
42625
|
+
LIMIT ?`
|
|
42626
|
+
).all(...excludedEventIds, limit).map((row) => {
|
|
42627
|
+
const envelope2 = decodeSessionEventEnvelope(rowString(row, "envelope_json"));
|
|
42628
|
+
if (!("delivery" in envelope2)) {
|
|
42629
|
+
throw new Error("SQLite returned an invalid reliable Session event envelope");
|
|
42630
|
+
}
|
|
42631
|
+
return envelope2;
|
|
42632
|
+
});
|
|
42633
|
+
};
|
|
42634
|
+
quarantine = (rejection) => {
|
|
42635
|
+
this.#database.exec("BEGIN IMMEDIATE");
|
|
42636
|
+
try {
|
|
42637
|
+
const stored = this.#database.prepare(
|
|
42638
|
+
`SELECT byte_length, envelope_json
|
|
42639
|
+
FROM relay_session_event_outbox
|
|
42640
|
+
WHERE event_id = ? AND session_id = ?`
|
|
42641
|
+
).get(rejection.eventId, rejection.sessionId);
|
|
42642
|
+
if (stored === void 0) {
|
|
42643
|
+
this.#database.exec("COMMIT");
|
|
42644
|
+
return false;
|
|
42645
|
+
}
|
|
42646
|
+
this.#database.prepare(
|
|
42647
|
+
`INSERT INTO relay_session_event_dead_letters (
|
|
42648
|
+
event_id, session_id, rejection_code, envelope_json
|
|
42649
|
+
) VALUES (?, ?, ?, ?)`
|
|
42650
|
+
).run(rejection.eventId, rejection.sessionId, rejection.code, rowString(stored, "envelope_json"));
|
|
42651
|
+
this.#deleteStored(rejection.eventId, rejection.sessionId, rowNumber(stored, "byte_length"));
|
|
42652
|
+
this.#database.prepare(
|
|
42653
|
+
`DELETE FROM relay_session_event_dead_letters
|
|
42654
|
+
WHERE ordinal NOT IN (
|
|
42655
|
+
SELECT ordinal FROM relay_session_event_dead_letters
|
|
42656
|
+
ORDER BY ordinal DESC LIMIT ?
|
|
42657
|
+
)`
|
|
42658
|
+
).run(MAX_DEAD_LETTERS);
|
|
42659
|
+
this.#database.exec("COMMIT");
|
|
42660
|
+
return true;
|
|
42661
|
+
} catch (error62) {
|
|
42662
|
+
this.#database.exec("ROLLBACK");
|
|
42663
|
+
throw error62;
|
|
42664
|
+
}
|
|
42665
|
+
};
|
|
42666
|
+
#deleteStored = (eventId, sessionId, byteLength) => {
|
|
42667
|
+
const deletion = this.#database.prepare(
|
|
42668
|
+
`DELETE FROM relay_session_event_outbox
|
|
42669
|
+
WHERE event_id = ? AND session_id = ?`
|
|
42670
|
+
).run(eventId, sessionId);
|
|
42671
|
+
if (deletion.changes !== 1) {
|
|
42672
|
+
throw new Error("The Session event could not be removed from the outbox");
|
|
42673
|
+
}
|
|
42674
|
+
const state = this.#database.prepare(
|
|
42675
|
+
`UPDATE relay_session_event_outbox_state
|
|
42676
|
+
SET total_bytes = total_bytes - ?
|
|
42677
|
+
WHERE singleton = 1 AND total_bytes >= ?`
|
|
42678
|
+
).run(byteLength, byteLength);
|
|
42679
|
+
if (state.changes !== 1) {
|
|
42680
|
+
throw new Error("The Session event outbox capacity state is inconsistent");
|
|
42681
|
+
}
|
|
42682
|
+
};
|
|
42683
|
+
#remove = (eventId, sessionId) => {
|
|
42684
|
+
this.#database.exec("BEGIN IMMEDIATE");
|
|
42685
|
+
try {
|
|
42686
|
+
const stored = this.#database.prepare(
|
|
42687
|
+
`SELECT byte_length
|
|
42688
|
+
FROM relay_session_event_outbox
|
|
42689
|
+
WHERE event_id = ? AND session_id = ?`
|
|
42690
|
+
).get(eventId, sessionId);
|
|
42691
|
+
if (stored === void 0) {
|
|
42692
|
+
this.#database.exec("COMMIT");
|
|
42693
|
+
return false;
|
|
42694
|
+
}
|
|
42695
|
+
this.#deleteStored(eventId, sessionId, rowNumber(stored, "byte_length"));
|
|
42696
|
+
this.#database.exec("COMMIT");
|
|
42697
|
+
return true;
|
|
42698
|
+
} catch (error62) {
|
|
42699
|
+
this.#database.exec("ROLLBACK");
|
|
42700
|
+
throw error62;
|
|
42701
|
+
}
|
|
42702
|
+
};
|
|
42703
|
+
};
|
|
42704
|
+
|
|
42394
42705
|
// src/relay-connection/session-event-publisher.ts
|
|
42395
42706
|
import { WebSocket as WebSocket9 } from "undici";
|
|
42396
|
-
var
|
|
42707
|
+
var SESSION_EVENT_REPLAY_WINDOW = 16;
|
|
42708
|
+
var SESSION_EVENT_REPLAY_BYTE_LIMIT = 32 * 1024 * 1024;
|
|
42709
|
+
function reservesSessionEventCapacity(event) {
|
|
42710
|
+
if (event.kind === SESSION_COMPLETED_KIND || event.kind === SESSION_FAILED_KIND) {
|
|
42711
|
+
return true;
|
|
42712
|
+
}
|
|
42713
|
+
return event.kind === AGENT_ACTIVITY_KIND && (event.activityType === "progress" || event.activityType === "reasoning") && (event.status === "completed" || event.status === "failed");
|
|
42714
|
+
}
|
|
42397
42715
|
var DaemonSessionEventPublisher = class {
|
|
42398
|
-
#
|
|
42399
|
-
#
|
|
42400
|
-
|
|
42401
|
-
|
|
42402
|
-
|
|
42716
|
+
#inFlight = /* @__PURE__ */ new Map();
|
|
42717
|
+
#outbox;
|
|
42718
|
+
#reportedCapacityKinds = /* @__PURE__ */ new Set();
|
|
42719
|
+
#timer;
|
|
42720
|
+
#connection = { kind: "disconnected" };
|
|
42721
|
+
#deferredReplay = null;
|
|
42722
|
+
#inFlightBytes = 0;
|
|
42723
|
+
constructor(outbox, timer) {
|
|
42724
|
+
this.#outbox = outbox;
|
|
42725
|
+
this.#timer = timer;
|
|
42726
|
+
}
|
|
42727
|
+
acknowledge = (acknowledgement) => {
|
|
42728
|
+
if (!this.#outbox.acknowledge(acknowledgement)) {
|
|
42729
|
+
return;
|
|
42730
|
+
}
|
|
42731
|
+
this.#removeInFlight(acknowledgement.eventId);
|
|
42732
|
+
this.#publishNextBatch();
|
|
42733
|
+
};
|
|
42734
|
+
close = () => {
|
|
42735
|
+
this.#deferredReplay?.cancel();
|
|
42736
|
+
this.#deferredReplay = null;
|
|
42737
|
+
this.#connection = { kind: "disconnected" };
|
|
42738
|
+
this.#clearInFlight();
|
|
42739
|
+
this.#outbox.close();
|
|
42740
|
+
};
|
|
42741
|
+
connect = (socket, delivery) => {
|
|
42742
|
+
this.#connection = { delivery, kind: "connected", socket };
|
|
42743
|
+
this.#clearInFlight();
|
|
42744
|
+
this.#publishNextBatch();
|
|
42745
|
+
};
|
|
42746
|
+
defer = (deferred) => {
|
|
42747
|
+
if (!this.#inFlight.has(deferred.eventId)) {
|
|
42748
|
+
return;
|
|
42749
|
+
}
|
|
42750
|
+
this.#clearInFlight();
|
|
42751
|
+
if (this.#deferredReplay !== null) {
|
|
42752
|
+
return;
|
|
42753
|
+
}
|
|
42754
|
+
this.#deferredReplay = this.#timer.schedule(() => {
|
|
42755
|
+
this.#deferredReplay = null;
|
|
42756
|
+
this.#publishNextBatch();
|
|
42757
|
+
}, deferred.retryAfterMilliseconds);
|
|
42403
42758
|
};
|
|
42404
42759
|
disconnect = (socket) => {
|
|
42405
|
-
if (this.#socket
|
|
42406
|
-
|
|
42760
|
+
if (this.#connection.kind !== "connected" || this.#connection.socket !== socket) {
|
|
42761
|
+
return;
|
|
42407
42762
|
}
|
|
42763
|
+
this.#connection = { kind: "disconnected" };
|
|
42764
|
+
this.#clearInFlight();
|
|
42408
42765
|
};
|
|
42409
42766
|
publish = (sessionId, event) => {
|
|
42410
|
-
|
|
42411
|
-
|
|
42412
|
-
|
|
42767
|
+
try {
|
|
42768
|
+
this.#outbox.enqueue(sessionId, encodeRecordedSessionEvent(event), reservesSessionEventCapacity(event));
|
|
42769
|
+
} catch (error62) {
|
|
42770
|
+
if (!(error62 instanceof SessionEventOutboxCapacityError)) {
|
|
42771
|
+
throw error62;
|
|
42772
|
+
}
|
|
42773
|
+
if (!this.#reportedCapacityKinds.has(event.kind)) {
|
|
42774
|
+
this.#reportedCapacityKinds.add(event.kind);
|
|
42775
|
+
console.warn(
|
|
42776
|
+
`Mobius daemon could not persist "${event.kind}" because the Session event outbox is full`
|
|
42777
|
+
);
|
|
42778
|
+
}
|
|
42413
42779
|
return;
|
|
42414
42780
|
}
|
|
42415
|
-
|
|
42416
|
-
|
|
42417
|
-
|
|
42418
|
-
|
|
42781
|
+
this.#publishNextBatch();
|
|
42782
|
+
};
|
|
42783
|
+
quarantine = (rejection) => {
|
|
42784
|
+
if (!this.#outbox.quarantine(rejection)) {
|
|
42419
42785
|
return;
|
|
42420
42786
|
}
|
|
42421
|
-
|
|
42422
|
-
|
|
42423
|
-
|
|
42424
|
-
kind: SESSION_EVENT_KIND,
|
|
42425
|
-
payload: encodeRecordedSessionEvent(event),
|
|
42426
|
-
sessionId
|
|
42427
|
-
})
|
|
42428
|
-
);
|
|
42429
|
-
} catch {
|
|
42430
|
-
this.#reportDrop();
|
|
42431
|
-
}
|
|
42787
|
+
this.#removeInFlight(rejection.eventId);
|
|
42788
|
+
console.error(`Mobius Relay rejected Session event ${rejection.eventId} with code ${rejection.code}`);
|
|
42789
|
+
this.#publishNextBatch();
|
|
42432
42790
|
};
|
|
42433
|
-
|
|
42434
|
-
this.#
|
|
42791
|
+
#clearInFlight = () => {
|
|
42792
|
+
this.#inFlight.clear();
|
|
42793
|
+
this.#inFlightBytes = 0;
|
|
42794
|
+
};
|
|
42795
|
+
#publishNextBatch = () => {
|
|
42796
|
+
if (this.#deferredReplay !== null || this.#connection.kind !== "connected") {
|
|
42797
|
+
return;
|
|
42798
|
+
}
|
|
42799
|
+
while (this.#inFlight.size < SESSION_EVENT_REPLAY_WINDOW) {
|
|
42800
|
+
const batch = this.#outbox.pending(SESSION_EVENT_REPLAY_WINDOW - this.#inFlight.size, [
|
|
42801
|
+
...this.#inFlight.keys()
|
|
42802
|
+
]);
|
|
42803
|
+
let sent = 0;
|
|
42804
|
+
for (const envelope2 of batch) {
|
|
42805
|
+
const encoded = encodeDaemonToServiceMessage(
|
|
42806
|
+
this.#connection.delivery === "reliable" ? envelope2 : {
|
|
42807
|
+
kind: envelope2.kind,
|
|
42808
|
+
payload: envelope2.payload,
|
|
42809
|
+
sessionId: envelope2.sessionId
|
|
42810
|
+
}
|
|
42811
|
+
);
|
|
42812
|
+
const byteLength = Buffer.byteLength(encoded, "utf8");
|
|
42813
|
+
if (this.#inFlightBytes + byteLength > SESSION_EVENT_REPLAY_BYTE_LIMIT) {
|
|
42814
|
+
return;
|
|
42815
|
+
}
|
|
42816
|
+
if (!this.#send(encoded)) {
|
|
42817
|
+
this.#clearInFlight();
|
|
42818
|
+
return;
|
|
42819
|
+
}
|
|
42820
|
+
if (this.#connection.delivery === "ephemeral") {
|
|
42821
|
+
this.#outbox.acknowledge({
|
|
42822
|
+
eventId: envelope2.delivery.eventId,
|
|
42823
|
+
kind: "session.event.ack",
|
|
42824
|
+
outcome: { kind: "relayed" },
|
|
42825
|
+
sessionId: envelope2.sessionId
|
|
42826
|
+
});
|
|
42827
|
+
sent += 1;
|
|
42828
|
+
continue;
|
|
42829
|
+
}
|
|
42830
|
+
this.#inFlight.set(envelope2.delivery.eventId, { byteLength });
|
|
42831
|
+
this.#inFlightBytes += byteLength;
|
|
42832
|
+
sent += 1;
|
|
42833
|
+
}
|
|
42834
|
+
if (sent === 0) {
|
|
42835
|
+
return;
|
|
42836
|
+
}
|
|
42837
|
+
}
|
|
42435
42838
|
};
|
|
42436
|
-
#
|
|
42437
|
-
|
|
42839
|
+
#removeInFlight = (eventId) => {
|
|
42840
|
+
const inFlight = this.#inFlight.get(eventId);
|
|
42841
|
+
if (inFlight === void 0) {
|
|
42438
42842
|
return;
|
|
42439
42843
|
}
|
|
42440
|
-
this.#
|
|
42441
|
-
|
|
42844
|
+
this.#inFlight.delete(eventId);
|
|
42845
|
+
this.#inFlightBytes -= inFlight.byteLength;
|
|
42846
|
+
};
|
|
42847
|
+
#send = (encoded) => {
|
|
42848
|
+
if (this.#connection.kind !== "connected" || this.#connection.socket.readyState !== WebSocket9.OPEN) {
|
|
42849
|
+
return false;
|
|
42850
|
+
}
|
|
42851
|
+
try {
|
|
42852
|
+
this.#connection.socket.send(encoded);
|
|
42853
|
+
return true;
|
|
42854
|
+
} catch {
|
|
42855
|
+
return false;
|
|
42856
|
+
}
|
|
42442
42857
|
};
|
|
42443
42858
|
};
|
|
42444
42859
|
|
|
@@ -42499,7 +42914,7 @@ async function installDetectedAgentIntegrations(config2, installations, signal)
|
|
|
42499
42914
|
{
|
|
42500
42915
|
agentId: agent.id,
|
|
42501
42916
|
kind: AGENT_INSTALL_REQUEST_KIND,
|
|
42502
|
-
requestId: `automatic-integration-${
|
|
42917
|
+
requestId: `automatic-integration-${randomUUID7()}`
|
|
42503
42918
|
},
|
|
42504
42919
|
signal
|
|
42505
42920
|
);
|
|
@@ -42521,7 +42936,11 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
|
|
|
42521
42936
|
join17(stateDirectory, "sessions", `${createHash5("sha256").update(config2.channelId).digest("hex")}.sqlite`)
|
|
42522
42937
|
);
|
|
42523
42938
|
const operations = new DaemonOperationState();
|
|
42524
|
-
const
|
|
42939
|
+
const channelHash = createHash5("sha256").update(config2.channelId).digest("hex");
|
|
42940
|
+
const publisher = new DaemonSessionEventPublisher(
|
|
42941
|
+
new SessionEventOutbox(join17(stateDirectory, "events", `${channelHash}.sqlite`)),
|
|
42942
|
+
timer
|
|
42943
|
+
);
|
|
42525
42944
|
const activeTurns = new DaemonTurnRegistry(operations);
|
|
42526
42945
|
const recordSessionEvent = (sessionId, event) => {
|
|
42527
42946
|
publisher.publish(sessionId, activeTurns.recordEvent(event));
|
|
@@ -42713,9 +43132,9 @@ import { basename as basename6, resolve as resolve7 } from "node:path";
|
|
|
42713
43132
|
import { fetch as fetch4 } from "undici";
|
|
42714
43133
|
|
|
42715
43134
|
// src/storage/runtime-installation-store.ts
|
|
42716
|
-
import { createHash as createHash6, randomUUID as
|
|
43135
|
+
import { createHash as createHash6, randomUUID as randomUUID8 } from "node:crypto";
|
|
42717
43136
|
import { mkdir as mkdir4, open as open5, readdir as readdir3, rename as rename3, unlink, writeFile as writeFile3 } from "node:fs/promises";
|
|
42718
|
-
import { dirname as
|
|
43137
|
+
import { dirname as dirname6, join as join18, resolve as resolve6 } from "node:path";
|
|
42719
43138
|
var APPLICATION_ID_PATTERN = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+){1,31}$/;
|
|
42720
43139
|
var CONNECTION_ID_PATTERN = /^mcn_[a-f0-9]{32}$/;
|
|
42721
43140
|
var INSTALLATION_ID_PATTERN = /^min_[a-f0-9]{32}$/;
|
|
@@ -42843,10 +43262,10 @@ function parseRelayOrigin(value) {
|
|
|
42843
43262
|
return origin;
|
|
42844
43263
|
}
|
|
42845
43264
|
function connectionId() {
|
|
42846
|
-
return `mcn_${
|
|
43265
|
+
return `mcn_${randomUUID8().replaceAll("-", "")}`;
|
|
42847
43266
|
}
|
|
42848
43267
|
function installationId() {
|
|
42849
|
-
return `min_${
|
|
43268
|
+
return `min_${randomUUID8().replaceAll("-", "")}`;
|
|
42850
43269
|
}
|
|
42851
43270
|
function channelIndexFileName(channelId) {
|
|
42852
43271
|
return `mci_${createHash6("sha256").update(channelId).digest("hex")}.json`;
|
|
@@ -42957,8 +43376,8 @@ async function readJsonFile(path2, signal, missingCode) {
|
|
|
42957
43376
|
}
|
|
42958
43377
|
async function writeJsonAtomically(path2, value, signal) {
|
|
42959
43378
|
signal.throwIfAborted();
|
|
42960
|
-
const directory =
|
|
42961
|
-
const temporaryPath = join18(directory, `.${
|
|
43379
|
+
const directory = dirname6(path2);
|
|
43380
|
+
const temporaryPath = join18(directory, `.${randomUUID8()}.tmp`);
|
|
42962
43381
|
try {
|
|
42963
43382
|
await mkdir4(directory, { mode: 448, recursive: true });
|
|
42964
43383
|
signal.throwIfAborted();
|