@usine/engine 0.2.0 → 0.4.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.
- package/README.md +109 -36
- package/dist/board-moves/board-moves.d.ts +20 -0
- package/dist/board-moves/board-moves.d.ts.map +1 -0
- package/dist/board-moves/board-moves.js +74 -0
- package/dist/board-moves/board-moves.js.map +1 -0
- package/dist/board-moves/model.d.ts +21 -0
- package/dist/board-moves/model.d.ts.map +1 -0
- package/dist/board-moves/model.js +22 -0
- package/dist/board-moves/model.js.map +1 -0
- package/dist/cursor/cursor.d.ts +2 -6
- package/dist/cursor/cursor.d.ts.map +1 -1
- package/dist/cursor/cursor.js +2 -6
- package/dist/cursor/cursor.js.map +1 -1
- package/dist/cycle-budget/cycle-budget.d.ts +6 -6
- package/dist/cycle-budget/cycle-budget.d.ts.map +1 -1
- package/dist/cycle-budget/cycle-budget.js +5 -5
- package/dist/cycle-budget/cycle-budget.js.map +1 -1
- package/dist/cycle-budget/model.d.ts +2 -2
- package/dist/cycle-budget/model.d.ts.map +1 -1
- package/dist/cycle-budget/model.js +2 -2
- package/dist/cycle-budget/model.js.map +1 -1
- package/dist/cycle-budget/queries.d.ts +1 -1
- package/dist/cycle-budget/queries.d.ts.map +1 -1
- package/dist/cycle-budget/queries.js +3 -3
- package/dist/cycle-budget/queries.js.map +1 -1
- package/dist/database/database.d.ts +1 -1
- package/dist/database/database.d.ts.map +1 -1
- package/dist/database/local-sqlite.d.ts +10 -8
- package/dist/database/local-sqlite.d.ts.map +1 -1
- package/dist/database/local-sqlite.js +16 -9
- package/dist/database/local-sqlite.js.map +1 -1
- package/dist/database/schema.d.ts +581 -22
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +104 -23
- package/dist/database/schema.js.map +1 -1
- package/dist/{workflow → engine}/admission.d.ts +2 -2
- package/dist/engine/admission.d.ts.map +1 -0
- package/dist/{workflow → engine}/admission.js +4 -4
- package/dist/engine/admission.js.map +1 -0
- package/dist/engine/checkout-recovery.d.ts +69 -0
- package/dist/engine/checkout-recovery.d.ts.map +1 -0
- package/dist/engine/checkout-recovery.js +181 -0
- package/dist/engine/checkout-recovery.js.map +1 -0
- package/dist/engine/engine.d.ts +57 -24
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +144 -120
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/error.d.ts +36 -9
- package/dist/engine/error.d.ts.map +1 -1
- package/dist/engine/error.js +35 -7
- package/dist/engine/error.js.map +1 -1
- package/dist/engine/lifecycle.d.ts +81 -28
- package/dist/engine/lifecycle.d.ts.map +1 -1
- package/dist/engine/lifecycle.js +83 -44
- package/dist/engine/lifecycle.js.map +1 -1
- package/dist/engine/retry.d.ts +16 -0
- package/dist/engine/retry.d.ts.map +1 -0
- package/dist/engine/retry.js +18 -0
- package/dist/engine/retry.js.map +1 -0
- package/dist/engine/run-again.d.ts +45 -0
- package/dist/engine/run-again.d.ts.map +1 -0
- package/dist/engine/run-again.js +56 -0
- package/dist/engine/run-again.js.map +1 -0
- package/dist/engine/run-driver.d.ts +54 -0
- package/dist/engine/run-driver.d.ts.map +1 -0
- package/dist/engine/run-driver.js +362 -0
- package/dist/engine/run-driver.js.map +1 -0
- package/dist/engine/shutdown.d.ts +3 -4
- package/dist/engine/shutdown.d.ts.map +1 -1
- package/dist/engine/shutdown.js +3 -4
- package/dist/engine/shutdown.js.map +1 -1
- package/dist/engine/submission.d.ts +31 -11
- package/dist/engine/submission.d.ts.map +1 -1
- package/dist/engine/submission.js +42 -12
- package/dist/engine/submission.js.map +1 -1
- package/dist/item-projection/item-projection.d.ts +12 -4
- package/dist/item-projection/item-projection.d.ts.map +1 -1
- package/dist/item-projection/item-projection.js +41 -6
- package/dist/item-projection/item-projection.js.map +1 -1
- package/dist/item-projection/model.d.ts +5 -1
- package/dist/item-projection/model.d.ts.map +1 -1
- package/dist/item-projection/model.js +6 -2
- package/dist/item-projection/model.js.map +1 -1
- package/dist/loop-control/loop-control.d.ts +5 -5
- package/dist/loop-control/loop-control.d.ts.map +1 -1
- package/dist/loop-control/loop-control.js +4 -4
- package/dist/loop-control/loop-control.js.map +1 -1
- package/dist/loop-control/model.d.ts +1 -1
- package/dist/loop-control/model.d.ts.map +1 -1
- package/dist/loop-control/model.js +1 -1
- package/dist/loop-control/model.js.map +1 -1
- package/dist/repository-label-projection/model.d.ts +2 -2
- package/dist/repository-label-projection/model.d.ts.map +1 -1
- package/dist/repository-label-projection/model.js +2 -2
- package/dist/repository-label-projection/model.js.map +1 -1
- package/dist/repository-label-projection/repository-label-projection.d.ts +1 -1
- package/dist/repository-label-projection/repository-label-projection.d.ts.map +1 -1
- package/dist/repository-label-projection/repository-label-projection.js +1 -1
- package/dist/repository-label-projection/repository-label-projection.js.map +1 -1
- package/dist/run-reader/model.d.ts +62 -4
- package/dist/run-reader/model.d.ts.map +1 -1
- package/dist/run-reader/model.js +66 -7
- package/dist/run-reader/model.js.map +1 -1
- package/dist/run-reader/run-reader.d.ts +19 -9
- package/dist/run-reader/run-reader.d.ts.map +1 -1
- package/dist/run-reader/run-reader.js +23 -7
- package/dist/run-reader/run-reader.js.map +1 -1
- package/dist/step-executor.d.ts +65 -9
- package/dist/step-executor.d.ts.map +1 -1
- package/dist/step-executor.js +10 -2
- package/dist/step-executor.js.map +1 -1
- package/dist/store/attempt-windows.d.ts +8 -0
- package/dist/store/attempt-windows.d.ts.map +1 -0
- package/dist/store/attempt-windows.js +53 -0
- package/dist/store/attempt-windows.js.map +1 -0
- package/dist/store/codec.d.ts +381 -42
- package/dist/store/codec.d.ts.map +1 -1
- package/dist/store/codec.js +59 -15
- package/dist/store/codec.js.map +1 -1
- package/dist/store/leftovers.d.ts +10 -0
- package/dist/store/leftovers.d.ts.map +1 -0
- package/dist/store/leftovers.js +43 -0
- package/dist/store/leftovers.js.map +1 -0
- package/dist/store/loop-items.d.ts +16 -0
- package/dist/store/loop-items.d.ts.map +1 -0
- package/dist/store/loop-items.js +185 -0
- package/dist/store/loop-items.js.map +1 -0
- package/dist/store/queries.d.ts +345 -37
- package/dist/store/queries.d.ts.map +1 -1
- package/dist/store/queries.js +333 -160
- package/dist/store/queries.js.map +1 -1
- package/dist/store/store.d.ts +91 -54
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +481 -190
- package/dist/store/store.js.map +1 -1
- package/dist/store/transcript.d.ts +9 -0
- package/dist/store/transcript.d.ts.map +1 -0
- package/dist/store/transcript.js +90 -0
- package/dist/store/transcript.js.map +1 -0
- package/dist/transcript.d.ts +41 -20
- package/dist/transcript.d.ts.map +1 -1
- package/dist/transcript.js +45 -25
- package/dist/transcript.js.map +1 -1
- package/dist/trigger-condition.d.ts +23 -0
- package/dist/trigger-condition.d.ts.map +1 -0
- package/dist/trigger-condition.js +8 -0
- package/dist/trigger-condition.js.map +1 -0
- package/drizzle/20260912111855_operator_intervention/migration.sql +42 -0
- package/drizzle/20260912111855_operator_intervention/snapshot.json +1461 -0
- package/drizzle/20260917071139_resolve_run_failure/migration.sql +1 -0
- package/drizzle/20260917071139_resolve_run_failure/snapshot.json +1471 -0
- package/drizzle/20260918032643_attempt_salvage/migration.sql +1 -0
- package/drizzle/20260918032643_attempt_salvage/snapshot.json +1481 -0
- package/drizzle/20261011153856_drop_workflow_tables/migration.sql +4 -0
- package/drizzle/20261011153856_drop_workflow_tables/snapshot.json +1433 -0
- package/drizzle/20261017155043_attempt_salvage_check/migration.sql +41 -0
- package/drizzle/20261017155043_attempt_salvage_check/snapshot.json +1421 -0
- package/drizzle/20261018162700_discard_attempt_leftovers/migration.sql +1 -0
- package/drizzle/20261018162700_discard_attempt_leftovers/snapshot.json +1431 -0
- package/drizzle/20261018172605_loop_items_and_reopenings/migration.sql +15 -0
- package/drizzle/20261018172605_loop_items_and_reopenings/snapshot.json +1574 -0
- package/drizzle/20261018180339_attempt_ended_at/migration.sql +1 -0
- package/drizzle/20261018180339_attempt_ended_at/snapshot.json +1584 -0
- package/drizzle/20261019104043_run_approval_source/migration.sql +15 -0
- package/drizzle/20261019104043_run_approval_source/snapshot.json +1610 -0
- package/drizzle/20261019133538_board_moves/migration.sql +14 -0
- package/drizzle/20261019133538_board_moves/snapshot.json +1731 -0
- package/drizzle/20261019170538_item_projection_gone/migration.sql +1 -0
- package/drizzle/20261019170538_item_projection_gone/snapshot.json +1741 -0
- package/drizzle/20261019180649_run_again_events/migration.sql +7 -0
- package/drizzle/20261019180649_run_again_events/snapshot.json +1804 -0
- package/drizzle/20261019185008_trigger_event_permissions/migration.sql +1 -0
- package/drizzle/20261019185008_trigger_event_permissions/snapshot.json +1814 -0
- package/drizzle/20261020103746_attempt_start/migration.sql +5 -0
- package/drizzle/20261020103746_attempt_start/snapshot.json +1844 -0
- package/drizzle/20261020125211_attempt_comments/migration.sql +1 -0
- package/drizzle/20261020125211_attempt_comments/snapshot.json +1854 -0
- package/drizzle/20261020191320_run_closed_at/migration.sql +6 -0
- package/drizzle/20261020191320_run_closed_at/snapshot.json +1864 -0
- package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/migration.sql +2 -0
- package/drizzle/20261023091428_rename_loop_item_hold_to_suppression/snapshot.json +1867 -0
- package/package.json +15 -5
- package/dist/workflow/admission.d.ts.map +0 -1
- package/dist/workflow/admission.js.map +0 -1
- package/dist/workflow/command.d.ts +0 -13
- package/dist/workflow/command.d.ts.map +0 -1
- package/dist/workflow/command.js +0 -17
- package/dist/workflow/command.js.map +0 -1
- package/dist/workflow/workflow.d.ts +0 -18
- package/dist/workflow/workflow.d.ts.map +0 -1
- package/dist/workflow/workflow.js +0 -108
- package/dist/workflow/workflow.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/store/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/store/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/store/codec.js
CHANGED
|
@@ -1,24 +1,28 @@
|
|
|
1
|
-
import { Agent } from "@usine/core/agent";
|
|
1
|
+
import { Agent, AgentName } from "@usine/core/agent";
|
|
2
2
|
import { CycleGeneration, CycleLimit } from "@usine/core/cycle-budget";
|
|
3
3
|
import { BrainSpec, ModelId } from "@usine/core/agent/brain";
|
|
4
4
|
import { Attempt, AttemptNumber, AttemptTask, AttemptId } from "@usine/core/attempt";
|
|
5
5
|
import * as AttemptChannel from "@usine/core/attempt/channel";
|
|
6
6
|
import { AttemptOutcome } from "@usine/core/attempt/outcome";
|
|
7
|
+
import { AttemptSalvage } from "@usine/core/attempt/salvage";
|
|
8
|
+
import { AttemptStart, OperatorRetryStart } from "@usine/core/attempt/start";
|
|
7
9
|
import { Event, DedupKey, EventId } from "@usine/core/event";
|
|
8
|
-
import { ApprovalRequirement, LoopName } from "@usine/core/loop";
|
|
10
|
+
import { ApprovalRequirement, LoopName, LoopPermissions } from "@usine/core/loop";
|
|
9
11
|
import { ItemKey } from "@usine/core/item";
|
|
10
12
|
import { RepositoryName, RepositoryRevision } from "@usine/core/repository";
|
|
13
|
+
import { OperatorLogin } from "@usine/core/operator";
|
|
11
14
|
import { RunId, Run } from "@usine/core/run";
|
|
15
|
+
import { RunAgain } from "@usine/core/run/again";
|
|
16
|
+
import { ApprovalChannel, ApprovalSource, RunApproval } from "@usine/core/run/approval";
|
|
12
17
|
import { StepName, Step } from "@usine/core/step";
|
|
13
18
|
import { WorkerName } from "@usine/core/worker";
|
|
14
19
|
import * as RunState from "@usine/core/run/state";
|
|
15
|
-
import { StepResult } from "@usine/core/step/result";
|
|
20
|
+
import { Comment, StepResult } from "@usine/core/step/result";
|
|
16
21
|
import { Effect, Option, Schema } from "effect";
|
|
17
22
|
import { EnginePersistenceError, RunStoreError } from "../engine/error.js";
|
|
18
23
|
import { IgnoreReason, Submission } from "../engine/submission.js";
|
|
19
|
-
import { ProjectionRevision, RunSummary } from "../run-reader/model.js";
|
|
24
|
+
import { ProjectionRevision, RunEvent, RunSummary } from "../run-reader/model.js";
|
|
20
25
|
import { TranscriptEntry, TranscriptSequence } from "../transcript.js";
|
|
21
|
-
import { WorkflowCommand } from "../workflow/command.js";
|
|
22
26
|
export const EventRouteRow = Schema.Struct({
|
|
23
27
|
eventId: EventId,
|
|
24
28
|
dedupKey: DedupKey,
|
|
@@ -28,6 +32,7 @@ export const EventRouteRow = Schema.Struct({
|
|
|
28
32
|
loop: LoopName,
|
|
29
33
|
step: StepName,
|
|
30
34
|
approval: ApprovalRequirement,
|
|
35
|
+
permissions: LoopPermissions,
|
|
31
36
|
cycleLimit: Schema.NullOr(CycleLimit),
|
|
32
37
|
cycleGeneration: CycleGeneration,
|
|
33
38
|
repository: RepositoryName,
|
|
@@ -47,9 +52,16 @@ export const RunRow = Schema.Struct({
|
|
|
47
52
|
eventId: EventId,
|
|
48
53
|
loop: LoopName,
|
|
49
54
|
state: RunState.RunState,
|
|
55
|
+
resolvedFailureAttemptId: Schema.NullOr(AttemptId),
|
|
50
56
|
openedAt: Schema.DateTimeUtcFromString,
|
|
57
|
+
closedAt: Schema.NullOr(Schema.DateTimeUtcFromString),
|
|
51
58
|
stepName: StepName,
|
|
52
59
|
result: Schema.NullOr(StepResult),
|
|
60
|
+
approvedAt: Schema.NullOr(Schema.DateTimeUtcFromString),
|
|
61
|
+
approvalChannel: Schema.NullOr(ApprovalChannel),
|
|
62
|
+
approver: Schema.NullOr(OperatorLogin),
|
|
63
|
+
againFrom: Schema.NullOr(RunId),
|
|
64
|
+
againRequestedBy: Schema.NullOr(OperatorLogin),
|
|
53
65
|
});
|
|
54
66
|
export const AttemptRow = Schema.Struct({
|
|
55
67
|
attemptId: AttemptId,
|
|
@@ -58,9 +70,17 @@ export const AttemptRow = Schema.Struct({
|
|
|
58
70
|
worker: WorkerName,
|
|
59
71
|
number: AttemptNumber,
|
|
60
72
|
brain: BrainSpec,
|
|
73
|
+
task: AttemptTask,
|
|
74
|
+
agent: AgentName,
|
|
75
|
+
operatorIntervened: Schema.Boolean,
|
|
61
76
|
parentModel: Schema.NullOr(ModelId),
|
|
62
77
|
startedAt: Schema.DateTimeUtcFromString,
|
|
63
78
|
outcome: Schema.NullOr(AttemptOutcome),
|
|
79
|
+
endedAt: Schema.NullOr(Schema.DateTimeUtcFromString),
|
|
80
|
+
salvage: Schema.NullOr(AttemptSalvage),
|
|
81
|
+
start: Schema.NullOr(AttemptStart),
|
|
82
|
+
reattachedAt: Schema.NullOr(Schema.DateTimeUtcFromString),
|
|
83
|
+
comments: Schema.NullOr(Schema.Array(Comment)),
|
|
64
84
|
});
|
|
65
85
|
export const TranscriptRow = Schema.Struct({
|
|
66
86
|
sequence: TranscriptSequence,
|
|
@@ -69,31 +89,36 @@ export const TranscriptRow = Schema.Struct({
|
|
|
69
89
|
envelope: TranscriptEntry.fields.envelope,
|
|
70
90
|
receivedAt: Schema.DateTimeUtcFromString,
|
|
71
91
|
});
|
|
72
|
-
const RecoverableRunRow = Schema.Struct({
|
|
73
|
-
...EventRouteRow.fields,
|
|
74
|
-
runId: RunId,
|
|
75
|
-
state: RunState.RunState,
|
|
76
|
-
});
|
|
77
92
|
const RunIdRow = Schema.Struct({ runId: RunId });
|
|
78
93
|
const DiscardRow = Schema.Struct({ reason: IgnoreReason });
|
|
79
|
-
|
|
94
|
+
const ProjectionRevisionRow = Schema.Struct({ revision: ProjectionRevision });
|
|
95
|
+
const RunEventRow = Schema.Struct({
|
|
80
96
|
runId: RunId,
|
|
81
|
-
|
|
97
|
+
eventId: EventId,
|
|
98
|
+
dedupKey: DedupKey,
|
|
99
|
+
payload: Schema.Json,
|
|
100
|
+
receivedAt: Schema.DateTimeUtcFromString,
|
|
82
101
|
});
|
|
83
|
-
const
|
|
102
|
+
const ReopeningRow = Schema.Struct({ ...EventRouteRow.fields, reopening: Schema.Int });
|
|
103
|
+
const ReopenedEventRow = Schema.Struct({ eventId: EventId, dedupKey: DedupKey });
|
|
84
104
|
export const decodeEventRoutes = Schema.decodeUnknownEffect(Schema.Array(EventRouteRow));
|
|
105
|
+
export const decodeReopenings = Schema.decodeUnknownEffect(Schema.Array(ReopeningRow));
|
|
106
|
+
export const decodeReopenedEvents = Schema.decodeUnknownEffect(Schema.Array(ReopenedEventRow));
|
|
85
107
|
export const decodeRunRows = Schema.decodeUnknownEffect(Schema.Array(RunRow));
|
|
108
|
+
export const decodeRunEventRows = Schema.decodeUnknownEffect(Schema.Array(RunEventRow));
|
|
86
109
|
export const decodeAttemptRows = Schema.decodeUnknownEffect(Schema.Array(AttemptRow));
|
|
87
|
-
export const decodeRecoverableRuns = Schema.decodeUnknownEffect(Schema.Array(RecoverableRunRow));
|
|
88
110
|
export const decodeRunIds = Schema.decodeUnknownEffect(Schema.Array(RunIdRow));
|
|
89
111
|
export const decodeDiscards = Schema.decodeUnknownEffect(Schema.Array(DiscardRow));
|
|
90
|
-
export const decodeWorkflowCommands = Schema.decodeUnknownEffect(Schema.Array(WorkflowCommandRow));
|
|
91
112
|
export const decodeProjectionRevision = Schema.decodeUnknownEffect(Schema.Array(ProjectionRevisionRow));
|
|
92
113
|
export const decodeTranscriptRows = Schema.decodeUnknownEffect(Schema.Array(TranscriptRow));
|
|
93
114
|
export const encodePayload = Schema.encodeSync(Schema.Json);
|
|
94
115
|
export const encodeDateTime = Schema.encodeSync(Schema.DateTimeUtcFromString);
|
|
95
116
|
export const encodeRunState = Schema.encodeSync(RunState.RunState);
|
|
96
117
|
export const encodeOutcome = Schema.encodeSync(AttemptOutcome);
|
|
118
|
+
export const encodeSalvage = Schema.encodeSync(AttemptSalvage);
|
|
119
|
+
export const encodeComments = Schema.encodeSync(Schema.Array(Comment));
|
|
120
|
+
export const encodeAttemptStart = Schema.encodeSync(AttemptStart);
|
|
121
|
+
export const decodeNextStarts = Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({ nextStart: Schema.NullOr(OperatorRetryStart) })));
|
|
97
122
|
export const encodeStepResult = Schema.encodeSync(StepResult);
|
|
98
123
|
export const encodeEnvelope = Schema.encodeSync(AttemptChannel.Envelope);
|
|
99
124
|
export const encodeAgent = Schema.encodeSync(Agent);
|
|
@@ -106,12 +131,14 @@ export const eventFromRow = (row) => new Event({
|
|
|
106
131
|
payload: row.payload,
|
|
107
132
|
receivedAt: row.receivedAt,
|
|
108
133
|
});
|
|
134
|
+
export const runEventFromRow = (row) => new RunEvent({ runId: row.runId, event: eventFromRow(row) });
|
|
109
135
|
export const submissionFromRow = (row) => new Submission({
|
|
110
136
|
event: eventFromRow(row),
|
|
111
137
|
itemKey: row.itemKey,
|
|
112
138
|
loop: row.loop,
|
|
113
139
|
step: row.step,
|
|
114
140
|
approval: row.approval,
|
|
141
|
+
permissions: row.permissions,
|
|
115
142
|
cycleLimit: Option.fromNullishOr(row.cycleLimit),
|
|
116
143
|
cycleGeneration: row.cycleGeneration,
|
|
117
144
|
repository: row.repository,
|
|
@@ -127,6 +154,11 @@ export const runFromRow = (row) => new Run({
|
|
|
127
154
|
state: row.state,
|
|
128
155
|
openedAt: row.openedAt,
|
|
129
156
|
});
|
|
157
|
+
export const approvalFromRow = (row) => Option.map(Option.fromNullishOr(row.approvedAt), (approvedAt) => new RunApproval({
|
|
158
|
+
approvedAt,
|
|
159
|
+
source: Option.map(Option.fromNullishOr(row.approvalChannel), (channel) => new ApprovalSource({ channel, approver: Option.fromNullishOr(row.approver) })),
|
|
160
|
+
}));
|
|
161
|
+
export const runAgainFromRow = (row) => Option.map(Option.fromNullishOr(row.againFrom), (from) => new RunAgain({ from, requestedBy: Option.fromNullishOr(row.againRequestedBy) }));
|
|
130
162
|
export const stepFromRow = (row) => new Step({
|
|
131
163
|
runId: row.runId,
|
|
132
164
|
name: row.stepName,
|
|
@@ -139,15 +171,27 @@ export const attemptFromRow = (row) => new Attempt({
|
|
|
139
171
|
worker: row.worker,
|
|
140
172
|
number: row.number,
|
|
141
173
|
brain: row.brain,
|
|
174
|
+
task: row.task,
|
|
175
|
+
agent: row.agent,
|
|
176
|
+
operatorIntervened: row.operatorIntervened,
|
|
142
177
|
parentModel: Option.fromNullishOr(row.parentModel),
|
|
143
178
|
startedAt: row.startedAt,
|
|
144
179
|
outcome: Option.fromNullishOr(row.outcome),
|
|
180
|
+
endedAt: Option.fromNullishOr(row.endedAt),
|
|
181
|
+
salvage: Option.fromNullishOr(row.salvage),
|
|
182
|
+
start: Option.fromNullishOr(row.start),
|
|
183
|
+
reattachedAt: Option.fromNullishOr(row.reattachedAt),
|
|
184
|
+
comments: row.comments ?? [],
|
|
145
185
|
});
|
|
146
186
|
export const runSummaryFromRow = (row, storedAttempts) => new RunSummary({
|
|
147
187
|
itemKey: row.itemKey,
|
|
148
188
|
run: runFromRow(row),
|
|
149
189
|
step: stepFromRow(row),
|
|
150
190
|
attempts: storedAttempts.map(attemptFromRow),
|
|
191
|
+
resolvedFailureAttemptId: Option.fromNullishOr(row.resolvedFailureAttemptId),
|
|
192
|
+
closedAt: Option.fromNullishOr(row.closedAt),
|
|
193
|
+
approval: approvalFromRow(row),
|
|
194
|
+
runAgain: runAgainFromRow(row),
|
|
151
195
|
repository: row.repository,
|
|
152
196
|
task: row.task,
|
|
153
197
|
agent: row.agent,
|
package/dist/store/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/store/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/store/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type DateTime, Effect, Schema } from "effect";
|
|
2
|
+
import type { RunDatabaseClient } from "../database/database.ts";
|
|
3
|
+
import { WorkerAttempts } from "../run-reader/model.ts";
|
|
4
|
+
/** Returns the per-Worker leftover queries that run on the caller's transaction. */
|
|
5
|
+
export declare const leftoverQueries: (database: RunDatabaseClient) => {
|
|
6
|
+
readonly attemptCountsByWorker: () => Effect.Effect<readonly WorkerAttempts[], import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
7
|
+
readonly openAttempts: (worker: string & import("effect/Brand").Brand<"WorkerName">) => Effect.Effect<number, import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
8
|
+
readonly discardLeftovers: (worker: string & import("effect/Brand").Brand<"WorkerName">, discardedAt: DateTime.Utc) => Effect.Effect<number, import("drizzle-orm/effect-core").EffectDrizzleQueryError, never>;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=leftovers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.d.ts","sourceRoot":"","sources":["../../src/store/leftovers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAQxD,oFAAoF;AACpF,eAAO,MAAM,eAAe,aAAc,iBAAiB;;;;CAqC1D,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { and, asc, eq, isNull, sql } from "drizzle-orm";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
3
|
+
import { attempts } from "../database/schema.js";
|
|
4
|
+
import { WorkerAttempts } from "../run-reader/model.js";
|
|
5
|
+
import { encodeDateTime } from "./codec.js";
|
|
6
|
+
// Startup reconciliation visits an Attempt until its leftovers are discarded.
|
|
7
|
+
const tracked = isNull(attempts.leftoversDiscardedAt);
|
|
8
|
+
// An Attempt without an outcome is open.
|
|
9
|
+
const open = isNull(attempts.outcomeJson);
|
|
10
|
+
/** Returns the per-Worker leftover queries that run on the caller's transaction. */
|
|
11
|
+
export const leftoverQueries = (database) => {
|
|
12
|
+
const attemptCountsByWorker = Effect.fn("RunStoreQueries.attemptCountsByWorker")(function* () {
|
|
13
|
+
const rows = yield* database
|
|
14
|
+
.select({
|
|
15
|
+
worker: attempts.workerName,
|
|
16
|
+
attempts: sql `count(*)`,
|
|
17
|
+
running: sql `sum(case when ${open} then 1 else 0 end)`,
|
|
18
|
+
})
|
|
19
|
+
.from(attempts)
|
|
20
|
+
.where(tracked)
|
|
21
|
+
.groupBy(attempts.workerName)
|
|
22
|
+
.orderBy(asc(attempts.workerName))
|
|
23
|
+
.execute();
|
|
24
|
+
return yield* Schema.decodeUnknownEffect(Schema.Array(WorkerAttempts))(rows);
|
|
25
|
+
});
|
|
26
|
+
/** Returns the number of open tracked Attempts on `worker`. */
|
|
27
|
+
const openAttempts = Effect.fn("RunStoreQueries.openAttempts")(function* (worker) {
|
|
28
|
+
const counted = yield* attemptCountsByWorker();
|
|
29
|
+
return counted.find((count) => count.worker === worker)?.running ?? 0;
|
|
30
|
+
});
|
|
31
|
+
/** Stops tracking every Attempt on `worker` and returns the number marked. */
|
|
32
|
+
const discardLeftovers = Effect.fn("RunStoreQueries.discardLeftovers")(function* (worker, discardedAt) {
|
|
33
|
+
const discarded = yield* database
|
|
34
|
+
.update(attempts)
|
|
35
|
+
.set({ leftoversDiscardedAt: encodeDateTime(discardedAt) })
|
|
36
|
+
.where(and(eq(attempts.workerName, worker), tracked))
|
|
37
|
+
.returning({ attemptId: attempts.attemptId })
|
|
38
|
+
.execute();
|
|
39
|
+
return discarded.length;
|
|
40
|
+
});
|
|
41
|
+
return { attemptCountsByWorker, openAttempts, discardLeftovers };
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=leftovers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leftovers.js","sourceRoot":"","sources":["../../src/store/leftovers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAiB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,8EAA8E;AAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACtD,yCAAyC;AACzC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE1C,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAA2B,EAAE,EAAE;IAC7D,MAAM,qBAAqB,GAAG,MAAM,CAAC,EAAE,CAAC,uCAAuC,CAAC,CAAC,QAAQ,CAAC;QACxF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ;aACzB,MAAM,CAAC;YACN,MAAM,EAAE,QAAQ,CAAC,UAAU;YAC3B,QAAQ,EAAE,GAAG,CAAQ,UAAU;YAC/B,OAAO,EAAE,GAAG,CAAQ,iBAAiB,IAAI,qBAAqB;SAC/D,CAAC;aACD,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,OAAO,CAAC;aACd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;aAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;aACjC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAkB;QAC1F,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;QAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EAC9E,MAAkB,EAClB,WAAyB;QAEzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,QAAQ;aAC9B,MAAM,CAAC,QAAQ,CAAC;aAChB,GAAG,CAAC,EAAE,oBAAoB,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;aAC1D,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;aACpD,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;aAC5C,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAW,CAAC;AAC5E,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effect, Option, Schema } from "effect";
|
|
2
|
+
import type { RunDatabaseClient } from "../database/database.ts";
|
|
3
|
+
import type { PreviousSighting, Suppression } from "../engine/lifecycle.ts";
|
|
4
|
+
import { LoopSighting } from "../run-reader/model.ts";
|
|
5
|
+
/** Returns the Loop sighting and suppression queries that run on the caller's transaction. */
|
|
6
|
+
export declare const loopItemQueries: (database: RunDatabaseClient) => {
|
|
7
|
+
readonly sighted: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">, eventId: string & import("effect/Brand").Brand<"EventId">) => Effect.Effect<PreviousSighting, import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
8
|
+
readonly unmatched: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">) => Effect.Effect<void, import("drizzle-orm/effect-core").EffectDrizzleQueryError, never>;
|
|
9
|
+
readonly suppression: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">) => Effect.Effect<Option.Option<Suppression>, import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
10
|
+
readonly startSuppression: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">, runId: string & import("effect/Brand").Brand<"RunId">, opened: string & import("effect/Brand").Brand<"EventId">, queued: Option.Option<string & import("effect/Brand").Brand<"EventId">>) => Effect.Effect<boolean, import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
11
|
+
readonly suppressFrom: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">, eventId: string & import("effect/Brand").Brand<"EventId">) => Effect.Effect<void, import("drizzle-orm/effect-core").EffectDrizzleQueryError, never>;
|
|
12
|
+
readonly lift: (loop: string & import("effect/Brand").Brand<"LoopName">, itemKey: string & import("effect/Brand").Brand<"ItemKey">) => Effect.Effect<void, import("drizzle-orm/effect-core").EffectDrizzleQueryError, never>;
|
|
13
|
+
readonly liftRun: (runId: string & import("effect/Brand").Brand<"RunId">) => Effect.Effect<boolean, import("drizzle-orm/effect-core").EffectDrizzleQueryError, never>;
|
|
14
|
+
readonly sightings: (itemKeys: readonly (string & import("effect/Brand").Brand<"ItemKey">)[]) => Effect.Effect<LoopSighting[], import("drizzle-orm/effect-core").EffectDrizzleQueryError | Schema.SchemaError, never>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=loop-items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-items.d.ts","sourceRoot":"","sources":["../../src/store/loop-items.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAyBtD,8FAA8F;AAC9F,eAAO,MAAM,eAAe,aAAc,iBAAiB;;;;;;;;;CAyM1D,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { EventId } from "@usine/core/event";
|
|
2
|
+
import { ItemKey } from "@usine/core/item";
|
|
3
|
+
import { LoopName } from "@usine/core/loop";
|
|
4
|
+
import { RunId } from "@usine/core/run";
|
|
5
|
+
import { and, desc, eq, inArray, isNotNull } from "drizzle-orm";
|
|
6
|
+
import { Array as EffectArray, Effect, Option, Schema } from "effect";
|
|
7
|
+
import { loopItems, runs, triggerEvents } from "../database/schema.js";
|
|
8
|
+
import { LoopSighting } from "../run-reader/model.js";
|
|
9
|
+
const LoopItemRow = Schema.Struct({
|
|
10
|
+
observedEventId: Schema.NullOr(EventId),
|
|
11
|
+
suppressedByRunId: Schema.NullOr(RunId),
|
|
12
|
+
suppressedEventId: Schema.NullOr(EventId),
|
|
13
|
+
});
|
|
14
|
+
const decodeLoopItems = Schema.decodeUnknownEffect(Schema.Array(LoopItemRow));
|
|
15
|
+
const decodeSightingRows = Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({
|
|
16
|
+
loop: LoopName,
|
|
17
|
+
itemKey: ItemKey,
|
|
18
|
+
observedEventId: Schema.NullOr(EventId),
|
|
19
|
+
suppressedByRunId: Schema.NullOr(RunId),
|
|
20
|
+
})));
|
|
21
|
+
const decodeReopeningRows = Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({ eventId: EventId, reopensEventId: EventId })));
|
|
22
|
+
const decodeOwnerRows = Schema.decodeUnknownEffect(Schema.Array(Schema.Struct({ eventId: EventId, runId: RunId })));
|
|
23
|
+
/** Returns the Loop sighting and suppression queries that run on the caller's transaction. */
|
|
24
|
+
export const loopItemQueries = (database) => {
|
|
25
|
+
const where = (loop, itemKey) => and(eq(loopItems.loopName, loop), eq(loopItems.itemKey, itemKey));
|
|
26
|
+
const row = Effect.fn("LoopItems.row")(function* (loop, itemKey) {
|
|
27
|
+
const rows = yield* decodeLoopItems(yield* database
|
|
28
|
+
.select({
|
|
29
|
+
observedEventId: loopItems.observedEventId,
|
|
30
|
+
suppressedByRunId: loopItems.suppressedByRunId,
|
|
31
|
+
suppressedEventId: loopItems.suppressedEventId,
|
|
32
|
+
})
|
|
33
|
+
.from(loopItems)
|
|
34
|
+
.where(where(loop, itemKey))
|
|
35
|
+
.execute());
|
|
36
|
+
return Option.fromNullishOr(rows[0]);
|
|
37
|
+
});
|
|
38
|
+
/** Records a sighting of `eventId` and returns the Loop's previous sighting. */
|
|
39
|
+
const sighted = Effect.fn("LoopItems.sighted")(function* (loop, itemKey, eventId) {
|
|
40
|
+
const before = Option.map(yield* row(loop, itemKey), ({ observedEventId }) => Option.fromNullishOr(observedEventId));
|
|
41
|
+
yield* database
|
|
42
|
+
.insert(loopItems)
|
|
43
|
+
.values({ loopName: loop, itemKey, observedEventId: eventId })
|
|
44
|
+
.onConflictDoUpdate({
|
|
45
|
+
target: [loopItems.loopName, loopItems.itemKey],
|
|
46
|
+
set: { observedEventId: eventId },
|
|
47
|
+
})
|
|
48
|
+
.execute();
|
|
49
|
+
return before;
|
|
50
|
+
});
|
|
51
|
+
/** Records a non-matching sighting and lifts any suppression; does nothing if the Loop has no row. */
|
|
52
|
+
const unmatched = Effect.fn("LoopItems.unmatched")(function* (loop, itemKey) {
|
|
53
|
+
yield* database
|
|
54
|
+
.update(loopItems)
|
|
55
|
+
.set({ observedEventId: null, suppressedByRunId: null, suppressedEventId: null })
|
|
56
|
+
.where(where(loop, itemKey))
|
|
57
|
+
.execute();
|
|
58
|
+
});
|
|
59
|
+
/** Returns the Loop's suppression of the Item, or `None`. */
|
|
60
|
+
const suppression = Effect.fn("LoopItems.suppression")(function* (loop, itemKey) {
|
|
61
|
+
return Option.flatMap(yield* row(loop, itemKey), ({ suppressedByRunId, suppressedEventId }) => suppressedByRunId === null
|
|
62
|
+
? Option.none()
|
|
63
|
+
: Option.some({
|
|
64
|
+
runId: suppressedByRunId,
|
|
65
|
+
suppressedEventId: Option.fromNullishOr(suppressedEventId),
|
|
66
|
+
}));
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Starts the suppression of `runId` unless the Loop's last sighting was a non-match, and
|
|
70
|
+
* returns whether it started. `opened` is recorded as the sighting if the Loop has no row;
|
|
71
|
+
* `queued` is the newest queued Event, already the state after the stop.
|
|
72
|
+
*/
|
|
73
|
+
const startSuppression = Effect.fn("LoopItems.startSuppression")(function* (loop, itemKey, runId, opened, queued) {
|
|
74
|
+
const current = yield* row(loop, itemKey);
|
|
75
|
+
if (Option.exists(current, ({ observedEventId }) => observedEventId === null))
|
|
76
|
+
return false;
|
|
77
|
+
const suppressedEventId = Option.getOrNull(queued);
|
|
78
|
+
yield* database
|
|
79
|
+
.insert(loopItems)
|
|
80
|
+
.values({
|
|
81
|
+
loopName: loop,
|
|
82
|
+
itemKey,
|
|
83
|
+
observedEventId: opened,
|
|
84
|
+
suppressedByRunId: runId,
|
|
85
|
+
suppressedEventId,
|
|
86
|
+
})
|
|
87
|
+
.onConflictDoUpdate({
|
|
88
|
+
target: [loopItems.loopName, loopItems.itemKey],
|
|
89
|
+
set: { suppressedByRunId: runId, suppressedEventId },
|
|
90
|
+
})
|
|
91
|
+
.execute();
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
/** Records `eventId` as the Item's state after the stop. */
|
|
95
|
+
const suppressFrom = Effect.fn("LoopItems.suppressFrom")(function* (loop, itemKey, eventId) {
|
|
96
|
+
yield* database
|
|
97
|
+
.update(loopItems)
|
|
98
|
+
.set({ suppressedEventId: eventId })
|
|
99
|
+
.where(and(where(loop, itemKey), isNotNull(loopItems.suppressedByRunId)))
|
|
100
|
+
.execute();
|
|
101
|
+
});
|
|
102
|
+
const lift = Effect.fn("LoopItems.lift")(function* (loop, itemKey) {
|
|
103
|
+
yield* database
|
|
104
|
+
.update(loopItems)
|
|
105
|
+
.set({ suppressedByRunId: null, suppressedEventId: null })
|
|
106
|
+
.where(where(loop, itemKey))
|
|
107
|
+
.execute();
|
|
108
|
+
});
|
|
109
|
+
/** Lifts the suppression of `runId` on any Loop and returns whether there was one. */
|
|
110
|
+
const liftRun = Effect.fn("LoopItems.liftRun")(function* (runId) {
|
|
111
|
+
const lifted = yield* database
|
|
112
|
+
.update(loopItems)
|
|
113
|
+
.set({ suppressedByRunId: null, suppressedEventId: null })
|
|
114
|
+
.where(eq(loopItems.suppressedByRunId, runId))
|
|
115
|
+
.returning({ loopName: loopItems.loopName })
|
|
116
|
+
.execute();
|
|
117
|
+
return lifted.length > 0;
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Returns each Loop's last sighting of the Items in `itemKeys`, with the newest reopening or
|
|
121
|
+
* run-again Event for the submitted Event.
|
|
122
|
+
*/
|
|
123
|
+
const sightings = Effect.fn("LoopItems.sightings")(function* (itemKeys) {
|
|
124
|
+
const keys = [...new Set(itemKeys)];
|
|
125
|
+
if (keys.length === 0)
|
|
126
|
+
return [];
|
|
127
|
+
// Chunks keep each read below the driver's bind-parameter limit.
|
|
128
|
+
const rows = (yield* Effect.forEach(EffectArray.chunksOf(keys, 100), (chunk) => database
|
|
129
|
+
.select({
|
|
130
|
+
loop: loopItems.loopName,
|
|
131
|
+
itemKey: loopItems.itemKey,
|
|
132
|
+
observedEventId: loopItems.observedEventId,
|
|
133
|
+
suppressedByRunId: loopItems.suppressedByRunId,
|
|
134
|
+
})
|
|
135
|
+
.from(loopItems)
|
|
136
|
+
.where(inArray(loopItems.itemKey, chunk))
|
|
137
|
+
.execute()
|
|
138
|
+
.pipe(Effect.flatMap(decodeSightingRows)))).flat();
|
|
139
|
+
const observed = [
|
|
140
|
+
...new Set(rows.flatMap(({ observedEventId }) => (observedEventId === null ? [] : [observedEventId]))),
|
|
141
|
+
];
|
|
142
|
+
const reopenings = (yield* Effect.forEach(EffectArray.chunksOf(observed, 100), (chunk) => database
|
|
143
|
+
.select({ eventId: triggerEvents.eventId, reopensEventId: triggerEvents.reopensEventId })
|
|
144
|
+
.from(triggerEvents)
|
|
145
|
+
.where(inArray(triggerEvents.reopensEventId, chunk))
|
|
146
|
+
.orderBy(desc(triggerEvents.reopening))
|
|
147
|
+
.execute()
|
|
148
|
+
.pipe(Effect.flatMap(decodeReopeningRows)))).flat();
|
|
149
|
+
const newest = new Map();
|
|
150
|
+
for (const { eventId, reopensEventId } of reopenings) {
|
|
151
|
+
if (!newest.has(reopensEventId))
|
|
152
|
+
newest.set(reopensEventId, eventId);
|
|
153
|
+
}
|
|
154
|
+
const current = (eventId) => newest.get(eventId) ?? eventId;
|
|
155
|
+
const owners = new Map((yield* Effect.forEach(EffectArray.chunksOf(observed.map(current), 100), (chunk) => database
|
|
156
|
+
.select({ eventId: runs.eventId, runId: runs.runId })
|
|
157
|
+
.from(runs)
|
|
158
|
+
.where(inArray(runs.eventId, chunk))
|
|
159
|
+
.execute()
|
|
160
|
+
.pipe(Effect.flatMap(decodeOwnerRows))))
|
|
161
|
+
.flat()
|
|
162
|
+
.map(({ eventId, runId }) => [eventId, runId]));
|
|
163
|
+
return rows.map(({ loop, itemKey, observedEventId, suppressedByRunId }) => {
|
|
164
|
+
const event = Option.map(Option.fromNullishOr(observedEventId), current);
|
|
165
|
+
return new LoopSighting({
|
|
166
|
+
loop,
|
|
167
|
+
itemKey,
|
|
168
|
+
event,
|
|
169
|
+
run: Option.flatMap(event, (eventId) => Option.fromNullishOr(owners.get(eventId))),
|
|
170
|
+
suppressedBy: Option.fromNullishOr(suppressedByRunId),
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
sighted,
|
|
176
|
+
unmatched,
|
|
177
|
+
suppression,
|
|
178
|
+
startSuppression,
|
|
179
|
+
suppressFrom,
|
|
180
|
+
lift,
|
|
181
|
+
liftRun,
|
|
182
|
+
sightings,
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=loop-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-items.js","sourceRoot":"","sources":["../../src/store/loop-items.ts"],"names":[],"mappings":"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"}
|