@usine/engine 0.3.0 → 0.5.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 (201) hide show
  1. package/LICENSE +661 -21
  2. package/README.md +112 -38
  3. package/dist/board-moves/board-moves.d.ts +20 -0
  4. package/dist/board-moves/board-moves.d.ts.map +1 -0
  5. package/dist/board-moves/board-moves.js +74 -0
  6. package/dist/board-moves/board-moves.js.map +1 -0
  7. package/dist/board-moves/model.d.ts +21 -0
  8. package/dist/board-moves/model.d.ts.map +1 -0
  9. package/dist/board-moves/model.js +22 -0
  10. package/dist/board-moves/model.js.map +1 -0
  11. package/dist/cursor/cursor.d.ts +2 -6
  12. package/dist/cursor/cursor.d.ts.map +1 -1
  13. package/dist/cursor/cursor.js +2 -6
  14. package/dist/cursor/cursor.js.map +1 -1
  15. package/dist/cycle-budget/cycle-budget.d.ts +14 -8
  16. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
  17. package/dist/cycle-budget/cycle-budget.js +51 -10
  18. package/dist/cycle-budget/cycle-budget.js.map +1 -1
  19. package/dist/cycle-budget/model.d.ts +6 -2
  20. package/dist/cycle-budget/model.d.ts.map +1 -1
  21. package/dist/cycle-budget/model.js +5 -2
  22. package/dist/cycle-budget/model.js.map +1 -1
  23. package/dist/cycle-budget/queries.d.ts +1 -1
  24. package/dist/cycle-budget/queries.d.ts.map +1 -1
  25. package/dist/cycle-budget/queries.js +3 -3
  26. package/dist/cycle-budget/queries.js.map +1 -1
  27. package/dist/database/database.d.ts +1 -1
  28. package/dist/database/database.d.ts.map +1 -1
  29. package/dist/database/local-sqlite.d.ts +13 -10
  30. package/dist/database/local-sqlite.d.ts.map +1 -1
  31. package/dist/database/local-sqlite.js +22 -17
  32. package/dist/database/local-sqlite.js.map +1 -1
  33. package/dist/database/schema.d.ts +668 -36
  34. package/dist/database/schema.d.ts.map +1 -1
  35. package/dist/database/schema.js +123 -23
  36. package/dist/database/schema.js.map +1 -1
  37. package/dist/{workflow → engine}/admission.d.ts +2 -2
  38. package/dist/engine/admission.d.ts.map +1 -0
  39. package/dist/{workflow → engine}/admission.js +4 -4
  40. package/dist/engine/admission.js.map +1 -0
  41. package/dist/engine/checkout-recovery.d.ts +79 -0
  42. package/dist/engine/checkout-recovery.d.ts.map +1 -0
  43. package/dist/engine/checkout-recovery.js +238 -0
  44. package/dist/engine/checkout-recovery.js.map +1 -0
  45. package/dist/engine/engine.d.ts +67 -26
  46. package/dist/engine/engine.d.ts.map +1 -1
  47. package/dist/engine/engine.js +136 -129
  48. package/dist/engine/engine.js.map +1 -1
  49. package/dist/engine/error.d.ts +29 -10
  50. package/dist/engine/error.d.ts.map +1 -1
  51. package/dist/engine/error.js +28 -8
  52. package/dist/engine/error.js.map +1 -1
  53. package/dist/engine/lifecycle.d.ts +83 -28
  54. package/dist/engine/lifecycle.d.ts.map +1 -1
  55. package/dist/engine/lifecycle.js +94 -45
  56. package/dist/engine/lifecycle.js.map +1 -1
  57. package/dist/engine/retry.d.ts +16 -0
  58. package/dist/engine/retry.d.ts.map +1 -0
  59. package/dist/engine/retry.js +18 -0
  60. package/dist/engine/retry.js.map +1 -0
  61. package/dist/engine/run-again.d.ts +45 -0
  62. package/dist/engine/run-again.d.ts.map +1 -0
  63. package/dist/engine/run-again.js +56 -0
  64. package/dist/engine/run-again.js.map +1 -0
  65. package/dist/engine/run-driver.d.ts +68 -0
  66. package/dist/engine/run-driver.d.ts.map +1 -0
  67. package/dist/engine/run-driver.js +448 -0
  68. package/dist/engine/run-driver.js.map +1 -0
  69. package/dist/engine/shutdown.d.ts +3 -4
  70. package/dist/engine/shutdown.d.ts.map +1 -1
  71. package/dist/engine/shutdown.js +3 -4
  72. package/dist/engine/shutdown.js.map +1 -1
  73. package/dist/engine/submission.d.ts +31 -11
  74. package/dist/engine/submission.d.ts.map +1 -1
  75. package/dist/engine/submission.js +43 -12
  76. package/dist/engine/submission.js.map +1 -1
  77. package/dist/engine/unconfirmed-stops.d.ts +27 -0
  78. package/dist/engine/unconfirmed-stops.d.ts.map +1 -0
  79. package/dist/engine/unconfirmed-stops.js +26 -0
  80. package/dist/engine/unconfirmed-stops.js.map +1 -0
  81. package/dist/item-projection/item-projection.d.ts +14 -4
  82. package/dist/item-projection/item-projection.d.ts.map +1 -1
  83. package/dist/item-projection/item-projection.js +60 -14
  84. package/dist/item-projection/item-projection.js.map +1 -1
  85. package/dist/item-projection/model.d.ts +5 -1
  86. package/dist/item-projection/model.d.ts.map +1 -1
  87. package/dist/item-projection/model.js +6 -2
  88. package/dist/item-projection/model.js.map +1 -1
  89. package/dist/loop-control/loop-control.d.ts +5 -5
  90. package/dist/loop-control/loop-control.d.ts.map +1 -1
  91. package/dist/loop-control/loop-control.js +4 -4
  92. package/dist/loop-control/loop-control.js.map +1 -1
  93. package/dist/loop-control/model.d.ts +1 -1
  94. package/dist/loop-control/model.d.ts.map +1 -1
  95. package/dist/loop-control/model.js +1 -1
  96. package/dist/loop-control/model.js.map +1 -1
  97. package/dist/repository-label-projection/model.d.ts +2 -2
  98. package/dist/repository-label-projection/model.d.ts.map +1 -1
  99. package/dist/repository-label-projection/model.js +2 -2
  100. package/dist/repository-label-projection/model.js.map +1 -1
  101. package/dist/repository-label-projection/repository-label-projection.d.ts +1 -1
  102. package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -1
  103. package/dist/repository-label-projection/repository-label-projection.js +1 -1
  104. package/dist/repository-label-projection/repository-label-projection.js.map +1 -1
  105. package/dist/run-reader/model.d.ts +62 -4
  106. package/dist/run-reader/model.d.ts.map +1 -1
  107. package/dist/run-reader/model.js +66 -7
  108. package/dist/run-reader/model.js.map +1 -1
  109. package/dist/run-reader/run-reader.d.ts +25 -10
  110. package/dist/run-reader/run-reader.d.ts.map +1 -1
  111. package/dist/run-reader/run-reader.js +25 -7
  112. package/dist/run-reader/run-reader.js.map +1 -1
  113. package/dist/step-executor.d.ts +86 -13
  114. package/dist/step-executor.d.ts.map +1 -1
  115. package/dist/step-executor.js +10 -2
  116. package/dist/step-executor.js.map +1 -1
  117. package/dist/store/attempt-windows.d.ts +8 -0
  118. package/dist/store/attempt-windows.d.ts.map +1 -0
  119. package/dist/store/attempt-windows.js +53 -0
  120. package/dist/store/attempt-windows.js.map +1 -0
  121. package/dist/store/codec.d.ts +242 -43
  122. package/dist/store/codec.d.ts.map +1 -1
  123. package/dist/store/codec.js +61 -16
  124. package/dist/store/codec.js.map +1 -1
  125. package/dist/store/leftovers.d.ts +10 -0
  126. package/dist/store/leftovers.d.ts.map +1 -0
  127. package/dist/store/leftovers.js +43 -0
  128. package/dist/store/leftovers.js.map +1 -0
  129. package/dist/store/loop-items.d.ts +16 -0
  130. package/dist/store/loop-items.d.ts.map +1 -0
  131. package/dist/store/loop-items.js +185 -0
  132. package/dist/store/loop-items.js.map +1 -0
  133. package/dist/store/queries.d.ts +385 -36
  134. package/dist/store/queries.d.ts.map +1 -1
  135. package/dist/store/queries.js +355 -107
  136. package/dist/store/queries.js.map +1 -1
  137. package/dist/store/store.d.ts +106 -54
  138. package/dist/store/store.d.ts.map +1 -1
  139. package/dist/store/store.js +497 -190
  140. package/dist/store/store.js.map +1 -1
  141. package/dist/store/transcript.d.ts +3 -3
  142. package/dist/store/transcript.d.ts.map +1 -1
  143. package/dist/store/transcript.js +25 -6
  144. package/dist/store/transcript.js.map +1 -1
  145. package/dist/transcript.d.ts +19 -20
  146. package/dist/transcript.d.ts.map +1 -1
  147. package/dist/transcript.js +23 -21
  148. package/dist/transcript.js.map +1 -1
  149. package/dist/trigger-condition.d.ts +23 -0
  150. package/dist/trigger-condition.d.ts.map +1 -0
  151. package/dist/trigger-condition.js +8 -0
  152. package/dist/trigger-condition.js.map +1 -0
  153. package/drizzle/20260917071139_resolve_run_failure/migration.sql +1 -0
  154. package/drizzle/20260917071139_resolve_run_failure/snapshot.json +1471 -0
  155. package/drizzle/20260918032643_attempt_salvage/migration.sql +1 -0
  156. package/drizzle/20260918032643_attempt_salvage/snapshot.json +1481 -0
  157. package/drizzle/20261011153856_drop_workflow_tables/migration.sql +4 -0
  158. package/drizzle/20261011153856_drop_workflow_tables/snapshot.json +1433 -0
  159. package/drizzle/20261017155043_attempt_salvage_check/migration.sql +41 -0
  160. package/drizzle/20261017155043_attempt_salvage_check/snapshot.json +1421 -0
  161. package/drizzle/20261018162700_discard_attempt_leftovers/migration.sql +1 -0
  162. package/drizzle/20261018162700_discard_attempt_leftovers/snapshot.json +1431 -0
  163. package/drizzle/20261018172605_loop_items_and_reopenings/migration.sql +15 -0
  164. package/drizzle/20261018172605_loop_items_and_reopenings/snapshot.json +1574 -0
  165. package/drizzle/20261018180339_attempt_ended_at/migration.sql +1 -0
  166. package/drizzle/20261018180339_attempt_ended_at/snapshot.json +1584 -0
  167. package/drizzle/20261019104043_run_approval_source/migration.sql +15 -0
  168. package/drizzle/20261019104043_run_approval_source/snapshot.json +1610 -0
  169. package/drizzle/20261019133538_board_moves/migration.sql +14 -0
  170. package/drizzle/20261019133538_board_moves/snapshot.json +1731 -0
  171. package/drizzle/20261019170538_item_projection_gone/migration.sql +1 -0
  172. package/drizzle/20261019170538_item_projection_gone/snapshot.json +1741 -0
  173. package/drizzle/20261019180649_run_again_events/migration.sql +7 -0
  174. package/drizzle/20261019180649_run_again_events/snapshot.json +1804 -0
  175. package/drizzle/20261019185008_trigger_event_permissions/migration.sql +1 -0
  176. package/drizzle/20261019185008_trigger_event_permissions/snapshot.json +1814 -0
  177. package/drizzle/20261020103746_attempt_start/migration.sql +5 -0
  178. package/drizzle/20261020103746_attempt_start/snapshot.json +1844 -0
  179. package/drizzle/20261020125211_attempt_comments/migration.sql +1 -0
  180. package/drizzle/20261020125211_attempt_comments/snapshot.json +1854 -0
  181. package/drizzle/20261020191320_run_closed_at/migration.sql +6 -0
  182. package/drizzle/20261020191320_run_closed_at/snapshot.json +1864 -0
  183. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/migration.sql +2 -0
  184. package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/snapshot.json +1867 -0
  185. package/drizzle/20261024162954_cycle_ask_closures/migration.sql +10 -0
  186. package/drizzle/20261024162954_cycle_ask_closures/snapshot.json +1948 -0
  187. package/drizzle/20261027104206_attempt_out_of_memory/migration.sql +1 -0
  188. package/drizzle/20261027104206_attempt_out_of_memory/snapshot.json +1958 -0
  189. package/drizzle/20261027191944_failure_resolution/migration.sql +1 -0
  190. package/drizzle/20261027191944_failure_resolution/snapshot.json +1968 -0
  191. package/package.json +22 -12
  192. package/dist/workflow/admission.d.ts.map +0 -1
  193. package/dist/workflow/admission.js.map +0 -1
  194. package/dist/workflow/command.d.ts +0 -13
  195. package/dist/workflow/command.d.ts.map +0 -1
  196. package/dist/workflow/command.js +0 -17
  197. package/dist/workflow/command.js.map +0 -1
  198. package/dist/workflow/workflow.d.ts +0 -18
  199. package/dist/workflow/workflow.d.ts.map +0 -1
  200. package/dist/workflow/workflow.js +0 -108
  201. package/dist/workflow/workflow.js.map +0 -1
@@ -1,102 +1,84 @@
1
1
  import { Event } from "@usine/core/event";
2
- import { AttemptContext, AttemptId } from "@usine/core/attempt";
2
+ import { AttemptId } from "@usine/core/attempt";
3
3
  import { Intervention } from "@usine/core/attempt/channel";
4
4
  import { ItemKey } from "@usine/core/item";
5
5
  import { LoopName } from "@usine/core/loop";
6
6
  import { RunId } from "@usine/core/run";
7
- import { Context, Crypto, Effect, Layer, Option, Result } from "effect";
8
- import { ClusterWorkflowEngine, SingleRunner } from "effect/unstable/cluster";
9
- import { SqlClient } from "effect/unstable/sql";
10
- import { DurableDeferred, WorkflowEngine } from "effect/unstable/workflow";
7
+ import { ApprovalSource } from "@usine/core/run/approval";
8
+ import { Context, Crypto, Effect, Layer, Match, Option, Result } from "effect";
11
9
  import { RunDatabase } from "../database/database.js";
12
- import { AttemptCancellationError, RunInterventionRejectedError, } from "./error.js";
10
+ import { AttemptCancellationError, LeftoversDiscardRejectedError, RunInterventionRejectedError, } from "./error.js";
11
+ import { runIdFor } from "./submission.js";
12
+ import { plainRetry } from "./retry.js";
13
13
  import { RunStore } from "../store/store.js";
14
14
  import { RunReader } from "../run-reader/run-reader.js";
15
15
  import { ItemProjectionReader, ItemProjectionWriter } from "../item-projection/item-projection.js";
16
16
  import { RepositoryLabelProjectionReader, RepositoryLabelProjectionWriter, } from "../repository-label-projection/repository-label-projection.js";
17
- import { ApprovalGate, DurableRun, continueWithNewest, durableRunLayer, runIdFor, } from "../workflow/workflow.js";
18
17
  import { StepExecutor } from "../step-executor.js";
18
+ import { TriggerCondition } from "../trigger-condition.js";
19
19
  import { CursorStore } from "../cursor/cursor.js";
20
20
  import { LoopControl } from "../loop-control/loop-control.js";
21
21
  import { CycleBudgets } from "../cycle-budget/cycle-budget.js";
22
- import { AttemptAdmission } from "../workflow/admission.js";
23
- const MAX_SETTLEMENT_POLLS = 500;
22
+ import { BoardMoves } from "../board-moves/board-moves.js";
23
+ import { AttemptAdmission } from "./admission.js";
24
+ import { RunDriver } from "./run-driver.js";
25
+ import { UnconfirmedStops } from "./unconfirmed-stops.js";
26
+ /** The interval between periodic reconciles, which restart open Runs whose fiber stopped. */
27
+ export const ReconcileInterval = Context.Reference("@usine/engine/ReconcileInterval", { defaultValue: () => "3 minutes" });
28
+ // Operations that commit a Run transition also hand it to the Run's fiber, uninterruptibly, so an
29
+ // interrupted caller can't leave a committed transition undriven.
24
30
  const makeRunEngine = Effect.gen(function* () {
25
31
  const store = yield* RunStore;
32
+ const driver = yield* RunDriver;
26
33
  const admission = yield* AttemptAdmission;
27
34
  const stepExecutor = yield* StepExecutor;
28
- const workflowEngine = yield* WorkflowEngine.WorkflowEngine;
29
- const provideWorkflowEngine = (effect) => Effect.provideService(effect, WorkflowEngine.WorkflowEngine, workflowEngine);
30
- const launch = Effect.fn("RunEngine.launch")(function* (submission) {
31
- yield* DurableRun.execute({ submission }, { discard: true }).pipe(provideWorkflowEngine);
32
- });
33
- const deliverInterrupt = Effect.fn("RunEngine.deliverInterrupt")(function* (runId) {
34
- yield* DurableRun.interrupt(runId).pipe(provideWorkflowEngine);
35
- yield* store.completeWorkflowCommand(runId, "Interrupt");
36
- });
37
- const deliverApproval = Effect.fn("RunEngine.deliverApproval")(function* (runId) {
38
- const token = DurableDeferred.tokenFromExecutionId(ApprovalGate, {
39
- workflow: DurableRun,
40
- executionId: runId,
41
- });
42
- yield* DurableDeferred.succeed(ApprovalGate, { token, value: undefined }).pipe(provideWorkflowEngine);
43
- yield* store.completeWorkflowCommand(runId, "Approve");
44
- });
45
- const deliverContinuation = Effect.fn("RunEngine.deliverContinuation")(function* (runId) {
46
- yield* continueWithNewest(store, runId).pipe(provideWorkflowEngine);
47
- });
48
- const awaitWorkflowSettlement = Effect.fn("RunEngine.awaitWorkflowSettlement")(function* (runId) {
49
- // A Failed projection commits before the workflow finishes suspending, so
50
- // poll across that handover or an immediate operator retry is lost. A
51
- // workflow still absent at the deadline means a corrupted instance
52
- // database, so fail loudly instead of hanging.
53
- for (let poll = 0; poll < MAX_SETTLEMENT_POLLS; poll += 1) {
54
- const status = yield* DurableRun.poll(runId).pipe(provideWorkflowEngine);
55
- if (Option.isSome(status))
56
- return status.value;
57
- yield* Effect.sleep("10 millis");
58
- }
59
- return yield* Effect.die(new Error(`Run ${runId} has no durable workflow execution to settle`));
60
- });
61
- const deliverResume = Effect.fn("RunEngine.deliverResume")(function* (runId) {
62
- const status = yield* awaitWorkflowSettlement(runId);
63
- if (status._tag === "Complete") {
64
- yield* store.reconcileCompletion(runId, status);
65
- yield* store.completeWorkflowCommand(runId, "Resume");
66
- yield* deliverContinuation(runId);
67
- return;
68
- }
69
- yield* DurableRun.resume(runId).pipe(provideWorkflowEngine);
70
- yield* store.completeWorkflowCommand(runId, "Resume");
71
- });
72
- const commandHandlers = {
73
- Approve: deliverApproval,
74
- Continue: deliverContinuation,
75
- Interrupt: deliverInterrupt,
76
- Resume: deliverResume,
77
- };
35
+ const crypto = yield* Crypto.Crypto;
78
36
  const submit = Effect.fn("RunEngine.submit")(function* (submission) {
79
- const requestedRunId = yield* runIdFor(submission);
37
+ const requestedRunId = yield* runIdFor(submission).pipe(Effect.provideService(Crypto.Crypto, crypto));
80
38
  const claim = yield* store.recordAndClaim(submission, requestedRunId);
39
+ // Stop the superseded Run's fiber before starting the new one, so the Item never has two
40
+ // fibers reserving Workers.
81
41
  if (Option.isSome(claim.supersededRun)) {
82
- yield* deliverInterrupt(claim.supersededRun.value);
42
+ yield* driver.stop(claim.supersededRun.value);
83
43
  }
84
- if (claim.result._tag === "Claimed") {
85
- yield* launch(claim.submission);
44
+ if (Option.isSome(claim.openedRun)) {
45
+ yield* driver.launch(claim.openedRun.value);
86
46
  }
87
47
  return claim.result;
88
- });
89
- const approve = Effect.fn("RunEngine.approve")(function* (runId, approval) {
90
- yield* store.approve(runId, approval);
91
- yield* deliverApproval(runId);
92
- });
93
- const retry = Effect.fn("RunEngine.retry")(function* (runId, amendment = Option.none()) {
94
- yield* store.retry(runId, amendment);
95
- yield* deliverResume(runId);
96
- });
48
+ }, Effect.uninterruptible);
49
+ const approve = Effect.fn("RunEngine.approve")(function* (runId, approval, source) {
50
+ if (yield* store.approve(runId, approval, source)) {
51
+ yield* Effect.logInfo("Run approved", {
52
+ runId,
53
+ eventId: approval.id,
54
+ channel: source.channel,
55
+ approver: Option.getOrElse(source.approver, () => "none"),
56
+ });
57
+ yield* driver.resume(runId);
58
+ return;
59
+ }
60
+ yield* Effect.logDebug("Approval was already recorded; the Run is unchanged", {
61
+ runId,
62
+ eventId: approval.id,
63
+ });
64
+ }, Effect.uninterruptible);
65
+ const retry = Effect.fn("RunEngine.retry")(function* (runId, request = plainRetry) {
66
+ if (yield* store.retry(runId, request)) {
67
+ yield* driver.resume(runId);
68
+ return;
69
+ }
70
+ yield* Effect.logDebug("Retry changed nothing; the Run already waits for its next Attempt", {
71
+ runId,
72
+ });
73
+ }, Effect.uninterruptible);
74
+ const runAgain = Effect.fn("RunEngine.runAgain")(function* (runId, request) {
75
+ const result = yield* store.runAgain(runId, request);
76
+ if (result._tag === "Claimed")
77
+ yield* driver.launch(result.runId);
78
+ return result;
79
+ }, Effect.uninterruptible);
97
80
  const cancel = Effect.fn("RunEngine.cancel")(function* (runId) {
98
- // The closing transaction decides both facts at once: whether the run was
99
- // still open, and which attempt was in flight when it closed.
81
+ // One transaction determines whether the Run was open and which Attempt was running.
100
82
  const outcome = yield* store.cancel(runId);
101
83
  if (outcome._tag === "AlreadyClosed") {
102
84
  yield* Effect.logDebug("Cancel was a no-op; the run was already closed", { runId });
@@ -106,18 +88,34 @@ const makeRunEngine = Effect.gen(function* () {
106
88
  runId,
107
89
  openAttempt: Option.getOrElse(outcome.openAttempt, () => "none"),
108
90
  });
91
+ // The stop can end the Attempt's execution, and its fiber then frees the slot, so the slot
92
+ // moves to the Attempt first.
93
+ if (Option.isSome(outcome.openAttempt))
94
+ yield* driver.holdSlot(runId, outcome.openAttempt.value);
95
+ // Stop the Attempt before interrupting its fiber; otherwise its parent task stays live
96
+ // waiting for a reattach.
109
97
  const handshake = Option.isSome(outcome.openAttempt)
110
- ? yield* stepExecutor.interrupt(outcome.openAttempt.value).pipe(Effect.result)
98
+ ? yield* stepExecutor.interrupt(outcome.openAttempt.value, "cancel").pipe(Effect.result)
111
99
  : Result.succeed(undefined);
112
- yield* deliverInterrupt(runId);
113
- yield* deliverContinuation(runId);
100
+ yield* driver.stop(runId);
101
+ // The Attempt's slot, and a checkout that startup kept for a reattach, stay kept, and the
102
+ // queued Event's Run starts no Attempt, until the parent task is confirmed stopped.
103
+ if (Option.isSome(outcome.openAttempt))
104
+ yield* driver.releaseKept({
105
+ attemptId: outcome.openAttempt.value,
106
+ runId,
107
+ loop: outcome.loop,
108
+ itemKey: outcome.itemKey,
109
+ reason: "cancel",
110
+ });
111
+ yield* driver.continueWithNewest(runId);
114
112
  if (Option.isSome(outcome.openAttempt) && Result.isFailure(handshake)) {
115
113
  return yield* new AttemptCancellationError({
116
114
  attemptId: outcome.openAttempt.value,
117
115
  cause: handshake.failure,
118
116
  });
119
117
  }
120
- });
118
+ }, Effect.uninterruptible);
121
119
  const intervene = Effect.fn("RunEngine.intervene")(function* (runId, attemptId, intervention) {
122
120
  yield* Effect.annotateCurrentSpan({ runId, attemptId, action: intervention.action._tag });
123
121
  const current = yield* store.snapshot(runId);
@@ -132,96 +130,105 @@ const makeRunEngine = Effect.gen(function* () {
132
130
  return yield* new RunInterventionRejectedError({
133
131
  runId,
134
132
  attemptId,
135
- message: "This Attempt is no longer running",
133
+ message: "This attempt is no longer running",
136
134
  });
137
135
  }
138
136
  yield* stepExecutor.intervene(attemptId, intervention).pipe(Effect.mapError((error) => new RunInterventionRejectedError({
139
137
  runId,
140
138
  attemptId,
141
- message: error._tag === "RunawayFailure"
142
- ? "The Attempt reached its runaway limit"
143
- : error._tag === "ChildSessionBudgetFailure"
144
- ? "The Attempt reached its child-session budget"
145
- : error.message,
139
+ message: Match.valueTags(error, {
140
+ RunawayFailure: () => "The attempt reached its runaway limit",
141
+ ChildSessionBudgetFailure: () => "The attempt reached its child-session budget",
142
+ QuestionFailure: () => "The attempt ended with a question for the operator",
143
+ BlockedFailure: ({ message }) => message,
144
+ InfraFailure: ({ message }) => message,
145
+ DefectFailure: ({ message }) => message,
146
+ AgentFailure: ({ message }) => message,
147
+ }),
146
148
  })), Effect.tapError((error) => Effect.logWarning("Operator input delivery failed", {
147
149
  runId,
148
150
  attemptId,
149
151
  message: error.message,
150
152
  })));
151
153
  });
154
+ const resolveFailure = Effect.fn("RunEngine.resolveFailure")(function* (runId, attemptId, operator) {
155
+ yield* Effect.annotateCurrentSpan({ runId, attemptId });
156
+ if (!(yield* store.resolveFailure(runId, attemptId, operator)))
157
+ return;
158
+ yield* Effect.logInfo("The operator resolved the Agent's question or blocker; the Item's queued Events get their turn", {
159
+ runId,
160
+ attemptId,
161
+ });
162
+ yield* driver.continueWithNewest(runId);
163
+ }, Effect.uninterruptible);
152
164
  const revoke = Effect.fn("RunEngine.revoke")(function* (loop, itemKey) {
153
165
  const revoked = yield* store.revoke(loop, itemKey);
154
- yield* Effect.forEach(revoked, deliverInterrupt, {
155
- concurrency: "unbounded",
156
- discard: true,
157
- });
166
+ yield* Effect.forEach(revoked, driver.stop, { concurrency: "unbounded", discard: true });
158
167
  return revoked;
159
- });
168
+ }, Effect.uninterruptible);
160
169
  const inspect = Effect.fn("RunEngine.inspect")(function* (runId) {
161
170
  return yield* store.snapshot(runId);
162
171
  });
163
172
  const transcript = Effect.fn("RunEngine.transcript")(function* (query) {
164
173
  return yield* store.transcript(query);
165
174
  });
166
- const reconcile = Effect.fn("RunEngine.reconcile")(function* () {
167
- yield* Effect.forEach(yield* store.pendingWorkflowCommands, ({ command, runId }) => commandHandlers[command](runId), { discard: true });
168
- const recoverable = yield* store.recoverable;
169
- yield* Effect.forEach(recoverable, ({ runId, state, submission }) => Effect.gen(function* () {
170
- const status = yield* DurableRun.poll(runId).pipe(provideWorkflowEngine);
171
- if (Option.isSome(status) && status.value._tag === "Complete") {
172
- yield* store.reconcileCompletion(runId, status.value);
173
- yield* deliverContinuation(runId);
174
- return;
175
- }
176
- if (Option.isSome(status) && status.value._tag === "Suspended") {
177
- if (state._tag === "Running") {
178
- yield* deliverResume(runId);
179
- }
180
- return;
181
- }
182
- yield* launch(submission);
183
- }), { concurrency: "unbounded", discard: true });
175
+ const discardLeftovers = Effect.fn("RunEngine.discardLeftovers")(function* (worker) {
176
+ yield* Effect.annotateCurrentSpan({ worker });
177
+ if ((yield* stepExecutor.workers).includes(worker)) {
178
+ const running = yield* store.openAttempts(worker);
179
+ yield* Effect.logInfo("Leftovers kept; the Worker is configured or still runs Attempts, so its Attempts stay tracked", { worker, running });
180
+ return yield* new LeftoversDiscardRejectedError({ worker, running });
181
+ }
182
+ const attempts = yield* store.discardLeftovers(worker);
183
+ yield* Effect.logInfo("Discarded the leftovers of the Attempts on a Worker that is not configured; startup no longer reconciles them", { worker, attempts: attempts.length });
184
+ yield* stepExecutor.discard(worker, attempts);
185
+ return attempts.length;
184
186
  });
185
- yield* reconcile();
187
+ // Startup reconciliation runs here because this layer is memoized; `Layer.tap` would run it
188
+ // once per service the engine is provided to.
189
+ yield* driver.recoverWorkspaces();
190
+ yield* driver.reconcile();
191
+ const interval = yield* ReconcileInterval;
192
+ yield* Effect.sleep(interval).pipe(Effect.andThen(driver.reconcile()), Effect.tapError((error) => Effect.logError("Periodic Run reconcile failed; the next one tries again", {
193
+ errorTag: error._tag,
194
+ })), Effect.ignore, Effect.forever, Effect.forkScoped);
186
195
  return {
187
196
  approve,
188
197
  cancel,
198
+ discardLeftovers,
189
199
  drain: admission.drain,
190
200
  inspect,
191
201
  intervene,
192
- reconcile,
202
+ reconcile: driver.reconcile,
193
203
  retry,
204
+ resolveFailure,
194
205
  revoke,
206
+ runAgain,
195
207
  submit,
196
208
  transcript,
197
209
  };
198
210
  });
199
- /** Records Events and manages their Runs through approval, execution, retry, and cancellation. */
211
+ /** The service that records Events and drives their Runs through approval, execution, retry, and cancellation. */
200
212
  export class RunEngine extends Context.Service()("@usine/engine/RunEngine") {
201
213
  }
202
214
  /**
203
- * Provides Run execution and recovery on the supplied database.
204
- * `database` must supply Drizzle and Effect SQL clients for the same database,
205
- * so Run records and pending execution remain together across restarts.
206
- * The deployment supplies `Crypto` and the Worker implementation through `StepExecutor`.
215
+ * Returns the engine layers on `database`, which stores all durable Run state. Requires `Crypto`
216
+ * for Run IDs, `StepExecutor` for Workers, and `TriggerCondition` to re-check queued Events.
207
217
  */
208
218
  export const layerWithDatabase = (database) => {
209
219
  const store = RunStore.layer.pipe(Layer.provide(database));
210
- const cluster = SingleRunner.layer({
211
- runnerStorage: "memory",
212
- shardingConfig: {
213
- availableShardGroups: ["default", "workflow"],
214
- assignedShardGroups: ["default", "workflow"],
215
- entityTerminationTimeout: 0,
216
- },
217
- }).pipe(Layer.provide(database), Layer.orDie);
218
- const workflowEngine = ClusterWorkflowEngine.layer.pipe(Layer.provide(cluster));
219
- const admission = AttemptAdmission.layer;
220
- const runtime = durableRunLayer.pipe(Layer.provideMerge(workflowEngine), Layer.provideMerge(store), Layer.provideMerge(admission));
221
- const runEngine = Layer.effect(RunEngine, makeRunEngine).pipe(Layer.provide(runtime));
222
- return Layer.mergeAll(runEngine, CycleBudgets.layer.pipe(Layer.provide(database)), RunReader.layer.pipe(Layer.provide(database)), CursorStore.layer.pipe(Layer.provide(database)), ItemProjectionReader.layer.pipe(Layer.provide(database)), ItemProjectionWriter.layer.pipe(Layer.provide(database)), RepositoryLabelProjectionReader.layer.pipe(Layer.provide(database)), RepositoryLabelProjectionWriter.layer.pipe(Layer.provide(database)), LoopControl.layer.pipe(Layer.provide(database)));
220
+ const itemWriter = ItemProjectionWriter.layer.pipe(Layer.provide(database));
221
+ const driver = RunDriver.layer.pipe(Layer.provideMerge(store), Layer.provideMerge(AttemptAdmission.layer), Layer.provide(itemWriter));
222
+ const runEngine = Layer.mergeAll(Layer.effect(RunEngine, makeRunEngine), Layer.effect(UnconfirmedStops, Effect.gen(function* () {
223
+ const running = yield* RunDriver;
224
+ return UnconfirmedStops.of({ list: running.unconfirmedStops });
225
+ }))).pipe(Layer.provide(driver));
226
+ return Layer.mergeAll(runEngine, BoardMoves.layer.pipe(Layer.provide(database)), CycleBudgets.layer.pipe(Layer.provide(database)), RunReader.layer.pipe(Layer.provide(database)), CursorStore.layer.pipe(Layer.provide(database)), ItemProjectionReader.layer.pipe(Layer.provide(database)), itemWriter, RepositoryLabelProjectionReader.layer.pipe(Layer.provide(database)), RepositoryLabelProjectionWriter.layer.pipe(Layer.provide(database)), LoopControl.layer.pipe(Layer.provide(database)));
223
227
  };
224
- export { Submission, Claimed, Queued, Ignored, CycleBlocked, IgnoreReason, SubmissionResult, } from "./submission.js";
228
+ export { Submission, Claimed, Queued, Suppressed, Ignored, CycleBlocked, IgnoreReason, SubmissionResult, } from "./submission.js";
229
+ export { RunAgainRequest, RunAgainResult } from "./run-again.js";
230
+ export { RetryRequest } from "./retry.js";
225
231
  export { RunEngineShutdown } from "./shutdown.js";
226
- export { RunNotFoundError, RunOperationRejectedError, EnginePersistenceError, AttemptCancellationError, RunInterventionRejectedError, RunStoreError, RunEngineError, } from "./error.js";
232
+ export { UnconfirmedStop, UnconfirmedStops } from "./unconfirmed-stops.js";
233
+ export { RunNotFoundError, RunOperationRejectedError, RunRetryBlockedError, EnginePersistenceError, AttemptCancellationError, RunInterventionRejectedError, LeftoversDiscardRejectedError, RunStoreError, RunEngineError, } from "./error.js";
227
234
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"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"}
@@ -2,44 +2,63 @@ import { Schema } from "effect";
2
2
  declare const RunNotFoundError_base: Schema.Class<RunNotFoundError, Schema.TaggedStruct<"RunNotFoundError", {
3
3
  readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
4
4
  }>, import("effect/Cause").YieldableError>;
5
- /** No Run with the requested identity exists in this instance's records. */
5
+ /** An error for a Run ID that doesn't exist. */
6
6
  export declare class RunNotFoundError extends RunNotFoundError_base {
7
7
  }
8
8
  declare const RunOperationRejectedError_base: Schema.Class<RunOperationRejectedError, Schema.TaggedStruct<"RunOperationRejectedError", {
9
9
  readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
10
- readonly operation: Schema.Literals<readonly ["approve", "retry"]>;
10
+ readonly operation: Schema.Literals<readonly ["approve", "retry", "resolveFailure", "runAgain", "cancel"]>;
11
11
  readonly state: Schema.String;
12
12
  }>, import("effect/Cause").YieldableError>;
13
- /** The Run's current state does not allow the requested approval or retry. */
13
+ /** An error for an operator action that the Run's state doesn't allow. */
14
14
  export declare class RunOperationRejectedError extends RunOperationRejectedError_base {
15
15
  }
16
+ declare const RunRetryBlockedError_base: Schema.Class<RunRetryBlockedError, Schema.TaggedStruct<"RunRetryBlockedError", {
17
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
18
+ readonly openRunId: Schema.brand<Schema.NonEmptyString, "RunId">;
19
+ readonly message: Schema.NonEmptyString;
20
+ }>, import("effect/Cause").YieldableError>;
21
+ /** An error for a retry or run again while `openRunId`, another Run of the same Loop and Item, is open. */
22
+ export declare class RunRetryBlockedError extends RunRetryBlockedError_base {
23
+ }
16
24
  declare const EnginePersistenceError_base: Schema.Class<EnginePersistenceError, Schema.TaggedStruct<"EnginePersistenceError", {
17
25
  readonly operation: Schema.String;
18
26
  readonly cause: Schema.Defect;
19
27
  }>, import("effect/Cause").YieldableError>;
20
- /** An operation could not read or update the instance's durable records. */
28
+ /** An error reading or writing the instance's durable records. */
21
29
  export declare class EnginePersistenceError extends EnginePersistenceError_base {
22
30
  }
23
31
  declare const AttemptCancellationError_base: Schema.Class<AttemptCancellationError, Schema.TaggedStruct<"AttemptCancellationError", {
24
32
  readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
25
33
  readonly cause: Schema.Defect;
26
34
  }>, import("effect/Cause").YieldableError>;
27
- /** The Run is canceled, but interrupting its active Attempt failed. */
35
+ /** An error for a canceled Run whose active Attempt couldn't be interrupted. */
28
36
  export declare class AttemptCancellationError extends AttemptCancellationError_base {
29
37
  }
30
- /** Everything the store itself can fail with. */
31
- export declare const RunStoreError: Schema.Union<readonly [typeof RunNotFoundError, typeof RunOperationRejectedError, typeof EnginePersistenceError]>;
38
+ /** The errors that the Run store can fail with. */
39
+ export declare const RunStoreError: Schema.Union<readonly [typeof RunNotFoundError, typeof RunOperationRejectedError, typeof RunRetryBlockedError, typeof EnginePersistenceError]>;
32
40
  export type RunStoreError = typeof RunStoreError.Type;
33
41
  declare const RunInterventionRejectedError_base: Schema.Class<RunInterventionRejectedError, Schema.TaggedStruct<"RunInterventionRejectedError", {
34
42
  readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
35
43
  readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
36
44
  readonly message: Schema.NonEmptyString;
37
45
  }>, import("effect/Cause").YieldableError>;
38
- /** The requested Attempt is no longer live, or its channel could not accept operator input. */
46
+ /** An error for an Attempt that is no longer live or whose channel rejected operator input. */
39
47
  export declare class RunInterventionRejectedError extends RunInterventionRejectedError_base {
40
48
  }
41
- /** The store's failures plus the cancellation handshake failure only the engine raises. */
42
- export declare const RunEngineError: Schema.Union<readonly [typeof RunNotFoundError, typeof RunOperationRejectedError, typeof EnginePersistenceError, typeof AttemptCancellationError, typeof RunInterventionRejectedError]>;
49
+ declare const LeftoversDiscardRejectedError_base: Schema.Class<LeftoversDiscardRejectedError, Schema.TaggedStruct<"LeftoversDiscardRejectedError", {
50
+ readonly worker: Schema.brand<Schema.String, "WorkerName">;
51
+ /** The number of open Attempts on `worker`. */
52
+ readonly running: Schema.Int;
53
+ }>, import("effect/Cause").YieldableError>;
54
+ /**
55
+ * An error for discarding the leftovers of a Worker that is still in `usine.yaml` or still has
56
+ * open Attempts. Nothing is discarded.
57
+ */
58
+ export declare class LeftoversDiscardRejectedError extends LeftoversDiscardRejectedError_base {
59
+ }
60
+ /** The Run store errors plus `AttemptCancellationError`. */
61
+ export declare const RunEngineError: Schema.Union<readonly [typeof RunNotFoundError, typeof RunOperationRejectedError, typeof RunRetryBlockedError, typeof EnginePersistenceError, typeof AttemptCancellationError, typeof RunInterventionRejectedError]>;
43
62
  export type RunEngineError = typeof RunEngineError.Type;
44
63
  export {};
45
64
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/engine/error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;AAEhC,4EAA4E;AAC5E,qBAAa,gBAAiB,SAAQ,qBAIpC;CAAG;;;;;;AAEL,8EAA8E;AAC9E,qBAAa,yBAA0B,SAAQ,8BAM7C;CAAG;;;;;AAEL,4EAA4E;AAC5E,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,uEAAuE;AACvE,qBAAa,wBAAyB,SAAQ,6BAK5C;CAAG;AAEL,iDAAiD;AACjD,eAAO,MAAM,aAAa,mHAIxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;;;;;;AAEtD,+FAA+F;AAC/F,qBAAa,4BAA6B,SAAQ,iCAMhD;CAAG;AAEL,2FAA2F;AAC3F,eAAO,MAAM,cAAc,yLAMzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/engine/error.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;AAEhC,gDAAgD;AAChD,qBAAa,gBAAiB,SAAQ,qBAIpC;CAAG;;;;;;AAEL,0EAA0E;AAC1E,qBAAa,yBAA0B,SAAQ,8BAM7C;CAAG;;;;;;AAEL,2GAA2G;AAC3G,qBAAa,oBAAqB,SAAQ,yBAMxC;CAAG;;;;;AAEL,kEAAkE;AAClE,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,gFAAgF;AAChF,qBAAa,wBAAyB,SAAQ,6BAK5C;CAAG;AAEL,mDAAmD;AACnD,eAAO,MAAM,aAAa,gJAKxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;;;;;;AAEtD,+FAA+F;AAC/F,qBAAa,4BAA6B,SAAQ,iCAMhD;CAAG;;;IAUH,+CAA+C;;;AARjD;;;GAGG;AACH,qBAAa,6BAA8B,SAAQ,kCAMjD;CAAG;AAEL,4DAA4D;AAC5D,eAAO,MAAM,cAAc,sNAOzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC"}
@@ -1,47 +1,67 @@
1
1
  import { AttemptId } from "@usine/core/attempt";
2
2
  import { RunId } from "@usine/core/run";
3
+ import { WorkerName } from "@usine/core/worker";
3
4
  import { Schema } from "effect";
4
- /** No Run with the requested identity exists in this instance's records. */
5
+ /** An error for a Run ID that doesn't exist. */
5
6
  export class RunNotFoundError extends Schema.TaggedError("@usine/engine/RunNotFoundError")("RunNotFoundError", {
6
7
  runId: RunId,
7
8
  }) {
8
9
  }
9
- /** The Run's current state does not allow the requested approval or retry. */
10
+ /** An error for an operator action that the Run's state doesn't allow. */
10
11
  export class RunOperationRejectedError extends Schema.TaggedError("@usine/engine/RunOperationRejectedError")("RunOperationRejectedError", {
11
12
  runId: RunId,
12
- operation: Schema.Literals(["approve", "retry"]),
13
+ operation: Schema.Literals(["approve", "retry", "resolveFailure", "runAgain", "cancel"]),
13
14
  state: Schema.String,
14
15
  }) {
15
16
  }
16
- /** An operation could not read or update the instance's durable records. */
17
+ /** An error for a retry or run again while `openRunId`, another Run of the same Loop and Item, is open. */
18
+ export class RunRetryBlockedError extends Schema.TaggedError("@usine/engine/RunRetryBlockedError")("RunRetryBlockedError", {
19
+ runId: RunId,
20
+ openRunId: RunId,
21
+ message: Schema.NonEmptyString,
22
+ }) {
23
+ }
24
+ /** An error reading or writing the instance's durable records. */
17
25
  export class EnginePersistenceError extends Schema.TaggedError("@usine/engine/EnginePersistenceError")("EnginePersistenceError", {
18
26
  operation: Schema.String,
19
27
  cause: Schema.Defect(),
20
28
  }) {
21
29
  }
22
- /** The Run is canceled, but interrupting its active Attempt failed. */
30
+ /** An error for a canceled Run whose active Attempt couldn't be interrupted. */
23
31
  export class AttemptCancellationError extends Schema.TaggedError("@usine/engine/AttemptCancellationError")("AttemptCancellationError", {
24
32
  attemptId: AttemptId,
25
33
  cause: Schema.Defect(),
26
34
  }) {
27
35
  }
28
- /** Everything the store itself can fail with. */
36
+ /** The errors that the Run store can fail with. */
29
37
  export const RunStoreError = Schema.Union([
30
38
  RunNotFoundError,
31
39
  RunOperationRejectedError,
40
+ RunRetryBlockedError,
32
41
  EnginePersistenceError,
33
42
  ]);
34
- /** The requested Attempt is no longer live, or its channel could not accept operator input. */
43
+ /** An error for an Attempt that is no longer live or whose channel rejected operator input. */
35
44
  export class RunInterventionRejectedError extends Schema.TaggedError("@usine/engine/RunInterventionRejectedError")("RunInterventionRejectedError", {
36
45
  runId: RunId,
37
46
  attemptId: AttemptId,
38
47
  message: Schema.NonEmptyString,
39
48
  }) {
40
49
  }
41
- /** The store's failures plus the cancellation handshake failure only the engine raises. */
50
+ /**
51
+ * An error for discarding the leftovers of a Worker that is still in `usine.yaml` or still has
52
+ * open Attempts. Nothing is discarded.
53
+ */
54
+ export class LeftoversDiscardRejectedError extends Schema.TaggedError("@usine/engine/LeftoversDiscardRejectedError")("LeftoversDiscardRejectedError", {
55
+ worker: WorkerName,
56
+ /** The number of open Attempts on `worker`. */
57
+ running: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
58
+ }) {
59
+ }
60
+ /** The Run store errors plus `AttemptCancellationError`. */
42
61
  export const RunEngineError = Schema.Union([
43
62
  RunNotFoundError,
44
63
  RunOperationRejectedError,
64
+ RunRetryBlockedError,
45
65
  EnginePersistenceError,
46
66
  AttemptCancellationError,
47
67
  RunInterventionRejectedError,
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/engine/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,4EAA4E;AAC5E,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,gCAAgC,CACjC,CAAC,kBAAkB,EAAE;IACpB,KAAK,EAAE,KAAK;CACb,CAAC;CAAG;AAEL,8EAA8E;AAC9E,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,WAAW,CAC/D,yCAAyC,CAC1C,CAAC,2BAA2B,EAAE;IAC7B,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AAEL,4EAA4E;AAC5E,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,CAC5D,sCAAsC,CACvC,CAAC,wBAAwB,EAAE;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;CACvB,CAAC;CAAG;AAEL,uEAAuE;AACvE,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,WAAW,CAC9D,wCAAwC,CACzC,CAAC,0BAA0B,EAAE;IAC5B,SAAS,EAAE,SAAS;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;CACvB,CAAC;CAAG;AAEL,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACxC,gBAAgB;IAChB,yBAAyB;IACzB,sBAAsB;CACvB,CAAC,CAAC;AAIH,+FAA+F;AAC/F,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,WAAW,CAClE,4CAA4C,CAC7C,CAAC,8BAA8B,EAAE;IAChC,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,2FAA2F;AAC3F,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,gBAAgB;IAChB,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/engine/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,gDAAgD;AAChD,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,gCAAgC,CACjC,CAAC,kBAAkB,EAAE;IACpB,KAAK,EAAE,KAAK;CACb,CAAC;CAAG;AAEL,0EAA0E;AAC1E,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,WAAW,CAC/D,yCAAyC,CAC1C,CAAC,2BAA2B,EAAE;IAC7B,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxF,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AAEL,2GAA2G;AAC3G,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,CAC1D,oCAAoC,CACrC,CAAC,sBAAsB,EAAE;IACxB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL,kEAAkE;AAClE,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,CAC5D,sCAAsC,CACvC,CAAC,wBAAwB,EAAE;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;CACvB,CAAC;CAAG;AAEL,gFAAgF;AAChF,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,WAAW,CAC9D,wCAAwC,CACzC,CAAC,0BAA0B,EAAE;IAC5B,SAAS,EAAE,SAAS;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;CACvB,CAAC;CAAG;AAEL,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACxC,gBAAgB;IAChB,yBAAyB;IACzB,oBAAoB;IACpB,sBAAsB;CACvB,CAAC,CAAC;AAIH,+FAA+F;AAC/F,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,WAAW,CAClE,4CAA4C,CAC7C,CAAC,8BAA8B,EAAE;IAChC,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,MAAM,CAAC,cAAc;CAC/B,CAAC;CAAG;AAEL;;;GAGG;AACH,MAAM,OAAO,6BAA8B,SAAQ,MAAM,CAAC,WAAW,CACnE,6CAA6C,CAC9C,CAAC,+BAA+B,EAAE;IACjC,MAAM,EAAE,UAAU;IAClB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAC5D,CAAC;CAAG;AAEL,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,gBAAgB;IAChB,yBAAyB;IACzB,oBAAoB;IACpB,sBAAsB;IACtB,wBAAwB;IACxB,4BAA4B;CAC7B,CAAC,CAAC"}