@moxt-ai/mobius 0.0.401 → 0.0.405

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 (37) hide show
  1. package/dist/{chunk-IWT4C7CT.js → chunk-2BOWMHCH.js} +87 -24
  2. package/dist/{chunk-IWT4C7CT.js.map → chunk-2BOWMHCH.js.map} +2 -2
  3. package/dist/{chunk-6XG7XQ36.js → chunk-CVS27UI7.js} +2 -2
  4. package/dist/{chunk-6XG7XQ36.js.map → chunk-CVS27UI7.js.map} +1 -1
  5. package/dist/{cli-A2ZF2SX5.js → cli-PLLSZH6C.js} +19 -6
  6. package/dist/{cli-A2ZF2SX5.js.map → cli-PLLSZH6C.js.map} +3 -3
  7. package/dist/cli.js +2 -2
  8. package/dist/engine/acp/harness/codex/app-server-protocol.d.ts +3 -0
  9. package/dist/engine/acp/harness/codex/app-server-protocol.d.ts.map +1 -1
  10. package/dist/engine/acp/harness/codex/app-server-protocol.js +3 -0
  11. package/dist/engine/acp/harness/codex/app-server-protocol.js.map +1 -1
  12. package/dist/engine/acp/harness/codex/owned-agent.d.ts.map +1 -1
  13. package/dist/engine/acp/harness/codex/owned-agent.js +34 -8
  14. package/dist/engine/acp/harness/codex/owned-agent.js.map +1 -1
  15. package/dist/engine/runtime/command/registry/prompt.d.ts.map +1 -1
  16. package/dist/engine/runtime/command/registry/prompt.js +15 -5
  17. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  18. package/dist/engine/session/native/native-session-browser.d.ts.map +1 -1
  19. package/dist/engine/session/native/native-session-browser.js +16 -10
  20. package/dist/engine/session/native/native-session-browser.js.map +1 -1
  21. package/dist/engine/session/prompt/prompt-lifecycle.d.ts +1 -1
  22. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  23. package/dist/engine/session/prompt/prompt-lifecycle.js +2 -2
  24. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  25. package/dist/engine/session/turn/active-turn.d.ts +2 -0
  26. package/dist/engine/session/turn/active-turn.d.ts.map +1 -1
  27. package/dist/engine/session/turn/active-turn.js +2 -0
  28. package/dist/engine/session/turn/active-turn.js.map +1 -1
  29. package/dist/engine/session/workspace/workspace-directory.d.ts +10 -0
  30. package/dist/engine/session/workspace/workspace-directory.d.ts.map +1 -1
  31. package/dist/engine/session/workspace/workspace-directory.js +13 -0
  32. package/dist/engine/session/workspace/workspace-directory.js.map +1 -1
  33. package/dist/engine.js +2 -2
  34. package/dist/storage/daemon/daemon-lock.d.ts.map +1 -1
  35. package/dist/storage/daemon/daemon-lock.js +26 -3
  36. package/dist/storage/daemon/daemon-lock.js.map +1 -1
  37. package/package.json +2 -2
@@ -3,7 +3,7 @@ import {
3
3
  __export,
4
4
  __using,
5
5
  package_default
6
- } from "./chunk-6XG7XQ36.js";
6
+ } from "./chunk-CVS27UI7.js";
7
7
 
8
8
  // src/engine/runtime/relay/runtime-revocation.ts
9
9
  var runtimeRevocationCloseCode = 1008;
@@ -20726,7 +20726,9 @@ var promptExecutionContextSchema = external_exports.object({
20726
20726
  additionalDirectoryIds: external_exports.array(DIRECTORY_IDENTIFIER).max(16).readonly()
20727
20727
  }).readonly();
20728
20728
  var lifecycleMetadataSchema = external_exports.discriminatedUnion("kind", [
20729
- external_exports.object({ kind: external_exports.literal("session.queue.changed") }).readonly(),
20729
+ // `changedByCommandId` names the command whose admission to or departure from the queue changed it. Runtimes
20730
+ // before it existed omit it, so a reader must treat an unnamed change as possibly any command's.
20731
+ external_exports.object({ changedByCommandId: identifierStringSchema.optional(), kind: external_exports.literal("session.queue.changed") }).readonly(),
20730
20732
  external_exports.object({ event: sessionPermissionRequestedEventSchema, kind: external_exports.literal("session.permission.requested") }).readonly(),
20731
20733
  external_exports.object({ event: sessionPermissionResolvedEventSchema, kind: external_exports.literal("session.permission.resolved") }).readonly(),
20732
20734
  external_exports.object({ event: sessionElicitationRequestedEventSchema, kind: external_exports.literal("session.elicitation.requested") }).readonly(),
@@ -21087,6 +21089,7 @@ var SESSION_STATUS_CHANGED_KIND = "session.status.changed";
21087
21089
  var SESSION_COMMANDS_UPDATED_KIND = "session.commands.updated";
21088
21090
  var SESSION_INFO_UPDATED_KIND = "session.info.updated";
21089
21091
  var SESSION_OPERATION_FAILED_KIND = "session.operation.failed";
21092
+ var SESSION_PROMPT_ACCEPTED_KIND = "session.prompt.accepted";
21090
21093
  var sessionStatusChangedEventSchema = external_exports.object({
21091
21094
  kind: external_exports.literal(SESSION_STATUS_CHANGED_KIND),
21092
21095
  sessionId: identifierStringSchema,
@@ -21214,6 +21217,12 @@ var sessionOperationFailedEventSchema = external_exports.object({
21214
21217
  runtimeTimings: runtimeTimingsSchema.optional(),
21215
21218
  sessionId: external_exports.string().max(128)
21216
21219
  }).readonly();
21220
+ var sessionPromptAcceptedEventSchema = external_exports.object({
21221
+ kind: external_exports.literal(SESSION_PROMPT_ACCEPTED_KIND),
21222
+ requestId: identifierStringSchema,
21223
+ sessionId: identifierStringSchema,
21224
+ state: external_exports.enum(["queued", "running", "settled"])
21225
+ }).readonly();
21217
21226
  var decodeSessionListCommand = (encoded) => decodeZodMessage(encoded, sessionListCommandSchema);
21218
21227
  var encodeSessionListCommand = (message) => encodeZodMessage(message, sessionListCommandSchema);
21219
21228
  var decodeSessionsListedEvent = (encoded) => decodeZodMessage(encoded, sessionsListedEventSchema);
@@ -21242,6 +21251,8 @@ var decodeSessionInfoUpdatedEvent = (encoded) => decodeZodMessage(encoded, sessi
21242
21251
  var encodeSessionInfoUpdatedEvent = (message) => encodeZodMessage(message, sessionInfoUpdatedEventSchema);
21243
21252
  var decodeSessionOperationFailedEvent = (encoded) => decodeZodMessage(encoded, sessionOperationFailedEventSchema);
21244
21253
  var encodeSessionOperationFailedEvent = (message) => encodeZodMessage(message, sessionOperationFailedEventSchema);
21254
+ var decodeSessionPromptAcceptedEvent = (encoded) => decodeZodMessage(encoded, sessionPromptAcceptedEventSchema);
21255
+ var encodeSessionPromptAcceptedEvent = (message) => encodeZodMessage(message, sessionPromptAcceptedEventSchema);
21245
21256
 
21246
21257
  // ../mobius-sdk/src/protocol/session/prompt/commands.ts
21247
21258
  var SESSION_PROMPT_KIND = "session.prompt";
@@ -21983,6 +21994,11 @@ var daemonToServiceSignatures = {
21983
21994
  encodeSessionOperationFailedEvent,
21984
21995
  decodeSessionOperationFailedEvent
21985
21996
  ),
21997
+ [SESSION_PROMPT_ACCEPTED_KIND]: defineMessageSignature(
21998
+ SESSION_PROMPT_ACCEPTED_KIND,
21999
+ encodeSessionPromptAcceptedEvent,
22000
+ decodeSessionPromptAcceptedEvent
22001
+ ),
21986
22002
  [SESSION_HISTORY_PAGE_LOADED_KIND]: defineMessageSignature(
21987
22003
  SESSION_HISTORY_PAGE_LOADED_KIND,
21988
22004
  encodeSessionHistoryPageLoaded,
@@ -68417,6 +68433,7 @@ var turnSchema = external_exports.object({
68417
68433
  status: turnStatusSchema
68418
68434
  });
68419
68435
  var turnSteerResponseSchema = external_exports.object({ turnId: boundedText(256) });
68436
+ var threadNotificationSchema = external_exports.object({ threadId: boundedText(256).min(1) });
68420
68437
  var turnNotificationSchema = external_exports.object({
68421
68438
  thread: external_exports.object({ id: boundedText(256) }).nullish(),
68422
68439
  threadId: boundedText(256),
@@ -69600,6 +69617,19 @@ var APPROVAL_REASON_CHARACTER_LIMIT = 500;
69600
69617
  var APPROVAL_TIMEOUT_MILLISECONDS = 36e5;
69601
69618
  var COMPACT_TIMEOUT_MILLISECONDS = 36e5;
69602
69619
  var COMPACT_ITEM_WAIT_MILLISECONDS = 6e5;
69620
+ var THREAD_NOTIFICATIONS = /* @__PURE__ */ new Set([
69621
+ "item/agentMessage/delta",
69622
+ "item/completed",
69623
+ "item/reasoning/summaryTextDelta",
69624
+ "item/reasoning/textDelta",
69625
+ "item/started",
69626
+ "thread/compacted",
69627
+ "thread/name/updated",
69628
+ "thread/settings/updated",
69629
+ "turn/completed",
69630
+ "turn/plan/updated",
69631
+ "turn/started"
69632
+ ]);
69603
69633
  var APPROVAL_OPTIONS = Object.freeze([
69604
69634
  { kind: "allow_once", name: "Allow once", optionId: "accept" },
69605
69635
  { kind: "allow_always", name: "Allow for this session", optionId: "acceptForSession" },
@@ -69871,9 +69901,16 @@ var CodexOwnedAcpAgent = class {
69871
69901
  await pending;
69872
69902
  };
69873
69903
  onNotification = async (method, params) => {
69904
+ if (!THREAD_NOTIFICATIONS.has(method)) {
69905
+ return;
69906
+ }
69907
+ const thread = threadNotificationSchema.safeParse(params);
69908
+ if (!thread.success || thread.data.threadId !== this.#context.threadId()) {
69909
+ return;
69910
+ }
69874
69911
  if (method === "turn/started") {
69875
69912
  const decoded = turnNotificationSchema.safeParse(params);
69876
- if (decoded.success && decoded.data.threadId === this.#context.threadId() && this.#turn !== null && (this.#turn.turn.id === "" || this.#turn.turn.id === decoded.data.turn.id)) {
69913
+ if (decoded.success && this.#turn !== null && (this.#turn.turn.id === "" || this.#turn.turn.id === decoded.data.turn.id)) {
69877
69914
  this.#turn.turn.id = decoded.data.turn.id;
69878
69915
  this.#nativeTurnId = decoded.data.turn.id;
69879
69916
  }
@@ -69881,7 +69918,7 @@ var CodexOwnedAcpAgent = class {
69881
69918
  }
69882
69919
  if (method === "turn/completed") {
69883
69920
  const decoded = turnNotificationSchema.safeParse(params);
69884
- if (decoded.success && decoded.data.threadId === this.#context.threadId()) {
69921
+ if (decoded.success) {
69885
69922
  await this.#enqueue(async () => {
69886
69923
  for (const [id, mode] of this.#runningCommands) {
69887
69924
  if (mode === "background") {
@@ -69914,7 +69951,7 @@ var CodexOwnedAcpAgent = class {
69914
69951
  }
69915
69952
  if (method === "thread/settings/updated") {
69916
69953
  const decoded = threadSettingsUpdatedSchema.safeParse(params);
69917
- if (decoded.success && decoded.data.threadId === this.#context.threadId()) {
69954
+ if (decoded.success) {
69918
69955
  const mode = decoded.data.threadSettings.collaborationMode?.mode;
69919
69956
  if (this.#settings.observeCollaborationMode(mode)) {
69920
69957
  await this.#enqueue(async () => {
@@ -69926,7 +69963,7 @@ var CodexOwnedAcpAgent = class {
69926
69963
  }
69927
69964
  if (method === "turn/plan/updated") {
69928
69965
  const plan = params.plan;
69929
- if (Array.isArray(plan) && params.threadId === this.#context.threadId()) {
69966
+ if (Array.isArray(plan)) {
69930
69967
  const entries = plan.map((step) => ({
69931
69968
  content: typeof step === "object" && step !== null && "step" in step ? String(Reflect.get(step, "step")) : "",
69932
69969
  priority: "medium",
@@ -69940,7 +69977,7 @@ var CodexOwnedAcpAgent = class {
69940
69977
  }
69941
69978
  if (method === "item/reasoning/summaryTextDelta" || method === "item/reasoning/textDelta") {
69942
69979
  const decoded = reasoningTextDeltaParamsSchema.safeParse(params);
69943
- if (decoded.success && decoded.data.threadId === this.#context.threadId() && this.#turn !== null && decoded.data.turnId === this.#turn.turn.id && decoded.data.delta.length > 0) {
69980
+ if (decoded.success && this.#turn !== null && decoded.data.turnId === this.#turn.turn.id && decoded.data.delta.length > 0) {
69944
69981
  const source = method === "item/reasoning/textDelta" ? "content" : "summary";
69945
69982
  const previous = this.#streamedReasoningSources.get(decoded.data.itemId);
69946
69983
  this.#streamedReasoningSources.set(
@@ -69959,7 +69996,7 @@ var CodexOwnedAcpAgent = class {
69959
69996
  }
69960
69997
  if (method === "item/agentMessage/delta") {
69961
69998
  const decoded = reasoningTextDeltaParamsSchema.safeParse(params);
69962
- if (decoded.success && decoded.data.threadId === this.#context.threadId() && this.#turn !== null && decoded.data.turnId === this.#turn.turn.id && decoded.data.delta.length > 0) {
69999
+ if (decoded.success && this.#turn !== null && decoded.data.turnId === this.#turn.turn.id && decoded.data.delta.length > 0) {
69963
70000
  this.#agentMessages.set(decoded.data.itemId, "streaming");
69964
70001
  await this.#enqueue(async () => {
69965
70002
  await this.#context.emit(agentMessageUpdate(decoded.data.itemId, decoded.data.delta));
@@ -69977,7 +70014,7 @@ var CodexOwnedAcpAgent = class {
69977
70014
  if (item.type === "userMessage") {
69978
70015
  if (method === "item/started") {
69979
70016
  const turn = this.#turn;
69980
- if (turn === null || typeof params !== "object" || params === null || Reflect.get(params, "threadId") !== this.#context.threadId() || Reflect.get(params, "turnId") !== turn.turn.id) {
70017
+ if (turn === null || typeof params !== "object" || params === null || Reflect.get(params, "turnId") !== turn.turn.id) {
69981
70018
  return;
69982
70019
  }
69983
70020
  const submitted = item.clientId === turn.clientId ? turn.content : item.clientId == null ? void 0 : turn.steeringContent.get(item.clientId);
@@ -88319,18 +88356,22 @@ var NativeSessionService = class {
88319
88356
  title: title2
88320
88357
  };
88321
88358
  };
88322
- listSessions = async (limit, signal) => await this.describeSessions(this.#sessions.listSessions(limit), signal);
88323
- querySessions = async (sessionIds, signal) => await this.describeSessions(this.#sessions.findSessions(sessionIds), signal);
88324
- describeSessions = async (sessions, signal) => {
88359
+ listSessions = async (limit, signal) => {
88360
+ signal.throwIfAborted();
88361
+ return this.describeSessions(this.#sessions.listSessions(limit));
88362
+ };
88363
+ querySessions = async (sessionIds, signal) => {
88364
+ signal.throwIfAborted();
88365
+ return this.describeSessions(this.#sessions.findSessions(sessionIds));
88366
+ };
88367
+ describeSessions = (sessions) => {
88325
88368
  const entries = [];
88326
88369
  for (const session of sessions) {
88327
- signal.throwIfAborted();
88328
- const directory = await this.#directories.identify(this.#bindingId, session.cwd, signal);
88329
- const additionalDirectories = [];
88330
- for (const path7 of session.additionalDirectories) {
88331
- const identified = await this.#directories.identify(this.#bindingId, path7, signal);
88332
- additionalDirectories.push({ directoryId: identified.directoryId, name: identified.name });
88333
- }
88370
+ const directory = this.#directories.identifyRecorded(this.#bindingId, session.cwd);
88371
+ const additionalDirectories = session.additionalDirectories.map((path7) => {
88372
+ const identified = this.#directories.identifyRecorded(this.#bindingId, path7);
88373
+ return { directoryId: identified.directoryId, name: identified.name };
88374
+ });
88334
88375
  entries.push({
88335
88376
  additionalDirectories,
88336
88377
  agentId: session.agentId,
@@ -88586,10 +88627,10 @@ var PromptLifecycle = class {
88586
88627
  await this.#recordLifecycle(sessionId, event);
88587
88628
  this.publishTerminal(sessionId, event.payload.commandId);
88588
88629
  };
88589
- queueChanged = async (sessionId) => {
88630
+ queueChanged = async (sessionId, commandId) => {
88590
88631
  await this.#recordLifecycle(sessionId, {
88591
88632
  type: "lifecycle-metadata",
88592
- payload: { kind: "session.queue.changed" }
88633
+ payload: { changedByCommandId: commandId, kind: "session.queue.changed" }
88593
88634
  });
88594
88635
  };
88595
88636
  completed = async (sessionId, commandId, stopReason) => {
@@ -89183,6 +89224,8 @@ var ActiveRuntimeTurn = class {
89183
89224
  }
89184
89225
  this.#admission = { kind: "queued", promotion: Promise.withResolvers() };
89185
89226
  };
89227
+ /** Whether the prompt was admitted to its Session's queue, whatever happened to it afterwards. */
89228
+ enteredQueue = () => this.command.disposition === SessionPromptDisposition.Queue && this.#admission.kind !== "waiting";
89186
89229
  isQueued = () => (this.#admission.kind === "queued" || this.#admission.kind === "admitted" && this.#admission.disposition === SessionPromptDisposition.Queue) && !this.#started() && !this.#controller.signal.aborted;
89187
89230
  abortRuntime = () => {
89188
89231
  this.#controller.abort();
@@ -89575,6 +89618,19 @@ var WorkspaceDirectoryService = class {
89575
89618
  label: this.label(path7)
89576
89619
  };
89577
89620
  };
89621
+ /**
89622
+ * Names a directory a Session recorded when it was resolved, without reading the filesystem. A Session
89623
+ * keeps its identity after its directory is moved, deleted or unmounted; using the Session resolves the
89624
+ * directory again and fails there.
89625
+ */
89626
+ identifyRecorded = (bindingId, recordedPath) => {
89627
+ this.authorizeMachine(bindingId);
89628
+ return {
89629
+ directoryId: encodePath(recordedPath),
89630
+ name: basename7(recordedPath) || recordedPath,
89631
+ label: this.label(recordedPath)
89632
+ };
89633
+ };
89578
89634
  resolve = async (bindingId, id, signal) => {
89579
89635
  this.authorizeMachine(bindingId);
89580
89636
  return await this.resolvePath(this.requestedPath(id), signal);
@@ -92157,6 +92213,13 @@ var sessionPromptCommand = {
92157
92213
  }
92158
92214
  if (receipt.kind === "duplicate") {
92159
92215
  const outcome = receipt.outcome;
92216
+ const original = context.sessionTurns.get(message.commandId, message.sessionId);
92217
+ send(context.socket, {
92218
+ kind: "session.prompt.accepted",
92219
+ requestId: message.commandId,
92220
+ sessionId: message.sessionId,
92221
+ state: outcome !== void 0 ? "settled" : original?.isQueued() === true ? "queued" : "running"
92222
+ });
92160
92223
  if (outcome !== void 0) {
92161
92224
  void context.eventProjection.replayOutcome(message.sessionId, outcome).catch((cause) => {
92162
92225
  console.error("Could not replay the persisted execution outcome", cause);
@@ -92177,7 +92240,7 @@ var sessionPromptCommand = {
92177
92240
  const turn = context.sessionTurns.start(message, receipt.attemptId);
92178
92241
  context.eventProjection.requested(message);
92179
92242
  const queueChanged = () => {
92180
- void context.eventProjection.queueChanged(message.sessionId).catch((error62) => {
92243
+ void context.eventProjection.queueChanged(message.sessionId, message.commandId).catch((error62) => {
92181
92244
  console.error("Could not record queue change", error62);
92182
92245
  });
92183
92246
  };
@@ -92211,7 +92274,7 @@ var sessionPromptCommand = {
92211
92274
  }).finally(() => {
92212
92275
  context.sessionTurns.finish(turn);
92213
92276
  context.eventProjection.publishTerminal(message.sessionId, message.commandId);
92214
- if (message.disposition === SessionPromptDisposition.Queue) {
92277
+ if (turn.enteredQueue()) {
92215
92278
  queueChanged();
92216
92279
  }
92217
92280
  });
@@ -93882,4 +93945,4 @@ export {
93882
93945
  * MIT Licensed
93883
93946
  *)
93884
93947
  */
93885
- //# sourceMappingURL=chunk-IWT4C7CT.js.map
93948
+ //# sourceMappingURL=chunk-2BOWMHCH.js.map