@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.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/adapters.d.ts +111 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +27 -0
  6. package/dist/adapters.js.map +1 -0
  7. package/dist/attention/github.d.ts +57 -0
  8. package/dist/attention/github.d.ts.map +1 -0
  9. package/dist/attention/github.js +162 -0
  10. package/dist/attention/github.js.map +1 -0
  11. package/dist/authoring/attention-config.d.ts +16 -0
  12. package/dist/authoring/attention-config.d.ts.map +1 -0
  13. package/dist/authoring/attention-config.js +19 -0
  14. package/dist/authoring/attention-config.js.map +1 -0
  15. package/dist/authoring/channel-config.d.ts +16 -0
  16. package/dist/authoring/channel-config.d.ts.map +1 -0
  17. package/dist/authoring/channel-config.js +16 -0
  18. package/dist/authoring/channel-config.js.map +1 -0
  19. package/dist/authoring/define.d.ts +13 -0
  20. package/dist/authoring/define.d.ts.map +1 -0
  21. package/dist/authoring/define.js +13 -0
  22. package/dist/authoring/define.js.map +1 -0
  23. package/dist/authoring/effect-config.d.ts +16 -0
  24. package/dist/authoring/effect-config.d.ts.map +1 -0
  25. package/dist/authoring/effect-config.js +17 -0
  26. package/dist/authoring/effect-config.js.map +1 -0
  27. package/dist/authoring/harness-config.d.ts +30 -0
  28. package/dist/authoring/harness-config.d.ts.map +1 -0
  29. package/dist/authoring/harness-config.js +36 -0
  30. package/dist/authoring/harness-config.js.map +1 -0
  31. package/dist/authoring/index.d.ts +10 -0
  32. package/dist/authoring/index.d.ts.map +1 -0
  33. package/dist/authoring/index.js +9 -0
  34. package/dist/authoring/index.js.map +1 -0
  35. package/dist/authoring/schema.d.ts +9 -0
  36. package/dist/authoring/schema.d.ts.map +1 -0
  37. package/dist/authoring/schema.js +28 -0
  38. package/dist/authoring/schema.js.map +1 -0
  39. package/dist/authoring/types.d.ts +115 -0
  40. package/dist/authoring/types.d.ts.map +1 -0
  41. package/dist/authoring/types.js +2 -0
  42. package/dist/authoring/types.js.map +1 -0
  43. package/dist/authoring/watcher-config.d.ts +33 -0
  44. package/dist/authoring/watcher-config.d.ts.map +1 -0
  45. package/dist/authoring/watcher-config.js +61 -0
  46. package/dist/authoring/watcher-config.js.map +1 -0
  47. package/dist/build/discover.d.ts +34 -0
  48. package/dist/build/discover.d.ts.map +1 -0
  49. package/dist/build/discover.js +165 -0
  50. package/dist/build/discover.js.map +1 -0
  51. package/dist/build/identity.d.ts +9 -0
  52. package/dist/build/identity.d.ts.map +1 -0
  53. package/dist/build/identity.js +0 -0
  54. package/dist/build/identity.js.map +1 -0
  55. package/dist/channels/github.d.ts +14 -0
  56. package/dist/channels/github.d.ts.map +1 -0
  57. package/dist/channels/github.js +118 -0
  58. package/dist/channels/github.js.map +1 -0
  59. package/dist/channels/index.d.ts +2 -0
  60. package/dist/channels/index.d.ts.map +1 -0
  61. package/dist/channels/index.js +2 -0
  62. package/dist/channels/index.js.map +1 -0
  63. package/dist/cli-help.d.ts +23 -0
  64. package/dist/cli-help.d.ts.map +1 -0
  65. package/dist/cli-help.js +186 -0
  66. package/dist/cli-help.js.map +1 -0
  67. package/dist/cli.d.ts +37 -0
  68. package/dist/cli.d.ts.map +1 -0
  69. package/dist/cli.js +385 -0
  70. package/dist/cli.js.map +1 -0
  71. package/dist/config.d.ts +71 -0
  72. package/dist/config.d.ts.map +1 -0
  73. package/dist/config.js +426 -0
  74. package/dist/config.js.map +1 -0
  75. package/dist/core/calls.d.ts +67 -0
  76. package/dist/core/calls.d.ts.map +1 -0
  77. package/dist/core/calls.js +109 -0
  78. package/dist/core/calls.js.map +1 -0
  79. package/dist/core/identifiers.d.ts +24 -0
  80. package/dist/core/identifiers.d.ts.map +1 -0
  81. package/dist/core/identifiers.js +129 -0
  82. package/dist/core/identifiers.js.map +1 -0
  83. package/dist/core/prompt.d.ts +5 -0
  84. package/dist/core/prompt.d.ts.map +1 -0
  85. package/dist/core/prompt.js +47 -0
  86. package/dist/core/prompt.js.map +1 -0
  87. package/dist/core/reconcile.d.ts +27 -0
  88. package/dist/core/reconcile.d.ts.map +1 -0
  89. package/dist/core/reconcile.js +36 -0
  90. package/dist/core/reconcile.js.map +1 -0
  91. package/dist/core/wire.d.ts +332 -0
  92. package/dist/core/wire.d.ts.map +1 -0
  93. package/dist/core/wire.js +543 -0
  94. package/dist/core/wire.js.map +1 -0
  95. package/dist/emitters/github.d.ts +15 -0
  96. package/dist/emitters/github.d.ts.map +1 -0
  97. package/dist/emitters/github.js +43 -0
  98. package/dist/emitters/github.js.map +1 -0
  99. package/dist/emitters/index.d.ts +2 -0
  100. package/dist/emitters/index.d.ts.map +1 -0
  101. package/dist/emitters/index.js +2 -0
  102. package/dist/emitters/index.js.map +1 -0
  103. package/dist/git.d.ts +17 -0
  104. package/dist/git.d.ts.map +1 -0
  105. package/dist/git.js +122 -0
  106. package/dist/git.js.map +1 -0
  107. package/dist/github/client.d.ts +53 -0
  108. package/dist/github/client.d.ts.map +1 -0
  109. package/dist/github/client.js +169 -0
  110. package/dist/github/client.js.map +1 -0
  111. package/dist/github/trigger.d.ts +12 -0
  112. package/dist/github/trigger.d.ts.map +1 -0
  113. package/dist/github/trigger.js +21 -0
  114. package/dist/github/trigger.js.map +1 -0
  115. package/dist/github/writes.d.ts +4 -0
  116. package/dist/github/writes.d.ts.map +1 -0
  117. package/dist/github/writes.js +21 -0
  118. package/dist/github/writes.js.map +1 -0
  119. package/dist/harnesses/base.d.ts +41 -0
  120. package/dist/harnesses/base.d.ts.map +1 -0
  121. package/dist/harnesses/base.js +182 -0
  122. package/dist/harnesses/base.js.map +1 -0
  123. package/dist/harnesses/claude-executable.d.ts +42 -0
  124. package/dist/harnesses/claude-executable.d.ts.map +1 -0
  125. package/dist/harnesses/claude-executable.js +138 -0
  126. package/dist/harnesses/claude-executable.js.map +1 -0
  127. package/dist/harnesses/claude.d.ts +35 -0
  128. package/dist/harnesses/claude.d.ts.map +1 -0
  129. package/dist/harnesses/claude.js +160 -0
  130. package/dist/harnesses/claude.js.map +1 -0
  131. package/dist/harnesses/codex.d.ts +40 -0
  132. package/dist/harnesses/codex.d.ts.map +1 -0
  133. package/dist/harnesses/codex.js +118 -0
  134. package/dist/harnesses/codex.js.map +1 -0
  135. package/dist/harnesses/index.d.ts +2 -0
  136. package/dist/harnesses/index.d.ts.map +1 -0
  137. package/dist/harnesses/index.js +2 -0
  138. package/dist/harnesses/index.js.map +1 -0
  139. package/dist/harnesses/opencode.d.ts +33 -0
  140. package/dist/harnesses/opencode.d.ts.map +1 -0
  141. package/dist/harnesses/opencode.js +203 -0
  142. package/dist/harnesses/opencode.js.map +1 -0
  143. package/dist/identifiers.d.ts +26 -0
  144. package/dist/identifiers.d.ts.map +1 -0
  145. package/dist/identifiers.js +62 -0
  146. package/dist/identifiers.js.map +1 -0
  147. package/dist/index.d.ts +10 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +10 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/log.d.ts +10 -0
  152. package/dist/log.d.ts.map +1 -0
  153. package/dist/log.js +44 -0
  154. package/dist/log.js.map +1 -0
  155. package/dist/settings.d.ts +43 -0
  156. package/dist/settings.d.ts.map +1 -0
  157. package/dist/settings.js +128 -0
  158. package/dist/settings.js.map +1 -0
  159. package/dist/temporal/activities.d.ts +57 -0
  160. package/dist/temporal/activities.d.ts.map +1 -0
  161. package/dist/temporal/activities.js +366 -0
  162. package/dist/temporal/activities.js.map +1 -0
  163. package/dist/temporal/answers.d.ts +48 -0
  164. package/dist/temporal/answers.d.ts.map +1 -0
  165. package/dist/temporal/answers.js +78 -0
  166. package/dist/temporal/answers.js.map +1 -0
  167. package/dist/temporal/client.d.ts +13 -0
  168. package/dist/temporal/client.d.ts.map +1 -0
  169. package/dist/temporal/client.js +20 -0
  170. package/dist/temporal/client.js.map +1 -0
  171. package/dist/temporal/contracts.d.ts +19 -0
  172. package/dist/temporal/contracts.d.ts.map +1 -0
  173. package/dist/temporal/contracts.js +22 -0
  174. package/dist/temporal/contracts.js.map +1 -0
  175. package/dist/temporal/drain.d.ts +19 -0
  176. package/dist/temporal/drain.d.ts.map +1 -0
  177. package/dist/temporal/drain.js +109 -0
  178. package/dist/temporal/drain.js.map +1 -0
  179. package/dist/temporal/executions.d.ts +18 -0
  180. package/dist/temporal/executions.d.ts.map +1 -0
  181. package/dist/temporal/executions.js +15 -0
  182. package/dist/temporal/executions.js.map +1 -0
  183. package/dist/temporal/handle.d.ts +39 -0
  184. package/dist/temporal/handle.d.ts.map +1 -0
  185. package/dist/temporal/handle.js +95 -0
  186. package/dist/temporal/handle.js.map +1 -0
  187. package/dist/temporal/history.d.ts +75 -0
  188. package/dist/temporal/history.d.ts.map +1 -0
  189. package/dist/temporal/history.js +310 -0
  190. package/dist/temporal/history.js.map +1 -0
  191. package/dist/temporal/observe.d.ts +85 -0
  192. package/dist/temporal/observe.d.ts.map +1 -0
  193. package/dist/temporal/observe.js +110 -0
  194. package/dist/temporal/observe.js.map +1 -0
  195. package/dist/temporal/schedules.d.ts +26 -0
  196. package/dist/temporal/schedules.d.ts.map +1 -0
  197. package/dist/temporal/schedules.js +200 -0
  198. package/dist/temporal/schedules.js.map +1 -0
  199. package/dist/temporal/status.d.ts +63 -0
  200. package/dist/temporal/status.d.ts.map +1 -0
  201. package/dist/temporal/status.js +153 -0
  202. package/dist/temporal/status.js.map +1 -0
  203. package/dist/temporal/stuck.d.ts +58 -0
  204. package/dist/temporal/stuck.d.ts.map +1 -0
  205. package/dist/temporal/stuck.js +53 -0
  206. package/dist/temporal/stuck.js.map +1 -0
  207. package/dist/temporal/supervisor.d.ts +11 -0
  208. package/dist/temporal/supervisor.d.ts.map +1 -0
  209. package/dist/temporal/supervisor.js +506 -0
  210. package/dist/temporal/supervisor.js.map +1 -0
  211. package/dist/temporal/worker.d.ts +21 -0
  212. package/dist/temporal/worker.d.ts.map +1 -0
  213. package/dist/temporal/worker.js +82 -0
  214. package/dist/temporal/worker.js.map +1 -0
  215. package/dist/temporal/workflow-bundle.js +12742 -0
  216. package/dist/temporal/workflows.d.ts +9 -0
  217. package/dist/temporal/workflows.d.ts.map +1 -0
  218. package/dist/temporal/workflows.js +144 -0
  219. package/dist/temporal/workflows.js.map +1 -0
  220. package/dist/version.d.ts +2 -0
  221. package/dist/version.d.ts.map +1 -0
  222. package/dist/version.js +2 -0
  223. package/dist/version.js.map +1 -0
  224. package/dist/watchers/base.d.ts +4 -0
  225. package/dist/watchers/base.d.ts.map +1 -0
  226. package/dist/watchers/base.js +7 -0
  227. package/dist/watchers/base.js.map +1 -0
  228. package/dist/watchers/github/client.d.ts +52 -0
  229. package/dist/watchers/github/client.d.ts.map +1 -0
  230. package/dist/watchers/github/client.js +165 -0
  231. package/dist/watchers/github/client.js.map +1 -0
  232. package/dist/watchers/github/index.d.ts +19 -0
  233. package/dist/watchers/github/index.d.ts.map +1 -0
  234. package/dist/watchers/github/index.js +83 -0
  235. package/dist/watchers/github/index.js.map +1 -0
  236. package/dist/watchers/index.d.ts +2 -0
  237. package/dist/watchers/index.d.ts.map +1 -0
  238. package/dist/watchers/index.js +2 -0
  239. package/dist/watchers/index.js.map +1 -0
  240. package/dist/worker-lock.d.ts +11 -0
  241. package/dist/worker-lock.d.ts.map +1 -0
  242. package/dist/worker-lock.js +53 -0
  243. package/dist/worker-lock.js.map +1 -0
  244. package/package.json +92 -0
package/dist/config.js ADDED
@@ -0,0 +1,426 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { Ajv2020 } from "ajv/dist/2020.js";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { z } from "zod";
6
+ import { RESERVED_PLACEHOLDERS, templateErrors } from "./core/prompt.js";
7
+ import { isJsonValue, toJsonObject, } from "./core/wire.js";
8
+ const ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
9
+ const identifierSchema = z
10
+ .string()
11
+ .regex(ID_PATTERN)
12
+ .refine((value) => !value.includes("..") && !value.endsWith(".") && !value.endsWith(".lock"), {
13
+ message: "identifier must also be a valid git branch path component",
14
+ });
15
+ const pollSchema = z
16
+ .object({ interval_seconds: z.number().positive().default(300) })
17
+ .strict()
18
+ .default({ interval_seconds: 300 });
19
+ const watcherSchema = z.object({ type: z.string().min(1) }).passthrough();
20
+ const agentShape = {
21
+ id: identifierSchema,
22
+ harness: z.string().regex(ID_PATTERN),
23
+ prompt: z.string().optional(),
24
+ prompt_file: z.string().min(1).optional(),
25
+ model: z.string().min(1).optional(),
26
+ model_effort: z.string().min(1).optional(),
27
+ timeout_seconds: z.number().positive().default(1_800),
28
+ };
29
+ const bundleStepSchema = z.object(agentShape).passthrough().superRefine(validatePromptSource);
30
+ const stepSchema = z
31
+ .object({ ...agentShape, outcome: z.string().min(1) })
32
+ .passthrough()
33
+ .superRefine(validatePromptSource);
34
+ const bundleSchema = z
35
+ .object({
36
+ id: identifierSchema,
37
+ outcome: z.string().min(1),
38
+ steps: z.array(bundleStepSchema).min(1),
39
+ })
40
+ .strict();
41
+ const effectSchema = z
42
+ .object({
43
+ id: identifierSchema,
44
+ emitter: z.string().regex(ID_PATTERN),
45
+ action: z.record(z.string(), z.unknown()),
46
+ })
47
+ .strict();
48
+ const entrySchema = z.union([
49
+ z.object({ step: stepSchema }).strict(),
50
+ z.object({ bundle: bundleSchema }).strict(),
51
+ z.object({ effect: effectSchema }).strict(),
52
+ ]);
53
+ const workflowSpecSchema = z
54
+ .object({ watcher: watcherSchema, steps: z.array(entrySchema).min(1) })
55
+ .strict();
56
+ const workflowConfigSchema = z
57
+ .object({
58
+ poll: pollSchema,
59
+ repository: z.string().regex(/^[^/\s]+\/[^/\s]+$/),
60
+ default_branch: z.string().min(1),
61
+ harnesses: z.record(z.string(), z.record(z.string(), z.unknown())).default({}),
62
+ workflows: z
63
+ .record(z.string(), workflowSpecSchema)
64
+ .refine((value) => Object.keys(value).length > 0),
65
+ })
66
+ .strict();
67
+ export class WorkflowConfig {
68
+ poll;
69
+ repository;
70
+ defaultBranch;
71
+ harnesses;
72
+ workflows;
73
+ sourceDirectory;
74
+ promptFiles = new Map();
75
+ outcomeSchemas = new Map();
76
+ constructor(values, sourceDirectory) {
77
+ this.poll = values.poll;
78
+ this.repository = values.repository;
79
+ this.defaultBranch = values.defaultBranch;
80
+ this.harnesses = values.harnesses;
81
+ this.workflows = values.workflows;
82
+ this.sourceDirectory = sourceDirectory;
83
+ }
84
+ resolveResource(value) {
85
+ return resolve(this.sourceDirectory, value);
86
+ }
87
+ promptText(agent) {
88
+ if (agent.prompt !== undefined)
89
+ return agent.prompt;
90
+ if (agent.promptFile === undefined)
91
+ throw new Error("agent has no prompt source");
92
+ const cached = this.promptFiles.get(agent.promptFile);
93
+ if (cached !== undefined)
94
+ return cached;
95
+ const text = readFileSync(this.resolveResource(agent.promptFile), "utf8");
96
+ this.promptFiles.set(agent.promptFile, text);
97
+ return text;
98
+ }
99
+ outcomeSchema(value) {
100
+ const cached = this.outcomeSchemas.get(value);
101
+ if (cached !== undefined)
102
+ return cached;
103
+ const parsed = JSON.parse(readFileSync(this.resolveResource(value), "utf8"));
104
+ const schema = toJsonObject(parsed, `outcome schema ${value}`);
105
+ this.outcomeSchemas.set(value, schema);
106
+ return schema;
107
+ }
108
+ }
109
+ export function loadConfig(path) {
110
+ const absolutePath = resolve(path);
111
+ const parsed = workflowConfigSchema.parse(parseYaml(readFileSync(absolutePath, "utf8")) ?? {});
112
+ const invalidNames = Object.keys(parsed.workflows).filter((name) => !ID_PATTERN.test(name) || name.includes("..") || name.endsWith(".") || name.endsWith(".lock"));
113
+ if (invalidNames.length > 0) {
114
+ throw new Error(`invalid workflow names: ${JSON.stringify(invalidNames)}`);
115
+ }
116
+ const harnesses = Object.fromEntries(Object.entries(parsed.harnesses).map(([name, options]) => [
117
+ name,
118
+ toJsonObject(options, `harness config ${name}`),
119
+ ]));
120
+ const workflows = Object.fromEntries(Object.entries(parsed.workflows).map(([name, rawWorkflow]) => {
121
+ const entries = rawWorkflow.steps.map(parseEntry);
122
+ const identifiers = entries.flatMap(entryIdentifiers);
123
+ const duplicates = identifiers.filter((id, index) => identifiers.indexOf(id) !== index);
124
+ if (duplicates.length > 0) {
125
+ throw new Error(`workflow ${JSON.stringify(name)} has duplicate identifiers: ${JSON.stringify([...new Set(duplicates)].sort())}`);
126
+ }
127
+ return [name, { watcher: parseWatcher(rawWorkflow.watcher), entries }];
128
+ }));
129
+ return new WorkflowConfig({
130
+ poll: { intervalSeconds: parsed.poll.interval_seconds },
131
+ repository: parsed.repository,
132
+ defaultBranch: parsed.default_branch,
133
+ harnesses,
134
+ workflows,
135
+ }, dirname(absolutePath));
136
+ }
137
+ export function* iterWorkflowAgents(workflow) {
138
+ for (const entry of workflow.entries) {
139
+ if (entry.type === "step")
140
+ yield entry.step;
141
+ if (entry.type === "bundle")
142
+ yield* entry.steps;
143
+ }
144
+ }
145
+ export function* iterWorkflowEmitters(workflow) {
146
+ for (const entry of workflow.entries) {
147
+ if (entry.type === "effect")
148
+ yield entry.emitter;
149
+ }
150
+ }
151
+ export function mergedHarnessOptions(config, agent) {
152
+ const values = {
153
+ ...(config.harnesses[agent.harness] ?? {}),
154
+ ...agent.providerOptions,
155
+ };
156
+ if (agent.model !== undefined)
157
+ values.model = agent.model;
158
+ if (agent.modelEffort !== undefined)
159
+ values.model_effort = agent.modelEffort;
160
+ return values;
161
+ }
162
+ export function workflowSpecSnapshot(config, name, adapters) {
163
+ const workflow = config.workflows[name];
164
+ if (workflow === undefined)
165
+ throw new Error(`unknown workflow ${JSON.stringify(name)}`);
166
+ return {
167
+ name,
168
+ repository: config.repository,
169
+ defaultBranch: config.defaultBranch,
170
+ entries: workflow.entries.map((entry) => entrySnapshot(config, entry, adapters)),
171
+ };
172
+ }
173
+ export function watcherSnapshot(workflow, watchers) {
174
+ const spec = watchers.get(workflow.watcher.type);
175
+ if (spec === undefined)
176
+ throw new Error(`unknown watcher ${JSON.stringify(workflow.watcher.type)}`);
177
+ const options = selectedFields(workflow.watcher.fields, spec.acceptedFields);
178
+ return {
179
+ name: spec.name,
180
+ options: toJsonObject(spec.optionsSchema.parse(options), `watcher options ${spec.name}`),
181
+ };
182
+ }
183
+ export function validateWorkflow(config, adapters) {
184
+ const errors = Object.keys(config.harnesses)
185
+ .filter((name) => !adapters.harnesses.has(name))
186
+ .sort()
187
+ .map((name) => `harness config ${JSON.stringify(name)}: unknown harness (known: ${JSON.stringify(knownKeys(adapters.harnesses))})`);
188
+ for (const [name, workflow] of Object.entries(config.workflows)) {
189
+ errors.push(...validateOneWorkflow(config, name, workflow, adapters));
190
+ }
191
+ return errors;
192
+ }
193
+ function validateOneWorkflow(config, name, workflow, adapters) {
194
+ const errors = [];
195
+ const watcher = adapters.watchers.get(workflow.watcher.type);
196
+ const watcherPromptFields = new Set();
197
+ if (watcher === undefined) {
198
+ errors.push(`workflow ${name} watcher: unknown watcher ${JSON.stringify(workflow.watcher.type)} (known: ${JSON.stringify(knownKeys(adapters.watchers))})`);
199
+ }
200
+ else {
201
+ for (const field of Object.keys(workflow.watcher.fields).sort()) {
202
+ if (!watcher.acceptedFields.has(field)) {
203
+ errors.push(`workflow ${name} watcher: watcher does not accept ${JSON.stringify(field)}`);
204
+ }
205
+ }
206
+ const result = watcher.optionsSchema.safeParse(selectedFields(workflow.watcher.fields, watcher.acceptedFields));
207
+ if (!result.success) {
208
+ errors.push(`workflow ${name} watcher: invalid ${JSON.stringify(watcher.name)} fields: ${formatZodError(result.error)}`);
209
+ }
210
+ const conflicts = [...watcher.promptFields].filter((field) => RESERVED_PLACEHOLDERS.has(field));
211
+ if (conflicts.length > 0) {
212
+ errors.push(`workflow ${name} watcher: watcher ${JSON.stringify(watcher.name)} reserves prompt fields ${JSON.stringify(conflicts.sort())}`);
213
+ }
214
+ for (const field of watcher.promptFields)
215
+ watcherPromptFields.add(field);
216
+ }
217
+ const available = new Set();
218
+ for (const [index, entry] of workflow.entries.entries()) {
219
+ errors.push(...validateEntry(config, name, `entry ${index + 1}`, entry, adapters, watcherPromptFields, available, watcher));
220
+ if (entry.type === "step")
221
+ available.add(entry.step.id);
222
+ if (entry.type === "bundle")
223
+ available.add(entry.id);
224
+ }
225
+ return errors;
226
+ }
227
+ function validateEntry(config, workflowName, label, entry, adapters, watcherPromptFields, availableOutcomes, watcher) {
228
+ if (entry.type === "effect") {
229
+ return validateEffect(workflowName, label, entry, adapters.emitters, watcher);
230
+ }
231
+ if (entry.type === "step") {
232
+ return validateAgent(config, workflowName, label, entry.step, adapters.harnesses, watcherPromptFields, availableOutcomes);
233
+ }
234
+ return entry.steps.flatMap((step) => validateAgent(config, workflowName, `${label} step ${step.id}`, step, adapters.harnesses, watcherPromptFields, availableOutcomes));
235
+ }
236
+ function validateEffect(workflowName, label, entry, emitters, watcher) {
237
+ const emitter = emitters.get(entry.emitter);
238
+ if (emitter === undefined) {
239
+ return [
240
+ `workflow ${workflowName} ${label}: unknown emitter ${JSON.stringify(entry.emitter)} (known: ${JSON.stringify(knownKeys(emitters))})`,
241
+ ];
242
+ }
243
+ const errors = [];
244
+ if (watcher !== undefined &&
245
+ (emitter.source !== watcher.source || !emitter.kinds.has(watcher.kind))) {
246
+ errors.push(`workflow ${workflowName} ${label}: emitter ${JSON.stringify(entry.emitter)} does not support ${watcher.source}/${watcher.kind}`);
247
+ }
248
+ const result = emitter.actionSchema.safeParse(entry.action);
249
+ if (!result.success) {
250
+ errors.push(`workflow ${workflowName} ${label}: invalid ${JSON.stringify(entry.emitter)} action: ${formatZodError(result.error)}`);
251
+ }
252
+ return errors;
253
+ }
254
+ function validateAgent(config, workflowName, label, agent, harnesses, watcherPromptFields, availableOutcomes) {
255
+ const errors = [];
256
+ const harness = harnesses.get(agent.harness);
257
+ if (harness === undefined) {
258
+ errors.push(`workflow ${workflowName} ${label}: unknown harness ${JSON.stringify(agent.harness)} (known: ${JSON.stringify(knownKeys(harnesses))})`);
259
+ }
260
+ else {
261
+ const result = harness.optionsSchema.safeParse(mergedHarnessOptions(config, agent));
262
+ if (!result.success) {
263
+ errors.push(`workflow ${workflowName} ${label}: invalid ${JSON.stringify(agent.harness)} options: ${formatZodError(result.error)}`);
264
+ }
265
+ }
266
+ errors.push(...resourceErrors(config, label, agent).map((error) => `workflow ${workflowName} ${error}`));
267
+ try {
268
+ errors.push(...templateErrors(config.promptText(agent), availableOutcomes, watcherPromptFields).map((error) => `workflow ${workflowName} ${label}: ${error}`));
269
+ }
270
+ catch {
271
+ // resourceErrors reports the path of a missing prompt.
272
+ }
273
+ return errors;
274
+ }
275
+ function resourceErrors(config, label, agent) {
276
+ const errors = [];
277
+ if (agent.promptFile !== undefined) {
278
+ try {
279
+ config.promptText(agent);
280
+ }
281
+ catch {
282
+ errors.push(`${label}: prompt file not found: ${config.resolveResource(agent.promptFile)}`);
283
+ }
284
+ }
285
+ const schemaPath = config.resolveResource(agent.outcome);
286
+ let schema;
287
+ try {
288
+ schema = config.outcomeSchema(agent.outcome);
289
+ new Ajv2020({ strict: true }).compile(schema);
290
+ }
291
+ catch (error) {
292
+ const prefix = isFileNotFound(error)
293
+ ? `${label}: outcome schema not found: ${schemaPath}`
294
+ : `${label}: invalid outcome schema ${schemaPath}: ${errorMessage(error)}`;
295
+ return [...errors, prefix];
296
+ }
297
+ const properties = isRecord(schema.properties) ? schema.properties : undefined;
298
+ const okSchema = properties !== undefined && isRecord(properties.ok) ? properties.ok : undefined;
299
+ if (schema.type !== "object" ||
300
+ properties === undefined ||
301
+ okSchema?.type !== "boolean" ||
302
+ !Array.isArray(schema.required) ||
303
+ !schema.required.includes("ok")) {
304
+ errors.push(`${label}: outcome schema must require an object field 'ok' of type boolean`);
305
+ }
306
+ return errors;
307
+ }
308
+ function entrySnapshot(config, entry, adapters) {
309
+ if (entry.type === "step") {
310
+ return { type: "step", step: agentSnapshot(config, entry.step, adapters.harnesses) };
311
+ }
312
+ if (entry.type === "bundle") {
313
+ return {
314
+ type: "bundle",
315
+ id: entry.id,
316
+ steps: entry.steps.map((step) => agentSnapshot(config, step, adapters.harnesses)),
317
+ };
318
+ }
319
+ const emitter = adapters.emitters.get(entry.emitter);
320
+ if (emitter === undefined)
321
+ throw new Error(`unknown emitter ${JSON.stringify(entry.emitter)}`);
322
+ return {
323
+ type: "effect",
324
+ id: entry.id,
325
+ emitter: entry.emitter,
326
+ action: toJsonObject(emitter.actionSchema.parse(entry.action), `effect action ${entry.id}`),
327
+ };
328
+ }
329
+ function agentSnapshot(config, agent, harnesses) {
330
+ const harness = harnesses.get(agent.harness);
331
+ if (harness === undefined)
332
+ throw new Error(`unknown harness ${JSON.stringify(agent.harness)}`);
333
+ const snapshot = {
334
+ id: agent.id,
335
+ harness: agent.harness,
336
+ prompt: config.promptText(agent),
337
+ outcomeSchema: config.outcomeSchema(agent.outcome),
338
+ timeoutSeconds: agent.timeoutSeconds,
339
+ options: toJsonObject(harness.optionsSchema.parse(mergedHarnessOptions(config, agent)), "harness options"),
340
+ };
341
+ if (agent.model !== undefined)
342
+ snapshot.model = agent.model;
343
+ if (agent.modelEffort !== undefined)
344
+ snapshot.modelEffort = agent.modelEffort;
345
+ return snapshot;
346
+ }
347
+ function parseWatcher(raw) {
348
+ const { type, ...fields } = raw;
349
+ return { type, fields: toJsonObject(fields, "watcher fields") };
350
+ }
351
+ function parseEntry(raw) {
352
+ if ("step" in raw)
353
+ return { type: "step", step: parseAgent(raw.step, raw.step.outcome) };
354
+ if ("bundle" in raw) {
355
+ return {
356
+ type: "bundle",
357
+ id: raw.bundle.id,
358
+ outcome: raw.bundle.outcome,
359
+ steps: raw.bundle.steps.map((step) => parseAgent(step, raw.bundle.outcome)),
360
+ };
361
+ }
362
+ return {
363
+ type: "effect",
364
+ id: raw.effect.id,
365
+ emitter: raw.effect.emitter,
366
+ action: toJsonObject(raw.effect.action, `effect action ${raw.effect.id}`),
367
+ };
368
+ }
369
+ function parseAgent(raw, outcome) {
370
+ const { id, harness, prompt, prompt_file: promptFile, model, model_effort: modelEffort, timeout_seconds: timeoutSeconds, ...extra } = raw;
371
+ delete extra.outcome;
372
+ if (!isJsonValue(extra))
373
+ throw new Error("agent provider options must be JSON values");
374
+ const agent = {
375
+ id,
376
+ harness,
377
+ timeoutSeconds,
378
+ outcome,
379
+ providerOptions: extra,
380
+ };
381
+ if (prompt !== undefined)
382
+ agent.prompt = prompt;
383
+ if (promptFile !== undefined)
384
+ agent.promptFile = promptFile;
385
+ if (model !== undefined)
386
+ agent.model = model;
387
+ if (modelEffort !== undefined)
388
+ agent.modelEffort = modelEffort;
389
+ return agent;
390
+ }
391
+ function entryIdentifiers(entry) {
392
+ if (entry.type === "step")
393
+ return [entry.step.id];
394
+ if (entry.type === "bundle")
395
+ return [entry.id, ...entry.steps.map((step) => step.id)];
396
+ return [entry.id];
397
+ }
398
+ function selectedFields(fields, accepted) {
399
+ return Object.fromEntries([...accepted]
400
+ .filter((field) => Object.hasOwn(fields, field))
401
+ .map((field) => [field, fields[field]]));
402
+ }
403
+ function validatePromptSource(value, context) {
404
+ if ((value.prompt === undefined) === (value.prompt_file === undefined)) {
405
+ context.addIssue({
406
+ code: "custom",
407
+ message: "exactly one of prompt or prompt_file is required",
408
+ });
409
+ }
410
+ }
411
+ function formatZodError(error) {
412
+ return error.issues.map((issue) => `${issue.path.join(".") || "$"}: ${issue.message}`).join("; ");
413
+ }
414
+ function knownKeys(map) {
415
+ return [...map.keys()].sort();
416
+ }
417
+ function isRecord(value) {
418
+ return typeof value === "object" && value !== null && !Array.isArray(value);
419
+ }
420
+ function isFileNotFound(error) {
421
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
422
+ }
423
+ function errorMessage(error) {
424
+ return error instanceof Error ? error.message : String(error);
425
+ }
426
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAiB,CAAC,EAAE,MAAM,KAAK,CAAC;AAGvC,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAML,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAyDlD,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,KAAK,CAAC,UAAU,CAAC;KACjB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC5F,OAAO,EAAE,2DAA2D;CACrE,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;KAChE,MAAM,EAAE;KACR,OAAO,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;AAEtC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAE1E,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE,gBAAgB;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACtD,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAC9F,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,WAAW,EAAE;KACb,WAAW,CAAC,oBAAoB,CAAC,CAAC;AACrC,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,EAAE,EAAE,gBAAgB;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACxC,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,EAAE,EAAE,gBAAgB;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;CAC1C,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1B,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACvC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3C,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CAC5C,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,MAAM,EAAE,CAAC;AACZ,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAClD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9E,SAAS,EAAE,CAAC;SACT,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC;SACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;CACpD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,OAAO,cAAc;IAChB,IAAI,CAAa;IACjB,UAAU,CAAS;IACnB,aAAa,CAAS;IACtB,SAAS,CAAuC;IAChD,SAAS,CAAyC;IAClD,eAAe,CAAS;IAChB,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEhE,YAAY,MAA4B,EAAE,eAAuB;QAC/D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU,CAAC,KAAkB;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC;QACpD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAY,CAAC;QACxF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,kBAAkB,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/F,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CACvD,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAChG,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QACxD,IAAI;QACJ,YAAY,CAAC,OAAO,EAAE,kBAAkB,IAAI,EAAE,CAAC;KAChD,CAAC,CACH,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;QACxF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CACjH,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CACH,CAAC;IACF,OAAO,IAAI,cAAc,CACvB;QACE,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;QACvD,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,MAAM,CAAC,cAAc;QACpC,SAAS;QACT,SAAS;KACV,EACD,OAAO,CAAC,YAAY,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,kBAAkB,CAAC,QAAsB;IACxD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,KAAK,CAAC,IAAI,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAsB;IAC1D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC,OAAO,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB,EAAE,KAAkB;IAC7E,MAAM,MAAM,GAAe;QACzB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1C,GAAG,KAAK,CAAC,eAAe;KACzB,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1D,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC;IAC7E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAsB,EACtB,IAAY,EACZ,QAA2B;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAsB,EACtB,QAA0C;IAE1C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,SAAS;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7E,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB,EAAE,QAA2B;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC/C,IAAI,EAAE;SACN,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CACtH,CAAC;IACJ,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAsB,EACtB,IAAY,EACZ,QAAsB,EACtB,QAA2B;IAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CACT,YAAY,IAAI,6BAA6B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAC9I,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAC5C,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAChE,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,YAAY,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5G,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAChG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CACT,YAAY,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAC/H,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY;YAAE,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CACT,GAAG,aAAa,CACd,MAAM,EACN,IAAI,EACJ,SAAS,KAAK,GAAG,CAAC,EAAE,EACpB,KAAK,EACL,QAAQ,EACR,mBAAmB,EACnB,SAAS,EACT,OAAO,CACR,CACF,CAAC;QACF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,MAAsB,EACtB,YAAoB,EACpB,KAAa,EACb,KAA0B,EAC1B,QAA2B,EAC3B,mBAAwC,EACxC,iBAAsC,EACtC,OAAgC;IAEhC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,aAAa,CAClB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,CAAC,IAAI,EACV,QAAQ,CAAC,SAAS,EAClB,mBAAmB,EACnB,iBAAiB,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,aAAa,CACX,MAAM,EACN,YAAY,EACZ,GAAG,KAAK,SAAS,IAAI,CAAC,EAAE,EAAE,EAC1B,IAAI,EACJ,QAAQ,CAAC,SAAS,EAClB,mBAAmB,EACnB,iBAAiB,CAClB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,YAAoB,EACpB,KAAa,EACb,KAAmB,EACnB,QAA0C,EAC1C,OAAgC;IAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,YAAY,YAAY,IAAI,KAAK,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG;SACtI,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IACE,OAAO,KAAK,SAAS;QACrB,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACvE,CAAC;QACD,MAAM,CAAC,IAAI,CACT,YAAY,YAAY,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CACjI,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CACT,YAAY,YAAY,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,MAAsB,EACtB,YAAoB,EACpB,KAAa,EACb,KAAkB,EAClB,SAA2C,EAC3C,mBAAwC,EACxC,iBAAsC;IAEtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CACT,YAAY,YAAY,IAAI,KAAK,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CACvI,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,YAAY,YAAY,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,YAAY,IAAI,KAAK,EAAE,CAAC,CAC5F,CAAC;IACF,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CACT,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,GAAG,CACrF,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,YAAY,IAAI,KAAK,KAAK,KAAK,EAAE,CACzD,CACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAsB,EAAE,KAAa,EAAE,KAAkB;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,4BAA4B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,GAAG,KAAK,+BAA+B,UAAU,EAAE;YACrD,CAAC,CAAC,GAAG,KAAK,4BAA4B,UAAU,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7E,OAAO,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,QAAQ,GAAG,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,IACE,MAAM,CAAC,IAAI,KAAK,QAAQ;QACxB,UAAU,KAAK,SAAS;QACxB,QAAQ,EAAE,IAAI,KAAK,SAAS;QAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC/B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,oEAAoE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,MAAsB,EACtB,KAA0B,EAC1B,QAA2B;IAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;SAClF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/F,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,iBAAiB,KAAK,CAAC,EAAE,EAAE,CAAC;KAC5F,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,MAAsB,EACtB,KAAkB,EAClB,SAA2C;IAE3C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAsB;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QAClD,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,YAAY,CACnB,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAChE,iBAAiB,CAClB;KACF,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5D,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC9E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,GAAkC;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC;IAChC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,GAAgC;IAClD,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzF,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;YACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;YAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC5E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;QAC3B,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAqC,EAAE,OAAe;IACxE,MAAM,EACJ,EAAE,EACF,OAAO,EACP,MAAM,EACN,WAAW,EAAE,UAAU,EACvB,KAAK,EACL,YAAY,EAAE,WAAW,EACzB,eAAe,EAAE,cAAc,EAC/B,GAAG,KAAK,EACT,GAAG,GAAG,CAAC;IACR,OAAQ,KAA+B,CAAC,OAAO,CAAC;IAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACvF,MAAM,KAAK,GAAgB;QACzB,EAAE;QACF,OAAO;QACP,cAAc;QACd,OAAO;QACP,eAAe,EAAE,KAAK;KACvB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAChD,IAAI,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5D,IAAI,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAC7C,IAAI,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA0B;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB,EAAE,QAA6B;IACvE,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,QAAQ,CAAC;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAuB,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAwE,EACxE,OAAwB;IAExB,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,SAAS,CAAI,GAA2B;IAC/C,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { AgentCallResult, CallState, EffectResult, InstanceRuntimeStatus, JsonValue, TerminalHalt } from "./wire.js";
2
+ /**
3
+ * Handle and effect identifiers become a path segment, a git ref component, and an Activity ID
4
+ * component, so the grammar is the intersection of what all three accept.
5
+ */
6
+ export declare const IDENTIFIER_PATTERN: RegExp;
7
+ export type AgentDisposition = {
8
+ kind: "returned";
9
+ value: JsonValue;
10
+ sessionId?: string;
11
+ } | {
12
+ kind: "failed";
13
+ reason: string;
14
+ sessionId?: string;
15
+ } | {
16
+ kind: "deadline_exceeded";
17
+ sessionId?: string;
18
+ } | {
19
+ kind: "indeterminate";
20
+ reason: string;
21
+ };
22
+ export type EffectDisposition = {
23
+ kind: "completed";
24
+ } | {
25
+ kind: "failed";
26
+ reason: string;
27
+ };
28
+ /**
29
+ * The expected-failure signal: engine ports and authoring helpers throw it, the supervisor converts
30
+ * it into a halted domain result, and a `catch` in `run()` is the author's tolerance policy. An
31
+ * ordinary exception is deliberately different - it fails the Workflow Task for code repair.
32
+ */
33
+ export declare class WorkflowHalt extends Error {
34
+ readonly reason: string;
35
+ constructor(reason: string);
36
+ }
37
+ export declare function assertIdentifier(kind: string, id: string): void;
38
+ /** The operator-facing address of one call, and the key the reconciliation Update names. */
39
+ export declare function callAddress(handleId: string, ordinal: number): string;
40
+ export declare function agentActivityId(handleId: string, ordinal: number, invocation: number): string;
41
+ export declare function effectActivityId(effectId: string): string;
42
+ export declare function deliverQuestionActivityId(askId: string): string;
43
+ export declare function agentDisposition(result: AgentCallResult): AgentDisposition;
44
+ export declare function effectDisposition(result: EffectResult, effectId: string): EffectDisposition;
45
+ /**
46
+ * The runtime status is read straight off the call list and the terminal halt: a parked call means
47
+ * `awaiting_reconciliation`, an ask waiting on a reply means `awaiting_answer`, and nothing about
48
+ * the status is stored separately. A halted terminal wins over any call; reconciliation, needing an
49
+ * operator, takes precedence over an ask that a human answer alone settles.
50
+ */
51
+ export declare function projectDomainStatus(calls: readonly CallState[], terminal: TerminalHalt | undefined): InstanceRuntimeStatus;
52
+ export declare function parkedCallIds(calls: readonly CallState[]): string[];
53
+ export declare function awaitingAnswerCallIds(calls: readonly CallState[]): string[];
54
+ /**
55
+ * Claude resumes by encoded `cwd` and silently starts a fresh session when it does not match, so
56
+ * a resumed call that answers under a different session id has lost the conversation it claimed.
57
+ */
58
+ export declare function sessionMismatchReason(expected: string, actual: string | undefined): string | undefined;
59
+ export declare function concurrentCallReason(handleId: string): string;
60
+ export declare function callBudgetReason(limit: number): string;
61
+ export declare function reconciliationHaltReason(callId: string): string;
62
+ export declare function askTimeoutReason(callId: string): string;
63
+ /** The default two-day deadline an unanswered ask halts on, in seconds. */
64
+ export declare const DEFAULT_ASK_TIMEOUT_SECONDS = 172800;
65
+ /** Validate an author-supplied ask timeout: finite and positive, defaulting to two days. */
66
+ export declare function askTimeoutSeconds(timeoutSeconds: number | undefined): number;
67
+ //# sourceMappingURL=calls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../src/core/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,YAAY,EACb,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,MAAM,EAAE,MAAM,EAIzB;CACF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAM/D;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAY1E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAG3F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,QAAQ,EAAE,YAAY,GAAG,SAAS,GACjC,qBAAqB,CAKvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CAE3E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B,SAAU,CAAC;AAEnD,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM5E"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Handle and effect identifiers become a path segment, a git ref component, and an Activity ID
3
+ * component, so the grammar is the intersection of what all three accept.
4
+ */
5
+ export const IDENTIFIER_PATTERN = /^[a-z0-9][a-z0-9-]{0,63}$/;
6
+ /**
7
+ * The expected-failure signal: engine ports and authoring helpers throw it, the supervisor converts
8
+ * it into a halted domain result, and a `catch` in `run()` is the author's tolerance policy. An
9
+ * ordinary exception is deliberately different - it fails the Workflow Task for code repair.
10
+ */
11
+ export class WorkflowHalt extends Error {
12
+ reason;
13
+ constructor(reason) {
14
+ super(reason);
15
+ this.name = "WorkflowHalt";
16
+ this.reason = reason;
17
+ }
18
+ }
19
+ export function assertIdentifier(kind, id) {
20
+ if (!IDENTIFIER_PATTERN.test(id)) {
21
+ throw new Error(`invalid ${kind} identifier ${JSON.stringify(id)}: expected ${IDENTIFIER_PATTERN.source}`);
22
+ }
23
+ }
24
+ /** The operator-facing address of one call, and the key the reconciliation Update names. */
25
+ export function callAddress(handleId, ordinal) {
26
+ return `${handleId}/call/${ordinal}`;
27
+ }
28
+ export function agentActivityId(handleId, ordinal, invocation) {
29
+ return `agent:${handleId}:call:${ordinal}:invocation:${invocation}`;
30
+ }
31
+ export function effectActivityId(effectId) {
32
+ return `effect:${effectId}:call:1`;
33
+ }
34
+ export function deliverQuestionActivityId(askId) {
35
+ return `ask:${askId}:call:1`;
36
+ }
37
+ export function agentDisposition(result) {
38
+ if (result.status === "returned") {
39
+ return result.sessionId === undefined
40
+ ? { kind: "returned", value: result.value }
41
+ : { kind: "returned", value: result.value, sessionId: result.sessionId };
42
+ }
43
+ if (result.status === "indeterminate") {
44
+ return { kind: "indeterminate", reason: result.reason };
45
+ }
46
+ const sessionId = result.sessionId === undefined ? {} : { sessionId: result.sessionId };
47
+ if (result.status === "deadline_exceeded")
48
+ return { kind: "deadline_exceeded", ...sessionId };
49
+ return { kind: "failed", reason: result.reason, ...sessionId };
50
+ }
51
+ export function effectDisposition(result, effectId) {
52
+ if (result.status === "completed")
53
+ return { kind: "completed" };
54
+ return { kind: "failed", reason: `effect-failed:${effectId}:${result.reason}` };
55
+ }
56
+ /**
57
+ * The runtime status is read straight off the call list and the terminal halt: a parked call means
58
+ * `awaiting_reconciliation`, an ask waiting on a reply means `awaiting_answer`, and nothing about
59
+ * the status is stored separately. A halted terminal wins over any call; reconciliation, needing an
60
+ * operator, takes precedence over an ask that a human answer alone settles.
61
+ */
62
+ export function projectDomainStatus(calls, terminal) {
63
+ if (terminal !== undefined)
64
+ return "halted";
65
+ if (calls.some((call) => call.kind === "parked"))
66
+ return "awaiting_reconciliation";
67
+ if (calls.some((call) => call.kind === "awaiting_answer"))
68
+ return "awaiting_answer";
69
+ return "running";
70
+ }
71
+ export function parkedCallIds(calls) {
72
+ return calls.filter((call) => call.kind === "parked").map((call) => call.callId);
73
+ }
74
+ export function awaitingAnswerCallIds(calls) {
75
+ return calls.filter((call) => call.kind === "awaiting_answer").map((call) => call.callId);
76
+ }
77
+ /**
78
+ * Claude resumes by encoded `cwd` and silently starts a fresh session when it does not match, so
79
+ * a resumed call that answers under a different session id has lost the conversation it claimed.
80
+ */
81
+ export function sessionMismatchReason(expected, actual) {
82
+ if (actual === undefined || actual === expected)
83
+ return undefined;
84
+ return `session resume mismatch: expected ${JSON.stringify(expected)}, provider answered under ${JSON.stringify(actual)}`;
85
+ }
86
+ export function concurrentCallReason(handleId) {
87
+ return `concurrent-call:${handleId}`;
88
+ }
89
+ export function callBudgetReason(limit) {
90
+ return `call-budget-exhausted:${limit}`;
91
+ }
92
+ export function reconciliationHaltReason(callId) {
93
+ return `reconciliation-halt:${callId}`;
94
+ }
95
+ export function askTimeoutReason(callId) {
96
+ return `ask-timeout:${callId}`;
97
+ }
98
+ /** The default two-day deadline an unanswered ask halts on, in seconds. */
99
+ export const DEFAULT_ASK_TIMEOUT_SECONDS = 172_800;
100
+ /** Validate an author-supplied ask timeout: finite and positive, defaulting to two days. */
101
+ export function askTimeoutSeconds(timeoutSeconds) {
102
+ if (timeoutSeconds === undefined)
103
+ return DEFAULT_ASK_TIMEOUT_SECONDS;
104
+ if (!Number.isFinite(timeoutSeconds) || timeoutSeconds <= 0) {
105
+ throw new Error(`ask timeout must be a positive finite number of seconds: ${timeoutSeconds}`);
106
+ }
107
+ return timeoutSeconds;
108
+ }
109
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/core/calls.ts"],"names":[],"mappings":"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"}