@moxt-ai/mobius 0.0.412 → 0.0.413

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 (26) hide show
  1. package/dist/{chunk-PMJDO7PC.js → chunk-CODQ63O2.js} +2 -2
  2. package/dist/{chunk-PMJDO7PC.js.map → chunk-CODQ63O2.js.map} +1 -1
  3. package/dist/{chunk-7ER5P6H5.js → chunk-RROKC2HZ.js} +51 -25
  4. package/dist/{chunk-7ER5P6H5.js.map → chunk-RROKC2HZ.js.map} +2 -2
  5. package/dist/{cli-KGI5XDXC.js → cli-F67ZNI2N.js} +3 -3
  6. package/dist/cli.js +2 -2
  7. package/dist/engine/runtime/command/registry/interactions.d.ts.map +1 -1
  8. package/dist/engine/runtime/command/registry/interactions.js +6 -2
  9. package/dist/engine/runtime/command/registry/interactions.js.map +1 -1
  10. package/dist/engine/runtime/command/registry/prompt.d.ts.map +1 -1
  11. package/dist/engine/runtime/command/registry/prompt.js +1 -1
  12. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  13. package/dist/engine/session/api/session-layer.d.ts.map +1 -1
  14. package/dist/engine/session/api/session-layer.js +12 -4
  15. package/dist/engine/session/api/session-layer.js.map +1 -1
  16. package/dist/engine/session/prompt/prompt-lifecycle.d.ts +6 -5
  17. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  18. package/dist/engine/session/prompt/prompt-lifecycle.js +5 -4
  19. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  20. package/dist/engine/session/turn/execution-receipts.d.ts +26 -6
  21. package/dist/engine/session/turn/execution-receipts.d.ts.map +1 -1
  22. package/dist/engine/session/turn/execution-receipts.js +35 -15
  23. package/dist/engine/session/turn/execution-receipts.js.map +1 -1
  24. package/dist/engine.js +2 -2
  25. package/package.json +1 -1
  26. /package/dist/{cli-KGI5XDXC.js.map → cli-F67ZNI2N.js.map} +0 -0
@@ -80,7 +80,7 @@ var __callDispose = (stack, error, hasError) => {
80
80
  // package.json
81
81
  var package_default = {
82
82
  name: "@moxt-ai/mobius",
83
- version: "0.0.412",
83
+ version: "0.0.413",
84
84
  description: "Mobius CLI for pairing and running local AI agent services.",
85
85
  type: "module",
86
86
  bin: {
@@ -171,4 +171,4 @@ export {
171
171
  __callDispose,
172
172
  package_default
173
173
  };
174
- //# sourceMappingURL=chunk-PMJDO7PC.js.map
174
+ //# sourceMappingURL=chunk-CODQ63O2.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../package.json"],
4
- "sourcesContent": ["{\n \"name\": \"@moxt-ai/mobius\",\n \"version\": \"0.0.412\",\n \"description\": \"Mobius CLI for pairing and running local AI agent services.\",\n \"type\": \"module\",\n \"bin\": {\n \"mobius\": \"dist/cli.js\"\n },\n \"exports\": {\n \"./engine\": {\n \"mobius-source\": \"./src/exports/engine.ts\",\n \"types\": \"./dist/exports/engine.d.ts\",\n \"default\": \"./dist/engine.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.txt\"\n ],\n \"engines\": {\n \"node\": \">=22.19.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \"./engine\": {\n \"types\": \"./dist/exports/engine.d.ts\",\n \"import\": \"./dist/engine.js\",\n \"default\": \"./dist/engine.js\"\n }\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/moxt-ai/mobius.git\",\n \"directory\": \"packages/cli\"\n },\n \"scripts\": {\n \"prebuild\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"build\": \"node scripts/build.ts && tsc --project tsconfig.build.json\",\n \"dev\": \"node --watch src/cli/entrypoint.ts\",\n \"pretypecheck\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"prepack\": \"pnpm build\",\n \"start\": \"node dist/cli.js\",\n \"typecheck\": \"tsc --project tsconfig.json && tsc --project tests/tsconfig.json\",\n \"pretest:controlled\": \"pnpm build\",\n \"test:controlled\": \"vitest run tests/sessions tests/runtime\",\n \"pretest:manual\": \"pnpm pretest:controlled\",\n \"test:manual\": \"vitest run tests/manual\",\n \"pretest:agents\": \"pnpm build\",\n \"test:agents\": \"vitest run tests/agents --maxWorkers=2\",\n \"pretest:pressure\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"test:pressure\": \"node tests/pressure/concurrent-sessions.mjs\"\n },\n \"dependencies\": {\n \"@agentclientprotocol/sdk\": \"^1.4.0\",\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.257\",\n \"commander\": \"15.0.0\",\n \"semver\": \"^7.8.5\",\n \"undici\": \"8.12.2\",\n \"zod\": \"^4.6.7\"\n },\n \"devDependencies\": {\n \"@anthropic-ai/sdk\": \"0.122.0\",\n \"@moxt-ai/mobius-sdk\": \"workspace:*\",\n \"@moxt-ai/mobius-test\": \"workspace:*\",\n \"@types/node\": \"^24.13.5\",\n \"@types/semver\": \"^7.8.0\",\n \"@types/ws\": \"^8.18.1\",\n \"drizzle-kit\": \"1.0.0-rc.4\",\n \"drizzle-orm\": \"1.0.0-rc.4\",\n \"esbuild\": \"0.28.2\",\n \"valibot\": \"1.5.0\",\n \"ws\": \"^8.21.3\"\n },\n \"keywords\": [],\n \"author\": \"Moxt\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/moxt-ai/mobius/issues\"\n },\n \"homepage\": \"https://github.com/moxt-ai/mobius#readme\"\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"@moxt-ai/mobius\",\n \"version\": \"0.0.413\",\n \"description\": \"Mobius CLI for pairing and running local AI agent services.\",\n \"type\": \"module\",\n \"bin\": {\n \"mobius\": \"dist/cli.js\"\n },\n \"exports\": {\n \"./engine\": {\n \"mobius-source\": \"./src/exports/engine.ts\",\n \"types\": \"./dist/exports/engine.d.ts\",\n \"default\": \"./dist/engine.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.txt\"\n ],\n \"engines\": {\n \"node\": \">=22.19.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \"./engine\": {\n \"types\": \"./dist/exports/engine.d.ts\",\n \"import\": \"./dist/engine.js\",\n \"default\": \"./dist/engine.js\"\n }\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/moxt-ai/mobius.git\",\n \"directory\": \"packages/cli\"\n },\n \"scripts\": {\n \"prebuild\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"build\": \"node scripts/build.ts && tsc --project tsconfig.build.json\",\n \"dev\": \"node --watch src/cli/entrypoint.ts\",\n \"pretypecheck\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"prepack\": \"pnpm build\",\n \"start\": \"node dist/cli.js\",\n \"typecheck\": \"tsc --project tsconfig.json && tsc --project tests/tsconfig.json\",\n \"pretest:controlled\": \"pnpm build\",\n \"test:controlled\": \"vitest run tests/sessions tests/runtime\",\n \"pretest:manual\": \"pnpm pretest:controlled\",\n \"test:manual\": \"vitest run tests/manual\",\n \"pretest:agents\": \"pnpm build\",\n \"test:agents\": \"vitest run tests/agents --maxWorkers=2\",\n \"pretest:pressure\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"test:pressure\": \"node tests/pressure/concurrent-sessions.mjs\"\n },\n \"dependencies\": {\n \"@agentclientprotocol/sdk\": \"^1.4.0\",\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.257\",\n \"commander\": \"15.0.0\",\n \"semver\": \"^7.8.5\",\n \"undici\": \"8.12.2\",\n \"zod\": \"^4.6.7\"\n },\n \"devDependencies\": {\n \"@anthropic-ai/sdk\": \"0.122.0\",\n \"@moxt-ai/mobius-sdk\": \"workspace:*\",\n \"@moxt-ai/mobius-test\": \"workspace:*\",\n \"@types/node\": \"^24.13.5\",\n \"@types/semver\": \"^7.8.0\",\n \"@types/ws\": \"^8.18.1\",\n \"drizzle-kit\": \"1.0.0-rc.4\",\n \"drizzle-orm\": \"1.0.0-rc.4\",\n \"esbuild\": \"0.28.2\",\n \"valibot\": \"1.5.0\",\n \"ws\": \"^8.21.3\"\n },\n \"keywords\": [],\n \"author\": \"Moxt\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/moxt-ai/mobius/issues\"\n },\n \"homepage\": \"https://github.com/moxt-ai/mobius#readme\"\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACI,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,KAAO;AAAA,IACH,QAAU;AAAA,EACd;AAAA,EACA,SAAW;AAAA,IACP,YAAY;AAAA,MACR,iBAAiB;AAAA,MACjB,OAAS;AAAA,MACT,SAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,OAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EACA,SAAW;AAAA,IACP,MAAQ;AAAA,EACZ;AAAA,EACA,eAAiB;AAAA,IACb,QAAU;AAAA,IACV,SAAW;AAAA,MACP,YAAY;AAAA,QACR,OAAS;AAAA,QACT,QAAU;AAAA,QACV,SAAW;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAc;AAAA,IACV,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACjB;AAAA,EACA,SAAW;AAAA,IACP,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,KAAO;AAAA,IACP,cAAgB;AAAA,IAChB,SAAW;AAAA,IACX,OAAS;AAAA,IACT,WAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,EACrB;AAAA,EACA,cAAgB;AAAA,IACZ,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,WAAa;AAAA,IACb,QAAU;AAAA,IACV,QAAU;AAAA,IACV,KAAO;AAAA,EACX;AAAA,EACA,iBAAmB;AAAA,IACf,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,eAAe;AAAA,IACf,SAAW;AAAA,IACX,SAAW;AAAA,IACX,IAAM;AAAA,EACV;AAAA,EACA,UAAY,CAAC;AAAA,EACb,QAAU;AAAA,EACV,SAAW;AAAA,EACX,MAAQ;AAAA,IACJ,KAAO;AAAA,EACX;AAAA,EACA,UAAY;AAChB;",
6
6
  "names": []
7
7
  }
@@ -3,7 +3,7 @@ import {
3
3
  __export,
4
4
  __using,
5
5
  package_default
6
- } from "./chunk-PMJDO7PC.js";
6
+ } from "./chunk-CODQ63O2.js";
7
7
 
8
8
  // src/engine/runtime/relay/runtime-revocation.ts
9
9
  var runtimeRevocationCloseCode = 1008;
@@ -88695,14 +88695,15 @@ var PromptLifecycle = class {
88695
88695
  this.publishTerminal(sessionId, event.payload.commandId);
88696
88696
  };
88697
88697
  /**
88698
- * Answers a retried request about a command with the outcome its receipt already holds. The restatement is marked,
88699
- * so Recording and status notifications do not take it for a new outcome, and it does not settle the receipt again.
88698
+ * Publishes again an outcome a receipt already holds, for clients that missed it. The restatement is marked, so
88699
+ * Recording and status notifications do not take it for a new outcome, and it does not settle the receipt again.
88700
+ * It keeps the time the outcome was recorded, which receivers that predate the marker report as when it ended.
88700
88701
  */
88701
- restateOutcome = (sessionId, event) => {
88702
+ restateOutcome = (sessionId, { event, recordedAt }) => {
88702
88703
  if (event.type !== "lifecycle-metadata" || !("commandId" in event.payload)) {
88703
88704
  return;
88704
88705
  }
88705
- const restated = this.#append(sessionId, event);
88706
+ const restated = this.#append(sessionId, event, recordedAt);
88706
88707
  this.#publishInOrder({ ...restated, mobiusMetadata: { ...restated.mobiusMetadata, restated: true } });
88707
88708
  };
88708
88709
  queueChanged = async (sessionId, commandId) => {
@@ -88859,6 +88860,11 @@ var cancelledBeforeStartOutcome = (commandId) => ({
88859
88860
  type: "lifecycle-metadata",
88860
88861
  payload: { kind: "prompt.completed", commandId, stopReason: "cancelled", execution: "not-started" }
88861
88862
  });
88863
+ var storedOutcome = (stored) => {
88864
+ const parsed = JSON.parse(stored);
88865
+ const event = decodeKnownSessionEventPayload(parsed);
88866
+ return event === null ? void 0 : { event, recordedAt: external_exports.object({ recordedAt: external_exports.string() }).parse(parsed).recordedAt };
88867
+ };
88862
88868
  var unexpectedStanding = (standing) => {
88863
88869
  throw new Error("Unexpected command standing", { cause: standing });
88864
88870
  };
@@ -88940,10 +88946,12 @@ var ExecutionReceipts = class {
88940
88946
  beginShutdown = () => {
88941
88947
  this.#closing = true;
88942
88948
  };
88943
- outcome = (commandId) => {
88949
+ outcome = (commandId) => this.restatedOutcome(commandId)?.event;
88950
+ /** The outcome the command's receipt holds, with the time it was recorded. */
88951
+ restatedOutcome = (commandId) => {
88944
88952
  const receipt = this.#executions.get(commandId);
88945
88953
  const outcome = receipt === void 0 ? null : executionOutcome(receipt.state);
88946
- return outcome === null ? void 0 : decodeKnownSessionEventPayload(JSON.parse(outcome)) ?? void 0;
88954
+ return outcome === null ? void 0 : storedOutcome(outcome);
88947
88955
  };
88948
88956
  /** The command's delivery as these receipts know it; another Session's command reads as unknown. */
88949
88957
  delivery = (commandId, sessionId) => {
@@ -89046,19 +89054,25 @@ var ExecutionReceipts = class {
89046
89054
  return { kind: "unavailable" };
89047
89055
  case "retryable":
89048
89056
  case "retained": {
89049
- const outcome2 = this.outcome(commandId);
89057
+ const outcome2 = this.restatedOutcome(commandId);
89050
89058
  return outcome2 === void 0 ? { kind: "unavailable" } : { kind: "restated", outcome: outcome2 };
89051
89059
  }
89052
89060
  case "expired":
89053
89061
  return {
89054
89062
  kind: "restated",
89055
89063
  outcome: {
89056
- type: "lifecycle-metadata",
89057
- payload: { kind: "prompt.completed", commandId, stopReason: "cancelled" }
89064
+ event: {
89065
+ type: "lifecycle-metadata",
89066
+ payload: { kind: "prompt.completed", commandId, stopReason: "cancelled" }
89067
+ },
89068
+ recordedAt: void 0
89058
89069
  }
89059
89070
  };
89060
89071
  case "cancelled":
89061
- return { kind: "restated", outcome: cancelledBeforeStartOutcome(commandId) };
89072
+ return {
89073
+ kind: "restated",
89074
+ outcome: { event: cancelledBeforeStartOutcome(commandId), recordedAt: void 0 }
89075
+ };
89062
89076
  case "unseen":
89063
89077
  break;
89064
89078
  default:
@@ -89139,14 +89153,19 @@ var ExecutionReceipts = class {
89139
89153
  if (event === null) {
89140
89154
  continue;
89141
89155
  }
89142
- const recordedAt = restoreCancellation || outcome === null ? (/* @__PURE__ */ new Date()).toISOString() : external_exports.object({ recordedAt: external_exports.string() }).parse(JSON.parse(outcome)).recordedAt;
89143
- recovered.push({ sessionId: receipt.sessionId, event, recordedAt });
89144
- if (restoreCancellation || outcome === null) {
89145
- this.#save(commandId, {
89146
- ...receipt,
89147
- state: settledExecution(receipt.state, JSON.stringify({ ...event, recordedAt }))
89148
- });
89156
+ if (!restoreCancellation && outcome !== null) {
89157
+ const restated = storedOutcome(outcome);
89158
+ if (restated !== void 0) {
89159
+ recovered.push({ kind: "restated", sessionId: receipt.sessionId, outcome: restated });
89160
+ }
89161
+ continue;
89149
89162
  }
89163
+ const recordedAt = (/* @__PURE__ */ new Date()).toISOString();
89164
+ recovered.push({ kind: "recorded", sessionId: receipt.sessionId, event, recordedAt });
89165
+ this.#save(commandId, {
89166
+ ...receipt,
89167
+ state: settledExecution(receipt.state, JSON.stringify({ ...event, recordedAt }))
89168
+ });
89150
89169
  }
89151
89170
  return recovered;
89152
89171
  };
@@ -89860,7 +89879,7 @@ function buildSessionLayer(options) {
89860
89879
  eventProjection.record(recorded);
89861
89880
  return true;
89862
89881
  },
89863
- (sessionId, event) => events.append(sessionId, event),
89882
+ (sessionId, event, recordedAt) => events.append(sessionId, event, recordedAt),
89864
89883
  activeSessions.recordSessionEvent,
89865
89884
  operations
89866
89885
  );
@@ -89897,8 +89916,15 @@ function buildSessionLayer(options) {
89897
89916
  };
89898
89917
  }
89899
89918
  );
89900
- for (const { sessionId, event, recordedAt } of operations.recover()) {
89901
- sink.publish(events.append(sessionId, event, recordedAt));
89919
+ for (const recovered of operations.recover()) {
89920
+ switch (recovered.kind) {
89921
+ case "recorded":
89922
+ sink.publish(events.append(recovered.sessionId, recovered.event, recovered.recordedAt));
89923
+ break;
89924
+ case "restated":
89925
+ eventProjection.restateOutcome(recovered.sessionId, recovered.outcome);
89926
+ break;
89927
+ }
89902
89928
  }
89903
89929
  return {
89904
89930
  activeSessions,
@@ -91742,10 +91768,10 @@ var sessionCancelBeforeStartCommand = {
91742
91768
  const turn = sessionTurns.get(message.commandId, message.sessionId);
91743
91769
  if (turn === void 0) {
91744
91770
  const cancelled = operations.recordCancellationBeforeAdmission(message.commandId, message.sessionId);
91745
- const outcome = cancelled.kind === "unavailable" ? void 0 : cancelled.outcome;
91771
+ const outcome = cancelled.kind === "unavailable" ? void 0 : cancelled.kind === "restated" ? cancelled.outcome.event : cancelled.outcome;
91746
91772
  if (outcome?.type === "lifecycle-metadata" && outcome.payload.kind === "prompt.completed" && promptCompletion(outcome.payload).kind === "cancelled") {
91747
91773
  if (cancelled.kind === "restated") {
91748
- eventProjection.restateOutcome(message.sessionId, outcome);
91774
+ eventProjection.restateOutcome(message.sessionId, cancelled.outcome);
91749
91775
  return;
91750
91776
  }
91751
91777
  void eventProjection.recordOutcome(message.sessionId, outcome).catch((error62) => {
@@ -92317,7 +92343,7 @@ var sessionPromptCommand = {
92317
92343
  sessionId: message.sessionId,
92318
92344
  state: receipt.state === "settled" ? "settled" : context.sessionTurns.get(message.commandId, message.sessionId)?.isQueued() === true ? "queued" : "running"
92319
92345
  });
92320
- const outcome = receipt.state === "settled" ? context.operations.outcome(message.commandId) : void 0;
92346
+ const outcome = receipt.state === "settled" ? context.operations.restatedOutcome(message.commandId) : void 0;
92321
92347
  if (outcome !== void 0) {
92322
92348
  context.eventProjection.restateOutcome(message.sessionId, outcome);
92323
92349
  }
@@ -94040,4 +94066,4 @@ export {
94040
94066
  * MIT Licensed
94041
94067
  *)
94042
94068
  */
94043
- //# sourceMappingURL=chunk-7ER5P6H5.js.map
94069
+ //# sourceMappingURL=chunk-RROKC2HZ.js.map