@moxt-ai/mobius 0.0.387 → 0.0.389

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 (57) hide show
  1. package/dist/{chunk-A62FEGIN.js → chunk-77O2RBRQ.js} +232 -188
  2. package/dist/{chunk-A62FEGIN.js.map → chunk-77O2RBRQ.js.map} +4 -4
  3. package/dist/{chunk-S7PKNDIS.js → chunk-Z6ERJZ2H.js} +2 -2
  4. package/dist/{chunk-S7PKNDIS.js.map → chunk-Z6ERJZ2H.js.map} +1 -1
  5. package/dist/{cli-43LPJ5ID.js → cli-I4NLPVNV.js} +3 -3
  6. package/dist/cli.js +2 -2
  7. package/dist/engine/runtime/command/registry/prompt.d.ts.map +1 -1
  8. package/dist/engine/runtime/command/registry/prompt.js +1 -3
  9. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  10. package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
  11. package/dist/engine/runtime/relay/session-event-publisher.js +2 -4
  12. package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
  13. package/dist/engine/session/api/session-layer.js +3 -3
  14. package/dist/engine/session/api/session-layer.js.map +1 -1
  15. package/dist/engine/session/live/agent-session.d.ts +13 -3
  16. package/dist/engine/session/live/agent-session.d.ts.map +1 -1
  17. package/dist/engine/session/live/agent-session.js +27 -23
  18. package/dist/engine/session/live/agent-session.js.map +1 -1
  19. package/dist/engine/session/manager/session-manager.d.ts +2 -0
  20. package/dist/engine/session/manager/session-manager.d.ts.map +1 -1
  21. package/dist/engine/session/manager/session-manager.js +27 -28
  22. package/dist/engine/session/manager/session-manager.js.map +1 -1
  23. package/dist/engine/session/prompt/execute-prompt.d.ts +7 -8
  24. package/dist/engine/session/prompt/execute-prompt.d.ts.map +1 -1
  25. package/dist/engine/session/prompt/execute-prompt.js +14 -11
  26. package/dist/engine/session/prompt/execute-prompt.js.map +1 -1
  27. package/dist/engine/session/prompt/prompt-lifecycle.d.ts +8 -4
  28. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  29. package/dist/engine/session/prompt/prompt-lifecycle.js +18 -17
  30. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  31. package/dist/engine/session/turn/active-executions.d.ts +27 -8
  32. package/dist/engine/session/turn/active-executions.d.ts.map +1 -1
  33. package/dist/engine/session/turn/active-executions.js +76 -22
  34. package/dist/engine/session/turn/active-executions.js.map +1 -1
  35. package/dist/engine/session/turn/active-turn.d.ts +10 -8
  36. package/dist/engine/session/turn/active-turn.d.ts.map +1 -1
  37. package/dist/engine/session/turn/active-turn.js +45 -36
  38. package/dist/engine/session/turn/active-turn.js.map +1 -1
  39. package/dist/engine/session/turn/execution-receipts.d.ts +6 -2
  40. package/dist/engine/session/turn/execution-receipts.d.ts.map +1 -1
  41. package/dist/engine/session/turn/execution-receipts.js +18 -32
  42. package/dist/engine/session/turn/execution-receipts.js.map +1 -1
  43. package/dist/engine/session/turn/session-execution.d.ts +4 -2
  44. package/dist/engine/session/turn/session-execution.d.ts.map +1 -1
  45. package/dist/engine/session/turn/session-execution.js +8 -7
  46. package/dist/engine/session/turn/session-execution.js.map +1 -1
  47. package/dist/engine/session/turn/session-turns.d.ts +0 -1
  48. package/dist/engine/session/turn/session-turns.d.ts.map +1 -1
  49. package/dist/engine/session/turn/session-turns.js +0 -1
  50. package/dist/engine/session/turn/session-turns.js.map +1 -1
  51. package/dist/engine.js +2 -2
  52. package/package.json +2 -2
  53. package/dist/engine/session/live/agent-turn.d.ts +0 -14
  54. package/dist/engine/session/live/agent-turn.d.ts.map +0 -1
  55. package/dist/engine/session/live/agent-turn.js +0 -16
  56. package/dist/engine/session/live/agent-turn.js.map +0 -1
  57. /package/dist/{cli-43LPJ5ID.js.map → cli-I4NLPVNV.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- import { SESSION_CLOSED_ERROR_CODE } from "@moxt-ai/mobius-sdk/protocol";
1
+ import { isPromptTerminal, SESSION_CLOSED_ERROR_CODE } from "@moxt-ai/mobius-sdk/protocol";
2
2
  import { isTextPromptResourceMediaType } from "./prompt-artifacts.js";
3
3
  function promptContent(command) {
4
4
  const content = [];
@@ -27,16 +27,17 @@ function promptContent(command) {
27
27
  }
28
28
  export class PromptLifecycle {
29
29
  #sink;
30
+ /** Terminal events held until their command's admission and execution state are released. */
30
31
  #terminal = new Map();
31
32
  #publications = new Map();
32
33
  #queued = new Map();
33
34
  #recordActiveTurn;
34
- #hasStarted;
35
+ #executions;
35
36
  #recordLifecycle;
36
- constructor(sink, recordLifecycle, recordActiveTurn, hasStarted) {
37
+ constructor(sink, recordLifecycle, recordActiveTurn, executions) {
37
38
  this.#recordLifecycle = recordLifecycle;
38
39
  this.#recordActiveTurn = recordActiveTurn;
39
- this.#hasStarted = hasStarted;
40
+ this.#executions = executions;
40
41
  this.#sink = sink;
41
42
  }
42
43
  requested = (command) => {
@@ -53,8 +54,8 @@ export class PromptLifecycle {
53
54
  ...(command.targetCommandId.length === 0 ? {} : { targetCommandId: command.targetCommandId }),
54
55
  });
55
56
  };
56
- /** Metadata for an execution already claimed by the receipt owner. */
57
- started = (sessionId, commandId, attemptId, epoch, disposition) => {
57
+ /** The lifecycle metadata the Agent session records when it starts this claimed command. */
58
+ lifecycle = (sessionId, commandId, attemptId, epoch, disposition) => {
58
59
  const request = this.#queued.get(commandId);
59
60
  if (request?.sessionId === sessionId) {
60
61
  return {
@@ -71,10 +72,7 @@ export class PromptLifecycle {
71
72
  record = (recorded) => {
72
73
  this.#recordActiveTurn(recorded);
73
74
  const sessionId = recorded.sessionId;
74
- if (recorded.type === "lifecycle-metadata" &&
75
- (recorded.payload.kind === "prompt.completed" ||
76
- recorded.payload.kind === "prompt.failed" ||
77
- recorded.payload.kind === "prompt.failed-before-start")) {
75
+ if (recorded.type === "lifecycle-metadata" && isPromptTerminal(recorded.payload)) {
78
76
  // Publish termination after prompt admission and execution state are settled.
79
77
  this.#terminal.set(recorded.payload.commandId, recorded);
80
78
  const pending = this.#publications.get(sessionId) ?? [];
@@ -129,7 +127,7 @@ export class PromptLifecycle {
129
127
  };
130
128
  completed = async (sessionId, commandId, stopReason) => {
131
129
  const request = this.#queued.get(commandId);
132
- if (request?.sessionId !== sessionId || this.#terminal.has(commandId)) {
130
+ if (request?.sessionId !== sessionId || this.#executions.isTerminalExecution(commandId, sessionId)) {
133
131
  return;
134
132
  }
135
133
  const recorded = await this.#recordLifecycle(sessionId, {
@@ -138,21 +136,24 @@ export class PromptLifecycle {
138
136
  kind: "prompt.completed",
139
137
  commandId,
140
138
  stopReason,
141
- ...(this.#hasStarted(commandId, sessionId) ? {} : { execution: "not-started" }),
139
+ ...(this.#executions.hasStarted(commandId, sessionId) ? {} : { execution: "not-started" }),
142
140
  },
143
141
  });
144
142
  if (!recorded) {
145
143
  this.#sink.publishOperationFailure(sessionId, commandId, "cancelled", "The prompt was cancelled before execution");
146
144
  }
147
145
  };
148
- failed = async (sessionId, commandId, code, message) => {
146
+ /** Settles a failed command; whether it failed before or after starting is its receipt's fact. */
147
+ failed = async (sessionId, commandId, attemptId, code, message) => {
149
148
  const request = this.#queued.get(commandId);
150
- if (request?.sessionId !== sessionId || this.#terminal.has(commandId)) {
149
+ if (request?.sessionId !== sessionId || this.#executions.isTerminalExecution(commandId, sessionId)) {
151
150
  return;
152
151
  }
153
152
  const recorded = await this.#recordLifecycle(sessionId, {
154
153
  type: "lifecycle-metadata",
155
- payload: { kind: "prompt.failed-before-start", commandId, code, message },
154
+ payload: this.#executions.hasStarted(commandId, sessionId)
155
+ ? { kind: "prompt.failed", attemptId, commandId, code, message }
156
+ : { kind: "prompt.failed-before-start", commandId, code, message },
156
157
  });
157
158
  if (!recorded || code === SESSION_CLOSED_ERROR_CODE) {
158
159
  this.#sink.publishOperationFailure(sessionId, commandId, code, message);
@@ -160,7 +161,7 @@ export class PromptLifecycle {
160
161
  };
161
162
  promptRequestRecovery = (sessionId) => ({
162
163
  queuedPromptRequests: [...this.#queued.values()]
163
- .filter((request) => request.sessionId === sessionId && !this.#hasStarted(request.commandId, sessionId))
164
+ .filter((request) => request.sessionId === sessionId && !this.#executions.hasStarted(request.commandId, sessionId))
164
165
  .map(({ commandId, content, disposition, targetCommandId }) => ({
165
166
  commandId,
166
167
  content,
@@ -180,7 +181,7 @@ export async function settleAbandonedTurn(projection, operations, cancellation)
180
181
  console.warn("Mobius daemon ignored cancellation for an inactive turn");
181
182
  return;
182
183
  }
183
- await projection.failed(cancellation.sessionId, cancellation.commandId, "agent_execution_abandoned", "The local Agent execution was abandoned before it completed");
184
+ await projection.failed(cancellation.sessionId, cancellation.commandId, attemptId, "agent_execution_abandoned", "The local Agent execution was abandoned before it completed");
184
185
  projection.publishTerminal(cancellation.sessionId, cancellation.commandId);
185
186
  }
186
187
  //# sourceMappingURL=prompt-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-lifecycle.js","sourceRoot":"","sources":["../../../../src/engine/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-lifecycle.js","sourceRoot":"","sources":["../../../../src/engine/session/prompt/prompt-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,33 @@
1
+ import type { SessionStatus } from "@moxt-ai/mobius-sdk/protocol";
1
2
  /**
2
- * The prompt executing in each Session. Cancellation names the command it stops and never outlives that command's
3
- * execution; a command cancelled before its execution begins is refused by its own turn instead.
3
+ * The single authority for which command each Session is executing and in what phase. Every reader asks it: steering
4
+ * joins only a started execution, the Agent process may change only while no execution holds the Session, a
5
+ * cancellation stops only the execution it names, and the Session's working/idle status is derived from it.
6
+ *
7
+ * Contract: admission is the only owner of whether a Session is busy, so `begin` requires an idle Session. Each
8
+ * transition names its command and is ignored for any other. All operations are synchronous, so a check and the
9
+ * transition that relies on it cannot be separated by another caller.
4
10
  */
5
11
  export declare class ActiveExecutions {
6
12
  #private;
7
- readonly command: (id: string) => string | undefined;
8
- readonly cancellation: (id: string) => Promise<void> | undefined;
9
- readonly isBusy: (id: string) => boolean;
10
- readonly begin: (id: string, commandId: string) => void;
11
- readonly cancel: (id: string, commandId: string, stop: () => Promise<void>) => Promise<void>;
12
- readonly finish: (id: string, commandId: string) => void;
13
+ constructor(statusChanged: (sessionId: string, status: SessionStatus) => void);
14
+ readonly status: (sessionId: string) => SessionStatus;
15
+ readonly isBusy: (sessionId: string) => boolean;
16
+ /** A steering prompt can join only the named execution while the Agent holds it and no one is stopping it. */
17
+ readonly acceptsSteering: (sessionId: string, targetCommandId: string) => boolean;
18
+ /** The command whose prompt the Session's Agent holds, if any. */
19
+ readonly agentCommand: (sessionId: string) => string | undefined;
20
+ readonly cancellationRequested: (sessionId: string, commandId: string) => boolean;
21
+ readonly cancellation: (sessionId: string) => Promise<void> | undefined;
22
+ readonly begin: (sessionId: string, commandId: string) => void;
23
+ /** The Agent receives the prompt. A cancelled execution must not start. */
24
+ readonly start: (sessionId: string, commandId: string) => void;
25
+ readonly settle: (sessionId: string, commandId: string) => void;
26
+ /**
27
+ * Records a cancellation of the named execution and asks `stop` to end it once. Another command's cancellation,
28
+ * or one for an idle Session, has nothing to stop. A cancelled execution that has not started never starts.
29
+ */
30
+ readonly cancel: (sessionId: string, commandId: string, stop: () => Promise<void>) => Promise<void>;
31
+ readonly finish: (sessionId: string, commandId: string) => void;
13
32
  }
14
33
  //# sourceMappingURL=active-executions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-executions.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-executions.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,qBAAa,gBAAgB;;IAEzB,QAAQ,CAAC,OAAO,OAAQ,MAAM,KAAG,MAAM,GAAG,SAAS,CAAqC;IACxF,QAAQ,CAAC,YAAY,OAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAG7D;IACF,QAAQ,CAAC,MAAM,OAAQ,MAAM,KAAG,OAAO,CAA0B;IACjE,QAAQ,CAAC,KAAK,OAAQ,MAAM,aAAa,MAAM,KAAG,IAAI,CAKpD;IACF,QAAQ,CAAC,MAAM,OAAQ,MAAM,aAAa,MAAM,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAYzF;IACF,QAAQ,CAAC,MAAM,OAAQ,MAAM,aAAa,MAAM,KAAG,IAAI,CAIrD;CACL"}
1
+ {"version":3,"file":"active-executions.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-executions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAiBlE;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;;IAIzB,YAAY,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,EAE5E;IAED,QAAQ,CAAC,MAAM,cAAe,MAAM,KAAG,aAAa,CAGlD;IAEF,QAAQ,CAAC,MAAM,cAAe,MAAM,KAAG,OAAO,CAAiC;IAE/E,8GAA8G;IAC9G,QAAQ,CAAC,eAAe,cAAe,MAAM,mBAAmB,MAAM,KAAG,OAAO,CAO9E;IAEF,kEAAkE;IAClE,QAAQ,CAAC,YAAY,cAAe,MAAM,KAAG,MAAM,GAAG,SAAS,CAG7D;IAEF,QAAQ,CAAC,qBAAqB,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAG9E;IAEF,QAAQ,CAAC,YAAY,cAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAGpE;IAEF,QAAQ,CAAC,KAAK,cAAe,MAAM,aAAa,MAAM,KAAG,IAAI,CAM3D;IAEF,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,cAAe,MAAM,aAAa,MAAM,KAAG,IAAI,CAS3D;IAEF,QAAQ,CAAC,MAAM,cAAe,MAAM,aAAa,MAAM,KAAG,IAAI,CAK5D;IAEF;;;OAGG;IACH,QAAQ,CAAC,MAAM,cAAe,MAAM,aAAa,MAAM,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAehG;IAEF,QAAQ,CAAC,MAAM,cAAe,MAAM,aAAa,MAAM,KAAG,IAAI,CAM5D;CACL"}
@@ -1,39 +1,93 @@
1
- import { AcpExecutionError } from "../../acp/acp-error.js";
2
1
  /**
3
- * The prompt executing in each Session. Cancellation names the command it stops and never outlives that command's
4
- * execution; a command cancelled before its execution begins is refused by its own turn instead.
2
+ * The single authority for which command each Session is executing and in what phase. Every reader asks it: steering
3
+ * joins only a started execution, the Agent process may change only while no execution holds the Session, a
4
+ * cancellation stops only the execution it names, and the Session's working/idle status is derived from it.
5
+ *
6
+ * Contract: admission is the only owner of whether a Session is busy, so `begin` requires an idle Session. Each
7
+ * transition names its command and is ignored for any other. All operations are synchronous, so a check and the
8
+ * transition that relies on it cannot be separated by another caller.
5
9
  */
6
10
  export class ActiveExecutions {
7
11
  #entries = new Map();
8
- command = (id) => this.#entries.get(id)?.commandId;
9
- cancellation = (id) => {
10
- const state = this.#entries.get(id);
11
- return state?.kind === "cancelling" ? state.completion : undefined;
12
- };
13
- isBusy = (id) => this.#entries.has(id);
14
- begin = (id, commandId) => {
15
- if (this.#entries.has(id)) {
16
- throw new AcpExecutionError("Another prompt is already running in this conversation", {}, "session_busy");
12
+ #statusChanged;
13
+ constructor(statusChanged) {
14
+ this.#statusChanged = statusChanged;
15
+ }
16
+ status = (sessionId) => {
17
+ const execution = this.#entries.get(sessionId);
18
+ return execution === undefined ? { kind: "idle" } : { commandId: execution.commandId, kind: "working" };
19
+ };
20
+ isBusy = (sessionId) => this.#entries.has(sessionId);
21
+ /** A steering prompt can join only the named execution while the Agent holds it and no one is stopping it. */
22
+ acceptsSteering = (sessionId, targetCommandId) => {
23
+ const execution = this.#entries.get(sessionId);
24
+ return (execution?.commandId === targetCommandId &&
25
+ execution.phase === "started" &&
26
+ execution.cancellation.kind === "none");
27
+ };
28
+ /** The command whose prompt the Session's Agent holds, if any. */
29
+ agentCommand = (sessionId) => {
30
+ const execution = this.#entries.get(sessionId);
31
+ return execution?.phase === "started" ? execution.commandId : undefined;
32
+ };
33
+ cancellationRequested = (sessionId, commandId) => {
34
+ const execution = this.#entries.get(sessionId);
35
+ return execution?.commandId === commandId && execution.cancellation.kind === "requested";
36
+ };
37
+ cancellation = (sessionId) => {
38
+ const cancellation = this.#entries.get(sessionId)?.cancellation;
39
+ return cancellation?.kind === "requested" ? cancellation.completion : undefined;
40
+ };
41
+ begin = (sessionId, commandId) => {
42
+ if (this.#entries.has(sessionId)) {
43
+ throw new Error("A Session executes one command at a time");
44
+ }
45
+ this.#entries.set(sessionId, { commandId, phase: "preparing", cancellation: { kind: "none" } });
46
+ this.#statusChanged(sessionId, this.status(sessionId));
47
+ };
48
+ /** The Agent receives the prompt. A cancelled execution must not start. */
49
+ start = (sessionId, commandId) => {
50
+ const execution = this.#entries.get(sessionId);
51
+ if (execution?.commandId !== commandId || execution.phase !== "preparing") {
52
+ throw new Error("Only the Session's preparing execution can start");
53
+ }
54
+ if (execution.cancellation.kind !== "none") {
55
+ throw new Error("A cancelled execution cannot start");
56
+ }
57
+ this.#entries.set(sessionId, { ...execution, phase: "started" });
58
+ };
59
+ settle = (sessionId, commandId) => {
60
+ const execution = this.#entries.get(sessionId);
61
+ if (execution?.commandId === commandId) {
62
+ this.#entries.set(sessionId, { ...execution, phase: "settled" });
17
63
  }
18
- this.#entries.set(id, { kind: "running", commandId });
19
64
  };
20
- cancel = (id, commandId, stop) => {
21
- const state = this.#entries.get(id);
22
- if (state?.commandId !== commandId) {
65
+ /**
66
+ * Records a cancellation of the named execution and asks `stop` to end it once. Another command's cancellation,
67
+ * or one for an idle Session, has nothing to stop. A cancelled execution that has not started never starts.
68
+ */
69
+ cancel = (sessionId, commandId, stop) => {
70
+ const execution = this.#entries.get(sessionId);
71
+ if (execution?.commandId !== commandId) {
23
72
  return Promise.resolve();
24
73
  }
25
- if (state.kind === "cancelling") {
26
- return state.completion;
74
+ if (execution.cancellation.kind === "requested") {
75
+ return execution.cancellation.completion;
27
76
  }
28
77
  const completion = Promise.withResolvers();
29
- this.#entries.set(id, { kind: "cancelling", commandId, completion: completion.promise });
78
+ this.#entries.set(sessionId, {
79
+ ...execution,
80
+ cancellation: { kind: "requested", completion: completion.promise },
81
+ });
30
82
  void (async () => await stop())().then(completion.resolve, completion.reject);
31
83
  return completion.promise;
32
84
  };
33
- finish = (id, commandId) => {
34
- if (this.command(id) === commandId) {
35
- this.#entries.delete(id);
85
+ finish = (sessionId, commandId) => {
86
+ if (this.#entries.get(sessionId)?.commandId !== commandId) {
87
+ return;
36
88
  }
89
+ this.#entries.delete(sessionId);
90
+ this.#statusChanged(sessionId, this.status(sessionId));
37
91
  };
38
92
  }
39
93
  //# sourceMappingURL=active-executions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-executions.js","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-executions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACxC,OAAO,GAAG,CAAC,EAAU,EAAsB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;IAC/E,YAAY,GAAG,CAAC,EAAU,EAA6B,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,KAAK,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC,CAAC;IACO,MAAM,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,KAAK,GAAG,CAAC,EAAU,EAAE,SAAiB,EAAQ,EAAE;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,CAAC,wDAAwD,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;IACO,MAAM,GAAG,CAAC,EAAU,EAAE,SAAiB,EAAE,IAAyB,EAAiB,EAAE;QAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,UAAU,CAAC;QAC5B,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,UAAU,CAAC,OAAO,CAAC;IAC9B,CAAC,CAAC;IACO,MAAM,GAAG,CAAC,EAAU,EAAE,SAAiB,EAAQ,EAAE;QACtD,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"active-executions.js","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-executions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type NativeSessionResult, type SessionCancelCommand, type SessionElicitationRequestedEvent, type SessionElicitationResolvedEvent, type SessionPermissionRequestedEvent, type SessionPermissionResolvedEvent, type SessionPromptCommand, type SessionPromptDispositionCommand } from "@moxt-ai/mobius-sdk/protocol";
1
+ import { type NativeSessionResult, type SessionElicitationRequestedEvent, type SessionElicitationResolvedEvent, type SessionPermissionRequestedEvent, type SessionPermissionResolvedEvent, type SessionPromptCommand, type SessionPromptDispositionCommand } from "@moxt-ai/mobius-sdk/protocol";
2
2
  type ActiveTurnSnapshot = Extract<NativeSessionResult, {
3
3
  readonly action: "active-turn";
4
4
  }>["turn"];
@@ -16,24 +16,26 @@ export declare class ActiveRuntimeTurn {
16
16
  #private;
17
17
  readonly attemptId: string;
18
18
  readonly command: SessionPromptCommand;
19
- constructor(command: SessionPromptCommand, attemptId: string);
19
+ readonly epoch: string & import("zod").$brand<"Identifier">;
20
+ /** `started` reads the command's execution receipt, the single owner of whether the command started. */
21
+ constructor(command: SessionPromptCommand, attemptId: string, started: () => boolean);
20
22
  readonly enqueue: () => void;
21
23
  readonly isQueued: () => boolean;
22
24
  readonly abortRuntime: () => void;
23
25
  readonly finish: () => void;
24
- readonly activate: (execution: string) => {
25
- readonly epoch: string;
26
- readonly sequence: 0;
27
- };
28
26
  readonly promoteQueuedPrompt: (command: SessionPromptDispositionCommand) => "accepted" | "already-started" | "unavailable";
29
27
  readonly admit: () => string;
30
28
  readonly queuePromotion: () => Promise<void> | null;
31
29
  readonly effectiveDisposition: () => string;
30
+ /** A steering prompt joins the execution of the turn it steers; every other prompt owns its execution. */
31
+ readonly execution: () => string;
32
32
  readonly recordEvent: (event: RecordedSessionEvent) => RecordedSessionEvent;
33
- readonly recordSteeringPrompt: (command: SessionPromptCommand) => boolean;
34
33
  readonly snapshot: () => ActiveTurnSnapshot;
35
- readonly matches: (cancellation: SessionCancelCommand) => boolean;
36
34
  readonly matchesInteraction: (interactionId: string, sessionId: string) => boolean;
35
+ /**
36
+ * Before the command starts, cancellation withdraws it by aborting its own admission and preparation. Once it
37
+ * started, the Agent execution it belongs to must be asked to stop.
38
+ */
37
39
  readonly requestCancellation: () => TurnCancellation;
38
40
  readonly cancellationRequested: () => boolean;
39
41
  get signal(): AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"active-turn.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-turn.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,mBAAmB,EAKxB,KAAK,oBAAoB,EACzB,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EAEzB,KAAK,+BAA+B,EACvC,MAAM,8BAA8B,CAAC;AAEtC,KAAK,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnG,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAC1B,gCAAgC,GAChC,+BAA+B,GAC/B,+BAA+B,GAC/B,8BAA8B,CAAC;AAUrC,MAAM,MAAM,gBAAgB,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,qBAAa,iBAAiB;;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IAYvC,YAAY,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAK3D;IAED,QAAQ,CAAC,OAAO,QAAO,IAAI,CAKzB;IAEF,QAAQ,CAAC,QAAQ,QAAO,OAAO,CAGM;IAErC,QAAQ,CAAC,YAAY,QAAO,IAAI,CAE9B;IAEF,QAAQ,CAAC,MAAM,QAAO,IAAI,CAExB;IAEF,QAAQ,CAAC,QAAQ,cAAe,MAAM,KAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;KAAE,CAGvF;IAEF,QAAQ,CAAC,mBAAmB,YACf,+BAA+B,KACzC,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAwB/C;IAEF,QAAQ,CAAC,KAAK,QAAO,MAAM,CAMzB;IAEF,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhD;IAEF,QAAQ,CAAC,oBAAoB,QAAO,MAAM,CACyD;IAEnG,QAAQ,CAAC,WAAW,UAAW,oBAAoB,KAAG,oBAAoB,CAgBxE;IAEF,QAAQ,CAAC,oBAAoB,YAAa,oBAAoB,KAAG,OAAO,CAMtE;IAEF,QAAQ,CAAC,QAAQ,QAAO,kBAAkB,CAWxC;IAEF,QAAQ,CAAC,OAAO,iBAAkB,oBAAoB,KAAG,OAAO,CAC2C;IAE3G,QAAQ,CAAC,kBAAkB,kBAAmB,MAAM,aAAa,MAAM,KAAG,OAAO,CACc;IAE/F,QAAQ,CAAC,mBAAmB,QAAO,gBAAgB,CAUjD;IAEF,QAAQ,CAAC,qBAAqB,QAAO,OAAO,CAAgC;IAE5E,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,IAAI,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;CACJ"}
1
+ {"version":3,"file":"active-turn.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-turn.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,mBAAmB,EAKxB,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EAEzB,KAAK,+BAA+B,EACvC,MAAM,8BAA8B,CAAC;AAEtC,KAAK,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnG,yEAAyE;AACzE,MAAM,MAAM,oBAAoB,GAC1B,gCAAgC,GAChC,+BAA+B,GAC/B,+BAA+B,GAC/B,8BAA8B,CAAC;AAYrC,MAAM,MAAM,gBAAgB,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,qBAAa,iBAAiB;;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,KAAK,8CAAkC;IAYhD,wGAAwG;IACxG,YAAY,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,EAKnF;IAED,QAAQ,CAAC,OAAO,QAAO,IAAI,CAKzB;IAEF,QAAQ,CAAC,QAAQ,QAAO,OAAO,CAIM;IAErC,QAAQ,CAAC,YAAY,QAAO,IAAI,CAE9B;IAEF,QAAQ,CAAC,MAAM,QAAO,IAAI,CAExB;IAEF,QAAQ,CAAC,mBAAmB,YACf,+BAA+B,KACzC,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAsB/C;IAEF,QAAQ,CAAC,KAAK,QAAO,MAAM,CAMzB;IAEF,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKhD;IAEF,QAAQ,CAAC,oBAAoB,QAAO,MAAM,CAUxC;IAEF,0GAA0G;IAC1G,QAAQ,CAAC,SAAS,QAAO,MAAM,CAGE;IAEjC,QAAQ,CAAC,WAAW,UAAW,oBAAoB,KAAG,oBAAoB,CAgBxE;IAEF,QAAQ,CAAC,QAAQ,QAAO,kBAAkB,CAWxC;IAEF,QAAQ,CAAC,kBAAkB,kBAAmB,MAAM,aAAa,MAAM,KAAG,OAAO,CACc;IAE/F;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,QAAO,gBAAgB,CAUjD;IAEF,QAAQ,CAAC,qBAAqB,QAAO,OAAO,CAAgC;IAE5E,IAAI,MAAM,IAAI,WAAW,CAExB;IAED,IAAI,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;CACJ"}
@@ -3,27 +3,30 @@ import { decodeIdentifier, SESSION_ELICITATION_REQUESTED_KIND, SESSION_ELICITATI
3
3
  export class ActiveRuntimeTurn {
4
4
  attemptId;
5
5
  command;
6
+ epoch = decodeIdentifier(randomUUID());
6
7
  #controller;
7
8
  #finished = Promise.withResolvers();
9
+ #started;
8
10
  #cancellationRequested = false;
9
- #dispatch;
11
+ #admission = { kind: "waiting" };
10
12
  #sequence = 0;
11
13
  #interaction = null;
12
- #epoch = decodeIdentifier(randomUUID());
13
- constructor(command, attemptId) {
14
+ /** `started` reads the command's execution receipt, the single owner of whether the command started. */
15
+ constructor(command, attemptId, started) {
14
16
  this.attemptId = attemptId;
15
17
  this.command = command;
16
18
  this.#controller = new AbortController();
17
- this.#dispatch = { kind: "pending" };
19
+ this.#started = started;
18
20
  }
19
21
  enqueue = () => {
20
- if (this.#dispatch.kind !== "pending") {
21
- throw new Error("Only a pending prompt can enter the queue");
22
+ if (this.#admission.kind !== "waiting") {
23
+ throw new Error("Only a waiting prompt can enter the queue");
22
24
  }
23
- this.#dispatch = { kind: "queued", promotion: Promise.withResolvers() };
25
+ this.#admission = { kind: "queued", promotion: Promise.withResolvers() };
24
26
  };
25
- isQueued = () => (this.#dispatch.kind === "queued" ||
26
- (this.#dispatch.kind === "admitted" && this.#dispatch.disposition === SessionPromptDisposition.Queue)) &&
27
+ isQueued = () => (this.#admission.kind === "queued" ||
28
+ (this.#admission.kind === "admitted" && this.#admission.disposition === SessionPromptDisposition.Queue)) &&
29
+ !this.#started() &&
27
30
  !this.#controller.signal.aborted;
28
31
  abortRuntime = () => {
29
32
  this.#controller.abort();
@@ -31,30 +34,24 @@ export class ActiveRuntimeTurn {
31
34
  finish = () => {
32
35
  this.#finished.resolve();
33
36
  };
34
- activate = (execution) => {
35
- this.#dispatch = { kind: "running", execution };
36
- return { epoch: this.#epoch, sequence: 0 };
37
- };
38
37
  promoteQueuedPrompt = (command) => {
39
38
  if (command.commandId !== this.command.commandId ||
40
39
  command.sessionId !== this.command.sessionId ||
41
40
  this.#controller.signal.aborted) {
42
41
  return "unavailable";
43
42
  }
44
- switch (this.#dispatch.kind) {
43
+ switch (this.#admission.kind) {
45
44
  case "queued": {
46
- const promotion = this.#dispatch.promotion;
47
- this.#dispatch = { kind: "promoted" };
45
+ const promotion = this.#admission.promotion;
46
+ this.#admission = { kind: "promoted" };
48
47
  promotion.resolve();
49
48
  return "accepted";
50
49
  }
51
50
  case "promoted":
52
51
  return "accepted";
53
52
  case "admitted":
54
- return this.#dispatch.disposition === SessionPromptDisposition.Steer ? "accepted" : "already-started";
55
- case "running":
56
- return "already-started";
57
- case "pending":
53
+ return this.#admission.disposition === SessionPromptDisposition.Steer ? "accepted" : "already-started";
54
+ case "waiting":
58
55
  return "unavailable";
59
56
  }
60
57
  };
@@ -62,16 +59,30 @@ export class ActiveRuntimeTurn {
62
59
  const disposition = this.effectiveDisposition();
63
60
  // Claim the dispatch before asynchronous Agent preparation so a late promotion
64
61
  // cannot change a disposition that execution has already selected.
65
- this.#dispatch = { kind: "admitted", disposition };
62
+ this.#admission = { kind: "admitted", disposition };
66
63
  return disposition;
67
64
  };
68
65
  queuePromotion = () => {
69
- if (this.#dispatch.kind === "queued") {
70
- return this.#dispatch.promotion.promise;
66
+ if (this.#admission.kind === "queued") {
67
+ return this.#admission.promotion.promise;
68
+ }
69
+ return this.#admission.kind === "promoted" ? Promise.resolve() : null;
70
+ };
71
+ effectiveDisposition = () => {
72
+ switch (this.#admission.kind) {
73
+ case "waiting":
74
+ case "queued":
75
+ return this.command.disposition;
76
+ case "promoted":
77
+ return SessionPromptDisposition.Steer;
78
+ case "admitted":
79
+ return this.#admission.disposition;
71
80
  }
72
- return this.#dispatch.kind === "promoted" ? Promise.resolve() : null;
73
81
  };
74
- effectiveDisposition = () => this.#dispatch.kind === "promoted" ? SessionPromptDisposition.Steer : this.command.disposition;
82
+ /** A steering prompt joins the execution of the turn it steers; every other prompt owns its execution. */
83
+ execution = () => this.effectiveDisposition() === SessionPromptDisposition.Steer
84
+ ? this.command.targetCommandId
85
+ : this.command.commandId;
75
86
  recordEvent = (event) => {
76
87
  if (event.sessionId !== this.command.sessionId ||
77
88
  ("commandId" in event && event.commandId !== this.command.commandId)) {
@@ -86,35 +97,33 @@ export class ActiveRuntimeTurn {
86
97
  }
87
98
  return event;
88
99
  };
89
- recordSteeringPrompt = (command) => {
90
- return (this.#dispatch.kind === "running" &&
91
- command.sessionId === this.command.sessionId &&
92
- command.targetCommandId === this.command.commandId);
93
- };
94
100
  snapshot = () => {
95
- if (this.#dispatch.kind !== "running") {
101
+ if (!this.#started()) {
96
102
  return null;
97
103
  }
98
104
  return {
99
105
  commandId: decodeIdentifier(this.command.commandId),
100
- epoch: this.#epoch,
106
+ epoch: this.epoch,
101
107
  interaction: this.#interaction,
102
108
  sequence: this.#sequence,
103
109
  state: "running",
104
110
  };
105
111
  };
106
- matches = (cancellation) => cancellation.commandId === this.command.commandId && cancellation.sessionId === this.command.sessionId;
107
112
  matchesInteraction = (interactionId, sessionId) => this.command.sessionId === sessionId && this.#interaction?.interactionId === interactionId;
113
+ /**
114
+ * Before the command starts, cancellation withdraws it by aborting its own admission and preparation. Once it
115
+ * started, the Agent execution it belongs to must be asked to stop.
116
+ */
108
117
  requestCancellation = () => {
109
118
  if (this.#cancellationRequested) {
110
119
  return { kind: "already-requested" };
111
120
  }
112
121
  this.#cancellationRequested = true;
113
- if (this.#dispatch.kind !== "running") {
114
- this.#controller.abort(new Error("The queued Agent turn was cancelled"));
122
+ if (!this.#started()) {
123
+ this.#controller.abort(new Error("The Agent turn was cancelled before it started"));
115
124
  return { kind: "pending" };
116
125
  }
117
- return { kind: "running", execution: this.#dispatch.execution };
126
+ return { kind: "running", execution: this.execution() };
118
127
  };
119
128
  cancellationRequested = () => this.#cancellationRequested;
120
129
  get signal() {
@@ -1 +1 @@
1
- {"version":3,"file":"active-turn.js","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-turn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"active-turn.js","sourceRoot":"","sources":["../../../../src/engine/session/turn/active-turn.ts"],"names":[],"mappings":"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"}
@@ -31,14 +31,18 @@ export declare class ExecutionReceipts {
31
31
  readonly hasStarted: (commandId: string, sessionId: string) => boolean;
32
32
  /** Reserves an unseen command for cancellation before a delayed prompt can claim its identity. */
33
33
  readonly recordCancellationBeforeAdmission: (commandId: string, sessionId: string) => SessionEventPayload | undefined;
34
- readonly recordOutcome: (event: SessionLiveEvent) => void;
34
+ /**
35
+ * Receipts follow their command's recorded lifecycle. `prompt.started` is recorded where the command is handed
36
+ * to the Agent, so the started mark and the event clients see are one transition; a terminal event settles the
37
+ * receipt. Nothing else marks a command started.
38
+ */
39
+ readonly record: (event: SessionLiveEvent) => void;
35
40
  readonly recover: () => readonly {
36
41
  readonly sessionId: string;
37
42
  readonly event: SessionEventPayload;
38
43
  readonly recordedAt: string;
39
44
  }[];
40
45
  readonly claimExecution: (commandId: string, sessionId: string, commandJson: string) => RuntimeExecutionReceipt;
41
- readonly markExecutionStarted: (commandId: string) => void;
42
46
  /** Only commands without a terminal result can still be cancelled. */
43
47
  readonly findUnsettledAttemptId: (commandId: string, sessionId: string) => string | null;
44
48
  readonly isTerminalExecution: (commandId: string, sessionId: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-receipts.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/execution-receipts.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,eAAe,EAGpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACxB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAI9F,MAAM,MAAM,uBAAuB,GAC7B,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CACpB,CAAC,GACF,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC5C,CAAC,GACF;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAmDnC,qBAAa,iBAAiB;;IAO1B,YAAY,KAAK,EAAE,qBAAqB,EAAE,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAsB,EAW3F;IAwCD,QAAQ,CAAC,aAAa,QAAO,IAAI,CAE/B;IACF,QAAQ,CAAC,OAAO,cAAe,MAAM,KAAG,mBAAmB,GAAG,SAAS,CAIrE;IACF,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,cAAe,MAAM,aAAa,MAAM,KAAG,eAAe,CA0BzE;IACF;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,cAAe,MAAM,KAAG,eAAe,GAAG,SAAS,CAiClE;IACF,uFAAuF;IACvF,QAAQ,CAAC,UAAU,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAMnE;IAEF,kGAAkG;IAClG,QAAQ,CAAC,iCAAiC,cAC3B,MAAM,aACN,MAAM,KAClB,mBAAmB,GAAG,SAAS,CAyChC;IACF,QAAQ,CAAC,aAAa,UAAW,gBAAgB,KAAG,IAAI,CA0BtD;IACF,QAAQ,CAAC,OAAO,QAAO,SAAS;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC/B,EAAE,CAwCD;IAEF,QAAQ,CAAC,cAAc,cAAe,MAAM,aAAa,MAAM,eAAe,MAAM,KAAG,uBAAuB,CA0C5G;IAEF,QAAQ,CAAC,oBAAoB,cAAe,MAAM,KAAG,IAAI,CAoBvD;IAEF,sEAAsE;IACtE,QAAQ,CAAC,sBAAsB,cAAe,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI,CAGrF;IAEF,QAAQ,CAAC,mBAAmB,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAG5E;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAGvB;CACL"}
1
+ {"version":3,"file":"execution-receipts.d.ts","sourceRoot":"","sources":["../../../../src/engine/session/turn/execution-receipts.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,eAAe,EAIpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACxB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAI9F,MAAM,MAAM,uBAAuB,GAC7B,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CACpB,CAAC,GACF,QAAQ,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC5C,CAAC,GACF;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAmDnC,qBAAa,iBAAiB;;IAO1B,YAAY,KAAK,EAAE,qBAAqB,EAAE,OAAO,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAsB,EAW3F;IAwCD,QAAQ,CAAC,aAAa,QAAO,IAAI,CAE/B;IACF,QAAQ,CAAC,OAAO,cAAe,MAAM,KAAG,mBAAmB,GAAG,SAAS,CAIrE;IACF,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,cAAe,MAAM,aAAa,MAAM,KAAG,eAAe,CAwBzE;IACF;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,cAAe,MAAM,KAAG,eAAe,GAAG,SAAS,CA+BlE;IACF,uFAAuF;IACvF,QAAQ,CAAC,UAAU,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAMnE;IAEF,kGAAkG;IAClG,QAAQ,CAAC,iCAAiC,cAC3B,MAAM,aACN,MAAM,KAClB,mBAAmB,GAAG,SAAS,CAyChC;IACF;;;;OAIG;IACH,QAAQ,CAAC,MAAM,UAAW,gBAAgB,KAAG,IAAI,CA8B/C;IACF,QAAQ,CAAC,OAAO,QAAO,SAAS;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC/B,EAAE,CAwCD;IAEF,QAAQ,CAAC,cAAc,cAAe,MAAM,aAAa,MAAM,eAAe,MAAM,KAAG,uBAAuB,CA0C5G;IAEF,sEAAsE;IACtE,QAAQ,CAAC,sBAAsB,cAAe,MAAM,aAAa,MAAM,KAAG,MAAM,GAAG,IAAI,CAGrF;IAEF,QAAQ,CAAC,mBAAmB,cAAe,MAAM,aAAa,MAAM,KAAG,OAAO,CAG5E;IAEF,QAAQ,CAAC,KAAK,QAAO,IAAI,CAGvB;CACL"}