@usine/durable 0.0.0-stage → 0.2.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 (83) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +83 -2
  3. package/dist/attempt/documents.d.ts +86 -0
  4. package/dist/attempt/documents.d.ts.map +1 -0
  5. package/dist/attempt/documents.js +30 -0
  6. package/dist/attempt/documents.js.map +1 -0
  7. package/dist/attempt/events.d.ts +22 -0
  8. package/dist/attempt/events.d.ts.map +1 -0
  9. package/dist/attempt/events.js +110 -0
  10. package/dist/attempt/events.js.map +1 -0
  11. package/dist/attempt/extension.d.ts +48 -0
  12. package/dist/attempt/extension.d.ts.map +1 -0
  13. package/dist/attempt/extension.js +34 -0
  14. package/dist/attempt/extension.js.map +1 -0
  15. package/dist/attempt/hubs.d.ts +133 -0
  16. package/dist/attempt/hubs.d.ts.map +1 -0
  17. package/dist/attempt/hubs.js +146 -0
  18. package/dist/attempt/hubs.js.map +1 -0
  19. package/dist/attempt/outcome.d.ts +22 -0
  20. package/dist/attempt/outcome.d.ts.map +1 -0
  21. package/dist/attempt/outcome.js +84 -0
  22. package/dist/attempt/outcome.js.map +1 -0
  23. package/dist/attempt/parent.d.ts +27 -0
  24. package/dist/attempt/parent.d.ts.map +1 -0
  25. package/dist/attempt/parent.js +109 -0
  26. package/dist/attempt/parent.js.map +1 -0
  27. package/dist/attempt/relay.d.ts +41 -0
  28. package/dist/attempt/relay.d.ts.map +1 -0
  29. package/dist/attempt/relay.js +457 -0
  30. package/dist/attempt/relay.js.map +1 -0
  31. package/dist/attempt/repair.d.ts +14 -0
  32. package/dist/attempt/repair.d.ts.map +1 -0
  33. package/dist/attempt/repair.js +150 -0
  34. package/dist/attempt/repair.js.map +1 -0
  35. package/dist/attempt/request.d.ts +18 -0
  36. package/dist/attempt/request.d.ts.map +1 -0
  37. package/dist/attempt/request.js +24 -0
  38. package/dist/attempt/request.js.map +1 -0
  39. package/dist/attempt/runtime.d.ts +10 -0
  40. package/dist/attempt/runtime.d.ts.map +1 -0
  41. package/dist/attempt/runtime.js +429 -0
  42. package/dist/attempt/runtime.js.map +1 -0
  43. package/dist/attempt/services.d.ts +15 -0
  44. package/dist/attempt/services.d.ts.map +1 -0
  45. package/dist/attempt/services.js +2 -0
  46. package/dist/attempt/services.js.map +1 -0
  47. package/dist/attempt/subagent.d.ts +17 -0
  48. package/dist/attempt/subagent.d.ts.map +1 -0
  49. package/dist/attempt/subagent.js +208 -0
  50. package/dist/attempt/subagent.js.map +1 -0
  51. package/dist/attempt/task.d.ts +61 -0
  52. package/dist/attempt/task.d.ts.map +1 -0
  53. package/dist/attempt/task.js +302 -0
  54. package/dist/attempt/task.js.map +1 -0
  55. package/dist/attempt/watch.d.ts +8 -0
  56. package/dist/attempt/watch.d.ts.map +1 -0
  57. package/dist/attempt/watch.js +25 -0
  58. package/dist/attempt/watch.js.map +1 -0
  59. package/dist/attempt-runtime.d.ts +128 -0
  60. package/dist/attempt-runtime.d.ts.map +1 -0
  61. package/dist/attempt-runtime.js +78 -0
  62. package/dist/attempt-runtime.js.map +1 -0
  63. package/dist/backup.d.ts +26 -0
  64. package/dist/backup.d.ts.map +1 -0
  65. package/dist/backup.js +100 -0
  66. package/dist/backup.js.map +1 -0
  67. package/dist/harness.d.ts +101 -0
  68. package/dist/harness.d.ts.map +1 -0
  69. package/dist/harness.js +298 -0
  70. package/dist/harness.js.map +1 -0
  71. package/dist/live.d.ts +15 -0
  72. package/dist/live.d.ts.map +1 -0
  73. package/dist/live.js +51 -0
  74. package/dist/live.js.map +1 -0
  75. package/dist/storage-path.d.ts +4 -0
  76. package/dist/storage-path.d.ts.map +1 -0
  77. package/dist/storage-path.js +2 -0
  78. package/dist/storage-path.js.map +1 -0
  79. package/dist/testing.d.ts +116 -0
  80. package/dist/testing.d.ts.map +1 -0
  81. package/dist/testing.js +314 -0
  82. package/dist/testing.js.map +1 -0
  83. package/package.json +72 -3
@@ -0,0 +1,457 @@
1
+ import { UsageDoc, UserEntry, } from "@earendil-works/pi-durable";
2
+ import { ModelId } from "@usine/core/agent/brain";
3
+ import { SessionFinished, SessionStarted, SessionTokensUpdated, } from "@usine/core/agent/session";
4
+ import * as AttemptChannel from "@usine/core/attempt/channel";
5
+ import { AgentFailure } from "@usine/core/attempt/failure";
6
+ import { StepResult } from "@usine/core/step/result";
7
+ import { DateTime, Deferred, Effect, Option, Queue, Result, Schema } from "effect";
8
+ import { AttemptRecordDoc, HoldDoc } from "./documents.js";
9
+ import { entryEvents, ledgerUsage } from "./events.js";
10
+ import { keepNotice, } from "./hubs.js";
11
+ import { settledOf } from "./outcome.js";
12
+ import { parentSession, parentSessionId } from "./parent.js";
13
+ const PAGE = 64;
14
+ const unavailable = () => new AgentFailure({ message: "This attempt no longer has a live channel" });
15
+ /** Returns `value` as an `EntryId`, where 0 sorts before every committed entry. */
16
+ const entryId = (value) =>
17
+ // SAFETY: the value is 0 or an ID assigned by pi-durable and stored by this package.
18
+ value;
19
+ const entryQuery = (from, bound) => Option.match(bound, {
20
+ onNone: () => ({ minEntryId: entryId(from), order: "ascending" }),
21
+ onSome: (max) => ({ minEntryId: entryId(from), maxEntryId: max, order: "ascending" }),
22
+ });
23
+ const progressOf = (record) => ({
24
+ outbound: {
25
+ state: record.nextOutbound === 1
26
+ ? "AwaitingStarted"
27
+ : record.terminalRelayed
28
+ ? "Terminal"
29
+ : "Running",
30
+ nextSequence: record.nextOutbound,
31
+ },
32
+ inbound: record.nextInbound,
33
+ entry: record.relayedEntry,
34
+ tokens: record.relayedTokens,
35
+ });
36
+ const cursorOf = ({ entry, tokens }) => ({ entry, tokens });
37
+ /**
38
+ * Reads the Attempt's durable record. Returns `undefined` before the first `execute` creates its
39
+ * task.
40
+ */
41
+ export const readRecord = (durable, attemptId) => durable.use("read the Attempt record", (harness, context) => harness.snapshot(AttemptRecordDoc, attemptId, context));
42
+ /**
43
+ * Appends `payloads` with the next sequence numbers, then commits the progress. Appending first
44
+ * means a crash resends the payloads with the same sequence numbers instead of leaving a gap.
45
+ */
46
+ const emit = (durable, hub, payloads, advance) => hub.emission.withPermits(1)(Effect.gen(function* () {
47
+ if (Option.isNone(hub.channel))
48
+ return yield* unavailable();
49
+ const { io, progress } = hub.channel.value;
50
+ let outbound = progress.outbound;
51
+ for (const payload of payloads) {
52
+ const envelope = new AttemptChannel.OutboundEnvelope({
53
+ version: AttemptChannel.PROTOCOL_VERSION,
54
+ attemptId: hub.attemptId,
55
+ sequence: AttemptChannel.Sequence.make(outbound.nextSequence),
56
+ sentAt: yield* DateTime.now,
57
+ payload,
58
+ });
59
+ const admitted = AttemptChannel.admit(outbound, hub.attemptId, envelope);
60
+ if (Result.isFailure(admitted)) {
61
+ return yield* Effect.die(new Error(`${admitted.failure.message}: ${admitted.failure.detail}`));
62
+ }
63
+ yield* io.append("outbound", envelope);
64
+ outbound = admitted.success;
65
+ }
66
+ const cursor = advance(progress);
67
+ yield* durable.use("record the relayed envelopes", (harness, context) => harness.commit(async (tx) => {
68
+ const record = await tx.doc(AttemptRecordDoc, hub.attemptId, null);
69
+ record.nextOutbound = outbound.nextSequence;
70
+ record.relayedEntry = cursor.entry;
71
+ record.relayedTokens = cursor.tokens;
72
+ record.terminalRelayed = outbound.state === "Terminal";
73
+ }, context));
74
+ progress.outbound = outbound;
75
+ progress.entry = cursor.entry;
76
+ progress.tokens = cursor.tokens;
77
+ }));
78
+ /** Sends a payload that is not derived from a parent entry, such as an intervention result. */
79
+ export const emitPayload = (durable, hub, payload) => emit(durable, hub, [payload], cursorOf);
80
+ /** Appends an operator input to the transcript and returns its inbound sequence number. */
81
+ export const appendInbound = (durable, hub, operator, target, payload) => hub.emission.withPermits(1)(Effect.gen(function* () {
82
+ if (Option.isNone(hub.channel))
83
+ return yield* unavailable();
84
+ const { io, progress } = hub.channel.value;
85
+ const envelope = new AttemptChannel.InboundEnvelope({
86
+ version: AttemptChannel.PROTOCOL_VERSION,
87
+ attemptId: hub.attemptId,
88
+ sequence: AttemptChannel.Sequence.make(progress.inbound),
89
+ sentAt: yield* DateTime.now,
90
+ target,
91
+ operator,
92
+ payload,
93
+ });
94
+ yield* io.append("inbound", envelope);
95
+ yield* durable.use("record the inbound envelope", (harness, context) => harness.commit(async (tx) => {
96
+ const record = await tx.doc(AttemptRecordDoc, hub.attemptId, null);
97
+ record.nextInbound = envelope.sequence + 1;
98
+ }, context));
99
+ progress.inbound = envelope.sequence + 1;
100
+ return envelope.sequence;
101
+ }));
102
+ const decodeIntervention = Schema.decodeUnknownEffect(AttemptChannel.Intervention);
103
+ /**
104
+ * Returns the parent's supervision state after it read an input. A retired Hold counts as not
105
+ * paused and not held.
106
+ */
107
+ const deliveredState = (durable, hub) => Effect.map(durable.use("read the Hold", (harness, context) => harness.snapshot(HoldDoc, hub.taskId, context)), (hold) => new AttemptChannel.InterventionState({
108
+ held: hold?.held.includes(parentSessionId(hub.attemptId)) ?? false,
109
+ paused: hold?.paused ?? false,
110
+ }));
111
+ /** Removes an operator input from `queuedInputs`. */
112
+ const forgetQueuedInput = (durable, hub, inputSequence) => durable.use("forget the delivered operator input", (harness, context) => harness.commit(async (tx) => {
113
+ const record = await tx.doc(AttemptRecordDoc, hub.attemptId, null);
114
+ record.queuedInputs = (record.queuedInputs ?? []).filter((queuedInput) => queuedInput.inputSequence !== inputSequence);
115
+ }, context));
116
+ /** Sends the second receipt for an operator input that a child queued and never read. */
117
+ const childStoppedFirst = (durable, hub, inputSequence, intervention) => emitPayload(durable, hub, new AttemptChannel.InterventionRejected({
118
+ inputSequence,
119
+ intervention,
120
+ message: "The child stopped before it read this message. Send it again if it still applies.",
121
+ }));
122
+ /**
123
+ * Sends the second receipt for each resolved queued operator input, and rejects all unread ones if
124
+ * `attempt` is `ended`. The caller must hold the hub's routing permit.
125
+ */
126
+ export const relayDeliveries = Effect.fn("AttemptRelay.deliveries")(function* (durable, hub, attempt) {
127
+ const queued = (yield* readRecord(durable, hub.attemptId))?.queuedInputs ?? [];
128
+ for (const input of queued) {
129
+ if ("child" in input) {
130
+ if (attempt === "live" && hub.childInputs.has(input.inputSequence)) {
131
+ yield* Effect.logDebug("A queued operator input still waits for its child", {
132
+ inputSequence: input.inputSequence,
133
+ sessionId: input.child,
134
+ });
135
+ continue;
136
+ }
137
+ hub.childInputs.delete(input.inputSequence);
138
+ const intervention = yield* decodeIntervention(input.intervention).pipe(Effect.orDie);
139
+ yield* childStoppedFirst(durable, hub, AttemptChannel.Sequence.make(input.inputSequence), intervention);
140
+ yield* Effect.logWarning("The child stopped before it read a queued operator input", {
141
+ inputSequence: input.inputSequence,
142
+ sessionId: input.child,
143
+ action: intervention.action._tag,
144
+ attempt,
145
+ });
146
+ yield* forgetQueuedInput(durable, hub, input.inputSequence);
147
+ continue;
148
+ }
149
+ const status = yield* durable.use("read a queued operator input", async (harness, context) => {
150
+ const submission = await harness.submission(input.submission, context);
151
+ return submission === undefined ? undefined : (await submission.status(context)).status;
152
+ });
153
+ if (status === "queued" && attempt === "live") {
154
+ yield* Effect.logDebug("A queued operator input still waits for the parent", {
155
+ inputSequence: input.inputSequence,
156
+ });
157
+ continue;
158
+ }
159
+ const intervention = yield* decodeIntervention(input.intervention).pipe(Effect.orDie);
160
+ const inputSequence = AttemptChannel.Sequence.make(input.inputSequence);
161
+ if (status === "placed" || status === "done") {
162
+ yield* emitPayload(durable, hub, new AttemptChannel.InterventionApplied({
163
+ inputSequence,
164
+ intervention,
165
+ state: yield* deliveredState(durable, hub),
166
+ }));
167
+ yield* Effect.logInfo("The parent read a queued operator input", {
168
+ inputSequence,
169
+ action: intervention.action._tag,
170
+ });
171
+ }
172
+ else {
173
+ yield* emitPayload(durable, hub, new AttemptChannel.InterventionRejected({
174
+ inputSequence,
175
+ intervention,
176
+ message: "The parent stopped before it read this message. Send it again if it still applies.",
177
+ }));
178
+ yield* Effect.logWarning("The parent stopped before it read a queued operator input", {
179
+ inputSequence,
180
+ action: intervention.action._tag,
181
+ submissionStatus: status ?? "missing",
182
+ });
183
+ }
184
+ yield* forgetQueuedInput(durable, hub, input.inputSequence);
185
+ }
186
+ });
187
+ /**
188
+ * Sends the second receipt for a child-queued operator input when the child reports it, unless it
189
+ * was already sent. The caller must hold the hub's routing permit.
190
+ */
191
+ const relayChildDelivery = Effect.fn("AttemptRelay.childDelivery")(function* (durable, hub, delivery) {
192
+ const { inputSequence, intervention } = delivery;
193
+ hub.childInputs.delete(inputSequence);
194
+ const queued = (yield* readRecord(durable, hub.attemptId))?.queuedInputs ?? [];
195
+ if (!queued.some((input) => input.inputSequence === inputSequence)) {
196
+ return yield* Effect.logDebug("A child reported an operator input already settled", {
197
+ inputSequence,
198
+ });
199
+ }
200
+ const fields = {
201
+ inputSequence,
202
+ action: intervention.action._tag,
203
+ sessionId: intervention.target._tag === "Child" ? intervention.target.sessionId : "parent",
204
+ };
205
+ if (Option.isSome(delivery.delivered)) {
206
+ yield* emitPayload(durable, hub, new AttemptChannel.InterventionApplied({
207
+ inputSequence,
208
+ intervention,
209
+ state: delivery.delivered.value,
210
+ }));
211
+ yield* Effect.logInfo("The child read a queued operator input", fields);
212
+ }
213
+ else {
214
+ yield* childStoppedFirst(durable, hub, inputSequence, intervention);
215
+ yield* Effect.logWarning("The child stopped before it read a queued operator input", fields);
216
+ }
217
+ yield* forgetQueuedInput(durable, hub, inputSequence);
218
+ });
219
+ /**
220
+ * Relays one Attempt to `io` in order of occurrence until exactly one terminal envelope (`Final`,
221
+ * `Failed`, or `Interrupted`) is sent. Continues from the durable progress of an earlier call.
222
+ */
223
+ export const relayAttempt = Effect.fn("AttemptRelay.relay")(function* (durable, hubs, hub, request, io) {
224
+ const spec = request.spec;
225
+ yield* Effect.annotateCurrentSpan({ attemptId: hub.attemptId, taskId: hub.taskId });
226
+ const loaded = yield* readRecord(durable, hub.attemptId);
227
+ if (loaded === undefined) {
228
+ return yield* Effect.die(new Error(`Attempt ${hub.attemptId} has no durable record`));
229
+ }
230
+ const readTask = durable.use("read the Attempt task", (harness, context) => harness.getTask(hub.taskId, context));
231
+ if (loaded.terminalRelayed) {
232
+ const task = yield* readTask;
233
+ if (task === undefined) {
234
+ return yield* Effect.die(new Error(`Attempt task ${hub.taskId} is missing`));
235
+ }
236
+ yield* Effect.logInfo("The Attempt's terminal envelope was already relayed");
237
+ return settledOf(task);
238
+ }
239
+ const attached = yield* Effect.acquireRelease(Effect.sync(() => {
240
+ if (Option.isSome(hub.channel))
241
+ return false;
242
+ hub.channel = Option.some({ io, progress: progressOf(loaded) });
243
+ Deferred.doneUnsafe(hub.attached, Effect.succeed(request));
244
+ return true;
245
+ }), (attachedHere) => attachedHere
246
+ ? Effect.sync(() => {
247
+ hub.channel = Option.none();
248
+ hub.attached = Deferred.makeUnsafe();
249
+ }).pipe(Effect.tap(() => Effect.logDebug("Detached the Attempt's channel")))
250
+ : Effect.void);
251
+ if (!attached) {
252
+ yield* Effect.logWarning("Another execute call is relaying this Attempt; waiting for its outcome");
253
+ const task = yield* durable.use("wait for the Attempt task", (harness, context) => harness.waitForTask(hub.taskId, context));
254
+ return settledOf(task);
255
+ }
256
+ yield* Effect.logInfo("Relaying the Attempt's channel", {
257
+ nextSequence: loaded.nextOutbound,
258
+ relayedEntry: loaded.relayedEntry,
259
+ });
260
+ const progress = () => Option.match(hub.channel, {
261
+ onNone: () => progressOf(loaded),
262
+ onSome: (channel) => channel.progress,
263
+ });
264
+ let session = Option.map(Option.fromNullishOr(loaded.parentModel), (model) => parentSession(spec, ModelId.make(model)));
265
+ if (loaded.parentConversation !== null)
266
+ hubs.bindParent(hub, loaded.parentConversation);
267
+ const startParent = Effect.gen(function* () {
268
+ if (Option.isSome(session) && progress().outbound.state !== "AwaitingStarted") {
269
+ return session;
270
+ }
271
+ const record = yield* readRecord(durable, hub.attemptId);
272
+ if (record === undefined || record.parentModel === null) {
273
+ return Option.none();
274
+ }
275
+ if (record.parentConversation !== null)
276
+ hubs.bindParent(hub, record.parentConversation);
277
+ const started = parentSession(spec, ModelId.make(record.parentModel));
278
+ session = Option.some(started);
279
+ if (progress().outbound.state === "AwaitingStarted") {
280
+ yield* emitPayload(durable, hub, new AttemptChannel.Started({
281
+ parentModel: started.brain.model,
282
+ conflictingSalvage: spec.conflictingSalvage,
283
+ }));
284
+ yield* emitPayload(durable, hub, new AttemptChannel.SessionEvent({ event: new SessionStarted({ session: started }) }));
285
+ yield* Effect.logInfo("Relayed the Attempt's start", { parentModel: started.brain.model });
286
+ }
287
+ return session;
288
+ });
289
+ const relayEarlyNotices = Effect.gen(function* () {
290
+ const early = hub.early;
291
+ if (early.length === 0)
292
+ return;
293
+ hub.early = [];
294
+ yield* emit(durable, hub, early, cursorOf);
295
+ yield* Effect.logInfo("Relayed the Worker notices that arrived before the parent started", {
296
+ notices: early.map(({ _tag }) => _tag),
297
+ });
298
+ });
299
+ /** Starts the parent and, if it started, relays the early Worker notices. */
300
+ const ensureStarted = Effect.gen(function* () {
301
+ const started = yield* startParent;
302
+ if (Option.isSome(started))
303
+ yield* relayEarlyNotices;
304
+ return started;
305
+ });
306
+ const relayTokens = Effect.fn("AttemptRelay.tokens")(function* (started) {
307
+ if (Option.isNone(hub.parent))
308
+ return;
309
+ const parent = hub.parent.value;
310
+ const usage = yield* durable.use("read the parent's usage", (harness, context) => harness.snapshot(UsageDoc, parent, context));
311
+ const total = ledgerUsage(usage);
312
+ if (total.totalTokens <= progress().tokens)
313
+ return;
314
+ yield* emit(durable, hub, [
315
+ new AttemptChannel.SessionEvent({
316
+ event: new SessionTokensUpdated({ session: started, ...total }),
317
+ }),
318
+ ], (current) => ({ ...cursorOf(current), tokens: total.totalTokens }));
319
+ });
320
+ const deliveries = (attempt) => hub.routing.withPermits(1)(relayDeliveries(durable, hub, attempt));
321
+ const childDelivery = (delivery) => hub.routing.withPermits(1)(relayChildDelivery(durable, hub, delivery));
322
+ const relayEntries = Effect.fn("AttemptRelay.entries")(function* (bound) {
323
+ const started = yield* ensureStarted;
324
+ if (Option.isNone(started) || Option.isNone(hub.parent))
325
+ return;
326
+ const parent = hub.parent.value;
327
+ let placedInput = false;
328
+ let next = Option.none();
329
+ do {
330
+ const query = entryQuery(progress().entry + 1, bound);
331
+ const cursor = Option.getOrUndefined(next);
332
+ const found = yield* durable.use("read the parent's entries", async (harness, context) => {
333
+ const conversation = await harness.conversation(parent, context);
334
+ return conversation === undefined
335
+ ? { items: [] }
336
+ : conversation.entries(query, PAGE, cursor, context);
337
+ });
338
+ for (const entry of found.items) {
339
+ if (entry.kind === UserEntry.kind)
340
+ placedInput = true;
341
+ const events = entryEvents(entry, started.value);
342
+ if (events.length === 0) {
343
+ progress().entry = entry.id;
344
+ continue;
345
+ }
346
+ yield* emit(durable, hub, events.map((event) => new AttemptChannel.SessionEvent({ event })), (latest) => ({ ...cursorOf(latest), entry: entry.id }));
347
+ }
348
+ next = Option.fromNullishOr(found.next);
349
+ } while (Option.isSome(next));
350
+ yield* relayTokens(started.value);
351
+ if (placedInput)
352
+ yield* deliveries("live");
353
+ });
354
+ const relayEvent = Effect.fn("AttemptRelay.event")(function* (event) {
355
+ const started = yield* ensureStarted;
356
+ if (Option.isNone(started)) {
357
+ return yield* Effect.logWarning("Dropped a session event that arrived before the parent started", {
358
+ event: event._tag,
359
+ });
360
+ }
361
+ yield* emitPayload(durable, hub, new AttemptChannel.SessionEvent({ event }));
362
+ });
363
+ const relayNotice = Effect.fn("AttemptRelay.notice")(function* (notice) {
364
+ const started = yield* ensureStarted;
365
+ if (Option.isNone(started)) {
366
+ hub.early = keepNotice(hub.early, notice);
367
+ return yield* Effect.logDebug("Kept a Worker notice until the parent starts", {
368
+ notice: notice._tag,
369
+ worker: notice.worker,
370
+ kept: hub.early.map(({ _tag }) => _tag),
371
+ });
372
+ }
373
+ yield* emitPayload(durable, hub, notice);
374
+ yield* Effect.logDebug("Relayed a Worker notice", {
375
+ notice: notice._tag,
376
+ worker: notice.worker,
377
+ });
378
+ });
379
+ const finish = Effect.fn("AttemptRelay.finish")(function* (task) {
380
+ const settled = settledOf(task);
381
+ const started = yield* ensureStarted;
382
+ if (Option.isNone(started) && hub.early.length > 0) {
383
+ yield* Effect.logWarning("Dropped the Worker notices kept for a parent that never started", {
384
+ notices: hub.early.map(({ _tag }) => _tag),
385
+ });
386
+ hub.early = [];
387
+ }
388
+ yield* deliveries("ended");
389
+ if (Result.isSuccess(settled)) {
390
+ if (Option.isSome(started)) {
391
+ yield* emitPayload(durable, hub, new AttemptChannel.SessionEvent({
392
+ event: new SessionFinished({ session: started.value }),
393
+ }));
394
+ }
395
+ yield* emitPayload(durable, hub, new AttemptChannel.Final({
396
+ result: new StepResult({ message: settled.success.message, facts: [] }),
397
+ }));
398
+ }
399
+ else if (task.state.outcome?.status === "aborted" && Option.isSome(started)) {
400
+ yield* emitPayload(durable, hub, new AttemptChannel.Interrupted());
401
+ }
402
+ else {
403
+ yield* emitPayload(durable, hub, new AttemptChannel.Failed({ failure: settled.failure }));
404
+ }
405
+ yield* Effect.logInfo("Relayed the Attempt's terminal envelope", {
406
+ outcome: task.state.outcome?.status,
407
+ });
408
+ return settled;
409
+ });
410
+ const pending = yield* Queue.clear(hub.queue);
411
+ const firstEntry = pending.find((item) => item._tag === "Entry");
412
+ yield* relayEntries(firstEntry?._tag === "Entry" ? Option.some(entryId(firstEntry.entry - 1)) : Option.none());
413
+ yield* deliveries("live");
414
+ pending.push({ _tag: "Wake" });
415
+ const take = Effect.suspend(() => {
416
+ const item = pending.shift();
417
+ return item === undefined ? Queue.take(hub.queue) : Effect.succeed(item);
418
+ });
419
+ while (true) {
420
+ const item = yield* take;
421
+ if (item._tag === "Entry") {
422
+ yield* relayEntries(Option.some(item.entry));
423
+ }
424
+ else if (item._tag === "Event") {
425
+ yield* relayEvent(item.event);
426
+ }
427
+ else if (item._tag === "Notice") {
428
+ yield* relayNotice(item.notice);
429
+ }
430
+ else if (item._tag === "Delivery") {
431
+ yield* childDelivery(item);
432
+ }
433
+ else {
434
+ yield* ensureStarted;
435
+ const task = yield* readTask;
436
+ if (task === undefined) {
437
+ return yield* Effect.die(new Error(`Attempt task ${hub.taskId} is missing`));
438
+ }
439
+ if (task.state.status !== "terminal")
440
+ continue;
441
+ const rest = [...pending.splice(0), ...(yield* Queue.clear(hub.queue))];
442
+ for (const remaining of rest) {
443
+ if (remaining._tag === "Entry")
444
+ yield* relayEntries(Option.some(remaining.entry));
445
+ else if (remaining._tag === "Event")
446
+ yield* relayEvent(remaining.event);
447
+ else if (remaining._tag === "Notice")
448
+ yield* relayNotice(remaining.notice);
449
+ else if (remaining._tag === "Delivery")
450
+ yield* childDelivery(remaining);
451
+ }
452
+ yield* relayEntries(Option.none());
453
+ return yield* finish(task);
454
+ }
455
+ }
456
+ }, Effect.scoped);
457
+ //# sourceMappingURL=relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/attempt/relay.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,QAAQ,EACR,SAAS,GACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAGL,eAAe,EACf,cAAc,EACd,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAuB,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGnF,OAAO,EAAsB,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAIL,UAAU,GAGX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,IAAI,GAAG,EAAE,CAAC;AAEhB,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC;AAE7E,mFAAmF;AACnF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAW,EAAE;AACzC,qFAAqF;AACrF,KAAgB,CAAC;AAEnB,MAAM,UAAU,GAAG,CACjB,IAAY,EACZ,KAA6B,EACO,EAAE,CACtC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;IAClB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;CACtF,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC,MAA+B,EAAiB,EAAE,CAAC,CAAC;IACtE,QAAQ,EAAE;QACR,KAAK,EACH,MAAM,CAAC,YAAY,KAAK,CAAC;YACvB,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,MAAM,CAAC,eAAe;gBACtB,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS;QACjB,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC;IACD,OAAO,EAAE,MAAM,CAAC,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC,YAAY;IAC1B,MAAM,EAAE,MAAM,CAAC,aAAa;CAC7B,CAAC,CAAC;AAIH,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAiB,EAAe,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAkC,EAAE,SAAiB,EAAE,EAAE,CAClF,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,CAAC,CACvD,CAAC;AAEJ;;;GAGG;AACH,MAAM,IAAI,GAAG,CACX,OAAkC,EAClC,GAAe,EACf,QAAuD,EACvD,OAAiD,EACU,EAAE,CAC7D,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC;YACnD,OAAO,EAAE,cAAc,CAAC,gBAAgB;YACxC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7D,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG;YAC3B,OAAO;SACR,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACtB,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CACrE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACtE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC5C,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,KAAK,KAAK,UAAU,CAAC;IACzD,CAAC,EAAE,OAAO,CAAC,CACZ,CAAC;IACF,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC9B,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAClC,CAAC,CAAC,CACH,CAAC;AAEJ,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAAkC,EAClC,GAAe,EACf,OAAuC,EACvC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAE7C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAkC,EAClC,GAAe,EACf,QAAgB,EAChB,MAAoC,EACpC,OAAsC,EACwC,EAAE,CAChF,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,eAAe,CAAC;QAClD,OAAO,EAAE,cAAc,CAAC,gBAAgB;QACxC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACxD,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG;QAC3B,MAAM;QACN,QAAQ;QACR,OAAO;KACR,CAAC,CAAC;IACH,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACrE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,OAAO,CAAC,CACZ,CAAC;IACF,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC3B,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAEnF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,OAAkC,EAAE,GAAe,EAAE,EAAE,CAC7E,MAAM,CAAC,GAAG,CACR,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/C,EACD,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,cAAc,CAAC,iBAAiB,CAAC;IACnC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK;IAClE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK;CAC9B,CAAC,CACL,CAAC;AAEJ,qDAAqD;AACrD,MAAM,iBAAiB,GAAG,CACxB,OAAkC,EAClC,GAAe,EACf,aAAqB,EACrB,EAAE,CACF,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACtE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CACtD,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,KAAK,aAAa,CAC7D,CAAC;AACJ,CAAC,EAAE,OAAO,CAAC,CACZ,CAAC;AAEJ,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,CACxB,OAAkC,EAClC,GAAe,EACf,aAAsC,EACtC,YAAyC,EACzC,EAAE,CACF,WAAW,CACT,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,oBAAoB,CAAC;IACtC,aAAa;IACb,YAAY;IACZ,OAAO,EAAE,mFAAmF;CAC7F,CAAC,CACH,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,EAC3E,OAAkC,EAClC,GAAe,EACf,OAAyB;IAEzB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC;IAC/E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrB,IAAI,OAAO,KAAK,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,mDAAmD,EAAE;oBAC1E,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,SAAS,EAAE,KAAK,CAAC,KAAK;iBACvB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtF,KAAK,CAAC,CAAC,iBAAiB,CACtB,OAAO,EACP,GAAG,EACH,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EACjD,YAAY,CACb,CAAC;YACF,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,0DAA0D,EAAE;gBACnF,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI;gBAChC,OAAO;aACR,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;YAC3F,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvE,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1F,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oDAAoD,EAAE;gBAC3E,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtF,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxE,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7C,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,mBAAmB,CAAC;gBACrC,aAAa;gBACb,YAAY;gBACZ,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC;aAC3C,CAAC,CACH,CAAC;YACF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yCAAyC,EAAE;gBAC/D,aAAa;gBACb,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI;aACjC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,oBAAoB,CAAC;gBACtC,aAAa;gBACb,YAAY;gBACZ,OAAO,EACL,oFAAoF;aACvF,CAAC,CACH,CAAC;YACF,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,2DAA2D,EAAE;gBACpF,aAAa;gBACb,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI;gBAChC,gBAAgB,EAAE,MAAM,IAAI,SAAS;aACtC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAC1E,OAAkC,EAClC,GAAe,EACf,QAAuB;IAEvB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACjD,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC;IAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oDAAoD,EAAE;YAClF,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG;QACb,aAAa;QACb,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI;QAChC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;KAC3F,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,mBAAmB,CAAC;YACrC,aAAa;YACb,YAAY;YACZ,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK;SAChC,CAAC,CACH,CAAC;QACF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QACpE,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,0DAA0D,EAAE,MAAM,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EACnE,OAAkC,EAClC,IAAiB,EACjB,GAAe,EACf,OAAuB,EACvB,EAAuB;IAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,SAAS,wBAAwB,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACzE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CACrC,CAAC;IACF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;QAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,EACF,CAAC,YAAY,EAAE,EAAE,CACf,YAAY;QACV,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACf,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,MAAM,CAAC,IAAI,CAClB,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,wEAAwE,CACzE,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAChF,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CACzC,CAAC;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,EAAE;QACtD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,GAAkB,EAAE,CACnC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;QACxB,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAChC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;KACtC,CAAC,CAAC;IACL,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAC3E,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACzC,CAAC;IACF,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI;QAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAExF,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YAC9E,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,IAAI,EAAiB,CAAC;QACtC,CAAC;QACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACtE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;YACpD,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,OAAO,CAAC;gBACzB,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;gBAChC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC5C,CAAC,CACH,CAAC;YACF,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CACrF,CAAC;YACF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3C,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,mEAAmE,EAAE;YACzF,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;SACvC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAsB;QACpF,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC/E,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAC5C,CAAC;QACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC,MAAM;YAAE,OAAO;QACnD,KAAK,CAAC,CAAC,IAAI,CACT,OAAO,EACP,GAAG,EACH;YACE,IAAI,cAAc,CAAC,YAAY,CAAC;gBAC9B,KAAK,EAAE,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;aAChE,CAAC;SACH,EACD,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,OAAyB,EAAE,EAAE,CAC/C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,CAAC,QAAuB,EAAE,EAAE,CAChD,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAA6B;QAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO;QAChE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAAU,CAAC;QACjC,GAAG,CAAC;YACF,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAC9B,2BAA2B,EAC3B,KAAK,EAAE,OAAO,EAAE,OAAO,EAAsC,EAAE;gBAC7D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjE,OAAO,YAAY,KAAK,SAAS;oBAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oBACf,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC,CACF,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;oBAAE,WAAW,GAAG,IAAI,CAAC;gBACtD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,QAAQ,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBACD,KAAK,CAAC,CAAC,IAAI,CACT,OAAO,EACP,GAAG,EACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EACjE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACvD,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC9B,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,WAAW;YAAE,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAwB;QACpF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAC7B,gEAAgE,EAChE;gBACE,KAAK,EAAE,KAAK,CAAC,IAAI;aAClB,CACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAC5D,MAAmC;QAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,8CAA8C,EAAE;gBAC5E,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACzC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE;YAChD,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EACvD,IAA+C;QAE/C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,iEAAiE,EAAE;gBAC1F,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;aAC3C,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,YAAY,CAAC;oBAC9B,KAAK,EAAE,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;iBACvD,CAAC,CACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,CAAC,WAAW,CAChB,OAAO,EACP,GAAG,EACH,IAAI,cAAc,CAAC,KAAK,CAAC;gBACvB,MAAM,EAAE,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;aACxE,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9E,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yCAAyC,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM;SACpC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAqB,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACjE,KAAK,CAAC,CAAC,YAAY,CACjB,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAC1F,CAAC;IACF,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,aAAa,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;YAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU;gBAAE,SAAS;YAC/C,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC7B,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;oBAAE,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC7E,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO;oBAAE,KAAK,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;qBACnE,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;oBAAE,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;qBACtE,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU;oBAAE,KAAK,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type Harness, type Storage } from "@earendil-works/pi-durable";
2
+ import { Effect } from "effect";
3
+ import type { EndedAttempt } from "./hubs.ts";
4
+ /**
5
+ * Replaces the unreadable documents of each live task's conversation and aborts the affected
6
+ * Attempt's task with the reason. Runs before the harness resumes its tasks.
7
+ */
8
+ export declare const repairUnreadableConversations: (harness: Harness, storage: Storage) => Effect.Effect<void>;
9
+ /**
10
+ * Aborts the tasks of the Attempts whose `execute` a storage failure ended, so the reopened harness
11
+ * doesn't run their parents again. Runs before the harness resumes its tasks. Failures are logged.
12
+ */
13
+ export declare const abortEndedAttempts: (harness: Harness, attempts: ReadonlyArray<EndedAttempt>) => Effect.Effect<void>;
14
+ //# sourceMappingURL=repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../src/attempt/repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,OAAO,EAKZ,KAAK,OAAO,EAIb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAwK9C;;;GAGG;AACH,eAAO,MAAM,6BAA6B,YAC/B,OAAO,WACP,OAAO,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAiBlB,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,CAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,KAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAwBrB,CAAC"}