@moxt-ai/mobius 0.0.19 → 0.0.21
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 +125 -0
- package/dist/cli.js.map +4 -4
- package/dist/index.js +64 -0
- package/dist/index.js.map +3 -3
- package/dist/relay-connection/session-event-outbox.d.ts +2 -1
- package/dist/relay-connection/session-event-outbox.d.ts.map +1 -1
- package/dist/relay-connection/session-event-outbox.js +39 -0
- package/dist/relay-connection/session-event-outbox.js.map +1 -1
- package/dist/run-daemon.d.ts.map +1 -1
- package/dist/run-daemon.js +16 -1
- package/dist/run-daemon.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -19885,6 +19885,11 @@ var decodeNativeSessionCancel = (encoded) => decode4(nativeSessionCancelSchema,
|
|
|
19885
19885
|
var SESSION_EVENT_KIND = "session.event";
|
|
19886
19886
|
var SESSION_EVENT_ACK_KIND = "session.event.ack";
|
|
19887
19887
|
var SESSION_EVENT_COMMITTED_KIND = "session.event.committed";
|
|
19888
|
+
var SESSION_EVENT_REJECTED_KIND = "session.event.rejected";
|
|
19889
|
+
var SessionEventRejectionCode = {
|
|
19890
|
+
SessionDeleted: "session_deleted",
|
|
19891
|
+
SessionNotFound: "session_not_found"
|
|
19892
|
+
};
|
|
19888
19893
|
var IDENTIFIER_PATTERN3 = /^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,127}$/;
|
|
19889
19894
|
var CURSOR_PATTERN = /^[A-Za-z0-9_-]{1,512}$/;
|
|
19890
19895
|
var MAX_RECORDED_EVENT_LENGTH = 8 * 1024 * 1024;
|
|
@@ -19925,6 +19930,12 @@ var eventAcknowledgementSchema = external_exports.strictObject({
|
|
|
19925
19930
|
sequence: external_exports.string().min(1).max(40).regex(DECIMAL_SEQUENCE_PATTERN),
|
|
19926
19931
|
sessionId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3)
|
|
19927
19932
|
}).readonly();
|
|
19933
|
+
var eventRejectionSchema = external_exports.strictObject({
|
|
19934
|
+
code: external_exports.enum(SessionEventRejectionCode),
|
|
19935
|
+
eventId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3),
|
|
19936
|
+
kind: external_exports.literal(SESSION_EVENT_REJECTED_KIND),
|
|
19937
|
+
sessionId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3)
|
|
19938
|
+
}).readonly();
|
|
19928
19939
|
function decode5(encoded, schema) {
|
|
19929
19940
|
let value;
|
|
19930
19941
|
try {
|
|
@@ -19951,6 +19962,7 @@ var encode4 = (message, schema) => {
|
|
|
19951
19962
|
};
|
|
19952
19963
|
var encodeSessionEventEnvelope = (message) => encode4(message, eventEnvelopeSchema);
|
|
19953
19964
|
var decodeSessionEventAcknowledgement = (encoded) => decode5(encoded, eventAcknowledgementSchema);
|
|
19965
|
+
var decodeSessionEventRejection = (encoded) => decode5(encoded, eventRejectionSchema);
|
|
19954
19966
|
|
|
19955
19967
|
// src/agent-catalog/local-agent.ts
|
|
19956
19968
|
import { realpathSync, statSync } from "node:fs";
|
|
@@ -27531,6 +27543,15 @@ var SessionEventOutbox = class {
|
|
|
27531
27543
|
) STRICT;
|
|
27532
27544
|
CREATE INDEX IF NOT EXISTS relay_session_event_outbox_order
|
|
27533
27545
|
ON relay_session_event_outbox(ordinal);
|
|
27546
|
+
CREATE TABLE IF NOT EXISTS relay_session_event_dead_letters (
|
|
27547
|
+
ordinal INTEGER PRIMARY KEY,
|
|
27548
|
+
event_id TEXT NOT NULL UNIQUE,
|
|
27549
|
+
session_id TEXT NOT NULL,
|
|
27550
|
+
envelope_json TEXT NOT NULL,
|
|
27551
|
+
rejection_code TEXT NOT NULL CHECK (
|
|
27552
|
+
rejection_code IN ('session_deleted', 'session_not_found')
|
|
27553
|
+
)
|
|
27554
|
+
) STRICT;
|
|
27534
27555
|
CREATE TABLE IF NOT EXISTS relay_session_event_sources (
|
|
27535
27556
|
source_key TEXT PRIMARY KEY,
|
|
27536
27557
|
next_source_seq INTEGER NOT NULL
|
|
@@ -27603,6 +27624,35 @@ var SessionEventOutbox = class {
|
|
|
27603
27624
|
WHERE event_id = ? AND session_id = ?`
|
|
27604
27625
|
).run(acknowledgement.eventId, acknowledgement.sessionId);
|
|
27605
27626
|
};
|
|
27627
|
+
quarantine = (rejection) => {
|
|
27628
|
+
this.#database.exec("BEGIN IMMEDIATE");
|
|
27629
|
+
try {
|
|
27630
|
+
const insertion = this.#database.prepare(
|
|
27631
|
+
`INSERT INTO relay_session_event_dead_letters (
|
|
27632
|
+
ordinal, event_id, session_id, envelope_json, rejection_code
|
|
27633
|
+
)
|
|
27634
|
+
SELECT ordinal, event_id, session_id, envelope_json, ?
|
|
27635
|
+
FROM relay_session_event_outbox
|
|
27636
|
+
WHERE event_id = ? AND session_id = ?`
|
|
27637
|
+
).run(rejection.code, rejection.eventId, rejection.sessionId);
|
|
27638
|
+
if (insertion.changes !== 1) {
|
|
27639
|
+
this.#database.exec("COMMIT");
|
|
27640
|
+
return false;
|
|
27641
|
+
}
|
|
27642
|
+
const deletion = this.#database.prepare(
|
|
27643
|
+
`DELETE FROM relay_session_event_outbox
|
|
27644
|
+
WHERE event_id = ? AND session_id = ?`
|
|
27645
|
+
).run(rejection.eventId, rejection.sessionId);
|
|
27646
|
+
if (deletion.changes !== 1) {
|
|
27647
|
+
throw new Error("The rejected session event could not be removed from the durable outbox");
|
|
27648
|
+
}
|
|
27649
|
+
this.#database.exec("COMMIT");
|
|
27650
|
+
return true;
|
|
27651
|
+
} catch (error61) {
|
|
27652
|
+
this.#database.exec("ROLLBACK");
|
|
27653
|
+
throw error61;
|
|
27654
|
+
}
|
|
27655
|
+
};
|
|
27606
27656
|
close = () => {
|
|
27607
27657
|
this.#database.close();
|
|
27608
27658
|
};
|
|
@@ -28424,6 +28474,20 @@ async function runRelayConnection(config2, directories, audit, sessions, install
|
|
|
28424
28474
|
outbox.acknowledge(decodeSessionEventAcknowledgement(encoded));
|
|
28425
28475
|
return;
|
|
28426
28476
|
}
|
|
28477
|
+
if (kind === SESSION_EVENT_REJECTED_KIND) {
|
|
28478
|
+
const rejection = decodeSessionEventRejection(encoded);
|
|
28479
|
+
if (outbox.quarantine(rejection)) {
|
|
28480
|
+
audit.record({
|
|
28481
|
+
commandId: rejection.eventId,
|
|
28482
|
+
details: { code: rejection.code },
|
|
28483
|
+
event: "session_event_rejected",
|
|
28484
|
+
sessionId: rejection.sessionId
|
|
28485
|
+
});
|
|
28486
|
+
} else {
|
|
28487
|
+
console.warn("Mobius daemon ignored a rejection for an unknown session event");
|
|
28488
|
+
}
|
|
28489
|
+
return;
|
|
28490
|
+
}
|
|
28427
28491
|
if (kind === NATIVE_SESSION_CANCEL_KIND) {
|
|
28428
28492
|
const command2 = decodeNativeSessionCancel(encoded);
|
|
28429
28493
|
const pending = nativeRequests.get(command2.requestId);
|