@usine/engine 0.0.1 → 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 (142) hide show
  1. package/README.md +91 -2
  2. package/dist/cursor/cursor.d.ts +20 -0
  3. package/dist/cursor/cursor.d.ts.map +1 -0
  4. package/dist/cursor/cursor.js +55 -0
  5. package/dist/cursor/cursor.js.map +1 -0
  6. package/dist/cycle-budget/cycle-budget.d.ts +25 -0
  7. package/dist/cycle-budget/cycle-budget.d.ts.map +1 -0
  8. package/dist/cycle-budget/cycle-budget.js +117 -0
  9. package/dist/cycle-budget/cycle-budget.js.map +1 -0
  10. package/dist/cycle-budget/model.d.ts +26 -0
  11. package/dist/cycle-budget/model.d.ts.map +1 -0
  12. package/dist/cycle-budget/model.js +20 -0
  13. package/dist/cycle-budget/model.js.map +1 -0
  14. package/dist/cycle-budget/queries.d.ts +27 -0
  15. package/dist/cycle-budget/queries.d.ts.map +1 -0
  16. package/dist/cycle-budget/queries.js +175 -0
  17. package/dist/cycle-budget/queries.js.map +1 -0
  18. package/dist/database/database.d.ts +15 -0
  19. package/dist/database/database.d.ts.map +1 -0
  20. package/dist/database/database.js +5 -0
  21. package/dist/database/database.js.map +1 -0
  22. package/dist/database/local-sqlite.d.ts +37 -0
  23. package/dist/database/local-sqlite.d.ts.map +1 -0
  24. package/dist/database/local-sqlite.js +144 -0
  25. package/dist/database/local-sqlite.js.map +1 -0
  26. package/dist/database/schema.d.ts +1341 -0
  27. package/dist/database/schema.d.ts.map +1 -0
  28. package/dist/database/schema.js +224 -0
  29. package/dist/database/schema.js.map +1 -0
  30. package/dist/engine/engine.d.ts +55 -0
  31. package/dist/engine/engine.d.ts.map +1 -0
  32. package/dist/engine/engine.js +193 -0
  33. package/dist/engine/engine.js.map +1 -0
  34. package/dist/engine/error.d.ts +37 -0
  35. package/dist/engine/error.d.ts.map +1 -0
  36. package/dist/engine/error.js +41 -0
  37. package/dist/engine/error.js.map +1 -0
  38. package/dist/engine/lifecycle.d.ts +112 -0
  39. package/dist/engine/lifecycle.d.ts.map +1 -0
  40. package/dist/engine/lifecycle.js +132 -0
  41. package/dist/engine/lifecycle.js.map +1 -0
  42. package/dist/engine/shutdown.d.ts +12 -0
  43. package/dist/engine/shutdown.d.ts.map +1 -0
  44. package/dist/engine/shutdown.js +10 -0
  45. package/dist/engine/shutdown.js.map +1 -0
  46. package/dist/engine/submission.d.ts +58 -0
  47. package/dist/engine/submission.d.ts.map +1 -0
  48. package/dist/engine/submission.js +54 -0
  49. package/dist/engine/submission.js.map +1 -0
  50. package/dist/item-projection/item-projection.d.ts +25 -0
  51. package/dist/item-projection/item-projection.d.ts.map +1 -0
  52. package/dist/item-projection/item-projection.js +100 -0
  53. package/dist/item-projection/item-projection.js.map +1 -0
  54. package/dist/item-projection/model.d.ts +18 -0
  55. package/dist/item-projection/model.d.ts.map +1 -0
  56. package/dist/item-projection/model.js +16 -0
  57. package/dist/item-projection/model.js.map +1 -0
  58. package/dist/loop-control/loop-control.d.ts +21 -0
  59. package/dist/loop-control/loop-control.d.ts.map +1 -0
  60. package/dist/loop-control/loop-control.js +71 -0
  61. package/dist/loop-control/loop-control.js.map +1 -0
  62. package/dist/loop-control/model.d.ts +10 -0
  63. package/dist/loop-control/model.d.ts.map +1 -0
  64. package/dist/loop-control/model.js +9 -0
  65. package/dist/loop-control/model.js.map +1 -0
  66. package/dist/repository-label-projection/model.d.ts +19 -0
  67. package/dist/repository-label-projection/model.d.ts.map +1 -0
  68. package/dist/repository-label-projection/model.js +20 -0
  69. package/dist/repository-label-projection/model.js.map +1 -0
  70. package/dist/repository-label-projection/repository-label-projection.d.ts +20 -0
  71. package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -0
  72. package/dist/repository-label-projection/repository-label-projection.js +83 -0
  73. package/dist/repository-label-projection/repository-label-projection.js.map +1 -0
  74. package/dist/run-reader/model.d.ts +46 -0
  75. package/dist/run-reader/model.d.ts.map +1 -0
  76. package/dist/run-reader/model.js +44 -0
  77. package/dist/run-reader/model.js.map +1 -0
  78. package/dist/run-reader/run-reader.d.ts +29 -0
  79. package/dist/run-reader/run-reader.d.ts.map +1 -0
  80. package/dist/run-reader/run-reader.js +44 -0
  81. package/dist/run-reader/run-reader.js.map +1 -0
  82. package/dist/step-executor.d.ts +43 -0
  83. package/dist/step-executor.d.ts.map +1 -0
  84. package/dist/step-executor.js +25 -0
  85. package/dist/step-executor.js.map +1 -0
  86. package/dist/store/codec.d.ts +495 -0
  87. package/dist/store/codec.d.ts.map +1 -0
  88. package/dist/store/codec.js +162 -0
  89. package/dist/store/codec.js.map +1 -0
  90. package/dist/store/queries.d.ts +107 -0
  91. package/dist/store/queries.d.ts.map +1 -0
  92. package/dist/store/queries.js +543 -0
  93. package/dist/store/queries.js.map +1 -0
  94. package/dist/store/store.d.ts +101 -0
  95. package/dist/store/store.d.ts.map +1 -0
  96. package/dist/store/store.js +432 -0
  97. package/dist/store/store.js.map +1 -0
  98. package/dist/transcript.d.ts +64 -0
  99. package/dist/transcript.d.ts.map +1 -0
  100. package/dist/transcript.js +59 -0
  101. package/dist/transcript.js.map +1 -0
  102. package/dist/workflow/admission.d.ts +13 -0
  103. package/dist/workflow/admission.d.ts.map +1 -0
  104. package/dist/workflow/admission.js +55 -0
  105. package/dist/workflow/admission.js.map +1 -0
  106. package/dist/workflow/command.d.ts +13 -0
  107. package/dist/workflow/command.d.ts.map +1 -0
  108. package/dist/workflow/command.js +17 -0
  109. package/dist/workflow/command.js.map +1 -0
  110. package/dist/workflow/workflow.d.ts +18 -0
  111. package/dist/workflow/workflow.d.ts.map +1 -0
  112. package/dist/workflow/workflow.js +108 -0
  113. package/dist/workflow/workflow.js.map +1 -0
  114. package/drizzle/20260825055549_initial_runtime/migration.sql +73 -0
  115. package/drizzle/20260825055549_initial_runtime/snapshot.json +592 -0
  116. package/drizzle/20260830191125_polling_cursors/migration.sql +5 -0
  117. package/drizzle/20260830191125_polling_cursors/snapshot.json +629 -0
  118. package/drizzle/20260831073158_attempt_channel/migration.sql +36 -0
  119. package/drizzle/20260831073158_attempt_channel/snapshot.json +845 -0
  120. package/drizzle/20260831133534_agent_context/migration.sql +49 -0
  121. package/drizzle/20260831133534_agent_context/snapshot.json +897 -0
  122. package/drizzle/20260831134612_attempt_brain/migration.sql +26 -0
  123. package/drizzle/20260831134612_attempt_brain/snapshot.json +923 -0
  124. package/drizzle/20260831194605_loop_runtime/migration.sql +4 -0
  125. package/drizzle/20260831194605_loop_runtime/snapshot.json +954 -0
  126. package/drizzle/20260901073233_projection_revision/migration.sql +55 -0
  127. package/drizzle/20260901073233_projection_revision/snapshot.json +991 -0
  128. package/drizzle/20260901180433_item_projections/migration.sql +22 -0
  129. package/drizzle/20260901180433_item_projections/snapshot.json +1110 -0
  130. package/drizzle/20260901185146_repository_label_projections/migration.sql +17 -0
  131. package/drizzle/20260901185146_repository_label_projections/snapshot.json +1147 -0
  132. package/drizzle/20260903091940_queued_approved_runs/migration.sql +3 -0
  133. package/drizzle/20260903091940_queued_approved_runs/snapshot.json +1147 -0
  134. package/drizzle/20260905150403_item_cycle_budgets/migration.sql +58 -0
  135. package/drizzle/20260905150403_item_cycle_budgets/snapshot.json +1417 -0
  136. package/drizzle/20260905174009_item_run_history/migration.sql +1 -0
  137. package/drizzle/20260905174009_item_run_history/snapshot.json +1431 -0
  138. package/package.json +60 -6
  139. package/dist/index.d.ts +0 -8
  140. package/dist/index.d.ts.map +0 -1
  141. package/dist/index.js +0 -8
  142. package/dist/index.js.map +0 -1
@@ -0,0 +1,101 @@
1
+ import { Attempt, AttemptId } from "@usine/core/attempt";
2
+ import * as AttemptChannel from "@usine/core/attempt/channel";
3
+ import { AttemptFailure, InfraFailure } from "@usine/core/attempt/failure";
4
+ import { Event } from "@usine/core/event";
5
+ import { ItemKey } from "@usine/core/item";
6
+ import { LoopName } from "@usine/core/loop";
7
+ import { RunId } from "@usine/core/run";
8
+ import { WorkerName } from "@usine/core/worker";
9
+ import * as RunState from "@usine/core/run/state";
10
+ import { StepResult } from "@usine/core/step/result";
11
+ import { Context, Effect, Layer, Option, Result, Schema } from "effect";
12
+ import type { Workflow } from "effect/unstable/workflow";
13
+ import { RunDatabase } from "../database/database.ts";
14
+ import { Claimed, CycleBlocked, Ignored, Queued, Submission } from "../engine/submission.ts";
15
+ import { type RunStoreError } from "../engine/error.ts";
16
+ import { RunSnapshot } from "../run-reader/model.ts";
17
+ import { StepExecution } from "../step-executor.ts";
18
+ import { TranscriptEntry, TranscriptQuery } from "../transcript.ts";
19
+ import type { WorkflowCommand } from "../workflow/command.ts";
20
+ import { type WorkflowCommandRow } from "./codec.ts";
21
+ import { type FinishDecision } from "../engine/lifecycle.ts";
22
+ declare const StoredSubmission_base: Schema.Class<StoredSubmission, Schema.Struct<{
23
+ readonly submission: typeof Submission;
24
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
25
+ }>, {}>;
26
+ export declare class StoredSubmission extends StoredSubmission_base {
27
+ }
28
+ declare const RecoverableRun_base: Schema.Class<RecoverableRun, Schema.Struct<{
29
+ readonly submission: typeof Submission;
30
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
31
+ readonly state: Schema.Union<readonly [typeof RunState.Pending, typeof RunState.Waiting, typeof RunState.Queued, typeof RunState.Running, typeof RunState.Succeeded, typeof RunState.Failed, typeof RunState.Canceled]>;
32
+ }>, {}>;
33
+ export declare class RecoverableRun extends RecoverableRun_base {
34
+ }
35
+ declare const Claim_base: Schema.Class<Claim, Schema.Struct<{
36
+ readonly submission: typeof Submission;
37
+ readonly result: Schema.Union<readonly [typeof Claimed, typeof Queued, typeof Ignored, typeof CycleBlocked]>;
38
+ readonly supersededRun: Schema.Option<Schema.brand<Schema.NonEmptyString, "RunId">>;
39
+ }>, {}>;
40
+ export declare class Claim extends Claim_base {
41
+ }
42
+ declare const AttemptStarted_base: Schema.Class<AttemptStarted, Schema.TaggedStruct<"AttemptStarted", {
43
+ readonly execution: typeof StepExecution;
44
+ }>, {}>;
45
+ export declare class AttemptStarted extends AttemptStarted_base {
46
+ }
47
+ declare const AttemptRecoveryFailed_base: Schema.Class<AttemptRecoveryFailed, Schema.TaggedStruct<"AttemptRecoveryFailed", {
48
+ readonly failure: typeof InfraFailure;
49
+ }>, {}>;
50
+ export declare class AttemptRecoveryFailed extends AttemptRecoveryFailed_base {
51
+ }
52
+ declare const RunClosed_base: Schema.Class<RunClosed, Schema.TaggedStruct<"RunClosed", {
53
+ readonly state: Schema.String;
54
+ }>, {}>;
55
+ /**
56
+ * The Run closed (canceled, superseded, or revoked) while it waited for a
57
+ * worker slot. Routine once capacity queues exist, never an error.
58
+ */
59
+ export declare class RunClosed extends RunClosed_base {
60
+ }
61
+ /** What `RunStore.cancel` did, decided inside the closing transaction. */
62
+ export type CancelOutcome = {
63
+ readonly _tag: "AlreadyClosed";
64
+ } | {
65
+ readonly _tag: "Canceled";
66
+ readonly openAttempt: Option.Option<AttemptId>;
67
+ };
68
+ declare const RunStore_base: Context.ServiceClass<RunStore, "@usine/engine/internal/RunStore", {
69
+ readonly approve: (runId: RunId, approval: Event) => Effect.Effect<void, RunStoreError>;
70
+ readonly appendTranscript: (direction: AttemptChannel.Direction, envelope: AttemptChannel.Envelope) => Effect.Effect<void, RunStoreError>;
71
+ readonly beginAttempt: (runId: RunId, worker: WorkerName) => Effect.Effect<AttemptStarted | AttemptRecoveryFailed | RunClosed, RunStoreError>;
72
+ readonly cancel: (runId: RunId) => Effect.Effect<CancelOutcome, RunStoreError>;
73
+ readonly claimQueued: (submission: Submission, runId: RunId) => Effect.Effect<Option.Option<StoredSubmission>, RunStoreError>;
74
+ readonly completeWorkflowCommand: (runId: RunId, command: WorkflowCommand) => Effect.Effect<void, RunStoreError>;
75
+ /**
76
+ * Records an executor result only if `attempt` is still the Run's open try.
77
+ * The returned decision tells execution whether to retry; terminal outcomes,
78
+ * the Step result and continuation request commit together.
79
+ */
80
+ readonly finishAttempt: (attempt: Attempt, result: Result.Result<StepResult, AttemptFailure>) => Effect.Effect<FinishDecision, RunStoreError>;
81
+ readonly nextQueued: (runId: RunId) => Effect.Effect<Option.Option<Submission>, RunStoreError>;
82
+ readonly parkForApproval: (runId: RunId) => Effect.Effect<void, RunStoreError>;
83
+ readonly pendingWorkflowCommands: Effect.Effect<ReadonlyArray<WorkflowCommandRow>, RunStoreError>;
84
+ readonly recordAndClaim: (submission: Submission, requestedRunId: RunId) => Effect.Effect<Claim, RunStoreError>;
85
+ readonly reconcileCompletion: (runId: RunId, result: Workflow.Result<StepResult, AttemptFailure>) => Effect.Effect<void, RunStoreError>;
86
+ readonly recoverable: Effect.Effect<ReadonlyArray<RecoverableRun>, RunStoreError>;
87
+ readonly retry: (runId: RunId) => Effect.Effect<void, RunStoreError>;
88
+ readonly revoke: (loop: LoopName, itemKey: ItemKey) => Effect.Effect<ReadonlyArray<RunId>, RunStoreError>;
89
+ readonly snapshot: (runId: RunId) => Effect.Effect<RunSnapshot, RunStoreError>;
90
+ readonly transcript: (query: TranscriptQuery) => Effect.Effect<ReadonlyArray<TranscriptEntry>, RunStoreError>;
91
+ }>;
92
+ /**
93
+ * The durable Run projection store. Another backend implements this interface
94
+ * with its own `Layer.effect(RunStore, ...)`; methods speak domain vocabulary
95
+ * and fail only with `RunStoreError`.
96
+ */
97
+ export declare class RunStore extends RunStore_base {
98
+ static readonly layer: Layer.Layer<RunStore, never, RunDatabase>;
99
+ }
100
+ export {};
101
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ import { Attempt, AttemptId } from "@usine/core/attempt";
2
+ import * as AttemptChannel from "@usine/core/attempt/channel";
3
+ import { AttemptFailure, InfraFailure } from "@usine/core/attempt/failure";
4
+ import { Event } from "@usine/core/event";
5
+ import { ItemKey } from "@usine/core/item";
6
+ import { LoopName } from "@usine/core/loop";
7
+ import { RunId, Run } from "@usine/core/run";
8
+ import { WorkerName } from "@usine/core/worker";
9
+ import * as RunState from "@usine/core/run/state";
10
+ import { StepResult } from "@usine/core/step/result";
11
+ import { Cause, Context, DateTime, Effect, Exit, Layer, Match, Option, Result, Schema, } from "effect";
12
+ import { RunDatabase } from "../database/database.js";
13
+ import { Claimed, CycleBlocked, Ignored, Queued, Submission, SubmissionResult, } from "../engine/submission.js";
14
+ import { RunOperationRejectedError } from "../engine/error.js";
15
+ import { RunSnapshot } from "../run-reader/model.js";
16
+ import { StepExecution } from "../step-executor.js";
17
+ import { TranscriptEntry, TranscriptQuery } from "../transcript.js";
18
+ import { persistence, submissionFromRow } from "./codec.js";
19
+ import { queriesFor } from "./queries.js";
20
+ import { beginAttempt as decideBeginAttempt, cancelRun, claimRun, finishAttempt as decideFinishAttempt, reconcileAttempt, retryRun, } from "../engine/lifecycle.js";
21
+ export class StoredSubmission extends Schema.Class("@usine/engine/internal/StoredSubmission")({
22
+ submission: Submission,
23
+ runId: RunId,
24
+ }) {
25
+ }
26
+ export class RecoverableRun extends Schema.Class("@usine/engine/internal/RecoverableRun")({
27
+ submission: Submission,
28
+ runId: RunId,
29
+ state: RunState.RunState,
30
+ }) {
31
+ }
32
+ export class Claim extends Schema.Class("@usine/engine/internal/Claim")({
33
+ submission: Submission,
34
+ result: SubmissionResult,
35
+ supersededRun: Schema.Option(RunId),
36
+ }) {
37
+ }
38
+ export class AttemptStarted extends Schema.TaggedClass("@usine/engine/internal/AttemptStarted")("AttemptStarted", {
39
+ execution: StepExecution,
40
+ }) {
41
+ }
42
+ export class AttemptRecoveryFailed extends Schema.TaggedClass("@usine/engine/internal/AttemptRecoveryFailed")("AttemptRecoveryFailed", {
43
+ failure: InfraFailure,
44
+ }) {
45
+ }
46
+ /**
47
+ * The Run closed (canceled, superseded, or revoked) while it waited for a
48
+ * worker slot. Routine once capacity queues exist, never an error.
49
+ */
50
+ export class RunClosed extends Schema.TaggedClass("@usine/engine/internal/RunClosed")("RunClosed", {
51
+ state: Schema.String,
52
+ }) {
53
+ }
54
+ const makeRunStore = Effect.gen(function* () {
55
+ const database = yield* RunDatabase;
56
+ const queries = queriesFor(database);
57
+ const claimedRun = (submission, runId, supersededRun = Option.none()) => new Claim({
58
+ submission,
59
+ result: new Claimed({ eventId: submission.event.id, runId }),
60
+ supersededRun,
61
+ });
62
+ const openRun = Effect.fn("RunStore.openRun")(function* (tx, submission, runId, supersededRun = Option.none()) {
63
+ const blocked = yield* tx.cycles.admit(submission);
64
+ if (Option.isSome(blocked))
65
+ return new Claim({
66
+ submission,
67
+ supersededRun,
68
+ result: new CycleBlocked({ eventId: submission.event.id, ask: blocked.value }),
69
+ });
70
+ yield* tx.createRun(submission, submission.event.id, runId);
71
+ yield* tx.cycles.reserve(submission, runId);
72
+ return claimedRun(submission, runId, supersededRun);
73
+ });
74
+ const recordAndClaim = Effect.fn("RunStore.recordAndClaim")(function* (submission, requestedRunId) {
75
+ yield* Effect.annotateCurrentSpan({
76
+ eventId: submission.event.id,
77
+ runId: requestedRunId,
78
+ loop: submission.loop,
79
+ itemKey: submission.itemKey,
80
+ });
81
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
82
+ const tx = queriesFor(transaction);
83
+ const recorded = yield* tx.recordTriggerEvent(submission);
84
+ const existing = yield* tx.runForEvent(recorded.event.id);
85
+ if (existing[0] !== undefined) {
86
+ yield* Effect.logInfo("Event joined its existing Run", {
87
+ eventId: recorded.event.id,
88
+ runId: existing[0].runId,
89
+ });
90
+ return claimedRun(recorded, existing[0].runId);
91
+ }
92
+ const ignored = yield* tx.ignoredEvent(recorded.event.id);
93
+ if (ignored[0] !== undefined) {
94
+ yield* Effect.logInfo("Event remains ignored", {
95
+ eventId: recorded.event.id,
96
+ reason: ignored[0].reason,
97
+ });
98
+ return new Claim({
99
+ submission: recorded,
100
+ result: new Ignored({
101
+ eventId: recorded.event.id,
102
+ reason: ignored[0].reason,
103
+ }),
104
+ supersededRun: Option.none(),
105
+ });
106
+ }
107
+ if (!(yield* tx.cycles.isCurrentEvent(recorded))) {
108
+ return new Claim({
109
+ submission: recorded,
110
+ supersededRun: Option.none(),
111
+ result: new Ignored({ eventId: recorded.event.id, reason: "superseded" }),
112
+ });
113
+ }
114
+ const blocking = yield* tx.blockingRun(recorded.loop, recorded.itemKey);
115
+ const blockedBy = blocking[0];
116
+ const decision = claimRun(blockedBy === undefined
117
+ ? Option.none()
118
+ : Option.some((yield* tx.snapshot(blockedBy.runId)).run), recorded.event.id);
119
+ yield* Effect.logInfo("Event claim decided", {
120
+ eventId: recorded.event.id,
121
+ decision: decision._tag,
122
+ });
123
+ switch (decision._tag) {
124
+ case "QueueEvent":
125
+ return new Claim({
126
+ submission: recorded,
127
+ result: new Queued({ eventId: recorded.event.id }),
128
+ supersededRun: Option.none(),
129
+ });
130
+ case "SupersedeRun":
131
+ yield* tx.updateState(decision.runId, decision.state);
132
+ yield* tx.requestInterrupt(decision.runId);
133
+ return yield* openRun(tx, recorded, requestedRunId, Option.some(decision.runId));
134
+ case "OpenRun":
135
+ return yield* openRun(tx, recorded, requestedRunId);
136
+ }
137
+ }));
138
+ }, persistence("submit Event"));
139
+ const parkForApproval = Effect.fn("RunStore.parkForApproval")(function* (runId) {
140
+ yield* database.transaction((transaction) => Effect.gen(function* () {
141
+ const tx = queriesFor(transaction);
142
+ const current = yield* tx.snapshot(runId);
143
+ if (current.run.state._tag === "Pending") {
144
+ yield* tx.updateState(runId, RunState.awaitApproval(current.run.state));
145
+ }
146
+ }));
147
+ }, persistence("park run for approval"));
148
+ // All callers supply a transaction: Attempt, Run, Step and outbox writes
149
+ // either commit together or roll back together (ADRs 0010 and 0020).
150
+ const applyFinish = Effect.fn("RunStore.applyFinish")(function* (tx, runId, decision) {
151
+ yield* Effect.annotateCurrentSpan({ runId });
152
+ if (decision._tag === "Unchanged") {
153
+ yield* Effect.logInfo("Attempt completion ignored", { runId, reason: decision.reason });
154
+ return;
155
+ }
156
+ const { attempt, outcome } = decision;
157
+ yield* Effect.annotateCurrentSpan({ attemptId: attempt.id });
158
+ const fields = {
159
+ runId,
160
+ attemptId: attempt.id,
161
+ number: attempt.number,
162
+ decision: decision._tag,
163
+ };
164
+ yield* Effect.logInfo("Attempt completion decided", Match.valueTags(outcome, {
165
+ Failed: ({ failure }) => ({ ...fields, failure: failure._tag }),
166
+ Succeeded: () => fields,
167
+ }));
168
+ yield* tx.closeAttempt(attempt.id, outcome);
169
+ if (decision._tag === "RetryAttempt")
170
+ return;
171
+ if (decision._tag === "RunSucceeded") {
172
+ yield* tx.updateStepResult(runId, attempt.stepName, decision.result);
173
+ }
174
+ yield* tx.updateState(runId, decision.state);
175
+ yield* tx.requestWorkflowCommand(runId, "Continue");
176
+ });
177
+ const beginAttempt = Effect.fn("RunStore.beginAttempt")(function* (runId, worker) {
178
+ yield* Effect.annotateCurrentSpan({ runId });
179
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
180
+ const tx = queriesFor(transaction);
181
+ const current = yield* tx.snapshot(runId);
182
+ const interruption = new InfraFailure({
183
+ message: "The orchestrator stopped during the attempt",
184
+ cause: new Error("attempt interrupted by orchestrator restart"),
185
+ });
186
+ const decision = decideBeginAttempt(current, interruption);
187
+ if (decision._tag === "RunClosed") {
188
+ yield* Effect.logInfo("Attempt start skipped", { runId, state: decision.state._tag });
189
+ return new RunClosed({ state: decision.state._tag });
190
+ }
191
+ if (decision._tag === "RunFailed") {
192
+ yield* applyFinish(tx, runId, decision);
193
+ return new AttemptRecoveryFailed({ failure: interruption });
194
+ }
195
+ if (Option.isSome(decision.interrupted)) {
196
+ yield* applyFinish(tx, runId, decision.interrupted.value);
197
+ }
198
+ if (current.run.state._tag !== decision.state._tag) {
199
+ yield* tx.updateState(runId, decision.state);
200
+ }
201
+ const attemptId = AttemptId.make(`${runId}/${current.step.name}/${decision.number}`);
202
+ const startedAt = yield* DateTime.now;
203
+ const attempt = new Attempt({
204
+ id: attemptId,
205
+ runId,
206
+ stepName: current.step.name,
207
+ worker,
208
+ number: decision.number,
209
+ brain: current.agent.brain,
210
+ parentModel: current.parentModel,
211
+ startedAt,
212
+ outcome: Option.none(),
213
+ });
214
+ yield* tx.addAttempt(attempt);
215
+ yield* Effect.logInfo("Attempt started", {
216
+ runId,
217
+ attemptId,
218
+ number: decision.number,
219
+ worker,
220
+ });
221
+ return new AttemptStarted({
222
+ execution: new StepExecution({
223
+ attempt,
224
+ event: current.event,
225
+ run: new Run({
226
+ id: current.run.id,
227
+ eventId: current.run.eventId,
228
+ loop: current.run.loop,
229
+ state: decision.state,
230
+ openedAt: current.run.openedAt,
231
+ }),
232
+ step: current.step,
233
+ repository: current.repository,
234
+ revision: current.revision,
235
+ task: current.task,
236
+ agent: current.agent,
237
+ parentModel: current.parentModel,
238
+ }),
239
+ });
240
+ }));
241
+ }, persistence("begin attempt"));
242
+ const finishAttempt = Effect.fn("RunStore.finishAttempt")(function* (attempt, result) {
243
+ yield* Effect.annotateCurrentSpan({ runId: attempt.runId, attemptId: attempt.id });
244
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
245
+ const tx = queriesFor(transaction);
246
+ const current = yield* tx.snapshot(attempt.runId);
247
+ const decision = decideFinishAttempt(current, attempt.id, result);
248
+ yield* applyFinish(tx, attempt.runId, decision);
249
+ return decision;
250
+ }));
251
+ }, persistence("finish attempt"));
252
+ const approve = Effect.fn("RunStore.approve")(function* (runId, approval) {
253
+ yield* database.transaction((transaction) => Effect.gen(function* () {
254
+ const tx = queriesFor(transaction);
255
+ if (yield* tx.approvalExists(runId))
256
+ return;
257
+ const current = yield* tx.snapshot(runId);
258
+ if (current.run.state._tag !== "Waiting") {
259
+ return yield* new RunOperationRejectedError({
260
+ runId,
261
+ operation: "approve",
262
+ state: current.run.state._tag,
263
+ });
264
+ }
265
+ yield* tx.recordApproval(runId, approval);
266
+ yield* tx.updateState(runId, RunState.approve(current.run.state));
267
+ yield* tx.requestWorkflowCommand(runId, "Approve");
268
+ }));
269
+ }, persistence("approve run"));
270
+ const retry = Effect.fn("RunStore.retry")(function* (runId) {
271
+ yield* Effect.annotateCurrentSpan({ runId });
272
+ yield* database.transaction((transaction) => Effect.gen(function* () {
273
+ const tx = queriesFor(transaction);
274
+ const current = yield* tx.snapshot(runId);
275
+ const decision = retryRun(current.run.state, yield* tx.workflowCommandsFor(runId));
276
+ yield* Effect.logInfo("Operator retry decided", {
277
+ runId,
278
+ state: current.run.state._tag,
279
+ decision: decision._tag,
280
+ });
281
+ if (decision._tag === "Resume") {
282
+ yield* tx.updateState(runId, decision.state);
283
+ yield* tx.requestWorkflowCommand(runId, "Resume");
284
+ return;
285
+ }
286
+ if (decision._tag === "ResumePending")
287
+ return;
288
+ return yield* new RunOperationRejectedError({
289
+ runId,
290
+ operation: "retry",
291
+ state: current.run.state._tag,
292
+ });
293
+ }));
294
+ }, persistence("retry run"));
295
+ const cancel = Effect.fn("RunStore.cancel")(function* (runId) {
296
+ yield* Effect.annotateCurrentSpan({ runId });
297
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
298
+ const tx = queriesFor(transaction);
299
+ const current = yield* tx.snapshot(runId);
300
+ const decision = cancelRun(current);
301
+ yield* Effect.logInfo("Operator cancellation decided", {
302
+ runId,
303
+ state: current.run.state._tag,
304
+ decision: decision._tag,
305
+ });
306
+ if (decision._tag === "AlreadyClosed")
307
+ return decision;
308
+ if (Option.isSome(decision.attempt)) {
309
+ yield* tx.closeAttempt(decision.attempt.value.id, decision.attempt.value.outcome);
310
+ }
311
+ yield* tx.updateState(runId, decision.state);
312
+ yield* tx.requestInterrupt(runId);
313
+ yield* tx.requestWorkflowCommand(runId, "Continue");
314
+ const canceled = {
315
+ _tag: "Canceled",
316
+ openAttempt: Option.map(decision.attempt, ({ id }) => id),
317
+ };
318
+ return canceled;
319
+ }));
320
+ }, persistence("cancel run"));
321
+ const revoke = Effect.fn("RunStore.revoke")(function* (loop, itemKey) {
322
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
323
+ const tx = queriesFor(transaction);
324
+ const storedRuns = yield* tx.revokeUnstarted(loop, itemKey);
325
+ for (const row of storedRuns) {
326
+ const current = yield* tx.snapshot(row.runId);
327
+ if (RunState.isUnstarted(current.run.state)) {
328
+ yield* tx.updateState(row.runId, RunState.revoke(current.run.state));
329
+ yield* tx.requestInterrupt(row.runId);
330
+ }
331
+ }
332
+ return storedRuns.map((row) => row.runId);
333
+ }));
334
+ }, persistence("revoke run"));
335
+ const claimQueued = Effect.fn("RunStore.claimQueued")(function* (submission, runId) {
336
+ return yield* database.transaction((transaction) => Effect.gen(function* () {
337
+ const tx = queriesFor(transaction);
338
+ const existing = yield* tx.runForEvent(submission.event.id);
339
+ if (existing[0] !== undefined) {
340
+ return Option.some(new StoredSubmission({ submission, runId: existing[0].runId }));
341
+ }
342
+ if ((yield* tx.ignoredEvent(submission.event.id)).length > 0) {
343
+ return Option.none();
344
+ }
345
+ if ((yield* tx.blockingRun(submission.loop, submission.itemKey)).length > 0) {
346
+ return Option.none();
347
+ }
348
+ if (!(yield* tx.cycles.isCurrentEvent(submission)))
349
+ return Option.none();
350
+ const claimed = yield* openRun(tx, submission, runId);
351
+ return claimed.result._tag === "Claimed"
352
+ ? Option.some(new StoredSubmission({ submission, runId }))
353
+ : Option.none();
354
+ }));
355
+ }, persistence("claim queued Event"));
356
+ const recoverable = Effect.fn("RunStore.recoverable")(function* () {
357
+ return (yield* queries.recoverable()).map((row) => new RecoverableRun({
358
+ submission: submissionFromRow(row),
359
+ runId: row.runId,
360
+ state: row.state,
361
+ }));
362
+ }, persistence("list recoverable runs"));
363
+ const appendTranscript = Effect.fn("RunStore.appendTranscript")(function* (direction, envelope) {
364
+ const receivedAt = yield* DateTime.now;
365
+ yield* database.transaction((transaction) => Effect.gen(function* () {
366
+ const tx = queriesFor(transaction);
367
+ if (direction === "outbound" && envelope.payload._tag === "Started") {
368
+ yield* tx.updateAttemptParentModel(envelope.attemptId, envelope.payload.parentModel);
369
+ }
370
+ yield* tx.appendTranscript(direction, envelope, receivedAt);
371
+ }));
372
+ }, persistence("append Attempt transcript"));
373
+ const transcript = Effect.fn("RunStore.transcript")(function* (query) {
374
+ return yield* queries.transcript(query);
375
+ }, persistence("read Attempt transcript"));
376
+ const reconcileCompletion = Effect.fn("RunStore.reconcileCompletion")(function* (runId, result) {
377
+ yield* Effect.annotateCurrentSpan({ runId });
378
+ if (result._tag !== "Complete") {
379
+ yield* Effect.logDebug("Workflow reconciliation skipped", { runId, reason: "Suspended" });
380
+ return;
381
+ }
382
+ yield* database.transaction((transaction) => Effect.gen(function* () {
383
+ const tx = queriesFor(transaction);
384
+ const current = yield* tx.snapshot(runId);
385
+ // Workflow defects and interruption do not become typed Attempt failures.
386
+ // Keep the projection available to the existing restart recovery path.
387
+ const completion = Exit.isSuccess(result.exit)
388
+ ? Option.some(Result.succeed(result.exit.value))
389
+ : Option.map(Cause.findErrorOption(result.exit.cause), Result.fail);
390
+ if (Option.isNone(completion)) {
391
+ yield* Effect.logInfo("Workflow reconciliation skipped", {
392
+ runId,
393
+ reason: "NoTypedOutcome",
394
+ });
395
+ return;
396
+ }
397
+ yield* applyFinish(tx, runId, reconcileAttempt(current, completion.value));
398
+ }));
399
+ }, persistence("reconcile workflow completion"));
400
+ return {
401
+ approve,
402
+ appendTranscript,
403
+ beginAttempt,
404
+ cancel,
405
+ claimQueued,
406
+ completeWorkflowCommand: (runId, command) => queries
407
+ .completeWorkflowCommand(runId, command)
408
+ .pipe(persistence("complete workflow command")),
409
+ finishAttempt,
410
+ nextQueued: (runId) => queries.nextQueued(runId).pipe(persistence("find queued Event")),
411
+ parkForApproval,
412
+ pendingWorkflowCommands: queries
413
+ .pendingWorkflowCommands()
414
+ .pipe(persistence("list pending workflow commands")),
415
+ recordAndClaim,
416
+ reconcileCompletion,
417
+ recoverable: recoverable(),
418
+ retry,
419
+ revoke,
420
+ snapshot: (runId) => queries.snapshot(runId).pipe(persistence("read run")),
421
+ transcript,
422
+ };
423
+ });
424
+ /**
425
+ * The durable Run projection store. Another backend implements this interface
426
+ * with its own `Layer.effect(RunStore, ...)`; methods speak domain vocabulary
427
+ * and fail only with `RunStoreError`.
428
+ */
429
+ export class RunStore extends Context.Service()("@usine/engine/internal/RunStore") {
430
+ static layer = Layer.effect(RunStore, makeRunStore);
431
+ }
432
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import * as AttemptChannel from "@usine/core/attempt/channel";
2
+ import { Schema } from "effect";
3
+ /**
4
+ * Global append order of the persisted transcript. Distinct from
5
+ * `AttemptChannel.Sequence`, which orders messages within one Attempt's channel
6
+ * direction.
7
+ */
8
+ export declare const TranscriptSequence: Schema.brand<Schema.Int, "TranscriptSequence">;
9
+ export type TranscriptSequence = typeof TranscriptSequence.Type;
10
+ declare const TranscriptEntry_base: Schema.Class<TranscriptEntry, Schema.Struct<{
11
+ readonly sequence: Schema.brand<Schema.Int, "TranscriptSequence">;
12
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
13
+ readonly direction: Schema.Literals<readonly ["inbound", "outbound"]>;
14
+ readonly envelope: Schema.Union<readonly [Schema.Union<readonly [typeof AttemptChannel.OutboundEnvelope, typeof AttemptChannel.InboundEnvelope]>, Schema.Union<readonly [Schema.Struct<{
15
+ readonly _tag: Schema.tag<"OutboundEnvelope">;
16
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
17
+ readonly sequence: Schema.brand<Schema.Int, "AttemptChannelSequence">;
18
+ readonly sentAt: Schema.DateTimeUtcFromString;
19
+ readonly payload: Schema.Union<readonly [typeof AttemptChannel.Started, typeof AttemptChannel.SessionEvent, typeof AttemptChannel.Final, typeof AttemptChannel.Failed, typeof AttemptChannel.Interrupted]>;
20
+ readonly version: Schema.Literal<3>;
21
+ }>, Schema.Struct<{
22
+ readonly _tag: Schema.tag<"InboundEnvelope">;
23
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
24
+ readonly sequence: Schema.brand<Schema.Int, "AttemptChannelSequence">;
25
+ readonly sentAt: Schema.DateTimeUtcFromString;
26
+ readonly payload: Schema.Union<readonly [typeof AttemptChannel.Steer, typeof AttemptChannel.Interrupt]>;
27
+ readonly version: Schema.Literal<3>;
28
+ }>]>]>;
29
+ readonly receivedAt: Schema.DateTimeUtc;
30
+ }>, {}>;
31
+ /** One append-only row of an Attempt transcript. */
32
+ export declare class TranscriptEntry extends TranscriptEntry_base {
33
+ }
34
+ declare const TranscriptAllQuery_base: Schema.Class<TranscriptAllQuery, Schema.TaggedStruct<"TranscriptAllQuery", {
35
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
36
+ }>, {}>;
37
+ /** All persisted rows for one Attempt, in append order. */
38
+ export declare class TranscriptAllQuery extends TranscriptAllQuery_base {
39
+ }
40
+ declare const TranscriptTailQuery_base: Schema.Class<TranscriptTailQuery, Schema.TaggedStruct<"TranscriptTailQuery", {
41
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
42
+ /** Last row already received; the response excludes this row. */
43
+ readonly after: Schema.brand<Schema.Int, "TranscriptSequence">;
44
+ /** Maximum number of newer rows to return. */
45
+ readonly limit: Schema.Int;
46
+ }>, {}>;
47
+ /** The next bounded set of rows after a cursor, in append order, for following an Attempt's activity. */
48
+ export declare class TranscriptTailQuery extends TranscriptTailQuery_base {
49
+ }
50
+ declare const TranscriptPageQuery_base: Schema.Class<TranscriptPageQuery, Schema.TaggedStruct<"TranscriptPageQuery", {
51
+ readonly attemptId: Schema.brand<Schema.NonEmptyString, "AttemptId">;
52
+ /** Earliest row already loaded, excluded from the response; `None` starts at the current tail. */
53
+ readonly before: Schema.Option<Schema.brand<Schema.Int, "TranscriptSequence">>;
54
+ /** Maximum number of earlier rows to return. */
55
+ readonly limit: Schema.Int;
56
+ }>, {}>;
57
+ /** The newest bounded page before a cursor, returned in append order for loading earlier activity. */
58
+ export declare class TranscriptPageQuery extends TranscriptPageQuery_base {
59
+ }
60
+ /** Selects a complete Attempt transcript, newer activity, or an earlier page. */
61
+ export declare const TranscriptQuery: Schema.Union<readonly [typeof TranscriptAllQuery, typeof TranscriptTailQuery, typeof TranscriptPageQuery]>;
62
+ export type TranscriptQuery = typeof TranscriptQuery.Type;
63
+ export {};
64
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,gDAE9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;AAkBhE,oDAAoD;AACpD,qBAAa,eAAgB,SAAQ,oBAQpC;CAAG;;;;AAEJ,2DAA2D;AAC3D,qBAAa,kBAAmB,SAAQ,uBAES;CAAG;;;IAOlD,iEAAiE;;IAEjE,8CAA8C;;;AAPhD,yGAAyG;AACzG,qBAAa,mBAAoB,SAAQ,wBAQvC;CAAG;;;IAOH,kGAAkG;;IAElG,gDAAgD;;;AAPlD,sGAAsG;AACtG,qBAAa,mBAAoB,SAAQ,wBAQvC;CAAG;AAEL,iFAAiF;AACjF,eAAO,MAAM,eAAe,4GAI1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC"}