@fabric-harness/sdk 1.13.0 → 2.0.0

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 (169) hide show
  1. package/dist/action.d.ts +69 -0
  2. package/dist/action.d.ts.map +1 -0
  3. package/dist/action.js +119 -0
  4. package/dist/action.js.map +1 -0
  5. package/dist/agent-definition.d.ts +6 -0
  6. package/dist/agent-definition.d.ts.map +1 -1
  7. package/dist/agent-definition.js.map +1 -1
  8. package/dist/agent.d.ts +2 -0
  9. package/dist/agent.d.ts.map +1 -1
  10. package/dist/agent.js +35 -1
  11. package/dist/agent.js.map +1 -1
  12. package/dist/attachment-store-contract.d.ts +34 -0
  13. package/dist/attachment-store-contract.d.ts.map +1 -0
  14. package/dist/attachment-store-contract.js +0 -0
  15. package/dist/attachment-store-contract.js.map +1 -0
  16. package/dist/attachment-store.d.ts +107 -0
  17. package/dist/attachment-store.d.ts.map +1 -0
  18. package/dist/attachment-store.js +164 -0
  19. package/dist/attachment-store.js.map +1 -0
  20. package/dist/channel.d.ts +84 -0
  21. package/dist/channel.d.ts.map +1 -0
  22. package/dist/channel.js +115 -0
  23. package/dist/channel.js.map +1 -0
  24. package/dist/context-budget.d.ts +16 -0
  25. package/dist/context-budget.d.ts.map +1 -1
  26. package/dist/context-budget.js +38 -3
  27. package/dist/context-budget.js.map +1 -1
  28. package/dist/conversation-projection.d.ts +52 -0
  29. package/dist/conversation-projection.d.ts.map +1 -0
  30. package/dist/conversation-projection.js +207 -0
  31. package/dist/conversation-projection.js.map +1 -0
  32. package/dist/conversation-stream-contract.d.ts +37 -0
  33. package/dist/conversation-stream-contract.d.ts.map +1 -0
  34. package/dist/conversation-stream-contract.js +453 -0
  35. package/dist/conversation-stream-contract.js.map +1 -0
  36. package/dist/conversation-stream.d.ts +141 -0
  37. package/dist/conversation-stream.d.ts.map +1 -0
  38. package/dist/conversation-stream.js +159 -0
  39. package/dist/conversation-stream.js.map +1 -0
  40. package/dist/cost-budget.d.ts +106 -1
  41. package/dist/cost-budget.d.ts.map +1 -1
  42. package/dist/cost-budget.js +48 -2
  43. package/dist/cost-budget.js.map +1 -1
  44. package/dist/delivered-message.d.ts +90 -0
  45. package/dist/delivered-message.d.ts.map +1 -0
  46. package/dist/delivered-message.js +154 -0
  47. package/dist/delivered-message.js.map +1 -0
  48. package/dist/dispatch.d.ts +108 -0
  49. package/dist/dispatch.d.ts.map +1 -0
  50. package/dist/dispatch.js +179 -0
  51. package/dist/dispatch.js.map +1 -0
  52. package/dist/error.d.ts +1 -1
  53. package/dist/error.d.ts.map +1 -1
  54. package/dist/error.js.map +1 -1
  55. package/dist/history.d.ts +49 -2
  56. package/dist/history.d.ts.map +1 -1
  57. package/dist/history.js +163 -0
  58. package/dist/history.js.map +1 -1
  59. package/dist/in-memory-submission-store.d.ts +53 -0
  60. package/dist/in-memory-submission-store.d.ts.map +1 -0
  61. package/dist/in-memory-submission-store.js +340 -0
  62. package/dist/in-memory-submission-store.js.map +1 -0
  63. package/dist/index.d.ts +51 -13
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +28 -7
  66. package/dist/index.js.map +1 -1
  67. package/dist/loop.d.ts +29 -3
  68. package/dist/loop.d.ts.map +1 -1
  69. package/dist/loop.js +167 -24
  70. package/dist/loop.js.map +1 -1
  71. package/dist/model.d.ts +37 -0
  72. package/dist/model.d.ts.map +1 -1
  73. package/dist/model.js +250 -79
  74. package/dist/model.js.map +1 -1
  75. package/dist/otel-observer.d.ts +44 -0
  76. package/dist/otel-observer.d.ts.map +1 -0
  77. package/dist/otel-observer.js +165 -0
  78. package/dist/otel-observer.js.map +1 -0
  79. package/dist/persistence.d.ts +70 -0
  80. package/dist/persistence.d.ts.map +1 -0
  81. package/dist/persistence.js +17 -0
  82. package/dist/persistence.js.map +1 -0
  83. package/dist/persistent-agent.d.ts +86 -0
  84. package/dist/persistent-agent.d.ts.map +1 -0
  85. package/dist/persistent-agent.js +75 -0
  86. package/dist/persistent-agent.js.map +1 -0
  87. package/dist/pi-loop-runtime.d.ts.map +1 -1
  88. package/dist/pi-loop-runtime.js +7 -1
  89. package/dist/pi-loop-runtime.js.map +1 -1
  90. package/dist/profile.d.ts +33 -0
  91. package/dist/profile.d.ts.map +1 -0
  92. package/dist/profile.js +10 -0
  93. package/dist/profile.js.map +1 -0
  94. package/dist/providers.d.ts +14 -0
  95. package/dist/providers.d.ts.map +1 -1
  96. package/dist/providers.js +18 -1
  97. package/dist/providers.js.map +1 -1
  98. package/dist/result.d.ts +12 -0
  99. package/dist/result.d.ts.map +1 -1
  100. package/dist/result.js +26 -0
  101. package/dist/result.js.map +1 -1
  102. package/dist/retrieval.d.ts +61 -0
  103. package/dist/retrieval.d.ts.map +1 -0
  104. package/dist/retrieval.js +26 -0
  105. package/dist/retrieval.js.map +1 -0
  106. package/dist/runtime-mode.d.ts +1 -1
  107. package/dist/runtime-mode.d.ts.map +1 -1
  108. package/dist/runtime-mode.js +2 -1
  109. package/dist/runtime-mode.js.map +1 -1
  110. package/dist/scope-key.d.ts +25 -0
  111. package/dist/scope-key.d.ts.map +1 -0
  112. package/dist/scope-key.js +34 -0
  113. package/dist/scope-key.js.map +1 -0
  114. package/dist/session.d.ts +47 -1
  115. package/dist/session.d.ts.map +1 -1
  116. package/dist/session.js +364 -35
  117. package/dist/session.js.map +1 -1
  118. package/dist/skills.d.ts +33 -0
  119. package/dist/skills.d.ts.map +1 -0
  120. package/dist/skills.js +65 -0
  121. package/dist/skills.js.map +1 -0
  122. package/dist/store.d.ts +36 -1
  123. package/dist/store.d.ts.map +1 -1
  124. package/dist/store.js +83 -0
  125. package/dist/store.js.map +1 -1
  126. package/dist/stream-chunks.d.ts +42 -0
  127. package/dist/stream-chunks.d.ts.map +1 -0
  128. package/dist/stream-chunks.js +138 -0
  129. package/dist/stream-chunks.js.map +1 -0
  130. package/dist/strict.d.ts +40 -11
  131. package/dist/strict.d.ts.map +1 -1
  132. package/dist/strict.js +22 -7
  133. package/dist/strict.js.map +1 -1
  134. package/dist/submission-context.d.ts +26 -0
  135. package/dist/submission-context.d.ts.map +1 -0
  136. package/dist/submission-context.js +20 -0
  137. package/dist/submission-context.js.map +1 -0
  138. package/dist/submission-runner.d.ts +150 -0
  139. package/dist/submission-runner.d.ts.map +1 -0
  140. package/dist/submission-runner.js +767 -0
  141. package/dist/submission-runner.js.map +1 -0
  142. package/dist/submission-state.d.ts +50 -0
  143. package/dist/submission-state.d.ts.map +1 -0
  144. package/dist/submission-state.js +82 -0
  145. package/dist/submission-state.js.map +1 -0
  146. package/dist/submission-store-contract.d.ts +31 -0
  147. package/dist/submission-store-contract.d.ts.map +1 -0
  148. package/dist/submission-store-contract.js +730 -0
  149. package/dist/submission-store-contract.js.map +1 -0
  150. package/dist/submission-store.d.ts +365 -0
  151. package/dist/submission-store.d.ts.map +1 -0
  152. package/dist/submission-store.js +191 -0
  153. package/dist/submission-store.js.map +1 -0
  154. package/dist/submission-telemetry.d.ts +56 -0
  155. package/dist/submission-telemetry.d.ts.map +1 -0
  156. package/dist/submission-telemetry.js +36 -0
  157. package/dist/submission-telemetry.js.map +1 -0
  158. package/dist/testing-contracts.d.ts +17 -0
  159. package/dist/testing-contracts.d.ts.map +1 -0
  160. package/dist/testing-contracts.js +14 -0
  161. package/dist/testing-contracts.js.map +1 -0
  162. package/dist/tools.d.ts +32 -4
  163. package/dist/tools.d.ts.map +1 -1
  164. package/dist/tools.js +132 -6
  165. package/dist/tools.js.map +1 -1
  166. package/dist/types.d.ts +132 -3
  167. package/dist/types.d.ts.map +1 -1
  168. package/dist/types.js.map +1 -1
  169. package/package.json +16 -8
package/dist/history.js CHANGED
@@ -55,6 +55,38 @@ export class SessionHistory {
55
55
  }
56
56
  return path.reverse();
57
57
  }
58
+ /**
59
+ * Rewind the active path to a specific entry. Used during interrupted-tool
60
+ * repair to branch from a prior entry when partial out-of-order results need
61
+ * to be replaced with a correctly ordered complete batch.
62
+ */
63
+ setLeaf(entryId) {
64
+ if (!this.byId.has(entryId)) {
65
+ throw new Error(`Cannot set leaf: entry "${entryId}" does not exist.`);
66
+ }
67
+ this.leafId = entryId;
68
+ }
69
+ /**
70
+ * Active-path entries appended after `afterLeafId` (exclusive), in order.
71
+ *
72
+ * - `afterLeafId` is null/undefined means "from the start of the path" →
73
+ * returns the entire active path.
74
+ * - When the id is found, returns entries strictly after it.
75
+ * - When the id is *not* on the current active path (e.g. a branch switch
76
+ * happened mid-window), returns `[]`. Callers use this for bounded windowing
77
+ * — falling back to the full path would silently include unrelated history.
78
+ * An empty result is the safer answer for usage aggregation: zero is loud
79
+ * (sums won't match expectations) while full-history is silent overcounting.
80
+ */
81
+ getActivePathSince(afterLeafId) {
82
+ const path = this.getActivePath();
83
+ if (afterLeafId == null)
84
+ return path;
85
+ const startIndex = path.findIndex((entry) => entry.id === afterLeafId);
86
+ if (startIndex === -1)
87
+ return [];
88
+ return path.slice(startIndex + 1);
89
+ }
58
90
  getLatestCompaction() {
59
91
  const path = this.getActivePath();
60
92
  for (let index = path.length - 1; index >= 0; index -= 1) {
@@ -64,6 +96,10 @@ export class SessionHistory {
64
96
  }
65
97
  return undefined;
66
98
  }
99
+ /** Trailing dangling tool calls on THIS history's active path. See {@link findTrailingDanglingToolCalls}. */
100
+ findTrailingDanglingToolCalls() {
101
+ return findTrailingDanglingToolCalls(this.getActivePath());
102
+ }
67
103
  buildContextEntries() {
68
104
  const path = this.getActivePath();
69
105
  const compaction = this.getLatestCompaction();
@@ -118,6 +154,96 @@ export class SessionHistory {
118
154
  export function buildModelMessagesFromHistory(data, role) {
119
155
  return SessionHistory.fromData(data).buildModelMessages(role);
120
156
  }
157
+ /**
158
+ * Entry types that end a turn's trailing tool window. A tool_call before any
159
+ * of these is either settled within the window or was abandoned by an
160
+ * interrupted turn.
161
+ */
162
+ const TOOL_WINDOW_BOUNDARY_TYPES = new Set([
163
+ 'user_prompt',
164
+ 'user_message',
165
+ 'assistant_message',
166
+ 'result',
167
+ 'compaction',
168
+ 'signal',
169
+ 'submission_settled',
170
+ ]);
171
+ /**
172
+ * Find trailing `tool_call` entries on the active path that were never
173
+ * settled — no matching `tool_result` (paired by `toolCallId`, falling back
174
+ * to tool name) and no subsequent `error` entry for the same tool.
175
+ *
176
+ * A dangling call means a model turn died (crash/abort) between recording
177
+ * the call and recording its outcome. Left in place it produces an
178
+ * assistant `tool_use` with no `tool_result` on resume, which providers
179
+ * reject — the repair path appends synthetic interrupted outcomes for
180
+ * exactly the entries returned here.
181
+ *
182
+ * Conservative by construction: only the window after the last turn
183
+ * boundary (user prompt / assistant message / result / compaction / signal)
184
+ * is examined, so historical, already-settled turns are never re-judged.
185
+ * Both the resume-repair and the submission terminalization derive the
186
+ * dangling set through this single function so they can never disagree.
187
+ */
188
+ export function findTrailingDanglingToolCalls(path) {
189
+ let windowStart = 0;
190
+ for (let index = path.length - 1; index >= 0; index -= 1) {
191
+ const entry = path[index];
192
+ if (entry && TOOL_WINDOW_BOUNDARY_TYPES.has(entry.type)) {
193
+ windowStart = index + 1;
194
+ break;
195
+ }
196
+ }
197
+ const window = path.slice(windowStart);
198
+ const dangling = [];
199
+ for (let index = 0; index < window.length; index += 1) {
200
+ const entry = window[index];
201
+ if (!entry || entry.type !== 'tool_call')
202
+ continue;
203
+ const callId = typeof entry.data?.toolCallId === 'string' ? entry.data.toolCallId : undefined;
204
+ const tool = typeof entry.data?.tool === 'string' ? entry.data.tool : undefined;
205
+ const settled = window.slice(index + 1).some((later) => {
206
+ if (later.type === 'tool_result') {
207
+ const laterId = typeof later.data?.toolCallId === 'string' ? later.data.toolCallId : undefined;
208
+ if (callId && laterId)
209
+ return laterId === callId;
210
+ return typeof later.data?.tool === 'string' && later.data.tool === tool;
211
+ }
212
+ // Tool failures and unavailable/denied tools record an `error` entry
213
+ // (no toolCallId) instead of a tool_result.
214
+ if (later.type === 'error') {
215
+ return typeof later.data?.tool === 'string' && later.data.tool === tool;
216
+ }
217
+ return false;
218
+ });
219
+ if (!settled)
220
+ dangling.push(entry);
221
+ }
222
+ return dangling;
223
+ }
224
+ /**
225
+ * Trailing `task_start` entries in the same window with no matching
226
+ * `task_end` — a subtask that was in flight when the turn died. These do not
227
+ * corrupt model context (task entries are bookkeeping), but settling them
228
+ * keeps UI/audit state coherent.
229
+ */
230
+ export function findTrailingUnfinishedTasks(path) {
231
+ let windowStart = 0;
232
+ for (let index = path.length - 1; index >= 0; index -= 1) {
233
+ const entry = path[index];
234
+ if (entry && TOOL_WINDOW_BOUNDARY_TYPES.has(entry.type)) {
235
+ windowStart = index + 1;
236
+ break;
237
+ }
238
+ }
239
+ const window = path.slice(windowStart);
240
+ const ended = new Set(window
241
+ .filter((entry) => entry.type === 'task_end')
242
+ .map((entry) => (typeof entry.data?.taskId === 'string' ? entry.data.taskId : '')));
243
+ return window.filter((entry) => entry.type === 'task_start' &&
244
+ typeof entry.data?.taskId === 'string' &&
245
+ !ended.has(entry.data.taskId));
246
+ }
121
247
  function entryToModelMessage(entry) {
122
248
  switch (entry.type) {
123
249
  case 'compaction': {
@@ -142,6 +268,24 @@ function entryToModelMessage(entry) {
142
268
  const toolCallId = typeof entry.data?.toolCallId === 'string' ? entry.data.toolCallId : undefined;
143
269
  return { role: 'tool', name: tool, content: JSON.stringify(output ?? null), ...(toolCallId ? { toolCallId } : {}) };
144
270
  }
271
+ case 'signal': {
272
+ const data = entry.data;
273
+ if (!data)
274
+ return undefined;
275
+ return { role: 'user', content: renderSignalMessage(data) };
276
+ }
277
+ case 'shell_command': {
278
+ const cmd = typeof entry.data?.command === 'string' ? entry.data.command : undefined;
279
+ return cmd ? { role: 'user', content: `Run shell command: ${cmd}` } : undefined;
280
+ }
281
+ case 'shell_result': {
282
+ const output = {
283
+ exitCode: entry.data?.exitCode,
284
+ stdout: entry.data?.stdout,
285
+ stderr: entry.data?.stderr,
286
+ };
287
+ return { role: 'tool', name: 'bash', content: JSON.stringify(output) };
288
+ }
145
289
  case 'error': {
146
290
  const error = typeof entry.data?.error === 'string' ? entry.data.error : undefined;
147
291
  return error ? { role: 'user', content: `[Error]\n\n${error}` } : undefined;
@@ -150,4 +294,23 @@ function entryToModelMessage(entry) {
150
294
  return undefined;
151
295
  }
152
296
  }
297
+ export function renderSignalMessage(data) {
298
+ const tagName = data.tagName ?? 'signal';
299
+ const attributes = [['type', data.signalType]];
300
+ if (data.attributes) {
301
+ for (const [key, value] of Object.entries(data.attributes)) {
302
+ attributes.push([key, value]);
303
+ }
304
+ }
305
+ const attrStr = attributes
306
+ .map(([name, value]) => ` ${escapeXmlAttribute(name)}="${escapeXmlAttribute(value)}"`)
307
+ .join('');
308
+ return `<${tagName}${attrStr}>\n${escapeXmlText(data.content)}\n</${tagName}>`;
309
+ }
310
+ function escapeXmlText(value) {
311
+ return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
312
+ }
313
+ function escapeXmlAttribute(value) {
314
+ return escapeXmlText(value).replaceAll('"', '&quot;');
315
+ }
153
316
  //# sourceMappingURL=history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAG,yiBAAyiB,CAAC;AAEnlB,MAAM,OAAO,cAAc;IACR,OAAO,CAAiB;IACxB,IAAI,CAA4B;IAChC,MAAM,CAAqB;IAE5C,YAAoB,OAAuB,EAAE,MAA0B;QACrE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA6B;QAC3C,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,QAAgB,EAAE,MAAc;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAC;QAClD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,mBAAmB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY;gBAAE,OAAO,KAAK,CAAC;QACjD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mBAAmB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,gBAAgB,GAAG,OAAO,UAAU,CAAC,IAAI,EAAE,gBAAgB,KAAK,QAAQ;YAC5E,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB;YAClC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,cAAc,GAAG,gBAAgB;YACrC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YAC1D,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,kBAAkB,CAAC,IAAW;QAC5B,MAAM,QAAQ,GAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,yBAAyB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAErJ,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEjC,qFAAqF;YACrF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAoB,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW;wBAAE,MAAM;oBAC1C,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxF,SAAS,CAAC,IAAI,CAAC;wBACb,EAAE;wBACF,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;wBAClE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK;qBACtB,CAAC,CAAC;oBACH,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,UAAU,6BAA6B,CAAC,IAA6B,EAAE,IAAW;IACtF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAmB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC;YACjH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,qEAAqE;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACtH,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QACD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAG,yiBAAyiB,CAAC;AAEnlB,MAAM,OAAO,cAAc;IACR,OAAO,CAAiB;IACxB,IAAI,CAA4B;IACzC,MAAM,CAAqB;IAEnC,YAAoB,OAAuB,EAAE,MAA0B;QACrE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA6B;QAC3C,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,QAAgB,EAAE,MAAc;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,KAAK,MAAM,EAAE,CAAC,CAAC;QAC9F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAC;QAClD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,mBAAmB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,WAAsC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,IAAI,WAAW,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QACvE,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,mBAAmB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY;gBAAE,OAAO,KAAK,CAAC;QACjD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6GAA6G;IAC7G,6BAA6B;QAC3B,OAAO,6BAA6B,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,mBAAmB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,gBAAgB,GAAG,OAAO,UAAU,CAAC,IAAI,EAAE,gBAAgB,KAAK,QAAQ;YAC5E,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB;YAClC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,cAAc,GAAG,gBAAgB;YACrC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,CAAC;YAC1D,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,kBAAkB,CAAC,IAAW;QAC5B,MAAM,QAAQ,GAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,yBAAyB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAErJ,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEjC,qFAAqF;YACrF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAoB,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC1B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW;wBAAE,MAAM;oBAC1C,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxF,SAAS,CAAC,IAAI,CAAC;wBACb,EAAE;wBACF,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;wBAClE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK;qBACtB,CAAC,CAAC;oBACH,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,UAAU,6BAA6B,CAAC,IAA6B,EAAE,IAAW;IACtF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,aAAa;IACb,cAAc;IACd,mBAAmB;IACnB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,oBAAoB;CACrB,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAoB;IAChE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,IAAI,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACnD,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACrD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/F,IAAI,MAAM,IAAI,OAAO;oBAAE,OAAO,OAAO,KAAK,MAAM,CAAC;gBACjD,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;YAC1E,CAAC;YACD,qEAAqE;YACrE,4CAA4C;YAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;YAC1E,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAoB;IAC9D,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,KAAK,IAAI,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,MAAM;SACH,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;SAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACrF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,YAAY;QAC3B,OAAO,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ;QACtC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAmB;IAC9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC;YACjH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,qEAAqE;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACtH,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,IAAmC,CAAC;YACvD,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ;gBAC9B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM;gBAC1B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM;aAC3B,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QACD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IACzC,MAAM,UAAU,GAAuB,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,UAAU;SACvB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;SACrF,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,IAAI,OAAO,GAAG,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO,GAAG,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * In-memory reference implementation of {@link AgentSubmissionStore}.
3
+ *
4
+ * Suitable for the inline runtime, dev, and tests. Single-threaded JS makes
5
+ * every compare-and-set trivially atomic, but the observable gating
6
+ * conditions — runnable-head FIFO per session, owner checks, first-terminal-
7
+ * wins, idempotent admission with payload-conflict detection — match the
8
+ * durable backends exactly so the contract suite passes unchanged.
9
+ */
10
+ import type { AgentAttemptMarker, AgentDispatchAdmission, AgentSubmission, AgentSubmissionInput, AgentSubmissionStore, SubmissionAttemptRef, SubmissionClaimRef, AgentSubmissionDurability, SubmissionSettledRecord, SubmissionSettlementObligation } from './submission-store.js';
11
+ import type { DispatchInput } from './dispatch.js';
12
+ export declare class InMemorySubmissionStore implements AgentSubmissionStore {
13
+ private nextSequence;
14
+ private readonly submissions;
15
+ private readonly dispatchReceipts;
16
+ private readonly attemptMarkers;
17
+ private readonly obligations;
18
+ getSubmission(submissionId: string): Promise<AgentSubmission | null>;
19
+ hasUnsettledSubmissions(): Promise<boolean>;
20
+ listRunnableSubmissions(): Promise<AgentSubmission[]>;
21
+ listUnreadySubmissions(): Promise<AgentSubmission[]>;
22
+ listRunningSubmissions(): Promise<AgentSubmission[]>;
23
+ listPendingSubmissionSettlements(): Promise<SubmissionSettlementObligation[]>;
24
+ replaceSubmissionAttempt(attempt: SubmissionAttemptRef, nextAttemptId: string, lease?: {
25
+ ownerId: string;
26
+ leaseExpiresAt: number;
27
+ }): Promise<AgentSubmission | null>;
28
+ admitDispatch(input: DispatchInput): Promise<AgentDispatchAdmission>;
29
+ admitDirect(input: AgentSubmissionInput): Promise<AgentSubmission>;
30
+ markSubmissionCanonicalReady(submissionId: string): Promise<AgentSubmission | null>;
31
+ claimSubmission(claim: SubmissionClaimRef): Promise<AgentSubmission | null>;
32
+ markSubmissionInputApplied(attempt: SubmissionAttemptRef, durability?: AgentSubmissionDurability): Promise<boolean>;
33
+ requestSubmissionRecovery(attempt: SubmissionAttemptRef): Promise<boolean>;
34
+ requestSessionAbort(storeSessionId: string): Promise<string[]>;
35
+ requeueSubmissionBeforeInputApplied(attempt: SubmissionAttemptRef): Promise<boolean>;
36
+ reserveSubmissionSettlement(attempt: SubmissionAttemptRef, settlement: {
37
+ recordId: string;
38
+ record: SubmissionSettledRecord;
39
+ }): Promise<SubmissionSettlementObligation | null>;
40
+ finalizeSubmissionSettlement(attempt: SubmissionAttemptRef, recordId: string): Promise<boolean>;
41
+ completeSubmission(attempt: SubmissionAttemptRef): Promise<boolean>;
42
+ failSubmission(attempt: SubmissionAttemptRef, error: unknown): Promise<boolean>;
43
+ insertAttemptMarker(attempt: SubmissionAttemptRef): Promise<void>;
44
+ deleteAttemptMarker(attempt: SubmissionAttemptRef): Promise<void>;
45
+ listAttemptMarkers(): Promise<AgentAttemptMarker[]>;
46
+ renewLeases(ownerId: string, submissionIds: string[]): Promise<void>;
47
+ listExpiredSubmissions(): Promise<AgentSubmission[]>;
48
+ private admitSubmission;
49
+ private ordered;
50
+ private hasEarlierUnsettled;
51
+ private ownedRunning;
52
+ }
53
+ //# sourceMappingURL=in-memory-submission-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-submission-store.d.ts","sourceRoot":"","sources":["../src/in-memory-submission-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EAEtB,eAAe,EACf,oBAAoB,EAEpB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,8BAA8B,EAC/B,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAuCnD,qBAAa,uBAAwB,YAAW,oBAAoB;IAClE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyC;IACxE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IAI7D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAKpE,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;IAO3C,uBAAuB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAWrD,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAMpD,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAMpD,gCAAgC,IAAI,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAc7E,wBAAwB,CAC5B,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAClD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAgB5B,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIpE,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;IAQlE,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IASnF,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAsB3E,0BAA0B,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,UAAU,CAAC,EAAE,yBAAyB,GACrC,OAAO,CAAC,OAAO,CAAC;IAYb,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1E,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY9D,mCAAmC,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpF,2BAA2B,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,GAChE,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC;IA+B3C,4BAA4B,CAChC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IAYb,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IASnE,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/E,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAMnD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpE,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAW1D,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,340 @@
1
+ /**
2
+ * In-memory reference implementation of {@link AgentSubmissionStore}.
3
+ *
4
+ * Suitable for the inline runtime, dev, and tests. Single-threaded JS makes
5
+ * every compare-and-set trivially atomic, but the observable gating
6
+ * conditions — runnable-head FIFO per session, owner checks, first-terminal-
7
+ * wins, idempotent admission with payload-conflict detection — match the
8
+ * durable backends exactly so the contract suite passes unchanged.
9
+ */
10
+ import { admitSubmissionWithBackend, createDispatchAgentSubmissionInput, DURABILITY_DEFAULT_MAX_ATTEMPTS, DURABILITY_DEFAULT_TIMEOUT_MS, LEASE_DURATION_MS, } from './submission-store.js';
11
+ const UNSETTLED = ['queued', 'running', 'terminalizing'];
12
+ export class InMemorySubmissionStore {
13
+ nextSequence = 1;
14
+ submissions = new Map();
15
+ dispatchReceipts = new Map();
16
+ attemptMarkers = new Map();
17
+ obligations = new Map();
18
+ // ── Query ────────────────────────────────────────────────────────────
19
+ async getSubmission(submissionId) {
20
+ const row = this.submissions.get(submissionId);
21
+ return row ? parseStoredSubmission(row) : null;
22
+ }
23
+ async hasUnsettledSubmissions() {
24
+ for (const row of this.submissions.values()) {
25
+ if (UNSETTLED.includes(row.status))
26
+ return true;
27
+ }
28
+ return false;
29
+ }
30
+ async listRunnableSubmissions() {
31
+ return this.ordered()
32
+ .filter((row) => row.status === 'queued' &&
33
+ row.canonicalReadyAt !== null &&
34
+ !this.hasEarlierUnsettled(row))
35
+ .map(parseStoredSubmission);
36
+ }
37
+ async listUnreadySubmissions() {
38
+ return this.ordered()
39
+ .filter((row) => row.status === 'queued' && row.canonicalReadyAt === null)
40
+ .map(parseStoredSubmission);
41
+ }
42
+ async listRunningSubmissions() {
43
+ return this.ordered()
44
+ .filter((row) => row.status === 'running')
45
+ .map(parseStoredSubmission);
46
+ }
47
+ async listPendingSubmissionSettlements() {
48
+ return this.ordered()
49
+ .filter((row) => row.status === 'terminalizing')
50
+ .map((row) => {
51
+ const obligation = this.obligations.get(row.submissionId);
52
+ if (!obligation) {
53
+ throw new Error('[fabric-harness] Terminalizing submission is missing its settlement obligation.');
54
+ }
55
+ return parseObligation(obligation);
56
+ });
57
+ }
58
+ async replaceSubmissionAttempt(attempt, nextAttemptId, lease) {
59
+ const row = this.ownedRunning(attempt);
60
+ if (!row)
61
+ return null;
62
+ row.attemptId = nextAttemptId;
63
+ row.recoveryRequestedAt = undefined;
64
+ row.startedAt = Date.now();
65
+ row.attemptCount += 1;
66
+ if (lease) {
67
+ row.ownerId = lease.ownerId;
68
+ row.leaseExpiresAt = lease.leaseExpiresAt;
69
+ }
70
+ return parseStoredSubmission(row);
71
+ }
72
+ // ── Admission ────────────────────────────────────────────────────────
73
+ async admitDispatch(input) {
74
+ return this.admitSubmission(createDispatchAgentSubmissionInput(input));
75
+ }
76
+ async admitDirect(input) {
77
+ const admission = this.admitSubmission(input);
78
+ if (admission.kind !== 'submission') {
79
+ throw new Error('[fabric-harness] Internal direct admission returned an unexpected result.');
80
+ }
81
+ return admission.submission;
82
+ }
83
+ async markSubmissionCanonicalReady(submissionId) {
84
+ const row = this.submissions.get(submissionId);
85
+ if (!row || row.status !== 'queued')
86
+ return null;
87
+ row.canonicalReadyAt = row.canonicalReadyAt ?? Date.now();
88
+ return parseStoredSubmission(row);
89
+ }
90
+ // ── Submission lifecycle ─────────────────────────────────────────────
91
+ async claimSubmission(claim) {
92
+ const row = this.submissions.get(claim.submissionId);
93
+ if (!row ||
94
+ row.status !== 'queued' ||
95
+ row.canonicalReadyAt === null ||
96
+ this.hasEarlierUnsettled(row)) {
97
+ return null;
98
+ }
99
+ const now = Date.now();
100
+ row.status = 'running';
101
+ row.attemptId = claim.attemptId;
102
+ row.startedAt = now;
103
+ row.attemptCount += 1;
104
+ row.maxRetry = DURABILITY_DEFAULT_MAX_ATTEMPTS;
105
+ if (row.timeoutAt === 0)
106
+ row.timeoutAt = now + DURABILITY_DEFAULT_TIMEOUT_MS;
107
+ row.ownerId = claim.ownerId;
108
+ row.leaseExpiresAt = claim.leaseExpiresAt;
109
+ return parseStoredSubmission(row);
110
+ }
111
+ async markSubmissionInputApplied(attempt, durability) {
112
+ const row = this.ownedRunning(attempt);
113
+ if (!row)
114
+ return false;
115
+ if (row.inputAppliedAt === undefined) {
116
+ const now = Date.now();
117
+ row.inputAppliedAt = now;
118
+ row.maxRetry = durability?.maxRetry ?? DURABILITY_DEFAULT_MAX_ATTEMPTS;
119
+ row.timeoutAt = durability?.timeoutAt ?? now + DURABILITY_DEFAULT_TIMEOUT_MS;
120
+ }
121
+ return true;
122
+ }
123
+ async requestSubmissionRecovery(attempt) {
124
+ const row = this.ownedRunning(attempt);
125
+ if (!row)
126
+ return false;
127
+ row.recoveryRequestedAt = row.recoveryRequestedAt ?? Date.now();
128
+ return true;
129
+ }
130
+ async requestSessionAbort(storeSessionId) {
131
+ const now = Date.now();
132
+ const affected = [];
133
+ for (const row of this.ordered()) {
134
+ if (row.storeSessionId !== storeSessionId)
135
+ continue;
136
+ if (row.status !== 'queued' && row.status !== 'running')
137
+ continue;
138
+ row.abortRequestedAt = row.abortRequestedAt ?? now;
139
+ affected.push(row.submissionId);
140
+ }
141
+ return affected;
142
+ }
143
+ async requeueSubmissionBeforeInputApplied(attempt) {
144
+ const row = this.ownedRunning(attempt);
145
+ if (!row || row.inputAppliedAt !== undefined)
146
+ return false;
147
+ row.status = 'queued';
148
+ row.attemptId = undefined;
149
+ row.recoveryRequestedAt = undefined;
150
+ row.startedAt = undefined;
151
+ row.ownerId = undefined;
152
+ row.leaseExpiresAt = 0;
153
+ return true;
154
+ }
155
+ async reserveSubmissionSettlement(attempt, settlement) {
156
+ if (settlement.record.submissionId !== attempt.submissionId)
157
+ return null;
158
+ const recordJson = JSON.stringify(settlement.record);
159
+ const row = this.submissions.get(attempt.submissionId);
160
+ if (!row || row.kind !== 'direct')
161
+ return null;
162
+ if (row.status === 'running' && row.attemptId === attempt.attemptId) {
163
+ row.status = 'terminalizing';
164
+ const obligation = {
165
+ submissionId: row.submissionId,
166
+ storeSessionId: row.storeSessionId,
167
+ attemptId: attempt.attemptId,
168
+ recordId: settlement.recordId,
169
+ recordJson,
170
+ };
171
+ this.obligations.set(row.submissionId, obligation);
172
+ return parseObligation(obligation);
173
+ }
174
+ if (row.status === 'terminalizing' && row.attemptId === attempt.attemptId) {
175
+ const existing = this.obligations.get(row.submissionId);
176
+ if (existing &&
177
+ existing.attemptId === attempt.attemptId &&
178
+ existing.recordId === settlement.recordId &&
179
+ existing.recordJson === recordJson) {
180
+ return parseObligation(existing);
181
+ }
182
+ }
183
+ return null;
184
+ }
185
+ async finalizeSubmissionSettlement(attempt, recordId) {
186
+ const row = this.submissions.get(attempt.submissionId);
187
+ if (!row || row.status !== 'terminalizing' || row.attemptId !== attempt.attemptId)
188
+ return false;
189
+ const obligation = this.obligations.get(attempt.submissionId);
190
+ if (!obligation || obligation.recordId !== recordId)
191
+ return false;
192
+ row.status = 'settled';
193
+ row.settledAt = Date.now();
194
+ row.error = undefined;
195
+ this.obligations.delete(attempt.submissionId);
196
+ return true;
197
+ }
198
+ async completeSubmission(attempt) {
199
+ const row = this.ownedRunning(attempt);
200
+ if (!row)
201
+ return false;
202
+ row.status = 'settled';
203
+ row.settledAt = Date.now();
204
+ row.error = undefined;
205
+ return true;
206
+ }
207
+ async failSubmission(attempt, error) {
208
+ const row = this.ownedRunning(attempt);
209
+ if (!row)
210
+ return false;
211
+ row.status = 'settled';
212
+ row.settledAt = Date.now();
213
+ row.error = error instanceof Error ? error.message : String(error);
214
+ return true;
215
+ }
216
+ // ── Attempt markers ──────────────────────────────────────────────────
217
+ async insertAttemptMarker(attempt) {
218
+ const key = markerKey(attempt);
219
+ if (this.attemptMarkers.has(key))
220
+ return;
221
+ this.attemptMarkers.set(key, {
222
+ submissionId: attempt.submissionId,
223
+ attemptId: attempt.attemptId,
224
+ createdAt: Date.now(),
225
+ });
226
+ }
227
+ async deleteAttemptMarker(attempt) {
228
+ this.attemptMarkers.delete(markerKey(attempt));
229
+ }
230
+ async listAttemptMarkers() {
231
+ return [...this.attemptMarkers.values()];
232
+ }
233
+ // ── Lease management ─────────────────────────────────────────────────
234
+ async renewLeases(ownerId, submissionIds) {
235
+ if (submissionIds.length === 0)
236
+ return;
237
+ const leaseExpiresAt = Date.now() + LEASE_DURATION_MS;
238
+ for (const submissionId of submissionIds) {
239
+ const row = this.submissions.get(submissionId);
240
+ if (row && row.status === 'running' && row.ownerId === ownerId) {
241
+ row.leaseExpiresAt = leaseExpiresAt;
242
+ }
243
+ }
244
+ }
245
+ async listExpiredSubmissions() {
246
+ const now = Date.now();
247
+ return this.ordered()
248
+ .filter((row) => row.status === 'running' && row.leaseExpiresAt > 0 && row.leaseExpiresAt < now)
249
+ .map(parseStoredSubmission);
250
+ }
251
+ // ── Private ──────────────────────────────────────────────────────────
252
+ admitSubmission(input) {
253
+ const admission = admitSubmissionWithBackend(input, {
254
+ getDispatchReceipt: (submissionId) => this.dispatchReceipts.get(submissionId) ?? null,
255
+ insertIfAbsent: (row) => {
256
+ if (this.submissions.has(row.submissionId))
257
+ return;
258
+ this.submissions.set(row.submissionId, {
259
+ sequence: this.nextSequence++,
260
+ submissionId: row.submissionId,
261
+ storeSessionId: row.storeSessionId,
262
+ kind: row.kind,
263
+ payload: row.payload,
264
+ status: 'queued',
265
+ acceptedAt: row.acceptedAt,
266
+ canonicalReadyAt: null,
267
+ attemptCount: 0,
268
+ maxRetry: DURABILITY_DEFAULT_MAX_ATTEMPTS,
269
+ timeoutAt: 0,
270
+ leaseExpiresAt: 0,
271
+ });
272
+ },
273
+ getExisting: (submissionId) => this.submissions.get(submissionId),
274
+ parseSubmission: parseStoredSubmission,
275
+ });
276
+ // Unreachable: every backend callback above is synchronous, so the shared
277
+ // algorithm completes synchronously.
278
+ if (admission instanceof Promise) {
279
+ throw new Error('[fabric-harness] Internal in-memory admission backend must be synchronous.');
280
+ }
281
+ return admission;
282
+ }
283
+ ordered() {
284
+ return [...this.submissions.values()].sort((a, b) => a.sequence - b.sequence);
285
+ }
286
+ hasEarlierUnsettled(row) {
287
+ for (const candidate of this.submissions.values()) {
288
+ if (candidate.storeSessionId === row.storeSessionId &&
289
+ candidate.sequence < row.sequence &&
290
+ UNSETTLED.includes(candidate.status)) {
291
+ return true;
292
+ }
293
+ }
294
+ return false;
295
+ }
296
+ ownedRunning(attempt) {
297
+ const row = this.submissions.get(attempt.submissionId);
298
+ if (!row || row.status !== 'running' || row.attemptId !== attempt.attemptId)
299
+ return undefined;
300
+ return row;
301
+ }
302
+ }
303
+ function markerKey(attempt) {
304
+ return `${attempt.submissionId}${attempt.attemptId}`;
305
+ }
306
+ function parseObligation(obligation) {
307
+ return {
308
+ submissionId: obligation.submissionId,
309
+ storeSessionId: obligation.storeSessionId,
310
+ attemptId: obligation.attemptId,
311
+ recordId: obligation.recordId,
312
+ record: JSON.parse(obligation.recordJson),
313
+ };
314
+ }
315
+ function parseStoredSubmission(row) {
316
+ return {
317
+ sequence: row.sequence,
318
+ submissionId: row.submissionId,
319
+ storeSessionId: row.storeSessionId,
320
+ kind: row.kind,
321
+ input: JSON.parse(row.payload),
322
+ status: row.status,
323
+ acceptedAt: row.acceptedAt,
324
+ canonicalReadyAt: row.canonicalReadyAt,
325
+ ...(row.attemptId !== undefined ? { attemptId: row.attemptId } : {}),
326
+ ...(row.inputAppliedAt !== undefined ? { inputAppliedAt: row.inputAppliedAt } : {}),
327
+ ...(row.recoveryRequestedAt !== undefined
328
+ ? { recoveryRequestedAt: row.recoveryRequestedAt }
329
+ : {}),
330
+ ...(row.abortRequestedAt !== undefined ? { abortRequestedAt: row.abortRequestedAt } : {}),
331
+ ...(row.startedAt !== undefined ? { startedAt: row.startedAt } : {}),
332
+ ...(row.error !== undefined ? { error: row.error } : {}),
333
+ attemptCount: row.attemptCount,
334
+ maxRetry: row.maxRetry,
335
+ timeoutAt: row.timeoutAt,
336
+ ...(row.ownerId !== undefined ? { ownerId: row.ownerId } : {}),
337
+ leaseExpiresAt: row.leaseExpiresAt,
338
+ };
339
+ }
340
+ //# sourceMappingURL=in-memory-submission-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-submission-store.js","sourceRoot":"","sources":["../src/in-memory-submission-store.ts"],"names":[],"mappings":"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"}