@moxt-ai/mobius 0.0.147 → 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.
Files changed (41) hide show
  1. package/dist/cli.js +731 -197
  2. package/dist/cli.js.map +4 -4
  3. package/dist/daemon-active-turn.d.ts +15 -2
  4. package/dist/daemon-active-turn.d.ts.map +1 -1
  5. package/dist/daemon-active-turn.js +63 -25
  6. package/dist/daemon-active-turn.js.map +1 -1
  7. package/dist/daemon-command-handler.js +3 -3
  8. package/dist/daemon-history-commands.d.ts +4 -7
  9. package/dist/daemon-history-commands.d.ts.map +1 -1
  10. package/dist/daemon-history-commands.js.map +1 -1
  11. package/dist/daemon-prompt-executor.d.ts +1 -1
  12. package/dist/daemon-prompt-executor.d.ts.map +1 -1
  13. package/dist/daemon-prompt-executor.js +1 -3
  14. package/dist/daemon-prompt-executor.js.map +1 -1
  15. package/dist/daemon-turn-registry.d.ts +18 -56
  16. package/dist/daemon-turn-registry.d.ts.map +1 -1
  17. package/dist/daemon-turn-registry.js +40 -1
  18. package/dist/daemon-turn-registry.js.map +1 -1
  19. package/dist/index.js +730 -196
  20. package/dist/index.js.map +4 -4
  21. package/dist/native-sessions/live-history-page.d.ts +4 -7
  22. package/dist/native-sessions/live-history-page.d.ts.map +1 -1
  23. package/dist/native-sessions/live-history-page.js +163 -107
  24. package/dist/native-sessions/live-history-page.js.map +1 -1
  25. package/dist/relay-connection/run-relay-connection.d.ts.map +1 -1
  26. package/dist/relay-connection/run-relay-connection.js +15 -2
  27. package/dist/relay-connection/run-relay-connection.js.map +1 -1
  28. package/dist/relay-connection/session-event-outbox.d.ts +19 -0
  29. package/dist/relay-connection/session-event-outbox.d.ts.map +1 -0
  30. package/dist/relay-connection/session-event-outbox.js +228 -0
  31. package/dist/relay-connection/session-event-outbox.js.map +1 -0
  32. package/dist/relay-connection/session-event-publisher.d.ts +10 -4
  33. package/dist/relay-connection/session-event-publisher.d.ts.map +1 -1
  34. package/dist/relay-connection/session-event-publisher.js +140 -32
  35. package/dist/relay-connection/session-event-publisher.js.map +1 -1
  36. package/dist/run-daemon.d.ts.map +1 -1
  37. package/dist/run-daemon.js +3 -1
  38. package/dist/run-daemon.js.map +1 -1
  39. package/dist/runtime.js +736 -202
  40. package/dist/runtime.js.map +4 -4
  41. package/package.json +1 -1
@@ -0,0 +1,228 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdirSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ import { DatabaseSync } from "node:sqlite";
5
+ import { decodeSessionEventEnvelope, encodeSessionEventEnvelope, SESSION_EVENT_KIND, } from "@moxt-ai/mobius-protocol";
6
+ const DEFAULT_STANDARD_EVENT_BYTES = 96 * 1024 * 1024;
7
+ const DEFAULT_CRITICAL_EVENT_BYTES = 128 * 1024 * 1024;
8
+ const MAX_DEAD_LETTERS = 1_024;
9
+ const DEFAULT_LIMITS = {
10
+ criticalEventBytes: DEFAULT_CRITICAL_EVENT_BYTES,
11
+ standardEventBytes: DEFAULT_STANDARD_EVENT_BYTES,
12
+ };
13
+ export class SessionEventOutboxCapacityError extends Error {
14
+ code = "session_event_outbox_full";
15
+ constructor() {
16
+ super("The persistent Session event outbox is full");
17
+ this.name = "SessionEventOutboxCapacityError";
18
+ }
19
+ }
20
+ function rowNumber(row, field) {
21
+ const value = typeof row === "object" && row !== null ? Reflect.get(row, field) : undefined;
22
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
23
+ throw new Error(`SQLite returned an invalid ${field} value`);
24
+ }
25
+ return value;
26
+ }
27
+ function rowString(row, field) {
28
+ const value = typeof row === "object" && row !== null ? Reflect.get(row, field) : undefined;
29
+ if (typeof value !== "string" || value.length === 0) {
30
+ throw new Error(`SQLite returned an invalid ${field} value`);
31
+ }
32
+ return value;
33
+ }
34
+ function validateLimits(limits) {
35
+ if (!Number.isSafeInteger(limits.standardEventBytes) ||
36
+ limits.standardEventBytes < 1 ||
37
+ !Number.isSafeInteger(limits.criticalEventBytes) ||
38
+ limits.criticalEventBytes < limits.standardEventBytes) {
39
+ throw new Error("Session event outbox limits are invalid");
40
+ }
41
+ }
42
+ export class SessionEventOutbox {
43
+ #database;
44
+ #limits;
45
+ constructor(path, limits = DEFAULT_LIMITS) {
46
+ validateLimits(limits);
47
+ mkdirSync(dirname(path), { mode: 0o700, recursive: true });
48
+ this.#limits = limits;
49
+ this.#database = new DatabaseSync(path);
50
+ this.#database.exec("PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL; PRAGMA busy_timeout = 5000;");
51
+ this.#database.exec(`
52
+ CREATE TABLE IF NOT EXISTS relay_session_event_outbox (
53
+ ordinal INTEGER PRIMARY KEY AUTOINCREMENT,
54
+ event_id TEXT NOT NULL UNIQUE,
55
+ session_id TEXT NOT NULL,
56
+ source_seq INTEGER NOT NULL UNIQUE,
57
+ byte_length INTEGER NOT NULL,
58
+ envelope_json TEXT NOT NULL
59
+ ) STRICT;
60
+ CREATE INDEX IF NOT EXISTS relay_session_event_outbox_order
61
+ ON relay_session_event_outbox(source_seq);
62
+ CREATE TABLE IF NOT EXISTS relay_session_event_outbox_state (
63
+ singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
64
+ stream_id TEXT NOT NULL,
65
+ next_source_seq INTEGER NOT NULL,
66
+ total_bytes INTEGER NOT NULL
67
+ ) STRICT;
68
+ CREATE TABLE IF NOT EXISTS relay_session_event_dead_letters (
69
+ ordinal INTEGER PRIMARY KEY AUTOINCREMENT,
70
+ event_id TEXT NOT NULL UNIQUE,
71
+ session_id TEXT NOT NULL,
72
+ rejection_code TEXT NOT NULL,
73
+ envelope_json TEXT NOT NULL
74
+ ) STRICT;
75
+ `);
76
+ this.#database
77
+ .prepare(`INSERT OR IGNORE INTO relay_session_event_outbox_state (
78
+ singleton, stream_id, next_source_seq, total_bytes
79
+ ) VALUES (1, ?, 1, 0)`)
80
+ .run(randomUUID());
81
+ }
82
+ acknowledge = (acknowledgement) => this.#remove(acknowledgement.eventId, acknowledgement.sessionId);
83
+ close = () => {
84
+ this.#database.close();
85
+ };
86
+ enqueue = (sessionId, payload, critical) => {
87
+ this.#database.exec("BEGIN IMMEDIATE");
88
+ try {
89
+ const state = this.#database
90
+ .prepare(`SELECT stream_id, next_source_seq, total_bytes
91
+ FROM relay_session_event_outbox_state
92
+ WHERE singleton = 1`)
93
+ .get();
94
+ const sourceSeq = rowNumber(state, "next_source_seq");
95
+ if (sourceSeq < 1 || !Number.isSafeInteger(sourceSeq + 1)) {
96
+ throw new Error("The Session event source sequence is exhausted");
97
+ }
98
+ const envelope = {
99
+ delivery: {
100
+ eventId: randomUUID(),
101
+ kind: "reliable",
102
+ sourceSeq: sourceSeq.toString(),
103
+ streamId: rowString(state, "stream_id"),
104
+ },
105
+ kind: SESSION_EVENT_KIND,
106
+ payload,
107
+ sessionId,
108
+ };
109
+ const encoded = encodeSessionEventEnvelope(envelope);
110
+ const byteLength = Buffer.byteLength(encoded, "utf8");
111
+ const maximumBytes = critical ? this.#limits.criticalEventBytes : this.#limits.standardEventBytes;
112
+ if (rowNumber(state, "total_bytes") + byteLength > maximumBytes) {
113
+ throw new SessionEventOutboxCapacityError();
114
+ }
115
+ this.#database
116
+ .prepare(`INSERT INTO relay_session_event_outbox (
117
+ event_id, session_id, source_seq, byte_length, envelope_json
118
+ ) VALUES (?, ?, ?, ?, ?)`)
119
+ .run(envelope.delivery.eventId, sessionId, sourceSeq, byteLength, encoded);
120
+ this.#database
121
+ .prepare(`UPDATE relay_session_event_outbox_state
122
+ SET next_source_seq = next_source_seq + 1,
123
+ total_bytes = total_bytes + ?
124
+ WHERE singleton = 1`)
125
+ .run(byteLength);
126
+ this.#database.exec("COMMIT");
127
+ return envelope;
128
+ }
129
+ catch (error) {
130
+ this.#database.exec("ROLLBACK");
131
+ throw error;
132
+ }
133
+ };
134
+ pending = (limit, excludedEventIds) => {
135
+ if (!Number.isSafeInteger(limit) || limit < 1) {
136
+ throw new Error("Session event replay limit must be a positive integer");
137
+ }
138
+ const exclusion = excludedEventIds.length === 0
139
+ ? ""
140
+ : `WHERE event_id NOT IN (${excludedEventIds.map(() => "?").join(", ")})`;
141
+ return this.#database
142
+ .prepare(`SELECT envelope_json
143
+ FROM relay_session_event_outbox
144
+ ${exclusion}
145
+ ORDER BY source_seq
146
+ LIMIT ?`)
147
+ .all(...excludedEventIds, limit)
148
+ .map((row) => {
149
+ const envelope = decodeSessionEventEnvelope(rowString(row, "envelope_json"));
150
+ if (!("delivery" in envelope)) {
151
+ throw new Error("SQLite returned an invalid reliable Session event envelope");
152
+ }
153
+ return envelope;
154
+ });
155
+ };
156
+ quarantine = (rejection) => {
157
+ this.#database.exec("BEGIN IMMEDIATE");
158
+ try {
159
+ const stored = this.#database
160
+ .prepare(`SELECT byte_length, envelope_json
161
+ FROM relay_session_event_outbox
162
+ WHERE event_id = ? AND session_id = ?`)
163
+ .get(rejection.eventId, rejection.sessionId);
164
+ if (stored === undefined) {
165
+ this.#database.exec("COMMIT");
166
+ return false;
167
+ }
168
+ this.#database
169
+ .prepare(`INSERT INTO relay_session_event_dead_letters (
170
+ event_id, session_id, rejection_code, envelope_json
171
+ ) VALUES (?, ?, ?, ?)`)
172
+ .run(rejection.eventId, rejection.sessionId, rejection.code, rowString(stored, "envelope_json"));
173
+ this.#deleteStored(rejection.eventId, rejection.sessionId, rowNumber(stored, "byte_length"));
174
+ this.#database
175
+ .prepare(`DELETE FROM relay_session_event_dead_letters
176
+ WHERE ordinal NOT IN (
177
+ SELECT ordinal FROM relay_session_event_dead_letters
178
+ ORDER BY ordinal DESC LIMIT ?
179
+ )`)
180
+ .run(MAX_DEAD_LETTERS);
181
+ this.#database.exec("COMMIT");
182
+ return true;
183
+ }
184
+ catch (error) {
185
+ this.#database.exec("ROLLBACK");
186
+ throw error;
187
+ }
188
+ };
189
+ #deleteStored = (eventId, sessionId, byteLength) => {
190
+ const deletion = this.#database
191
+ .prepare(`DELETE FROM relay_session_event_outbox
192
+ WHERE event_id = ? AND session_id = ?`)
193
+ .run(eventId, sessionId);
194
+ if (deletion.changes !== 1) {
195
+ throw new Error("The Session event could not be removed from the outbox");
196
+ }
197
+ const state = this.#database
198
+ .prepare(`UPDATE relay_session_event_outbox_state
199
+ SET total_bytes = total_bytes - ?
200
+ WHERE singleton = 1 AND total_bytes >= ?`)
201
+ .run(byteLength, byteLength);
202
+ if (state.changes !== 1) {
203
+ throw new Error("The Session event outbox capacity state is inconsistent");
204
+ }
205
+ };
206
+ #remove = (eventId, sessionId) => {
207
+ this.#database.exec("BEGIN IMMEDIATE");
208
+ try {
209
+ const stored = this.#database
210
+ .prepare(`SELECT byte_length
211
+ FROM relay_session_event_outbox
212
+ WHERE event_id = ? AND session_id = ?`)
213
+ .get(eventId, sessionId);
214
+ if (stored === undefined) {
215
+ this.#database.exec("COMMIT");
216
+ return false;
217
+ }
218
+ this.#deleteStored(eventId, sessionId, rowNumber(stored, "byte_length"));
219
+ this.#database.exec("COMMIT");
220
+ return true;
221
+ }
222
+ catch (error) {
223
+ this.#database.exec("ROLLBACK");
224
+ throw error;
225
+ }
226
+ };
227
+ }
228
+ //# sourceMappingURL=session-event-outbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-event-outbox.js","sourceRoot":"","sources":["../../src/relay-connection/session-event-outbox.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
- import { type RecordedSessionEvent } from "@moxt-ai/mobius-protocol";
1
+ import { type RecordedSessionEvent, type SessionEventAcknowledgement, type SessionEventDeferred, type SessionEventRejected } from "@moxt-ai/mobius-protocol";
2
2
  import { WebSocket } from "undici";
3
- /** Live Session events are disposable: native Agent history and the active Turn snapshot restore viewers. */
3
+ import { type SessionEventOutbox } from "./session-event-outbox.ts";
4
+ import type { DaemonTimer } from "./timer.ts";
5
+ /** Persists every Session event until the Relay confirms its configured durability outcome. */
4
6
  export declare class DaemonSessionEventPublisher {
5
7
  #private;
6
- readonly connect: (socket: WebSocket) => void;
8
+ constructor(outbox: SessionEventOutbox, timer: DaemonTimer);
9
+ readonly acknowledge: (acknowledgement: SessionEventAcknowledgement) => void;
10
+ readonly close: () => void;
11
+ readonly connect: (socket: WebSocket, delivery: "ephemeral" | "reliable") => void;
12
+ readonly defer: (deferred: SessionEventDeferred) => void;
7
13
  readonly disconnect: (socket: WebSocket) => void;
8
14
  readonly publish: (sessionId: string, event: RecordedSessionEvent) => void;
9
- readonly close: () => void;
15
+ readonly quarantine: (rejection: SessionEventRejected) => void;
10
16
  }
11
17
  //# sourceMappingURL=session-event-publisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../src/relay-connection/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,oBAAoB,EAE5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAInC,6GAA6G;AAC7G,qBAAa,2BAA2B;;IAIpC,QAAQ,CAAC,OAAO,WAAY,SAAS,KAAG,IAAI,CAG1C;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAI7C;IAEF,QAAQ,CAAC,OAAO,cAAe,MAAM,SAAS,oBAAoB,KAAG,IAAI,CAuBvE;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAEvB;CASL"}
1
+ {"version":3,"file":"session-event-publisher.d.ts","sourceRoot":"","sources":["../../src/relay-connection/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,oBAAoB,EAGzB,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,2BAA2B,CAAC;AACrG,OAAO,KAAK,EAAuB,WAAW,EAAE,MAAM,YAAY,CAAC;AA4BnE,+FAA+F;AAC/F,qBAAa,2BAA2B;;IASpC,YAAY,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAGzD;IAED,QAAQ,CAAC,WAAW,oBAAqB,2BAA2B,KAAG,IAAI,CAMzE;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAMvB;IAEF,QAAQ,CAAC,OAAO,WAAY,SAAS,YAAY,WAAW,GAAG,UAAU,KAAG,IAAI,CAI9E;IAEF,QAAQ,CAAC,KAAK,aAAc,oBAAoB,KAAG,IAAI,CAYrD;IAEF,QAAQ,CAAC,UAAU,WAAY,SAAS,KAAG,IAAI,CAM7C;IAEF,QAAQ,CAAC,OAAO,cAAe,MAAM,SAAS,oBAAoB,KAAG,IAAI,CAgBvE;IAEF,QAAQ,CAAC,UAAU,cAAe,oBAAoB,KAAG,IAAI,CAO3D;CA0EL"}
@@ -1,51 +1,159 @@
1
- import { encodeDaemonToServiceMessage, encodeRecordedSessionEvent, SESSION_EVENT_KIND, } from "@moxt-ai/mobius-protocol";
1
+ import { AGENT_ACTIVITY_KIND, encodeDaemonToServiceMessage, encodeRecordedSessionEvent, SESSION_COMPLETED_KIND, SESSION_FAILED_KIND, } from "@moxt-ai/mobius-protocol";
2
2
  import { WebSocket } from "undici";
3
- const MAX_LIVE_EVENT_BUFFERED_BYTES = 16 * 1024 * 1024;
4
- /** Live Session events are disposable: native Agent history and the active Turn snapshot restore viewers. */
3
+ import { SessionEventOutboxCapacityError } from "./session-event-outbox.js";
4
+ const SESSION_EVENT_REPLAY_WINDOW = 16;
5
+ const SESSION_EVENT_REPLAY_BYTE_LIMIT = 32 * 1024 * 1024;
6
+ function reservesSessionEventCapacity(event) {
7
+ if (event.kind === SESSION_COMPLETED_KIND || event.kind === SESSION_FAILED_KIND) {
8
+ return true;
9
+ }
10
+ return (event.kind === AGENT_ACTIVITY_KIND &&
11
+ (event.activityType === "progress" || event.activityType === "reasoning") &&
12
+ (event.status === "completed" || event.status === "failed"));
13
+ }
14
+ /** Persists every Session event until the Relay confirms its configured durability outcome. */
5
15
  export class DaemonSessionEventPublisher {
6
- #socket = null;
7
- #reportedDrop = false;
8
- connect = (socket) => {
9
- this.#socket = socket;
10
- this.#reportedDrop = false;
16
+ #inFlight = new Map();
17
+ #outbox;
18
+ #reportedCapacityKinds = new Set();
19
+ #timer;
20
+ #connection = { kind: "disconnected" };
21
+ #deferredReplay = null;
22
+ #inFlightBytes = 0;
23
+ constructor(outbox, timer) {
24
+ this.#outbox = outbox;
25
+ this.#timer = timer;
26
+ }
27
+ acknowledge = (acknowledgement) => {
28
+ if (!this.#outbox.acknowledge(acknowledgement)) {
29
+ return;
30
+ }
31
+ this.#removeInFlight(acknowledgement.eventId);
32
+ this.#publishNextBatch();
33
+ };
34
+ close = () => {
35
+ this.#deferredReplay?.cancel();
36
+ this.#deferredReplay = null;
37
+ this.#connection = { kind: "disconnected" };
38
+ this.#clearInFlight();
39
+ this.#outbox.close();
40
+ };
41
+ connect = (socket, delivery) => {
42
+ this.#connection = { delivery, kind: "connected", socket };
43
+ this.#clearInFlight();
44
+ this.#publishNextBatch();
45
+ };
46
+ defer = (deferred) => {
47
+ if (!this.#inFlight.has(deferred.eventId)) {
48
+ return;
49
+ }
50
+ this.#clearInFlight();
51
+ if (this.#deferredReplay !== null) {
52
+ return;
53
+ }
54
+ this.#deferredReplay = this.#timer.schedule(() => {
55
+ this.#deferredReplay = null;
56
+ this.#publishNextBatch();
57
+ }, deferred.retryAfterMilliseconds);
11
58
  };
12
59
  disconnect = (socket) => {
13
- if (this.#socket === socket) {
14
- this.#socket = null;
60
+ if (this.#connection.kind !== "connected" || this.#connection.socket !== socket) {
61
+ return;
15
62
  }
63
+ this.#connection = { kind: "disconnected" };
64
+ this.#clearInFlight();
16
65
  };
17
66
  publish = (sessionId, event) => {
18
- const socket = this.#socket;
19
- if (socket === null || socket.readyState !== WebSocket.OPEN) {
20
- this.#reportDrop();
67
+ try {
68
+ this.#outbox.enqueue(sessionId, encodeRecordedSessionEvent(event), reservesSessionEventCapacity(event));
69
+ }
70
+ catch (error) {
71
+ if (!(error instanceof SessionEventOutboxCapacityError)) {
72
+ throw error;
73
+ }
74
+ if (!this.#reportedCapacityKinds.has(event.kind)) {
75
+ this.#reportedCapacityKinds.add(event.kind);
76
+ console.warn(`Mobius daemon could not persist "${event.kind}" because the Session event outbox is full`);
77
+ }
21
78
  return;
22
79
  }
23
- if (socket.bufferedAmount >= MAX_LIVE_EVENT_BUFFERED_BYTES) {
24
- this.#socket = null;
25
- socket.close(1013, "Live event backpressure");
26
- this.#reportDrop();
80
+ this.#publishNextBatch();
81
+ };
82
+ quarantine = (rejection) => {
83
+ if (!this.#outbox.quarantine(rejection)) {
27
84
  return;
28
85
  }
29
- try {
30
- socket.send(encodeDaemonToServiceMessage({
31
- kind: SESSION_EVENT_KIND,
32
- payload: encodeRecordedSessionEvent(event),
33
- sessionId,
34
- }));
86
+ this.#removeInFlight(rejection.eventId);
87
+ console.error(`Mobius Relay rejected Session event ${rejection.eventId} with code ${rejection.code}`);
88
+ this.#publishNextBatch();
89
+ };
90
+ #clearInFlight = () => {
91
+ this.#inFlight.clear();
92
+ this.#inFlightBytes = 0;
93
+ };
94
+ #publishNextBatch = () => {
95
+ if (this.#deferredReplay !== null || this.#connection.kind !== "connected") {
96
+ return;
35
97
  }
36
- catch {
37
- this.#reportDrop();
98
+ while (this.#inFlight.size < SESSION_EVENT_REPLAY_WINDOW) {
99
+ const batch = this.#outbox.pending(SESSION_EVENT_REPLAY_WINDOW - this.#inFlight.size, [
100
+ ...this.#inFlight.keys(),
101
+ ]);
102
+ let sent = 0;
103
+ for (const envelope of batch) {
104
+ const encoded = encodeDaemonToServiceMessage(this.#connection.delivery === "reliable"
105
+ ? envelope
106
+ : {
107
+ kind: envelope.kind,
108
+ payload: envelope.payload,
109
+ sessionId: envelope.sessionId,
110
+ });
111
+ const byteLength = Buffer.byteLength(encoded, "utf8");
112
+ if (this.#inFlightBytes + byteLength > SESSION_EVENT_REPLAY_BYTE_LIMIT) {
113
+ return;
114
+ }
115
+ if (!this.#send(encoded)) {
116
+ this.#clearInFlight();
117
+ return;
118
+ }
119
+ if (this.#connection.delivery === "ephemeral") {
120
+ this.#outbox.acknowledge({
121
+ eventId: envelope.delivery.eventId,
122
+ kind: "session.event.ack",
123
+ outcome: { kind: "relayed" },
124
+ sessionId: envelope.sessionId,
125
+ });
126
+ sent += 1;
127
+ continue;
128
+ }
129
+ this.#inFlight.set(envelope.delivery.eventId, { byteLength });
130
+ this.#inFlightBytes += byteLength;
131
+ sent += 1;
132
+ }
133
+ if (sent === 0) {
134
+ return;
135
+ }
38
136
  }
39
137
  };
40
- close = () => {
41
- this.#socket = null;
42
- };
43
- #reportDrop = () => {
44
- if (this.#reportedDrop) {
138
+ #removeInFlight = (eventId) => {
139
+ const inFlight = this.#inFlight.get(eventId);
140
+ if (inFlight === undefined) {
45
141
  return;
46
142
  }
47
- this.#reportedDrop = true;
48
- console.warn("Mobius daemon dropped live Session events while the Relay was unavailable");
143
+ this.#inFlight.delete(eventId);
144
+ this.#inFlightBytes -= inFlight.byteLength;
145
+ };
146
+ #send = (encoded) => {
147
+ if (this.#connection.kind !== "connected" || this.#connection.socket.readyState !== WebSocket.OPEN) {
148
+ return false;
149
+ }
150
+ try {
151
+ this.#connection.socket.send(encoded);
152
+ return true;
153
+ }
154
+ catch {
155
+ return false;
156
+ }
49
157
  };
50
158
  }
51
159
  //# sourceMappingURL=session-event-publisher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-event-publisher.js","sourceRoot":"","sources":["../../src/relay-connection/session-event-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,4BAA4B,EAC5B,0BAA0B,EAE1B,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvD,6GAA6G;AAC7G,MAAM,OAAO,2BAA2B;IACpC,OAAO,GAAqB,IAAI,CAAC;IACjC,aAAa,GAAG,KAAK,CAAC;IAEb,OAAO,GAAG,CAAC,MAAiB,EAAQ,EAAE;QAC3C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC,CAAC;IAEO,UAAU,GAAG,CAAC,MAAiB,EAAQ,EAAE;QAC9C,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEO,OAAO,GAAG,CAAC,SAAiB,EAAE,KAA2B,EAAQ,EAAE;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,IAAI,6BAA6B,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QACD,IAAI,CAAC;YACD,MAAM,CAAC,IAAI,CACP,4BAA4B,CAAC;gBACzB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC;gBAC1C,SAAS;aACZ,CAAC,CACL,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC,CAAC;IAEO,KAAK,GAAG,GAAS,EAAE;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC;IAEO,WAAW,GAAG,GAAS,EAAE;QAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC9F,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"session-event-publisher.js","sourceRoot":"","sources":["../../src/relay-connection/session-event-publisher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-daemon.d.ts","sourceRoot":"","sources":["../src/run-daemon.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAwElF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,KAAK,IAAI,CAAC;IAC1E,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;CAC3G;AAED,wBAAsB,SAAS,CAC3B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,WAA+B,EACtC,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiNf"}
1
+ {"version":3,"file":"run-daemon.d.ts","sourceRoot":"","sources":["../src/run-daemon.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAYhD,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAwElF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,KAAK,IAAI,CAAC;IAC1E,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;CAC3G;AAED,wBAAsB,SAAS,CAC3B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,WAA+B,EACtC,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAqNf"}
@@ -19,6 +19,7 @@ import { DaemonOperationState } from "./relay-connection/daemon-operation-state.
19
19
  import { RelayConnectionDiagnostics } from "./relay-connection/diagnostics.js";
20
20
  import { runRelayConnection } from "./relay-connection/run-relay-connection.js";
21
21
  import { RuntimeRelayRevokedError } from "./relay-connection/runtime-revocation.js";
22
+ import { SessionEventOutbox } from "./relay-connection/session-event-outbox.js";
22
23
  import { DaemonSessionEventPublisher } from "./relay-connection/session-event-publisher.js";
23
24
  import { systemDaemonTimer } from "./relay-connection/timer.js";
24
25
  const RELAY_RECONNECT_DELAY_MILLISECONDS = 500;
@@ -87,7 +88,8 @@ export async function runDaemon(config, audit, signal, timer = systemDaemonTimer
87
88
  });
88
89
  const sessionStore = new SqliteAcpSessionStore(join(stateDirectory, "sessions", `${createHash("sha256").update(config.channelId).digest("hex")}.sqlite`));
89
90
  const operations = new DaemonOperationState();
90
- const publisher = new DaemonSessionEventPublisher();
91
+ const channelHash = createHash("sha256").update(config.channelId).digest("hex");
92
+ const publisher = new DaemonSessionEventPublisher(new SessionEventOutbox(join(stateDirectory, "events", `${channelHash}.sqlite`)), timer);
91
93
  const activeTurns = new DaemonTurnRegistry(operations);
92
94
  const recordSessionEvent = (sessionId, event) => {
93
95
  publisher.publish(sessionId, activeTurns.recordEvent(event));
@@ -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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"}