@aicalas/loopy 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.
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/adapters.d.ts +111 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +27 -0
- package/dist/adapters.js.map +1 -0
- package/dist/attention/github.d.ts +57 -0
- package/dist/attention/github.d.ts.map +1 -0
- package/dist/attention/github.js +162 -0
- package/dist/attention/github.js.map +1 -0
- package/dist/authoring/attention-config.d.ts +16 -0
- package/dist/authoring/attention-config.d.ts.map +1 -0
- package/dist/authoring/attention-config.js +19 -0
- package/dist/authoring/attention-config.js.map +1 -0
- package/dist/authoring/channel-config.d.ts +16 -0
- package/dist/authoring/channel-config.d.ts.map +1 -0
- package/dist/authoring/channel-config.js +16 -0
- package/dist/authoring/channel-config.js.map +1 -0
- package/dist/authoring/define.d.ts +13 -0
- package/dist/authoring/define.d.ts.map +1 -0
- package/dist/authoring/define.js +13 -0
- package/dist/authoring/define.js.map +1 -0
- package/dist/authoring/effect-config.d.ts +16 -0
- package/dist/authoring/effect-config.d.ts.map +1 -0
- package/dist/authoring/effect-config.js +17 -0
- package/dist/authoring/effect-config.js.map +1 -0
- package/dist/authoring/harness-config.d.ts +30 -0
- package/dist/authoring/harness-config.d.ts.map +1 -0
- package/dist/authoring/harness-config.js +36 -0
- package/dist/authoring/harness-config.js.map +1 -0
- package/dist/authoring/index.d.ts +10 -0
- package/dist/authoring/index.d.ts.map +1 -0
- package/dist/authoring/index.js +9 -0
- package/dist/authoring/index.js.map +1 -0
- package/dist/authoring/schema.d.ts +9 -0
- package/dist/authoring/schema.d.ts.map +1 -0
- package/dist/authoring/schema.js +28 -0
- package/dist/authoring/schema.js.map +1 -0
- package/dist/authoring/types.d.ts +115 -0
- package/dist/authoring/types.d.ts.map +1 -0
- package/dist/authoring/types.js +2 -0
- package/dist/authoring/types.js.map +1 -0
- package/dist/authoring/watcher-config.d.ts +33 -0
- package/dist/authoring/watcher-config.d.ts.map +1 -0
- package/dist/authoring/watcher-config.js +61 -0
- package/dist/authoring/watcher-config.js.map +1 -0
- package/dist/build/discover.d.ts +34 -0
- package/dist/build/discover.d.ts.map +1 -0
- package/dist/build/discover.js +165 -0
- package/dist/build/discover.js.map +1 -0
- package/dist/build/identity.d.ts +9 -0
- package/dist/build/identity.d.ts.map +1 -0
- package/dist/build/identity.js +0 -0
- package/dist/build/identity.js.map +1 -0
- package/dist/channels/github.d.ts +14 -0
- package/dist/channels/github.d.ts.map +1 -0
- package/dist/channels/github.js +118 -0
- package/dist/channels/github.js.map +1 -0
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +2 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli-help.d.ts +23 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +186 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli.d.ts +37 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +385 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +71 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +426 -0
- package/dist/config.js.map +1 -0
- package/dist/core/calls.d.ts +67 -0
- package/dist/core/calls.d.ts.map +1 -0
- package/dist/core/calls.js +109 -0
- package/dist/core/calls.js.map +1 -0
- package/dist/core/identifiers.d.ts +24 -0
- package/dist/core/identifiers.d.ts.map +1 -0
- package/dist/core/identifiers.js +129 -0
- package/dist/core/identifiers.js.map +1 -0
- package/dist/core/prompt.d.ts +5 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +47 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/reconcile.d.ts +27 -0
- package/dist/core/reconcile.d.ts.map +1 -0
- package/dist/core/reconcile.js +36 -0
- package/dist/core/reconcile.js.map +1 -0
- package/dist/core/wire.d.ts +332 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/core/wire.js +543 -0
- package/dist/core/wire.js.map +1 -0
- package/dist/emitters/github.d.ts +15 -0
- package/dist/emitters/github.d.ts.map +1 -0
- package/dist/emitters/github.js +43 -0
- package/dist/emitters/github.js.map +1 -0
- package/dist/emitters/index.d.ts +2 -0
- package/dist/emitters/index.d.ts.map +1 -0
- package/dist/emitters/index.js +2 -0
- package/dist/emitters/index.js.map +1 -0
- package/dist/git.d.ts +17 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +122 -0
- package/dist/git.js.map +1 -0
- package/dist/github/client.d.ts +53 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +169 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/trigger.d.ts +12 -0
- package/dist/github/trigger.d.ts.map +1 -0
- package/dist/github/trigger.js +21 -0
- package/dist/github/trigger.js.map +1 -0
- package/dist/github/writes.d.ts +4 -0
- package/dist/github/writes.d.ts.map +1 -0
- package/dist/github/writes.js +21 -0
- package/dist/github/writes.js.map +1 -0
- package/dist/harnesses/base.d.ts +41 -0
- package/dist/harnesses/base.d.ts.map +1 -0
- package/dist/harnesses/base.js +182 -0
- package/dist/harnesses/base.js.map +1 -0
- package/dist/harnesses/claude-executable.d.ts +42 -0
- package/dist/harnesses/claude-executable.d.ts.map +1 -0
- package/dist/harnesses/claude-executable.js +138 -0
- package/dist/harnesses/claude-executable.js.map +1 -0
- package/dist/harnesses/claude.d.ts +35 -0
- package/dist/harnesses/claude.d.ts.map +1 -0
- package/dist/harnesses/claude.js +160 -0
- package/dist/harnesses/claude.js.map +1 -0
- package/dist/harnesses/codex.d.ts +40 -0
- package/dist/harnesses/codex.d.ts.map +1 -0
- package/dist/harnesses/codex.js +118 -0
- package/dist/harnesses/codex.js.map +1 -0
- package/dist/harnesses/index.d.ts +2 -0
- package/dist/harnesses/index.d.ts.map +1 -0
- package/dist/harnesses/index.js +2 -0
- package/dist/harnesses/index.js.map +1 -0
- package/dist/harnesses/opencode.d.ts +33 -0
- package/dist/harnesses/opencode.d.ts.map +1 -0
- package/dist/harnesses/opencode.js +203 -0
- package/dist/harnesses/opencode.js.map +1 -0
- package/dist/identifiers.d.ts +26 -0
- package/dist/identifiers.d.ts.map +1 -0
- package/dist/identifiers.js +62 -0
- package/dist/identifiers.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +10 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +44 -0
- package/dist/log.js.map +1 -0
- package/dist/settings.d.ts +43 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +128 -0
- package/dist/settings.js.map +1 -0
- package/dist/temporal/activities.d.ts +57 -0
- package/dist/temporal/activities.d.ts.map +1 -0
- package/dist/temporal/activities.js +366 -0
- package/dist/temporal/activities.js.map +1 -0
- package/dist/temporal/answers.d.ts +48 -0
- package/dist/temporal/answers.d.ts.map +1 -0
- package/dist/temporal/answers.js +78 -0
- package/dist/temporal/answers.js.map +1 -0
- package/dist/temporal/client.d.ts +13 -0
- package/dist/temporal/client.d.ts.map +1 -0
- package/dist/temporal/client.js +20 -0
- package/dist/temporal/client.js.map +1 -0
- package/dist/temporal/contracts.d.ts +19 -0
- package/dist/temporal/contracts.d.ts.map +1 -0
- package/dist/temporal/contracts.js +22 -0
- package/dist/temporal/contracts.js.map +1 -0
- package/dist/temporal/drain.d.ts +19 -0
- package/dist/temporal/drain.d.ts.map +1 -0
- package/dist/temporal/drain.js +109 -0
- package/dist/temporal/drain.js.map +1 -0
- package/dist/temporal/executions.d.ts +18 -0
- package/dist/temporal/executions.d.ts.map +1 -0
- package/dist/temporal/executions.js +15 -0
- package/dist/temporal/executions.js.map +1 -0
- package/dist/temporal/handle.d.ts +39 -0
- package/dist/temporal/handle.d.ts.map +1 -0
- package/dist/temporal/handle.js +95 -0
- package/dist/temporal/handle.js.map +1 -0
- package/dist/temporal/history.d.ts +75 -0
- package/dist/temporal/history.d.ts.map +1 -0
- package/dist/temporal/history.js +310 -0
- package/dist/temporal/history.js.map +1 -0
- package/dist/temporal/observe.d.ts +85 -0
- package/dist/temporal/observe.d.ts.map +1 -0
- package/dist/temporal/observe.js +110 -0
- package/dist/temporal/observe.js.map +1 -0
- package/dist/temporal/schedules.d.ts +26 -0
- package/dist/temporal/schedules.d.ts.map +1 -0
- package/dist/temporal/schedules.js +200 -0
- package/dist/temporal/schedules.js.map +1 -0
- package/dist/temporal/status.d.ts +63 -0
- package/dist/temporal/status.d.ts.map +1 -0
- package/dist/temporal/status.js +153 -0
- package/dist/temporal/status.js.map +1 -0
- package/dist/temporal/stuck.d.ts +58 -0
- package/dist/temporal/stuck.d.ts.map +1 -0
- package/dist/temporal/stuck.js +53 -0
- package/dist/temporal/stuck.js.map +1 -0
- package/dist/temporal/supervisor.d.ts +11 -0
- package/dist/temporal/supervisor.d.ts.map +1 -0
- package/dist/temporal/supervisor.js +506 -0
- package/dist/temporal/supervisor.js.map +1 -0
- package/dist/temporal/worker.d.ts +21 -0
- package/dist/temporal/worker.d.ts.map +1 -0
- package/dist/temporal/worker.js +82 -0
- package/dist/temporal/worker.js.map +1 -0
- package/dist/temporal/workflow-bundle.js +12742 -0
- package/dist/temporal/workflows.d.ts +9 -0
- package/dist/temporal/workflows.d.ts.map +1 -0
- package/dist/temporal/workflows.js +144 -0
- package/dist/temporal/workflows.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/watchers/base.d.ts +4 -0
- package/dist/watchers/base.d.ts.map +1 -0
- package/dist/watchers/base.js +7 -0
- package/dist/watchers/base.js.map +1 -0
- package/dist/watchers/github/client.d.ts +52 -0
- package/dist/watchers/github/client.d.ts.map +1 -0
- package/dist/watchers/github/client.js +165 -0
- package/dist/watchers/github/client.js.map +1 -0
- package/dist/watchers/github/index.d.ts +19 -0
- package/dist/watchers/github/index.d.ts.map +1 -0
- package/dist/watchers/github/index.js +83 -0
- package/dist/watchers/github/index.js.map +1 -0
- package/dist/watchers/index.d.ts +2 -0
- package/dist/watchers/index.d.ts.map +1 -0
- package/dist/watchers/index.js +2 -0
- package/dist/watchers/index.js.map +1 -0
- package/dist/worker-lock.d.ts +11 -0
- package/dist/worker-lock.d.ts.map +1 -0
- package/dist/worker-lock.js +53 -0
- package/dist/worker-lock.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { defaultPayloadConverter } from "@temporalio/common";
|
|
2
|
+
import proto from "@temporalio/proto";
|
|
3
|
+
import { isJsonValue } from "../core/wire.js";
|
|
4
|
+
const ENUMS = proto.temporal.api.enums.v1;
|
|
5
|
+
const ATTRIBUTES_SUFFIX = "EventAttributes";
|
|
6
|
+
/** Workflow Task scheduling machinery: three events per task, none carrying audit information. */
|
|
7
|
+
const MACHINERY_EVENTS = new Set([
|
|
8
|
+
"workflowTaskScheduled",
|
|
9
|
+
"workflowTaskStarted",
|
|
10
|
+
"workflowTaskCompleted",
|
|
11
|
+
]);
|
|
12
|
+
/** Render the Event History of the latest Run behind one Workflow ID. */
|
|
13
|
+
export async function fetchExecutionHistory(client, workflowId) {
|
|
14
|
+
return renderHistory(await client.getHandle(workflowId).fetchHistory());
|
|
15
|
+
}
|
|
16
|
+
export function renderHistory(history) {
|
|
17
|
+
const views = [];
|
|
18
|
+
for (const event of history.events ?? []) {
|
|
19
|
+
const view = renderEvent(event);
|
|
20
|
+
if (view !== undefined)
|
|
21
|
+
views.push(view);
|
|
22
|
+
}
|
|
23
|
+
return views;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An event type this build does not recognise still renders as a bare line — an audit that silently
|
|
27
|
+
* dropped events would read as "nothing happened" exactly when something new did.
|
|
28
|
+
*/
|
|
29
|
+
function renderEvent(event) {
|
|
30
|
+
const attribute = Object.keys(event).find((key) => key.endsWith(ATTRIBUTES_SUFFIX) && event[key] != null);
|
|
31
|
+
if (attribute === undefined)
|
|
32
|
+
return { ...base(event), event: "unrecognized" };
|
|
33
|
+
const name = attribute.slice(0, -ATTRIBUTES_SUFFIX.length);
|
|
34
|
+
if (MACHINERY_EVENTS.has(name))
|
|
35
|
+
return undefined;
|
|
36
|
+
const view = { ...base(event), event: kebab(name) };
|
|
37
|
+
enrich(view, name, event[attribute]);
|
|
38
|
+
return view;
|
|
39
|
+
}
|
|
40
|
+
function enrich(view, name, attributes) {
|
|
41
|
+
switch (name) {
|
|
42
|
+
case "workflowExecutionStarted": {
|
|
43
|
+
const a = attributes;
|
|
44
|
+
setName(view, "workflowType", a.workflowType);
|
|
45
|
+
setAttempt(view, a.attempt);
|
|
46
|
+
const parent = workflowLink(a.parentWorkflowExecution, undefined);
|
|
47
|
+
if (parent !== undefined)
|
|
48
|
+
view.parent = parent;
|
|
49
|
+
decodeValue(view, "input", a.input);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "activityTaskScheduled": {
|
|
53
|
+
const a = attributes;
|
|
54
|
+
if (nonEmpty(a.activityId))
|
|
55
|
+
view.activityId = a.activityId;
|
|
56
|
+
if (a.activityType?.name != null && a.activityType.name !== "") {
|
|
57
|
+
view.activityType = a.activityType.name;
|
|
58
|
+
}
|
|
59
|
+
decodeValue(view, "input", a.input);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "activityTaskStarted": {
|
|
63
|
+
const a = attributes;
|
|
64
|
+
setScheduledEventId(view, a.scheduledEventId);
|
|
65
|
+
setAttempt(view, a.attempt);
|
|
66
|
+
if (a.lastFailure != null)
|
|
67
|
+
view.failure = renderFailure(a.lastFailure);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "activityTaskCompleted": {
|
|
71
|
+
const a = attributes;
|
|
72
|
+
setScheduledEventId(view, a.scheduledEventId);
|
|
73
|
+
decodeValue(view, "result", a.result);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case "activityTaskFailed":
|
|
77
|
+
case "activityTaskTimedOut": {
|
|
78
|
+
const a = attributes;
|
|
79
|
+
setScheduledEventId(view, a.scheduledEventId);
|
|
80
|
+
setFailure(view, a.failure);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case "activityTaskCancelRequested":
|
|
84
|
+
case "activityTaskCanceled": {
|
|
85
|
+
const a = attributes;
|
|
86
|
+
setScheduledEventId(view, a.scheduledEventId);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case "workflowTaskFailed": {
|
|
90
|
+
const a = attributes;
|
|
91
|
+
setCause(view, a.cause, ENUMS.WorkflowTaskFailedCause, "WORKFLOW_TASK_FAILED_CAUSE_");
|
|
92
|
+
setFailure(view, a.failure);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "workflowExecutionUpdateAccepted": {
|
|
96
|
+
const a = attributes;
|
|
97
|
+
const update = {};
|
|
98
|
+
const id = a.acceptedRequest?.meta?.updateId;
|
|
99
|
+
if (nonEmpty(id))
|
|
100
|
+
update.id = id;
|
|
101
|
+
const updateName = a.acceptedRequest?.input?.name;
|
|
102
|
+
if (nonEmpty(updateName))
|
|
103
|
+
update.name = updateName;
|
|
104
|
+
view.update = update;
|
|
105
|
+
decodeValue(view, "input", a.acceptedRequest?.input?.args);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case "workflowExecutionUpdateCompleted": {
|
|
109
|
+
const a = attributes;
|
|
110
|
+
const id = a.meta?.updateId;
|
|
111
|
+
if (nonEmpty(id))
|
|
112
|
+
view.update = { id };
|
|
113
|
+
decodeValue(view, "result", a.outcome?.success);
|
|
114
|
+
setFailure(view, a.outcome?.failure);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case "startChildWorkflowExecutionInitiated": {
|
|
118
|
+
const a = attributes;
|
|
119
|
+
const child = workflowLink({ workflowId: a.workflowId }, a.workflowType);
|
|
120
|
+
if (child !== undefined)
|
|
121
|
+
view.child = child;
|
|
122
|
+
decodeValue(view, "input", a.input);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case "startChildWorkflowExecutionFailed": {
|
|
126
|
+
const a = attributes;
|
|
127
|
+
const child = workflowLink({ workflowId: a.workflowId }, a.workflowType);
|
|
128
|
+
if (child !== undefined)
|
|
129
|
+
view.child = child;
|
|
130
|
+
setCause(view, a.cause, ENUMS.StartChildWorkflowExecutionFailedCause, "START_CHILD_WORKFLOW_EXECUTION_FAILED_CAUSE_");
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case "childWorkflowExecutionStarted":
|
|
134
|
+
case "childWorkflowExecutionCompleted":
|
|
135
|
+
case "childWorkflowExecutionFailed": {
|
|
136
|
+
const a = attributes;
|
|
137
|
+
const child = workflowLink(a.workflowExecution, a.workflowType);
|
|
138
|
+
if (child !== undefined)
|
|
139
|
+
view.child = child;
|
|
140
|
+
decodeValue(view, "result", a.result);
|
|
141
|
+
setFailure(view, a.failure);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case "workflowExecutionCompleted": {
|
|
145
|
+
const a = attributes;
|
|
146
|
+
decodeValue(view, "result", a.result);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case "workflowExecutionFailed": {
|
|
150
|
+
const a = attributes;
|
|
151
|
+
setFailure(view, a.failure);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case "workflowExecutionTerminated": {
|
|
155
|
+
const a = attributes;
|
|
156
|
+
if (nonEmpty(a.reason))
|
|
157
|
+
view.reason = a.reason;
|
|
158
|
+
decodeValue(view, "details", a.details);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case "workflowExecutionCanceled": {
|
|
162
|
+
const a = attributes;
|
|
163
|
+
decodeValue(view, "details", a.details);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case "workflowExecutionContinuedAsNew": {
|
|
167
|
+
const a = attributes;
|
|
168
|
+
if (nonEmpty(a.newExecutionRunId))
|
|
169
|
+
view.newRunId = a.newExecutionRunId;
|
|
170
|
+
decodeValue(view, "input", a.input);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case "workflowExecutionSignaled": {
|
|
174
|
+
const a = attributes;
|
|
175
|
+
if (nonEmpty(a.signalName))
|
|
176
|
+
view.signal = a.signalName;
|
|
177
|
+
decodeValue(view, "input", a.input);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
default:
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function base(event) {
|
|
185
|
+
const view = {};
|
|
186
|
+
const eventId = toInteger(event.eventId);
|
|
187
|
+
if (eventId !== undefined)
|
|
188
|
+
view.eventId = eventId;
|
|
189
|
+
const time = isoTime(event.eventTime);
|
|
190
|
+
if (time !== undefined)
|
|
191
|
+
view.time = time;
|
|
192
|
+
return view;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* A payload the default converter cannot read becomes a note instead of aborting the rendering:
|
|
196
|
+
* one foreign payload must not hide the rest of the history.
|
|
197
|
+
*/
|
|
198
|
+
function decodeValue(view, field, payloads) {
|
|
199
|
+
const entries = payloads?.payloads;
|
|
200
|
+
if (entries == null || entries.length === 0)
|
|
201
|
+
return;
|
|
202
|
+
try {
|
|
203
|
+
const values = entries.map(decodePayload);
|
|
204
|
+
const [first] = values;
|
|
205
|
+
view[field] = values.length === 1 && first !== undefined ? first : values;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
view.note = `payload-undecodable:${message(error)}`;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function decodePayload(payload) {
|
|
212
|
+
const value = defaultPayloadConverter.fromPayload(payload);
|
|
213
|
+
if (!isJsonValue(value))
|
|
214
|
+
throw new Error("payload is not a JSON value");
|
|
215
|
+
return value;
|
|
216
|
+
}
|
|
217
|
+
function renderFailure(failure) {
|
|
218
|
+
const view = {};
|
|
219
|
+
const type = failureType(failure);
|
|
220
|
+
if (type !== undefined)
|
|
221
|
+
view.type = type;
|
|
222
|
+
if (nonEmpty(failure.message))
|
|
223
|
+
view.message = failure.message;
|
|
224
|
+
if (nonEmpty(failure.stackTrace))
|
|
225
|
+
view.stackTrace = failure.stackTrace;
|
|
226
|
+
if (failure.cause != null)
|
|
227
|
+
view.cause = renderFailure(failure.cause);
|
|
228
|
+
return view;
|
|
229
|
+
}
|
|
230
|
+
/** An application failure keeps its declared type; other variants are named by their info field. */
|
|
231
|
+
function failureType(failure) {
|
|
232
|
+
const application = failure.applicationFailureInfo;
|
|
233
|
+
if (application != null) {
|
|
234
|
+
return nonEmpty(application.type) ? application.type : "application-failure";
|
|
235
|
+
}
|
|
236
|
+
const info = Object.keys(failure).find((key) => key.endsWith("FailureInfo") && failure[key] != null);
|
|
237
|
+
return info === undefined ? undefined : kebab(info.slice(0, -"Info".length));
|
|
238
|
+
}
|
|
239
|
+
function setFailure(view, failure) {
|
|
240
|
+
if (failure != null)
|
|
241
|
+
view.failure = renderFailure(failure);
|
|
242
|
+
}
|
|
243
|
+
function setName(view, field, type) {
|
|
244
|
+
if (type?.name != null && type.name !== "")
|
|
245
|
+
view[field] = type.name;
|
|
246
|
+
}
|
|
247
|
+
function setAttempt(view, attempt) {
|
|
248
|
+
if (typeof attempt === "number" && attempt > 0)
|
|
249
|
+
view.attempt = attempt;
|
|
250
|
+
}
|
|
251
|
+
function setScheduledEventId(view, value) {
|
|
252
|
+
const scheduledEventId = toInteger(value);
|
|
253
|
+
if (scheduledEventId !== undefined)
|
|
254
|
+
view.scheduledEventId = scheduledEventId;
|
|
255
|
+
}
|
|
256
|
+
function setCause(view, value, names, prefix) {
|
|
257
|
+
if (value == null || value === 0)
|
|
258
|
+
return;
|
|
259
|
+
const name = typeof value === "string" ? value : names[value];
|
|
260
|
+
// An enum value newer than this build's proto still surfaces, as its number.
|
|
261
|
+
if (name === undefined) {
|
|
262
|
+
view.cause = String(value);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
view.cause = kebab(name.startsWith(prefix) ? name.slice(prefix.length) : name);
|
|
266
|
+
}
|
|
267
|
+
function workflowLink(execution, type) {
|
|
268
|
+
const link = {};
|
|
269
|
+
const workflowId = execution?.workflowId;
|
|
270
|
+
if (nonEmpty(workflowId))
|
|
271
|
+
link.workflowId = workflowId;
|
|
272
|
+
const runId = execution?.runId;
|
|
273
|
+
if (nonEmpty(runId))
|
|
274
|
+
link.runId = runId;
|
|
275
|
+
if (type?.name != null && type.name !== "")
|
|
276
|
+
link.workflowType = type.name;
|
|
277
|
+
return Object.keys(link).length === 0 ? undefined : link;
|
|
278
|
+
}
|
|
279
|
+
function isoTime(timestamp) {
|
|
280
|
+
if (timestamp == null)
|
|
281
|
+
return undefined;
|
|
282
|
+
const seconds = toInteger(timestamp.seconds);
|
|
283
|
+
if (seconds === undefined)
|
|
284
|
+
return undefined;
|
|
285
|
+
return new Date(seconds * 1_000 + Math.floor((timestamp.nanos ?? 0) / 1e6)).toISOString();
|
|
286
|
+
}
|
|
287
|
+
function toInteger(value) {
|
|
288
|
+
if (value == null)
|
|
289
|
+
return undefined;
|
|
290
|
+
if (typeof value === "number")
|
|
291
|
+
return value;
|
|
292
|
+
if (typeof value === "string") {
|
|
293
|
+
const parsed = Number(value);
|
|
294
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
295
|
+
}
|
|
296
|
+
return value.toNumber();
|
|
297
|
+
}
|
|
298
|
+
function nonEmpty(value) {
|
|
299
|
+
return typeof value === "string" && value !== "";
|
|
300
|
+
}
|
|
301
|
+
function kebab(name) {
|
|
302
|
+
return name
|
|
303
|
+
.replaceAll(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
304
|
+
.replaceAll("_", "-")
|
|
305
|
+
.toLowerCase();
|
|
306
|
+
}
|
|
307
|
+
function message(error) {
|
|
308
|
+
return error instanceof Error ? error.message : String(error);
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/temporal/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ChannelAdapterSpec } from "../adapters.js";
|
|
2
|
+
import { type InstanceWorkflowInput, type JsonValue } from "../core/wire.js";
|
|
3
|
+
import { type StatusDescription } from "./status.js";
|
|
4
|
+
/**
|
|
5
|
+
* The client surface the observer needs: list this workflow's open instances, Describe and Query
|
|
6
|
+
* each, deliver an answer as a Workflow Update, and read one history slice. A real `WorkflowClient`
|
|
7
|
+
* satisfies it - including the raw `workflowService` handle, which is used instead of
|
|
8
|
+
* `fetchHistory()` because a stuck Execution's history grows on every failed Workflow Task and the
|
|
9
|
+
* scan only ever needs event one.
|
|
10
|
+
*/
|
|
11
|
+
export interface InstanceObserverClient {
|
|
12
|
+
list(options: {
|
|
13
|
+
query: string;
|
|
14
|
+
}): AsyncIterable<{
|
|
15
|
+
workflowId: string;
|
|
16
|
+
}>;
|
|
17
|
+
getHandle(workflowId: string): InstanceObserverHandle;
|
|
18
|
+
workflowService: {
|
|
19
|
+
getWorkflowExecutionHistory(request: {
|
|
20
|
+
namespace: string;
|
|
21
|
+
execution: {
|
|
22
|
+
workflowId: string;
|
|
23
|
+
runId: string;
|
|
24
|
+
};
|
|
25
|
+
maximumPageSize: number;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
history?: StartHistory | null;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
options: {
|
|
31
|
+
namespace: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface InstanceObserverHandle {
|
|
35
|
+
describe(): Promise<StatusDescription>;
|
|
36
|
+
query(queryName: string): Promise<unknown>;
|
|
37
|
+
executeUpdate(updateName: string, options: {
|
|
38
|
+
args: unknown[];
|
|
39
|
+
updateId?: string;
|
|
40
|
+
}): Promise<unknown>;
|
|
41
|
+
}
|
|
42
|
+
/** The one slice of an Event History the scan reads: the start event's input payload. */
|
|
43
|
+
export interface StartHistory {
|
|
44
|
+
events?: readonly {
|
|
45
|
+
workflowExecutionStartedEventAttributes?: {
|
|
46
|
+
input?: {
|
|
47
|
+
payloads?: readonly unknown[] | null;
|
|
48
|
+
} | null;
|
|
49
|
+
} | null;
|
|
50
|
+
}[] | null;
|
|
51
|
+
}
|
|
52
|
+
export interface ObservedStuckInstance {
|
|
53
|
+
workflowId: string;
|
|
54
|
+
runId: string;
|
|
55
|
+
input: InstanceWorkflowInput;
|
|
56
|
+
}
|
|
57
|
+
export interface ObservedAwaitingInstance {
|
|
58
|
+
workflowId: string;
|
|
59
|
+
calls: {
|
|
60
|
+
callId: string;
|
|
61
|
+
channel: string;
|
|
62
|
+
correlation: JsonValue;
|
|
63
|
+
}[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* List this workflow's open instances once and classify each as stuck or healthy. A stuck
|
|
67
|
+
* instance's own code no longer runs, so it cannot surface itself: its trigger and attention route
|
|
68
|
+
* come from the Execution's own start input, because the trigger object may no longer match any
|
|
69
|
+
* watcher. A healthy instance is Queried for calls parked in `awaiting_answer`; a stuck one is
|
|
70
|
+
* not - its Query cannot be served. Every per-instance failure is isolated: the condition is
|
|
71
|
+
* level-triggered and the next tick re-observes whatever this scan missed.
|
|
72
|
+
*/
|
|
73
|
+
export declare function observeInstances(client: InstanceObserverClient, repository: string, workflow: string): Promise<{
|
|
74
|
+
stuck: ObservedStuckInstance[];
|
|
75
|
+
awaiting: ObservedAwaitingInstance[];
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Poll each awaiting call's channel for a reply and deliver any answer as an `answer_instance`
|
|
79
|
+
* Update. Every instance and call is isolated in its own try/catch: a channel error, a rejected
|
|
80
|
+
* Update (the call was already answered), or a closed Execution fails that one item and the scan
|
|
81
|
+
* continues, returning partial results rather than re-driving the whole set. The Update ID is
|
|
82
|
+
* derived from the workflow and call so an Activity retry dedups against the server.
|
|
83
|
+
*/
|
|
84
|
+
export declare function pollObservedAnswers(client: InstanceObserverClient, channels: ReadonlyMap<string, ChannelAdapterSpec>, awaiting: readonly ObservedAwaitingInstance[]): Promise<string[]>;
|
|
85
|
+
//# sourceMappingURL=observe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../src/temporal/observe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EAIf,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAW,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,CAAC;IACtD,eAAe,EAAE;QACf,2BAA2B,CAAC,OAAO,EAAE;YACnC,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;YACjD,eAAe,EAAE,MAAM,CAAC;SACzB,GAAG,OAAO,CAAC;YAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;IACF,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EACH,SAAS;QACP,uCAAuC,CAAC,EAAE;YACxC,KAAK,CAAC,EAAE;gBAAE,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAA;aAAE,GAAG,IAAI,CAAC;SACzD,GAAG,IAAI,CAAC;KACV,EAAE,GACH,IAAI,CAAC;CACV;AAID,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACtE;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAAC,QAAQ,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAAC,CA0CnF;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACjD,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,OAAO,CAAC,MAAM,EAAE,CAAC,CA0BnB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { defaultPayloadConverter } from "@temporalio/common";
|
|
2
|
+
import { parseChannelPollResult, parseInstanceState, parseInstanceWorkflowInput, } from "../core/wire.js";
|
|
3
|
+
import { instanceIdPrefix } from "../identifiers.js";
|
|
4
|
+
import { log } from "../log.js";
|
|
5
|
+
import { ANSWER_INSTANCE_UPDATE, INSTANCE_STATE_QUERY } from "./contracts.js";
|
|
6
|
+
import { isStuck } from "./status.js";
|
|
7
|
+
/**
|
|
8
|
+
* List this workflow's open instances once and classify each as stuck or healthy. A stuck
|
|
9
|
+
* instance's own code no longer runs, so it cannot surface itself: its trigger and attention route
|
|
10
|
+
* come from the Execution's own start input, because the trigger object may no longer match any
|
|
11
|
+
* watcher. A healthy instance is Queried for calls parked in `awaiting_answer`; a stuck one is
|
|
12
|
+
* not - its Query cannot be served. Every per-instance failure is isolated: the condition is
|
|
13
|
+
* level-triggered and the next tick re-observes whatever this scan missed.
|
|
14
|
+
*/
|
|
15
|
+
export async function observeInstances(client, repository, workflow) {
|
|
16
|
+
const prefix = `${instanceIdPrefix(repository)}${workflow}:`;
|
|
17
|
+
const query = `ExecutionStatus="Running" AND WorkflowId STARTS_WITH ${JSON.stringify(prefix)}`;
|
|
18
|
+
const stuck = [];
|
|
19
|
+
const awaiting = [];
|
|
20
|
+
for await (const info of client.list({ query })) {
|
|
21
|
+
const handle = client.getHandle(info.workflowId);
|
|
22
|
+
let description;
|
|
23
|
+
try {
|
|
24
|
+
description = await handle.describe();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
log.warning(`instance observer: cannot describe ${info.workflowId}: ${message(error)}`);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// Visibility lags the live Execution, so re-check status on the authoritative Describe.
|
|
31
|
+
if (description.status.name !== "RUNNING")
|
|
32
|
+
continue;
|
|
33
|
+
if (isStuck(description)) {
|
|
34
|
+
try {
|
|
35
|
+
const input = parseInstanceWorkflowInput(decodeStartInput(await fetchStartHistory(client, info.workflowId, description.runId)));
|
|
36
|
+
stuck.push({ workflowId: info.workflowId, runId: description.runId, input });
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// Without the start input there is no trigger to surface the event on. A shape this build
|
|
40
|
+
// cannot read is a version gap; say so and leave the instance to `loopy status`.
|
|
41
|
+
log.warning(`stuck instance ${info.workflowId}: cannot read start input: ${message(error)}`);
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const state = parseInstanceState(await handle.query(INSTANCE_STATE_QUERY));
|
|
47
|
+
const calls = state.calls
|
|
48
|
+
.filter((call) => call.kind === "awaiting_answer")
|
|
49
|
+
.map(({ callId, channel, correlation }) => ({ callId, channel, correlation }));
|
|
50
|
+
if (calls.length > 0)
|
|
51
|
+
awaiting.push({ workflowId: info.workflowId, calls });
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
log.warning(`ask poll: cannot read state for ${info.workflowId}: ${message(error)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { stuck, awaiting };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Poll each awaiting call's channel for a reply and deliver any answer as an `answer_instance`
|
|
61
|
+
* Update. Every instance and call is isolated in its own try/catch: a channel error, a rejected
|
|
62
|
+
* Update (the call was already answered), or a closed Execution fails that one item and the scan
|
|
63
|
+
* continues, returning partial results rather than re-driving the whole set. The Update ID is
|
|
64
|
+
* derived from the workflow and call so an Activity retry dedups against the server.
|
|
65
|
+
*/
|
|
66
|
+
export async function pollObservedAnswers(client, channels, awaiting) {
|
|
67
|
+
const answered = [];
|
|
68
|
+
for (const instance of awaiting) {
|
|
69
|
+
for (const call of instance.calls) {
|
|
70
|
+
try {
|
|
71
|
+
const spec = channels.get(call.channel);
|
|
72
|
+
if (spec === undefined) {
|
|
73
|
+
log.warning(`ask poll: unknown channel ${JSON.stringify(call.channel)} for ${instance.workflowId} ${call.callId}`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const result = parseChannelPollResult(await spec.poll({ correlation: call.correlation }));
|
|
77
|
+
if (result.status !== "answered")
|
|
78
|
+
continue;
|
|
79
|
+
const answer = { callId: call.callId, answer: result.answer };
|
|
80
|
+
await client.getHandle(instance.workflowId).executeUpdate(ANSWER_INSTANCE_UPDATE, {
|
|
81
|
+
args: [answer],
|
|
82
|
+
updateId: `answer:${instance.workflowId}:${call.callId}`,
|
|
83
|
+
});
|
|
84
|
+
answered.push(`${instance.workflowId}:${call.callId}`);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
log.warning(`ask poll: ${instance.workflowId} ${call.callId}: ${message(error)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return answered;
|
|
92
|
+
}
|
|
93
|
+
async function fetchStartHistory(client, workflowId, runId) {
|
|
94
|
+
const response = await client.workflowService.getWorkflowExecutionHistory({
|
|
95
|
+
namespace: client.options.namespace,
|
|
96
|
+
execution: { workflowId, runId },
|
|
97
|
+
maximumPageSize: 1,
|
|
98
|
+
});
|
|
99
|
+
return response.history ?? {};
|
|
100
|
+
}
|
|
101
|
+
function decodeStartInput(history) {
|
|
102
|
+
const payload = history.events?.[0]?.workflowExecutionStartedEventAttributes?.input?.payloads?.[0];
|
|
103
|
+
if (payload === undefined || payload === null)
|
|
104
|
+
throw new Error("start event carries no input payload");
|
|
105
|
+
return defaultPayloadConverter.fromPayload(payload);
|
|
106
|
+
}
|
|
107
|
+
function message(error) {
|
|
108
|
+
return error instanceof Error ? error.message : String(error);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=observe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/temporal/observe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ScheduleClient } from "@temporalio/client";
|
|
2
|
+
import type { DiscoveredWorkflow } from "../build/discover.js";
|
|
3
|
+
import type { Settings } from "../settings.js";
|
|
4
|
+
type ManagedScheduleClient = Pick<ScheduleClient, "create" | "getHandle" | "list">;
|
|
5
|
+
/** The Schedule surface pause control needs, kept narrow so tests can supply a fake. */
|
|
6
|
+
export type ScheduleClientLike = Pick<ScheduleClient, "getHandle" | "list">;
|
|
7
|
+
export interface ScheduleSyncOptions {
|
|
8
|
+
settings: Settings;
|
|
9
|
+
workflows: readonly DiscoveredWorkflow[];
|
|
10
|
+
controlTaskQueue: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function syncSchedules(client: ManagedScheduleClient, options: ScheduleSyncOptions): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Marks a pause as loopy's own, so startup can lift it without touching a pause an operator set for
|
|
15
|
+
* their own reasons. Without the distinction, every restart would clear a deliberate pause.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DRAIN_PAUSE_NOTE = "loopy: drained for shutdown";
|
|
18
|
+
/**
|
|
19
|
+
* Stop every Schedule this deployment owns, so nothing new starts while the drain waits on the
|
|
20
|
+
* Executions already running.
|
|
21
|
+
*/
|
|
22
|
+
export declare function pauseOwnedSchedules(client: ScheduleClientLike, repository: string, note: string): Promise<string[]>;
|
|
23
|
+
/** Lift only the pauses this deployment's own drain set; anything else stays paused. */
|
|
24
|
+
export declare function resumeDrainedSchedules(client: ScheduleClientLike, repository: string): Promise<string[]>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=schedules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/temporal/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,KAAK,qBAAqB,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC,CAAC;AAEnF,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAoKD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAE9D;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAED,wFAAwF;AACxF,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB"}
|