@moxt-ai/mobius 0.0.177 → 0.0.178

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/index.js CHANGED
@@ -20954,6 +20954,7 @@ var MAX_CONTENT_LENGTH = 1e6;
20954
20954
  var MAX_JSON_DEPTH = 16;
20955
20955
  var MAX_JSON_KEYS = 1e3;
20956
20956
  var SESSION_EVENT_V2_KIND = "session.event.v2";
20957
+ var SESSION_EVENT_V2_BATCH_MAX_SIZE = 1e3;
20957
20958
  var boundedString = external_exports.string().max(MAX_CONTENT_LENGTH);
20958
20959
  var shortString = external_exports.string().max(2048);
20959
20960
  var externalContentKeySchema = external_exports.string().regex(/^[a-f0-9]{64}$/u);
@@ -21325,6 +21326,7 @@ var sessionEventV2Schema = external_exports.discriminatedUnion("type", [
21325
21326
  type: external_exports.literal("lifecycle-metadata")
21326
21327
  }).readonly()
21327
21328
  ]);
21329
+ var sessionEventBatchV2Schema = external_exports.array(sessionEventV2Schema).min(1).max(SESSION_EVENT_V2_BATCH_MAX_SIZE).readonly();
21328
21330
  var sessionExportV2Schema = external_exports.object({
21329
21331
  binding: external_exports.object({
21330
21332
  bindingId: identifierStringSchema,
@@ -21367,7 +21369,7 @@ var mobiusSessionExportV2Schema = external_exports.object({
21367
21369
  formatVersion: external_exports.literal("2"),
21368
21370
  session: sessionExportV2Schema
21369
21371
  }).readonly();
21370
- var sessionEventEnvelopeV2Schema = external_exports.object({ event: sessionEventV2Schema, kind: external_exports.literal(SESSION_EVENT_V2_KIND) }).readonly();
21372
+ var sessionEventEnvelopeV2Schema = external_exports.object({ events: sessionEventBatchV2Schema, kind: external_exports.literal(SESSION_EVENT_V2_KIND) }).readonly();
21371
21373
  var sessionEventLogPageV2Schema = external_exports.object({
21372
21374
  daemonGenerationId: identifierStringSchema,
21373
21375
  events: external_exports.array(sessionEventV2Schema).max(MAX_EVENT_COUNT).readonly(),
@@ -23339,14 +23341,13 @@ var AgentConnection = class {
23339
23341
  get inProcessAgent() {
23340
23342
  return this.#process.kind === "in-process" ? this.#process.endpoint : null;
23341
23343
  }
23342
- captureProcessTree = async () => this.#process.kind === "child" ? await captureProcessTree(this.#process.child) : [];
23343
- closeProcess = async (capturedProcesses = []) => {
23344
+ closeProcess = async () => {
23344
23345
  try {
23345
23346
  if (this.#process.kind === "in-process") {
23346
23347
  await this.#process.endpoint.close();
23347
23348
  return;
23348
23349
  }
23349
- await stopProcessTree(this.#process.child, capturedProcesses);
23350
+ await stopProcessTree(this.#process.child);
23350
23351
  } finally {
23351
23352
  this.connection.close();
23352
23353
  }
@@ -30973,16 +30974,11 @@ var AgentSession = class _AgentSession {
30973
30974
  }
30974
30975
  };
30975
30976
  cancel = async () => {
30976
- const capturedProcesses = await this.#connection.captureProcessTree();
30977
- try {
30978
- await this.#interactions.cancelPendingInteractions();
30979
- if (this.#turn.running) {
30980
- await this.#connection.connection.agent.notify(methods3.agent.session.cancel, {
30981
- sessionId: this.#updates.sessionId()
30982
- });
30983
- }
30984
- } finally {
30985
- await this.closeProcess(capturedProcesses);
30977
+ await this.#interactions.cancelPendingInteractions();
30978
+ if (this.#turn.running) {
30979
+ await this.#connection.connection.agent.notify(methods3.agent.session.cancel, {
30980
+ sessionId: this.#updates.sessionId()
30981
+ });
30986
30982
  }
30987
30983
  };
30988
30984
  respondPermission = (options) => this.#interactions.respondPermission(options);
@@ -31182,7 +31178,7 @@ var AgentSession = class _AgentSession {
31182
31178
  await this.closeProcess();
31183
31179
  }
31184
31180
  };
31185
- closeProcess = (capturedProcesses = []) => this.#connection.closeProcess(capturedProcesses);
31181
+ closeProcess = () => this.#connection.closeProcess();
31186
31182
  race = (operation, exitMessage, signal) => this.#connection.race(operation, exitMessage, signal);
31187
31183
  assertNativeSession = (sessionId) => {
31188
31184
  if (sessionId !== this.#updates.sessionId()) {
@@ -32323,13 +32319,7 @@ var AgentRuntimeManager = class {
32323
32319
  await this.#executions.cancel(sessionId, async () => {
32324
32320
  const runtime = this.#executionProcesses.get(sessionId);
32325
32321
  if (runtime !== void 0) {
32326
- try {
32327
- await runtime.cancel();
32328
- } finally {
32329
- if (this.#executionProcesses.detach(sessionId, runtime)) {
32330
- this.#processes.releaseClosed(runtime);
32331
- }
32332
- }
32322
+ await runtime.cancel();
32333
32323
  }
32334
32324
  });
32335
32325
  };
@@ -35117,7 +35107,7 @@ var CodexAcpAgent = class {
35117
35107
  };
35118
35108
  #completeTurn = async (turn) => {
35119
35109
  const active = this.#turn;
35120
- if (active === null) {
35110
+ if (active === null || active.turn.id !== turn.id) {
35121
35111
  return;
35122
35112
  }
35123
35113
  await this.#updateTail;
@@ -43007,24 +42997,33 @@ async function runRelayConnection({
43007
42997
  // src/relay-connection/session-event-publisher.ts
43008
42998
  import { WebSocket as WebSocket8 } from "undici";
43009
42999
  var MAX_BUFFERED_BYTES = 32 * 1024 * 1024;
43000
+ var SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS = 200;
43010
43001
  var DaemonSessionEventPublisher = class {
43002
+ #pendingV2Events = [];
43003
+ #pendingV2Task = null;
43011
43004
  #socket = null;
43005
+ #timer;
43006
+ constructor(timer) {
43007
+ this.#timer = timer;
43008
+ }
43012
43009
  connect = (socket) => {
43010
+ this.dropPendingV2Events();
43013
43011
  this.#socket = socket;
43014
43012
  };
43015
43013
  disconnect = (socket) => {
43016
43014
  if (this.#socket === socket) {
43017
43015
  this.#socket = null;
43016
+ this.dropPendingV2Events();
43018
43017
  }
43019
43018
  };
43020
43019
  close = () => {
43021
43020
  this.#socket = null;
43021
+ this.dropPendingV2Events();
43022
43022
  };
43023
43023
  publishOperationFailure = (sessionId, requestId, code, message) => {
43024
43024
  this.#send({ kind: "session.operation.failed", sessionId, requestId, code, message });
43025
43025
  };
43026
43026
  publishStatus = (event) => this.#send(event);
43027
- publishV2 = (event) => this.#send({ event, kind: SESSION_EVENT_V2_KIND });
43028
43027
  #send = (message) => {
43029
43028
  const socket = this.#socket;
43030
43029
  if (socket === null || socket.readyState !== WebSocket8.OPEN) {
@@ -43040,6 +43039,44 @@ var DaemonSessionEventPublisher = class {
43040
43039
  } catch {
43041
43040
  }
43042
43041
  };
43042
+ publishV2 = (event) => {
43043
+ const socket = this.#socket;
43044
+ if (socket === null || socket.readyState !== WebSocket8.OPEN) {
43045
+ return;
43046
+ }
43047
+ this.#pendingV2Events.push(event);
43048
+ if (this.#pendingV2Events.length >= SESSION_EVENT_V2_BATCH_MAX_SIZE) {
43049
+ this.flushV2Events(socket);
43050
+ return;
43051
+ }
43052
+ this.#pendingV2Task ??= this.#timer.schedule(
43053
+ () => this.flushV2Events(socket),
43054
+ SESSION_EVENT_V2_BATCH_WINDOW_MILLISECONDS
43055
+ );
43056
+ };
43057
+ dropPendingV2Events = () => {
43058
+ this.#pendingV2Task?.cancel();
43059
+ this.#pendingV2Task = null;
43060
+ this.#pendingV2Events = [];
43061
+ };
43062
+ flushV2Events = (socket) => {
43063
+ this.#pendingV2Task?.cancel();
43064
+ this.#pendingV2Task = null;
43065
+ const events = this.#pendingV2Events;
43066
+ this.#pendingV2Events = [];
43067
+ if (events.length === 0 || this.#socket !== socket || socket.readyState !== WebSocket8.OPEN) {
43068
+ return;
43069
+ }
43070
+ const encoded = encodeDaemonToServiceMessage({ events, kind: SESSION_EVENT_V2_KIND });
43071
+ if (socket.bufferedAmount + Buffer.byteLength(encoded, "utf8") > MAX_BUFFERED_BYTES) {
43072
+ socket.close(1013, "Live event transport overloaded");
43073
+ return;
43074
+ }
43075
+ try {
43076
+ socket.send(encoded);
43077
+ } catch {
43078
+ }
43079
+ };
43043
43080
  };
43044
43081
 
43045
43082
  // src/relay-connection/timer.ts
@@ -43283,7 +43320,7 @@ async function runDaemon(config2, audit, signal, timer = systemDaemonTimer, opti
43283
43320
  const sessionStore = new SqliteAcpSessionStore(sessionDatabase, eventsV2);
43284
43321
  await using externalContent = new LocalExternalContentStore(stateDirectory);
43285
43322
  const operations = new DaemonOperationState();
43286
- const publisher = new DaemonSessionEventPublisher();
43323
+ const publisher = new DaemonSessionEventPublisher(timer);
43287
43324
  const eventLogV2 = new DaemonSessionEventLogV2(
43288
43325
  publisher,
43289
43326
  (sessionId, event) => agentRuntime.recordLifecycleEventV2(sessionId, event),