@moxt-ai/mobius 0.0.20 → 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 +65 -1
- package/dist/cli.js.map +3 -3
- 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/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ import { mkdir as mkdir4 } from "node:fs/promises";
|
|
|
11
11
|
// package.json
|
|
12
12
|
var package_default = {
|
|
13
13
|
name: "@moxt-ai/mobius",
|
|
14
|
-
version: "0.0.
|
|
14
|
+
version: "0.0.21",
|
|
15
15
|
description: "Mobius CLI for pairing and running local AI agent services.",
|
|
16
16
|
type: "module",
|
|
17
17
|
bin: {
|
|
@@ -22464,6 +22464,11 @@ var decodeNativeSessionCancel = (encoded) => decode4(nativeSessionCancelSchema,
|
|
|
22464
22464
|
var SESSION_EVENT_KIND = "session.event";
|
|
22465
22465
|
var SESSION_EVENT_ACK_KIND = "session.event.ack";
|
|
22466
22466
|
var SESSION_EVENT_COMMITTED_KIND = "session.event.committed";
|
|
22467
|
+
var SESSION_EVENT_REJECTED_KIND = "session.event.rejected";
|
|
22468
|
+
var SessionEventRejectionCode = {
|
|
22469
|
+
SessionDeleted: "session_deleted",
|
|
22470
|
+
SessionNotFound: "session_not_found"
|
|
22471
|
+
};
|
|
22467
22472
|
var IDENTIFIER_PATTERN3 = /^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,127}$/;
|
|
22468
22473
|
var CURSOR_PATTERN = /^[A-Za-z0-9_-]{1,512}$/;
|
|
22469
22474
|
var MAX_RECORDED_EVENT_LENGTH = 8 * 1024 * 1024;
|
|
@@ -22504,6 +22509,12 @@ var eventAcknowledgementSchema = external_exports.strictObject({
|
|
|
22504
22509
|
sequence: external_exports.string().min(1).max(40).regex(DECIMAL_SEQUENCE_PATTERN),
|
|
22505
22510
|
sessionId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3)
|
|
22506
22511
|
}).readonly();
|
|
22512
|
+
var eventRejectionSchema = external_exports.strictObject({
|
|
22513
|
+
code: external_exports.enum(SessionEventRejectionCode),
|
|
22514
|
+
eventId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3),
|
|
22515
|
+
kind: external_exports.literal(SESSION_EVENT_REJECTED_KIND),
|
|
22516
|
+
sessionId: external_exports.string().min(1).max(128).regex(IDENTIFIER_PATTERN3)
|
|
22517
|
+
}).readonly();
|
|
22507
22518
|
function decode5(encoded, schema) {
|
|
22508
22519
|
let value;
|
|
22509
22520
|
try {
|
|
@@ -22530,6 +22541,7 @@ var encode4 = (message, schema) => {
|
|
|
22530
22541
|
};
|
|
22531
22542
|
var encodeSessionEventEnvelope = (message) => encode4(message, eventEnvelopeSchema);
|
|
22532
22543
|
var decodeSessionEventAcknowledgement = (encoded) => decode5(encoded, eventAcknowledgementSchema);
|
|
22544
|
+
var decodeSessionEventRejection = (encoded) => decode5(encoded, eventRejectionSchema);
|
|
22533
22545
|
|
|
22534
22546
|
// src/config.ts
|
|
22535
22547
|
function loadDefaultWorkspace() {
|
|
@@ -27606,6 +27618,15 @@ var SessionEventOutbox = class {
|
|
|
27606
27618
|
) STRICT;
|
|
27607
27619
|
CREATE INDEX IF NOT EXISTS relay_session_event_outbox_order
|
|
27608
27620
|
ON relay_session_event_outbox(ordinal);
|
|
27621
|
+
CREATE TABLE IF NOT EXISTS relay_session_event_dead_letters (
|
|
27622
|
+
ordinal INTEGER PRIMARY KEY,
|
|
27623
|
+
event_id TEXT NOT NULL UNIQUE,
|
|
27624
|
+
session_id TEXT NOT NULL,
|
|
27625
|
+
envelope_json TEXT NOT NULL,
|
|
27626
|
+
rejection_code TEXT NOT NULL CHECK (
|
|
27627
|
+
rejection_code IN ('session_deleted', 'session_not_found')
|
|
27628
|
+
)
|
|
27629
|
+
) STRICT;
|
|
27609
27630
|
CREATE TABLE IF NOT EXISTS relay_session_event_sources (
|
|
27610
27631
|
source_key TEXT PRIMARY KEY,
|
|
27611
27632
|
next_source_seq INTEGER NOT NULL
|
|
@@ -27678,6 +27699,35 @@ var SessionEventOutbox = class {
|
|
|
27678
27699
|
WHERE event_id = ? AND session_id = ?`
|
|
27679
27700
|
).run(acknowledgement.eventId, acknowledgement.sessionId);
|
|
27680
27701
|
};
|
|
27702
|
+
quarantine = (rejection) => {
|
|
27703
|
+
this.#database.exec("BEGIN IMMEDIATE");
|
|
27704
|
+
try {
|
|
27705
|
+
const insertion = this.#database.prepare(
|
|
27706
|
+
`INSERT INTO relay_session_event_dead_letters (
|
|
27707
|
+
ordinal, event_id, session_id, envelope_json, rejection_code
|
|
27708
|
+
)
|
|
27709
|
+
SELECT ordinal, event_id, session_id, envelope_json, ?
|
|
27710
|
+
FROM relay_session_event_outbox
|
|
27711
|
+
WHERE event_id = ? AND session_id = ?`
|
|
27712
|
+
).run(rejection.code, rejection.eventId, rejection.sessionId);
|
|
27713
|
+
if (insertion.changes !== 1) {
|
|
27714
|
+
this.#database.exec("COMMIT");
|
|
27715
|
+
return false;
|
|
27716
|
+
}
|
|
27717
|
+
const deletion = this.#database.prepare(
|
|
27718
|
+
`DELETE FROM relay_session_event_outbox
|
|
27719
|
+
WHERE event_id = ? AND session_id = ?`
|
|
27720
|
+
).run(rejection.eventId, rejection.sessionId);
|
|
27721
|
+
if (deletion.changes !== 1) {
|
|
27722
|
+
throw new Error("The rejected session event could not be removed from the durable outbox");
|
|
27723
|
+
}
|
|
27724
|
+
this.#database.exec("COMMIT");
|
|
27725
|
+
return true;
|
|
27726
|
+
} catch (error61) {
|
|
27727
|
+
this.#database.exec("ROLLBACK");
|
|
27728
|
+
throw error61;
|
|
27729
|
+
}
|
|
27730
|
+
};
|
|
27681
27731
|
close = () => {
|
|
27682
27732
|
this.#database.close();
|
|
27683
27733
|
};
|
|
@@ -28499,6 +28549,20 @@ async function runRelayConnection(config2, directories, audit, sessions, install
|
|
|
28499
28549
|
outbox.acknowledge(decodeSessionEventAcknowledgement(encoded));
|
|
28500
28550
|
return;
|
|
28501
28551
|
}
|
|
28552
|
+
if (kind === SESSION_EVENT_REJECTED_KIND) {
|
|
28553
|
+
const rejection = decodeSessionEventRejection(encoded);
|
|
28554
|
+
if (outbox.quarantine(rejection)) {
|
|
28555
|
+
audit.record({
|
|
28556
|
+
commandId: rejection.eventId,
|
|
28557
|
+
details: { code: rejection.code },
|
|
28558
|
+
event: "session_event_rejected",
|
|
28559
|
+
sessionId: rejection.sessionId
|
|
28560
|
+
});
|
|
28561
|
+
} else {
|
|
28562
|
+
console.warn("Mobius daemon ignored a rejection for an unknown session event");
|
|
28563
|
+
}
|
|
28564
|
+
return;
|
|
28565
|
+
}
|
|
28502
28566
|
if (kind === NATIVE_SESSION_CANCEL_KIND) {
|
|
28503
28567
|
const command2 = decodeNativeSessionCancel(encoded);
|
|
28504
28568
|
const pending = nativeRequests.get(command2.requestId);
|