@usine/engine 0.0.1 → 0.1.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 (96) hide show
  1. package/README.md +66 -2
  2. package/dist/cursor/model.d.ts +5 -0
  3. package/dist/cursor/model.d.ts.map +1 -0
  4. package/dist/cursor/model.js +4 -0
  5. package/dist/cursor/model.js.map +1 -0
  6. package/dist/cursor/store.d.ts +18 -0
  7. package/dist/cursor/store.d.ts.map +1 -0
  8. package/dist/cursor/store.js +54 -0
  9. package/dist/cursor/store.js.map +1 -0
  10. package/dist/database/database.d.ts +15 -0
  11. package/dist/database/database.d.ts.map +1 -0
  12. package/dist/database/database.js +5 -0
  13. package/dist/database/database.js.map +1 -0
  14. package/dist/database/local-sqlite.d.ts +17 -0
  15. package/dist/database/local-sqlite.d.ts.map +1 -0
  16. package/dist/database/local-sqlite.js +45 -0
  17. package/dist/database/local-sqlite.js.map +1 -0
  18. package/dist/database/schema.d.ts +1096 -0
  19. package/dist/database/schema.d.ts.map +1 -0
  20. package/dist/database/schema.js +171 -0
  21. package/dist/database/schema.js.map +1 -0
  22. package/dist/engine.d.ts +39 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +179 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/index.d.ts +16 -4
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +16 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/item-projection/model.d.ts +21 -0
  31. package/dist/item-projection/model.d.ts.map +1 -0
  32. package/dist/item-projection/model.js +16 -0
  33. package/dist/item-projection/model.js.map +1 -0
  34. package/dist/item-projection/service.d.ts +25 -0
  35. package/dist/item-projection/service.d.ts.map +1 -0
  36. package/dist/item-projection/service.js +98 -0
  37. package/dist/item-projection/service.js.map +1 -0
  38. package/dist/loop-control.d.ts +16 -0
  39. package/dist/loop-control.d.ts.map +1 -0
  40. package/dist/loop-control.js +69 -0
  41. package/dist/loop-control.js.map +1 -0
  42. package/dist/model.d.ts +185 -0
  43. package/dist/model.d.ts.map +1 -0
  44. package/dist/model.js +174 -0
  45. package/dist/model.js.map +1 -0
  46. package/dist/repository-label-projection/model.d.ts +10 -0
  47. package/dist/repository-label-projection/model.d.ts.map +1 -0
  48. package/dist/repository-label-projection/model.js +11 -0
  49. package/dist/repository-label-projection/model.js.map +1 -0
  50. package/dist/repository-label-projection/service.d.ts +20 -0
  51. package/dist/repository-label-projection/service.d.ts.map +1 -0
  52. package/dist/repository-label-projection/service.js +73 -0
  53. package/dist/repository-label-projection/service.js.map +1 -0
  54. package/dist/run-reader.d.ts +20 -0
  55. package/dist/run-reader.d.ts.map +1 -0
  56. package/dist/run-reader.js +19 -0
  57. package/dist/run-reader.js.map +1 -0
  58. package/dist/step-executor.d.ts +21 -0
  59. package/dist/step-executor.d.ts.map +1 -0
  60. package/dist/step-executor.js +8 -0
  61. package/dist/step-executor.js.map +1 -0
  62. package/dist/store/codec.d.ts +431 -0
  63. package/dist/store/codec.d.ts.map +1 -0
  64. package/dist/store/codec.js +140 -0
  65. package/dist/store/codec.js.map +1 -0
  66. package/dist/store/queries.d.ts +75 -0
  67. package/dist/store/queries.d.ts.map +1 -0
  68. package/dist/store/queries.js +508 -0
  69. package/dist/store/queries.js.map +1 -0
  70. package/dist/store/store.d.ts +83 -0
  71. package/dist/store/store.d.ts.map +1 -0
  72. package/dist/store/store.js +374 -0
  73. package/dist/store/store.js.map +1 -0
  74. package/dist/workflow.d.ts +14 -0
  75. package/dist/workflow.d.ts.map +1 -0
  76. package/dist/workflow.js +105 -0
  77. package/dist/workflow.js.map +1 -0
  78. package/drizzle/20260825055549_initial_runtime/migration.sql +73 -0
  79. package/drizzle/20260825055549_initial_runtime/snapshot.json +592 -0
  80. package/drizzle/20260830191125_polling_cursors/migration.sql +5 -0
  81. package/drizzle/20260830191125_polling_cursors/snapshot.json +629 -0
  82. package/drizzle/20260831073158_attempt_channel/migration.sql +36 -0
  83. package/drizzle/20260831073158_attempt_channel/snapshot.json +845 -0
  84. package/drizzle/20260831133534_agent_context/migration.sql +49 -0
  85. package/drizzle/20260831133534_agent_context/snapshot.json +897 -0
  86. package/drizzle/20260831134612_attempt_brain/migration.sql +26 -0
  87. package/drizzle/20260831134612_attempt_brain/snapshot.json +923 -0
  88. package/drizzle/20260831194605_loop_runtime/migration.sql +4 -0
  89. package/drizzle/20260831194605_loop_runtime/snapshot.json +954 -0
  90. package/drizzle/20260901073233_projection_revision/migration.sql +55 -0
  91. package/drizzle/20260901073233_projection_revision/snapshot.json +991 -0
  92. package/drizzle/20260901180433_item_projections/migration.sql +22 -0
  93. package/drizzle/20260901180433_item_projections/snapshot.json +1110 -0
  94. package/drizzle/20260901185146_repository_label_projections/migration.sql +17 -0
  95. package/drizzle/20260901185146_repository_label_projections/snapshot.json +1147 -0
  96. package/package.json +21 -3
@@ -0,0 +1,508 @@
1
+ import { Attempt, AttemptChannel, Event, Item, Loop, Run, RunState, Step, StepResult, } from "@usine/core";
2
+ import { and, asc, desc, eq, gt, inArray, isNull, lt, ne, notInArray, sql } from "drizzle-orm";
3
+ import { alias } from "drizzle-orm/sqlite-core";
4
+ import { DateTime, Effect, Match, Option, Schema } from "effect";
5
+ import { approvals, attemptTranscripts, attempts, events, ignoredEvents, projectionRevision, runs, steps, triggerEvents, workflowCommands, } from "../database/schema.js";
6
+ import { RunNotFoundError, RunSnapshot, RunSummary, Submission, TranscriptQuery, WORKFLOW_COMMAND_PRIORITY, } from "../model.js";
7
+ import { attemptFromRow, decodeAttemptRows, decodeDiscards, decodeEventRoutes, decodeRecoverableRuns, decodeProjectionRevision, decodeRunIds, decodeRunRows, decodeWorkflowCommands, decodeTranscriptRows, encodeAgent, encodeBrainSpec, encodeDateTime, encodeEnvelope, encodeOutcome, encodePayload, encodeRunState, encodeStepResult, eventFromRow, runFromRow, runSummaryFromRow, stepFromRow, submissionFromRow, transcriptEntryFromRow, } from "./codec.js";
8
+ const eventRouteSelection = {
9
+ eventId: events.eventId,
10
+ dedupKey: events.dedupKey,
11
+ payload: events.payloadJson,
12
+ receivedAt: events.receivedAt,
13
+ itemKey: triggerEvents.itemKey,
14
+ loop: triggerEvents.loopName,
15
+ step: triggerEvents.stepName,
16
+ approval: triggerEvents.approval,
17
+ repository: triggerEvents.repository,
18
+ revision: triggerEvents.revision,
19
+ task: triggerEvents.task,
20
+ agent: triggerEvents.agentJson,
21
+ parentModel: triggerEvents.parentModel,
22
+ };
23
+ const runSelection = {
24
+ itemKey: triggerEvents.itemKey,
25
+ runId: runs.runId,
26
+ eventId: runs.eventId,
27
+ loop: runs.loopName,
28
+ state: runs.stateJson,
29
+ openedAt: runs.openedAt,
30
+ repository: runs.repository,
31
+ revision: runs.revision,
32
+ task: runs.task,
33
+ agent: runs.agentJson,
34
+ parentModel: runs.parentModel,
35
+ stepName: steps.stepName,
36
+ result: steps.result,
37
+ };
38
+ const attemptSelection = {
39
+ attemptId: attempts.attemptId,
40
+ runId: attempts.runId,
41
+ stepName: attempts.stepName,
42
+ worker: attempts.workerName,
43
+ number: attempts.attemptNumber,
44
+ brain: attempts.brainJson,
45
+ parentModel: attempts.parentModel,
46
+ startedAt: attempts.startedAt,
47
+ outcome: attempts.outcomeJson,
48
+ };
49
+ // The state partitions stay owned by @usine/core (`RunState.Open` and the
50
+ // supersede/revoke precondition); these predicates only borrow their tags.
51
+ const storedStateTag = sql `json_extract(${runs.stateJson}, '$._tag')`;
52
+ const openState = inArray(storedStateTag, [...RunState.OPEN_STATE_TAGS]);
53
+ const unstartedState = inArray(storedStateTag, [...RunState.UNSTARTED_STATE_TAGS]);
54
+ // The Json round-trip is the portable named type for `queriesFor`'s inferred
55
+ // signature — without it tsc cannot emit the declaration (TS2883).
56
+ const storedAgent = (agent) => Schema.decodeUnknownSync(Schema.Json)(encodeAgent(agent));
57
+ export const queriesFor = (database) => {
58
+ // Keep `.execute()` explicit: RC.4's yieldable wrapper can cross an Effect
59
+ // Workflow suspension before its final mutation is observable (ADR 0020).
60
+ const eventRouteByDedup = Effect.fn("RunStoreQueries.eventRouteByDedup")(function* (dedupKey) {
61
+ const rows = yield* database
62
+ .select(eventRouteSelection)
63
+ .from(events)
64
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, events.eventId))
65
+ .where(eq(events.dedupKey, dedupKey))
66
+ .execute();
67
+ return yield* decodeEventRoutes(rows);
68
+ });
69
+ const eventRouteByRun = Effect.fn("RunStoreQueries.eventRouteByRun")(function* (runId) {
70
+ const rows = yield* database
71
+ .select(eventRouteSelection)
72
+ .from(runs)
73
+ .innerJoin(events, eq(events.eventId, runs.eventId))
74
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, events.eventId))
75
+ .where(eq(runs.runId, runId))
76
+ .execute();
77
+ return yield* decodeEventRoutes(rows);
78
+ });
79
+ const runRows = Effect.fn("RunStoreQueries.runRows")(function* (runId) {
80
+ const rows = yield* database
81
+ .select(runSelection)
82
+ .from(runs)
83
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, runs.eventId))
84
+ .innerJoin(steps, eq(steps.runId, runs.runId))
85
+ .where(eq(runs.runId, runId))
86
+ .execute();
87
+ return yield* decodeRunRows(rows);
88
+ });
89
+ const attemptRows = Effect.fn("RunStoreQueries.attemptRows")(function* (runId) {
90
+ const rows = yield* database
91
+ .select(attemptSelection)
92
+ .from(attempts)
93
+ .where(eq(attempts.runId, runId))
94
+ .orderBy(attempts.attemptNumber)
95
+ .execute();
96
+ return yield* decodeAttemptRows(rows);
97
+ });
98
+ const snapshot = Effect.fn("RunStoreQueries.snapshot")(function* (runId) {
99
+ const [storedRuns, storedAttempts, routes] = yield* Effect.all([
100
+ runRows(runId),
101
+ attemptRows(runId),
102
+ eventRouteByRun(runId),
103
+ ]);
104
+ const storedRun = storedRuns[0];
105
+ const route = routes[0];
106
+ if (storedRun === undefined || route === undefined) {
107
+ return yield* new RunNotFoundError({ runId });
108
+ }
109
+ return new RunSnapshot({
110
+ event: eventFromRow(route),
111
+ itemKey: route.itemKey,
112
+ run: runFromRow(storedRun),
113
+ step: stepFromRow(storedRun),
114
+ attempts: storedAttempts.map(attemptFromRow),
115
+ repository: storedRun.repository,
116
+ revision: storedRun.revision,
117
+ task: storedRun.task,
118
+ agent: storedRun.agent,
119
+ parentModel: Option.fromNullishOr(storedRun.parentModel),
120
+ });
121
+ });
122
+ // Every open Run plus the newest `closedLimit` settled ones: an old Waiting
123
+ // run can never fall out of the operator's view, while total history stays
124
+ // bounded no matter how long the factory has been running.
125
+ const runSummaries = Effect.fn("RunStoreQueries.runSummaries")(function* (closedLimit) {
126
+ const [openRuns, closedRuns] = yield* Effect.all([
127
+ database
128
+ .select(runSelection)
129
+ .from(runs)
130
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, runs.eventId))
131
+ .innerJoin(steps, eq(steps.runId, runs.runId))
132
+ .where(openState)
133
+ .orderBy(desc(runs.openedAt), desc(runs.runId))
134
+ .execute()
135
+ .pipe(Effect.flatMap(decodeRunRows)),
136
+ database
137
+ .select(runSelection)
138
+ .from(runs)
139
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, runs.eventId))
140
+ .innerJoin(steps, eq(steps.runId, runs.runId))
141
+ .where(notInArray(storedStateTag, [...RunState.OPEN_STATE_TAGS]))
142
+ .orderBy(desc(runs.openedAt), desc(runs.runId))
143
+ .limit(closedLimit)
144
+ .execute()
145
+ .pipe(Effect.flatMap(decodeRunRows)),
146
+ ]);
147
+ const storedRuns = [...openRuns, ...closedRuns].sort((left, right) => DateTime.toEpochMillis(right.openedAt) - DateTime.toEpochMillis(left.openedAt) ||
148
+ (right.runId > left.runId ? 1 : -1));
149
+ const runIds = storedRuns.map(({ runId }) => runId);
150
+ const storedAttempts = runIds.length === 0
151
+ ? []
152
+ : yield* database
153
+ .select(attemptSelection)
154
+ .from(attempts)
155
+ .where(inArray(attempts.runId, runIds))
156
+ .orderBy(asc(attempts.runId), asc(attempts.attemptNumber))
157
+ .execute()
158
+ .pipe(Effect.flatMap(decodeAttemptRows));
159
+ const attemptsByRun = new Map();
160
+ for (const attempt of storedAttempts) {
161
+ const grouped = attemptsByRun.get(attempt.runId) ?? [];
162
+ grouped.push(attempt);
163
+ attemptsByRun.set(attempt.runId, grouped);
164
+ }
165
+ return storedRuns.map((row) => runSummaryFromRow(row, attemptsByRun.get(row.runId) ?? []));
166
+ });
167
+ const revision = Effect.fn("RunStoreQueries.projectionRevision")(function* () {
168
+ const rows = yield* decodeProjectionRevision(yield* database
169
+ .select({ revision: projectionRevision.revision })
170
+ .from(projectionRevision)
171
+ .where(eq(projectionRevision.singleton, 1))
172
+ .limit(1)
173
+ .execute());
174
+ return Option.fromNullishOr(rows[0]?.revision);
175
+ });
176
+ const updateState = Effect.fn("RunStoreQueries.updateState")(function* (runId, state) {
177
+ const updated = yield* database
178
+ .update(runs)
179
+ .set({ stateJson: encodeRunState(state) })
180
+ .where(eq(runs.runId, runId))
181
+ .returning({ runId: runs.runId })
182
+ .execute();
183
+ if (updated.length === 0) {
184
+ return yield* new RunNotFoundError({ runId });
185
+ }
186
+ });
187
+ const addAttempt = Effect.fn("RunStoreQueries.addAttempt")(function* (attempt) {
188
+ yield* database
189
+ .insert(attempts)
190
+ .values({
191
+ attemptId: attempt.id,
192
+ runId: attempt.runId,
193
+ stepName: attempt.stepName,
194
+ workerName: attempt.worker,
195
+ attemptNumber: attempt.number,
196
+ brainJson: encodeBrainSpec(attempt.brain),
197
+ parentModel: Option.getOrNull(attempt.parentModel),
198
+ startedAt: encodeDateTime(attempt.startedAt),
199
+ outcomeJson: null,
200
+ })
201
+ .execute();
202
+ });
203
+ const closeAttempt = Effect.fn("RunStoreQueries.closeAttempt")(function* (attemptId, outcome) {
204
+ yield* database
205
+ .update(attempts)
206
+ .set({ outcomeJson: encodeOutcome(outcome) })
207
+ .where(and(eq(attempts.attemptId, attemptId), isNull(attempts.outcomeJson)))
208
+ .execute();
209
+ });
210
+ const updateAttemptParentModel = Effect.fn("RunStoreQueries.updateAttemptParentModel")(function* (attemptId, parentModel) {
211
+ yield* database
212
+ .update(attempts)
213
+ .set({ parentModel })
214
+ .where(eq(attempts.attemptId, attemptId))
215
+ .execute();
216
+ });
217
+ const updateStepResult = Effect.fn("RunStoreQueries.updateStepResult")(function* (runId, stepName, result) {
218
+ yield* database
219
+ .update(steps)
220
+ .set({ result: encodeStepResult(result) })
221
+ .where(and(eq(steps.runId, runId), eq(steps.stepName, stepName)))
222
+ .execute();
223
+ });
224
+ const approvalExists = Effect.fn("RunStoreQueries.approvalExists")(function* (runId) {
225
+ return (yield* database.$count(approvals, eq(approvals.runId, runId)).execute()) > 0;
226
+ });
227
+ const recordApproval = Effect.fn("RunStoreQueries.recordApproval")(function* (runId, approval) {
228
+ yield* database
229
+ .insert(events)
230
+ .values({
231
+ eventId: approval.id,
232
+ dedupKey: approval.dedupKey,
233
+ payloadJson: encodePayload(approval.payload),
234
+ receivedAt: encodeDateTime(approval.receivedAt),
235
+ })
236
+ .onConflictDoNothing()
237
+ .execute();
238
+ yield* database.insert(approvals).values({ runId, eventId: approval.id }).execute();
239
+ });
240
+ const requestWorkflowCommand = Effect.fn("RunStoreQueries.requestWorkflowCommand")(function* (runId, command) {
241
+ yield* database
242
+ .insert(workflowCommands)
243
+ .values({ runId, command })
244
+ .onConflictDoNothing()
245
+ .execute();
246
+ });
247
+ const requestInterrupt = Effect.fn("RunStoreQueries.requestInterrupt")(function* (runId) {
248
+ yield* database
249
+ .delete(workflowCommands)
250
+ .where(and(eq(workflowCommands.runId, runId), inArray(workflowCommands.command, ["Approve", "Resume"])))
251
+ .execute();
252
+ yield* requestWorkflowCommand(runId, "Interrupt");
253
+ });
254
+ const hasWorkflowCommand = Effect.fn("RunStoreQueries.hasWorkflowCommand")(function* (runId, command) {
255
+ return ((yield* database
256
+ .$count(workflowCommands, and(eq(workflowCommands.runId, runId), eq(workflowCommands.command, command)))
257
+ .execute()) > 0);
258
+ });
259
+ const createRun = Effect.fn("RunStoreQueries.createRun")(function* (submission, eventId, runId) {
260
+ const candidate = alias(triggerEvents, "candidate");
261
+ const candidateRun = alias(runs, "candidate_run");
262
+ const ignored = alias(ignoredEvents, "ignored");
263
+ yield* database
264
+ .insert(ignoredEvents)
265
+ .select(database
266
+ .select({
267
+ eventId: candidate.eventId,
268
+ reason: sql `'superseded'`.as("reason"),
269
+ })
270
+ .from(candidate)
271
+ .leftJoin(candidateRun, eq(candidateRun.eventId, candidate.eventId))
272
+ .leftJoin(ignored, eq(ignored.eventId, candidate.eventId))
273
+ .where(and(eq(candidate.loopName, submission.loop), eq(candidate.itemKey, submission.itemKey), ne(candidate.eventId, eventId), isNull(candidateRun.runId), isNull(ignored.eventId))))
274
+ .onConflictDoNothing()
275
+ .execute();
276
+ yield* database
277
+ .insert(runs)
278
+ .values({
279
+ runId,
280
+ eventId,
281
+ loopName: submission.loop,
282
+ stateJson: encodeRunState(new RunState.Pending()),
283
+ openedAt: encodeDateTime(submission.event.receivedAt),
284
+ repository: submission.repository,
285
+ revision: submission.revision,
286
+ task: submission.task,
287
+ agentJson: storedAgent(submission.agent),
288
+ parentModel: Option.getOrNull(submission.parentModel),
289
+ })
290
+ .onConflictDoNothing()
291
+ .execute();
292
+ yield* database
293
+ .insert(steps)
294
+ .values({ runId, stepName: submission.step, result: null })
295
+ .onConflictDoNothing()
296
+ .execute();
297
+ });
298
+ const runForEvent = Effect.fn("RunStoreQueries.runForEvent")(function* (eventId) {
299
+ return yield* decodeRunIds(yield* database
300
+ .select({ runId: runs.runId })
301
+ .from(runs)
302
+ .where(eq(runs.eventId, eventId))
303
+ .execute());
304
+ });
305
+ const ignoredEvent = Effect.fn("RunStoreQueries.ignoredEvent")(function* (eventId) {
306
+ return yield* decodeDiscards(yield* database
307
+ .select({ reason: ignoredEvents.reason })
308
+ .from(ignoredEvents)
309
+ .where(eq(ignoredEvents.eventId, eventId))
310
+ .execute());
311
+ });
312
+ const blockingRun = Effect.fn("RunStoreQueries.blockingRun")(function* (loop, itemKey) {
313
+ return yield* decodeRunIds(yield* database
314
+ .select({ runId: runs.runId })
315
+ .from(runs)
316
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, runs.eventId))
317
+ .where(and(eq(triggerEvents.loopName, loop), eq(triggerEvents.itemKey, itemKey), openState))
318
+ .orderBy(desc(runs.openedAt))
319
+ .limit(1)
320
+ .execute());
321
+ });
322
+ const recordTriggerEvent = Effect.fn("RunStoreQueries.recordTriggerEvent")(function* (submission) {
323
+ yield* database
324
+ .insert(events)
325
+ .values({
326
+ eventId: submission.event.id,
327
+ dedupKey: submission.event.dedupKey,
328
+ payloadJson: encodePayload(submission.event.payload),
329
+ receivedAt: encodeDateTime(submission.event.receivedAt),
330
+ })
331
+ .onConflictDoNothing()
332
+ .execute();
333
+ const routes = yield* eventRouteByDedup(submission.event.dedupKey);
334
+ const existing = routes[0];
335
+ if (existing === undefined) {
336
+ yield* database
337
+ .insert(triggerEvents)
338
+ .values({
339
+ eventId: submission.event.id,
340
+ itemKey: submission.itemKey,
341
+ loopName: submission.loop,
342
+ stepName: submission.step,
343
+ approval: submission.approval,
344
+ repository: submission.repository,
345
+ revision: submission.revision,
346
+ task: submission.task,
347
+ agentJson: storedAgent(submission.agent),
348
+ parentModel: Option.getOrNull(submission.parentModel),
349
+ })
350
+ .execute();
351
+ return submission;
352
+ }
353
+ return submissionFromRow(existing);
354
+ });
355
+ const nextQueued = Effect.fn("RunStoreQueries.nextQueued")(function* (runId) {
356
+ const routes = yield* eventRouteByRun(runId);
357
+ const current = routes[0];
358
+ if (current === undefined)
359
+ return Option.none();
360
+ const queuedRows = yield* database
361
+ .select(eventRouteSelection)
362
+ .from(events)
363
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, events.eventId))
364
+ .leftJoin(runs, eq(runs.eventId, events.eventId))
365
+ .leftJoin(ignoredEvents, eq(ignoredEvents.eventId, events.eventId))
366
+ .where(and(eq(triggerEvents.loopName, current.loop), eq(triggerEvents.itemKey, current.itemKey), isNull(runs.runId), isNull(ignoredEvents.eventId)))
367
+ .orderBy(desc(events.receivedAt))
368
+ .limit(1)
369
+ .execute();
370
+ const queued = yield* decodeEventRoutes(queuedRows);
371
+ return Option.fromNullishOr(queued[0]).pipe(Option.map(submissionFromRow));
372
+ });
373
+ const appendTranscript = Effect.fn("RunStoreQueries.appendTranscript")(function* (direction, envelope, receivedAt) {
374
+ yield* database
375
+ .insert(attemptTranscripts)
376
+ .values({
377
+ attemptId: envelope.attemptId,
378
+ direction,
379
+ channelSequence: envelope.sequence,
380
+ envelope: encodeEnvelope(envelope),
381
+ receivedAt: encodeDateTime(receivedAt),
382
+ })
383
+ .onConflictDoNothing()
384
+ .execute();
385
+ });
386
+ const transcript = Effect.fn("RunStoreQueries.transcript")(function* (query) {
387
+ yield* Effect.annotateCurrentSpan({
388
+ attemptId: query.attemptId,
389
+ query: query._tag,
390
+ });
391
+ const cursor = Match.valueTags(query, {
392
+ TranscriptAllQuery: ({ attemptId }) => eq(attemptTranscripts.attemptId, attemptId),
393
+ TranscriptTailQuery: ({ attemptId, after }) => and(eq(attemptTranscripts.attemptId, attemptId), gt(attemptTranscripts.sequence, after)),
394
+ TranscriptPageQuery: ({ attemptId, before }) => Option.match(before, {
395
+ onNone: () => eq(attemptTranscripts.attemptId, attemptId),
396
+ onSome: (sequence) => and(eq(attemptTranscripts.attemptId, attemptId), lt(attemptTranscripts.sequence, sequence)),
397
+ }),
398
+ });
399
+ const selection = database
400
+ .select({
401
+ sequence: attemptTranscripts.sequence,
402
+ attemptId: attemptTranscripts.attemptId,
403
+ direction: attemptTranscripts.direction,
404
+ envelope: attemptTranscripts.envelope,
405
+ receivedAt: attemptTranscripts.receivedAt,
406
+ })
407
+ .from(attemptTranscripts)
408
+ .where(cursor);
409
+ // A limited read walks the tail index backwards for the newest N rows and
410
+ // re-sorts ascending, so callers always receive append order.
411
+ const rows = yield* Match.valueTags(query, {
412
+ TranscriptAllQuery: () => selection.orderBy(asc(attemptTranscripts.sequence)).execute(),
413
+ TranscriptTailQuery: ({ limit }) => selection.orderBy(asc(attemptTranscripts.sequence)).limit(limit).execute(),
414
+ TranscriptPageQuery: ({ limit }) => selection.orderBy(desc(attemptTranscripts.sequence)).limit(limit).execute(),
415
+ });
416
+ // Transcript rows are usine-owned: an unknown key is corruption, not tolerance.
417
+ return (yield* decodeTranscriptRows(rows, { onExcessProperty: "error" }))
418
+ .map(transcriptEntryFromRow)
419
+ .sort((left, right) => left.sequence - right.sequence);
420
+ });
421
+ const recoverable = Effect.fn("RunStoreQueries.recoverable")(function* () {
422
+ const rows = yield* database
423
+ .select({
424
+ ...eventRouteSelection,
425
+ runId: runs.runId,
426
+ state: runs.stateJson,
427
+ })
428
+ .from(runs)
429
+ .innerJoin(events, eq(events.eventId, runs.eventId))
430
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, events.eventId))
431
+ .where(openState)
432
+ .execute();
433
+ return yield* decodeRecoverableRuns(rows);
434
+ });
435
+ const pendingWorkflowCommands = Effect.fn("RunStoreQueries.pendingWorkflowCommands")(function* () {
436
+ const rows = yield* database
437
+ .select({ runId: workflowCommands.runId, command: workflowCommands.command })
438
+ .from(workflowCommands)
439
+ .execute();
440
+ const decoded = yield* decodeWorkflowCommands(rows);
441
+ // Delivery order per run is a replay invariant, not a sort convenience —
442
+ // WORKFLOW_COMMAND_PRIORITY names it.
443
+ const priority = (command) => WORKFLOW_COMMAND_PRIORITY.indexOf(command);
444
+ return [...decoded].sort((left, right) => left.runId === right.runId
445
+ ? priority(left.command) - priority(right.command)
446
+ : left.runId < right.runId
447
+ ? -1
448
+ : 1);
449
+ });
450
+ const completeWorkflowCommand = Effect.fn("RunStoreQueries.completeWorkflowCommand")(function* (runId, command) {
451
+ yield* database
452
+ .delete(workflowCommands)
453
+ .where(and(eq(workflowCommands.runId, runId), eq(workflowCommands.command, command)))
454
+ .execute();
455
+ });
456
+ const revokeUnstarted = Effect.fn("RunStoreQueries.revokeUnstarted")(function* (loop, itemKey) {
457
+ const rows = yield* decodeRunIds(yield* database
458
+ .select({ runId: runs.runId })
459
+ .from(runs)
460
+ .innerJoin(triggerEvents, eq(triggerEvents.eventId, runs.eventId))
461
+ .where(and(eq(triggerEvents.loopName, loop), eq(triggerEvents.itemKey, itemKey), unstartedState))
462
+ .execute());
463
+ const candidate = alias(triggerEvents, "candidate");
464
+ const candidateRun = alias(runs, "candidate_run");
465
+ yield* database
466
+ .insert(ignoredEvents)
467
+ .select(database
468
+ .select({
469
+ eventId: candidate.eventId,
470
+ reason: sql `'revoked'`.as("reason"),
471
+ })
472
+ .from(candidate)
473
+ .leftJoin(candidateRun, eq(candidateRun.eventId, candidate.eventId))
474
+ .where(and(eq(candidate.loopName, loop), eq(candidate.itemKey, itemKey), isNull(candidateRun.runId))))
475
+ .onConflictDoNothing()
476
+ .execute();
477
+ return rows;
478
+ });
479
+ return {
480
+ addAttempt,
481
+ appendTranscript,
482
+ approvalExists,
483
+ blockingRun,
484
+ closeAttempt,
485
+ completeWorkflowCommand,
486
+ createRun,
487
+ eventRouteByRun,
488
+ hasWorkflowCommand,
489
+ ignoredEvent,
490
+ nextQueued,
491
+ pendingWorkflowCommands,
492
+ recordTriggerEvent,
493
+ recoverable,
494
+ recordApproval,
495
+ requestInterrupt,
496
+ requestWorkflowCommand,
497
+ revision,
498
+ revokeUnstarted,
499
+ runSummaries,
500
+ runForEvent,
501
+ snapshot,
502
+ transcript,
503
+ updateStepResult,
504
+ updateAttemptParentModel,
505
+ updateState,
506
+ };
507
+ };
508
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/store/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { Attempt, AttemptChannel, AttemptFailure, Event, Item, Loop, Run, RunState, StepResult, Worker } from "@usine/core";
2
+ import { Context, Effect, Layer, Option, Schema } from "effect";
3
+ import type { Workflow } from "effect/unstable/workflow";
4
+ import { RunDatabase } from "../database/database.ts";
5
+ import { Claimed, Ignored, Queued, RunSnapshot, StepExecution, Submission, TranscriptEntry, TranscriptQuery, type RunStoreError, type WorkflowCommand } from "../model.ts";
6
+ import { type WorkflowCommandRow } from "./codec.ts";
7
+ declare const StoredSubmission_base: Schema.Class<StoredSubmission, Schema.Struct<{
8
+ readonly submission: typeof Submission;
9
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
10
+ }>, {}>;
11
+ export declare class StoredSubmission extends StoredSubmission_base {
12
+ }
13
+ declare const RecoverableRun_base: Schema.Class<RecoverableRun, Schema.Struct<{
14
+ readonly submission: typeof Submission;
15
+ readonly runId: Schema.brand<Schema.NonEmptyString, "RunId">;
16
+ readonly state: Schema.Union<readonly [typeof RunState.Pending, typeof RunState.Waiting, typeof RunState.Running, typeof RunState.Succeeded, typeof RunState.Failed, typeof RunState.Canceled]>;
17
+ }>, {}>;
18
+ export declare class RecoverableRun extends RecoverableRun_base {
19
+ }
20
+ declare const Claim_base: Schema.Class<Claim, Schema.Struct<{
21
+ readonly submission: typeof Submission;
22
+ readonly result: Schema.Union<readonly [typeof Claimed, typeof Queued, typeof Ignored]>;
23
+ readonly supersededRun: Schema.Option<Schema.brand<Schema.NonEmptyString, "RunId">>;
24
+ }>, {}>;
25
+ export declare class Claim extends Claim_base {
26
+ }
27
+ declare const AttemptStarted_base: Schema.Class<AttemptStarted, Schema.TaggedStruct<"AttemptStarted", {
28
+ readonly execution: typeof StepExecution;
29
+ }>, {}>;
30
+ export declare class AttemptStarted extends AttemptStarted_base {
31
+ }
32
+ declare const AttemptRecoveryFailed_base: Schema.Class<AttemptRecoveryFailed, Schema.TaggedStruct<"AttemptRecoveryFailed", {
33
+ readonly failure: typeof AttemptFailure.InfraFailure;
34
+ }>, {}>;
35
+ export declare class AttemptRecoveryFailed extends AttemptRecoveryFailed_base {
36
+ }
37
+ declare const RunClosed_base: Schema.Class<RunClosed, Schema.TaggedStruct<"RunClosed", {
38
+ readonly state: Schema.String;
39
+ }>, {}>;
40
+ /**
41
+ * The Run closed (canceled, superseded, or revoked) while it waited for a
42
+ * worker slot — a routine outcome once capacity queues exist, never an error.
43
+ */
44
+ export declare class RunClosed extends RunClosed_base {
45
+ }
46
+ /** What `RunStore.cancel` did, decided inside the closing transaction. */
47
+ export type CancelOutcome = {
48
+ readonly _tag: "AlreadyClosed";
49
+ } | {
50
+ readonly _tag: "Canceled";
51
+ readonly openAttempt: Option.Option<Attempt.AttemptId>;
52
+ };
53
+ declare const RunStore_base: Context.ServiceClass<RunStore, "@usine/engine/internal/RunStore", {
54
+ readonly approve: (runId: Run.RunId, approval: Event.Event) => Effect.Effect<void, RunStoreError>;
55
+ readonly appendTranscript: (direction: AttemptChannel.Direction, envelope: AttemptChannel.Envelope) => Effect.Effect<void, RunStoreError>;
56
+ readonly beginAttempt: (runId: Run.RunId, worker: Worker.Name) => Effect.Effect<AttemptStarted | AttemptRecoveryFailed | RunClosed, RunStoreError>;
57
+ readonly cancel: (runId: Run.RunId) => Effect.Effect<CancelOutcome, RunStoreError>;
58
+ readonly claimQueued: (submission: Submission, runId: Run.RunId) => Effect.Effect<Option.Option<StoredSubmission>, RunStoreError>;
59
+ readonly completeWorkflowCommand: (runId: Run.RunId, command: WorkflowCommand) => Effect.Effect<void, RunStoreError>;
60
+ readonly failAttempt: (attempt: Attempt.Attempt, failure: AttemptFailure.AttemptFailure) => Effect.Effect<boolean, RunStoreError>;
61
+ readonly nextQueued: (runId: Run.RunId) => Effect.Effect<Option.Option<Submission>, RunStoreError>;
62
+ readonly parkForApproval: (runId: Run.RunId) => Effect.Effect<void, RunStoreError>;
63
+ readonly pendingWorkflowCommands: Effect.Effect<ReadonlyArray<WorkflowCommandRow>, RunStoreError>;
64
+ readonly recordAndClaim: (submission: Submission, requestedRunId: Run.RunId) => Effect.Effect<Claim, RunStoreError>;
65
+ readonly reconcileCompletion: (runId: Run.RunId, result: Workflow.Result<StepResult.StepResult, AttemptFailure.AttemptFailure>) => Effect.Effect<void, RunStoreError>;
66
+ readonly recoverable: Effect.Effect<ReadonlyArray<RecoverableRun>, RunStoreError>;
67
+ readonly retry: (runId: Run.RunId) => Effect.Effect<void, RunStoreError>;
68
+ readonly revoke: (loop: Loop.LoopName, itemKey: Item.ItemKey) => Effect.Effect<ReadonlyArray<Run.RunId>, RunStoreError>;
69
+ readonly snapshot: (runId: Run.RunId) => Effect.Effect<RunSnapshot, RunStoreError>;
70
+ readonly succeedAttempt: (attempt: Attempt.Attempt, result: StepResult.StepResult) => Effect.Effect<void, RunStoreError>;
71
+ readonly transcript: (query: TranscriptQuery) => Effect.Effect<ReadonlyArray<TranscriptEntry>, RunStoreError>;
72
+ }>;
73
+ /**
74
+ * The durable Run projection store. The interface below is the store's
75
+ * declared contract — the seam any other backend (for example a Postgres
76
+ * store) implements with its own `Layer.effect(RunStore, ...)`. Methods speak
77
+ * domain vocabulary only and fail only with `RunStoreError`.
78
+ */
79
+ export declare class RunStore extends RunStore_base {
80
+ static readonly layer: Layer.Layer<RunStore, never, RunDatabase>;
81
+ }
82
+ export {};
83
+ //# 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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"}