@koda-sl/baker-cli 0.39.29-dev.994437bd → 0.66.2

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 (323) hide show
  1. package/README.md +1754 -7
  2. package/canvas/avocado-tutorial.json +89 -0
  3. package/canvas/hello-world-composition/index.html +83 -0
  4. package/canvas/hello-world-composition/meta.json +41 -0
  5. package/canvas/hello-world-overlay.json +37 -0
  6. package/canvas/phone-scroll-composition/index.html +141 -0
  7. package/canvas/phone-scroll-composition/meta.json +39 -0
  8. package/canvas/tiktok-captions-composition/index.html +126 -0
  9. package/canvas/tiktok-captions-composition/meta.json +46 -0
  10. package/canvas/video-overlay-composition/index.html +239 -0
  11. package/canvas/video-overlay-composition/meta.json +29 -0
  12. package/dist/cli.js +2 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/ads/meta/creatives.js +1 -1
  15. package/dist/commands/canvas/catalog.d.ts +2 -0
  16. package/dist/commands/canvas/catalog.d.ts.map +1 -0
  17. package/dist/commands/canvas/catalog.js +13 -0
  18. package/dist/commands/canvas/catalog.js.map +1 -0
  19. package/dist/commands/canvas/index.d.ts +2 -0
  20. package/dist/commands/canvas/index.d.ts.map +1 -0
  21. package/dist/commands/canvas/index.js +32 -0
  22. package/dist/commands/canvas/index.js.map +1 -0
  23. package/dist/commands/canvas/inspect.d.ts +16 -0
  24. package/dist/commands/canvas/inspect.d.ts.map +1 -0
  25. package/dist/commands/canvas/inspect.js +115 -0
  26. package/dist/commands/canvas/inspect.js.map +1 -0
  27. package/dist/commands/canvas/run.d.ts +24 -0
  28. package/dist/commands/canvas/run.d.ts.map +1 -0
  29. package/dist/commands/canvas/run.js +56 -0
  30. package/dist/commands/canvas/run.js.map +1 -0
  31. package/dist/commands/canvas/scaffold-static-ad.d.ts +40 -0
  32. package/dist/commands/canvas/scaffold-static-ad.d.ts.map +1 -0
  33. package/dist/commands/canvas/scaffold-static-ad.js +265 -0
  34. package/dist/commands/canvas/scaffold-static-ad.js.map +1 -0
  35. package/dist/commands/canvas/scaffold-video.d.ts +44 -0
  36. package/dist/commands/canvas/scaffold-video.d.ts.map +1 -0
  37. package/dist/commands/canvas/scaffold-video.js +235 -0
  38. package/dist/commands/canvas/scaffold-video.js.map +1 -0
  39. package/dist/commands/canvas/validate.d.ts +8 -0
  40. package/dist/commands/canvas/validate.d.ts.map +1 -0
  41. package/dist/commands/canvas/validate.js +37 -0
  42. package/dist/commands/canvas/validate.js.map +1 -0
  43. package/dist/commands/images/find.d.ts +1 -1
  44. package/dist/commands/images/find.d.ts.map +1 -1
  45. package/dist/commands/images/find.js +12 -3
  46. package/dist/commands/images/find.js.map +1 -1
  47. package/dist/commands/images/google.d.ts +1 -1
  48. package/dist/commands/images/google.d.ts.map +1 -1
  49. package/dist/commands/images/google.js +12 -3
  50. package/dist/commands/images/google.js.map +1 -1
  51. package/dist/commands/images/stock.d.ts +1 -1
  52. package/dist/commands/images/stock.d.ts.map +1 -1
  53. package/dist/commands/images/stock.js +7 -3
  54. package/dist/commands/images/stock.js.map +1 -1
  55. package/dist/commands/testimonials/list.d.ts.map +1 -1
  56. package/dist/commands/testimonials/list.js +21 -6
  57. package/dist/commands/testimonials/list.js.map +1 -1
  58. package/dist/commands/testimonials/search.d.ts.map +1 -1
  59. package/dist/commands/testimonials/search.js +21 -6
  60. package/dist/commands/testimonials/search.js.map +1 -1
  61. package/dist/commands/testimonials/search.test.js +3 -3
  62. package/dist/commands/testimonials/search.test.js.map +1 -1
  63. package/dist/engine/client/backend-client.d.ts +50 -0
  64. package/dist/engine/client/backend-client.d.ts.map +1 -0
  65. package/dist/engine/client/backend-client.js +20 -0
  66. package/dist/engine/client/backend-client.js.map +1 -0
  67. package/dist/engine/client/env.d.ts +7 -0
  68. package/dist/engine/client/env.d.ts.map +1 -0
  69. package/dist/engine/client/env.js +18 -0
  70. package/dist/engine/client/env.js.map +1 -0
  71. package/dist/engine/client/http.d.ts +56 -0
  72. package/dist/engine/client/http.d.ts.map +1 -0
  73. package/dist/engine/client/http.js +168 -0
  74. package/dist/engine/client/http.js.map +1 -0
  75. package/dist/engine/engine/cache-key.d.ts +19 -0
  76. package/dist/engine/engine/cache-key.d.ts.map +1 -0
  77. package/dist/engine/engine/cache-key.js +33 -0
  78. package/dist/engine/engine/cache-key.js.map +1 -0
  79. package/dist/engine/engine/canonical.d.ts +14 -0
  80. package/dist/engine/engine/canonical.d.ts.map +1 -0
  81. package/dist/engine/engine/canonical.js +53 -0
  82. package/dist/engine/engine/canonical.js.map +1 -0
  83. package/dist/engine/engine/composition-hash.d.ts +14 -0
  84. package/dist/engine/engine/composition-hash.d.ts.map +1 -0
  85. package/dist/engine/engine/composition-hash.js +51 -0
  86. package/dist/engine/engine/composition-hash.js.map +1 -0
  87. package/dist/engine/engine/composition-meta.d.ts +77 -0
  88. package/dist/engine/engine/composition-meta.d.ts.map +1 -0
  89. package/dist/engine/engine/composition-meta.js +199 -0
  90. package/dist/engine/engine/composition-meta.js.map +1 -0
  91. package/dist/engine/engine/context.d.ts +16 -0
  92. package/dist/engine/engine/context.d.ts.map +1 -0
  93. package/dist/engine/engine/context.js +2 -0
  94. package/dist/engine/engine/context.js.map +1 -0
  95. package/dist/engine/engine/define.d.ts +69 -0
  96. package/dist/engine/engine/define.d.ts.map +1 -0
  97. package/dist/engine/engine/define.js +9 -0
  98. package/dist/engine/engine/define.js.map +1 -0
  99. package/dist/engine/engine/didyoumean.d.ts +2 -0
  100. package/dist/engine/engine/didyoumean.d.ts.map +1 -0
  101. package/dist/engine/engine/didyoumean.js +58 -0
  102. package/dist/engine/engine/didyoumean.js.map +1 -0
  103. package/dist/engine/engine/errors.d.ts +41 -0
  104. package/dist/engine/engine/errors.d.ts.map +1 -0
  105. package/dist/engine/engine/errors.js +45 -0
  106. package/dist/engine/engine/errors.js.map +1 -0
  107. package/dist/engine/engine/executor.d.ts +72 -0
  108. package/dist/engine/engine/executor.d.ts.map +1 -0
  109. package/dist/engine/engine/executor.js +445 -0
  110. package/dist/engine/engine/executor.js.map +1 -0
  111. package/dist/engine/engine/refs.d.ts +12 -0
  112. package/dist/engine/engine/refs.d.ts.map +1 -0
  113. package/dist/engine/engine/refs.js +48 -0
  114. package/dist/engine/engine/refs.js.map +1 -0
  115. package/dist/engine/engine/registry.d.ts +11 -0
  116. package/dist/engine/engine/registry.d.ts.map +1 -0
  117. package/dist/engine/engine/registry.js +26 -0
  118. package/dist/engine/engine/registry.js.map +1 -0
  119. package/dist/engine/engine/scheduler.d.ts +10 -0
  120. package/dist/engine/engine/scheduler.d.ts.map +1 -0
  121. package/dist/engine/engine/scheduler.js +89 -0
  122. package/dist/engine/engine/scheduler.js.map +1 -0
  123. package/dist/engine/engine/validator.d.ts +31 -0
  124. package/dist/engine/engine/validator.d.ts.map +1 -0
  125. package/dist/engine/engine/validator.js +501 -0
  126. package/dist/engine/engine/validator.js.map +1 -0
  127. package/dist/engine/index.d.ts +33 -0
  128. package/dist/engine/index.d.ts.map +1 -0
  129. package/dist/engine/index.js +104 -0
  130. package/dist/engine/index.js.map +1 -0
  131. package/dist/engine/lib/ulid.d.ts +3 -0
  132. package/dist/engine/lib/ulid.d.ts.map +1 -0
  133. package/dist/engine/lib/ulid.js +36 -0
  134. package/dist/engine/lib/ulid.js.map +1 -0
  135. package/dist/engine/models/canvas-ad-params.test.d.ts +2 -0
  136. package/dist/engine/models/canvas-ad-params.test.d.ts.map +1 -0
  137. package/dist/engine/models/canvas-ad-params.test.js +60 -0
  138. package/dist/engine/models/canvas-ad-params.test.js.map +1 -0
  139. package/dist/engine/models/registry.d.ts +63 -0
  140. package/dist/engine/models/registry.d.ts.map +1 -0
  141. package/dist/engine/models/registry.js +432 -0
  142. package/dist/engine/models/registry.js.map +1 -0
  143. package/dist/engine/models/validateParams.d.ts +38 -0
  144. package/dist/engine/models/validateParams.d.ts.map +1 -0
  145. package/dist/engine/models/validateParams.js +166 -0
  146. package/dist/engine/models/validateParams.js.map +1 -0
  147. package/dist/engine/nodes/ingest.d.ts +113 -0
  148. package/dist/engine/nodes/ingest.d.ts.map +1 -0
  149. package/dist/engine/nodes/ingest.js +555 -0
  150. package/dist/engine/nodes/ingest.js.map +1 -0
  151. package/dist/engine/nodes/ingest.svg.test.d.ts +2 -0
  152. package/dist/engine/nodes/ingest.svg.test.d.ts.map +1 -0
  153. package/dist/engine/nodes/ingest.svg.test.js +30 -0
  154. package/dist/engine/nodes/ingest.svg.test.js.map +1 -0
  155. package/dist/engine/nodes/local/audioTimeline.d.ts +82 -0
  156. package/dist/engine/nodes/local/audioTimeline.d.ts.map +1 -0
  157. package/dist/engine/nodes/local/audioTimeline.js +97 -0
  158. package/dist/engine/nodes/local/audioTimeline.js.map +1 -0
  159. package/dist/engine/nodes/local/ffmpeg.d.ts +56 -0
  160. package/dist/engine/nodes/local/ffmpeg.d.ts.map +1 -0
  161. package/dist/engine/nodes/local/ffmpeg.js +50 -0
  162. package/dist/engine/nodes/local/ffmpeg.js.map +1 -0
  163. package/dist/engine/nodes/local/fontSpecimen.d.ts +50 -0
  164. package/dist/engine/nodes/local/fontSpecimen.d.ts.map +1 -0
  165. package/dist/engine/nodes/local/fontSpecimen.js +198 -0
  166. package/dist/engine/nodes/local/fontSpecimen.js.map +1 -0
  167. package/dist/engine/nodes/local/hyperframe-snapshot.d.ts +116 -0
  168. package/dist/engine/nodes/local/hyperframe-snapshot.d.ts.map +1 -0
  169. package/dist/engine/nodes/local/hyperframe-snapshot.js +230 -0
  170. package/dist/engine/nodes/local/hyperframe-snapshot.js.map +1 -0
  171. package/dist/engine/nodes/local/hyperframe.d.ts +123 -0
  172. package/dist/engine/nodes/local/hyperframe.d.ts.map +1 -0
  173. package/dist/engine/nodes/local/hyperframe.js +367 -0
  174. package/dist/engine/nodes/local/hyperframe.js.map +1 -0
  175. package/dist/engine/nodes/local/imagemagick.d.ts +56 -0
  176. package/dist/engine/nodes/local/imagemagick.d.ts.map +1 -0
  177. package/dist/engine/nodes/local/imagemagick.js +71 -0
  178. package/dist/engine/nodes/local/imagemagick.js.map +1 -0
  179. package/dist/engine/nodes/local/lib/assets.d.ts +20 -0
  180. package/dist/engine/nodes/local/lib/assets.d.ts.map +1 -0
  181. package/dist/engine/nodes/local/lib/assets.js +40 -0
  182. package/dist/engine/nodes/local/lib/assets.js.map +1 -0
  183. package/dist/engine/nodes/local/lib/cli-runner.d.ts +78 -0
  184. package/dist/engine/nodes/local/lib/cli-runner.d.ts.map +1 -0
  185. package/dist/engine/nodes/local/lib/cli-runner.js +254 -0
  186. package/dist/engine/nodes/local/lib/cli-runner.js.map +1 -0
  187. package/dist/engine/nodes/local/lib/ffmpeg.d.ts +23 -0
  188. package/dist/engine/nodes/local/lib/ffmpeg.d.ts.map +1 -0
  189. package/dist/engine/nodes/local/lib/ffmpeg.js +75 -0
  190. package/dist/engine/nodes/local/lib/ffmpeg.js.map +1 -0
  191. package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts +2 -0
  192. package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts.map +1 -0
  193. package/dist/engine/nodes/local/lib/hyperframe-errors.js +47 -0
  194. package/dist/engine/nodes/local/lib/hyperframe-errors.js.map +1 -0
  195. package/dist/engine/nodes/local/lib/templating.d.ts +22 -0
  196. package/dist/engine/nodes/local/lib/templating.d.ts.map +1 -0
  197. package/dist/engine/nodes/local/lib/templating.js +85 -0
  198. package/dist/engine/nodes/local/lib/templating.js.map +1 -0
  199. package/dist/engine/nodes/local/text.d.ts +6 -0
  200. package/dist/engine/nodes/local/text.d.ts.map +1 -0
  201. package/dist/engine/nodes/local/text.js +15 -0
  202. package/dist/engine/nodes/local/text.js.map +1 -0
  203. package/dist/engine/nodes/remote/delegate.d.ts +25 -0
  204. package/dist/engine/nodes/remote/delegate.d.ts.map +1 -0
  205. package/dist/engine/nodes/remote/delegate.js +160 -0
  206. package/dist/engine/nodes/remote/delegate.js.map +1 -0
  207. package/dist/engine/nodes/remote/dialogue.d.ts +34 -0
  208. package/dist/engine/nodes/remote/dialogue.d.ts.map +1 -0
  209. package/dist/engine/nodes/remote/dialogue.js +54 -0
  210. package/dist/engine/nodes/remote/dialogue.js.map +1 -0
  211. package/dist/engine/nodes/remote/image.d.ts +42 -0
  212. package/dist/engine/nodes/remote/image.d.ts.map +1 -0
  213. package/dist/engine/nodes/remote/image.js +43 -0
  214. package/dist/engine/nodes/remote/image.js.map +1 -0
  215. package/dist/engine/nodes/remote/imageAspectAdapt.d.ts +30 -0
  216. package/dist/engine/nodes/remote/imageAspectAdapt.d.ts.map +1 -0
  217. package/dist/engine/nodes/remote/imageAspectAdapt.js +42 -0
  218. package/dist/engine/nodes/remote/imageAspectAdapt.js.map +1 -0
  219. package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts +39 -0
  220. package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts.map +1 -0
  221. package/dist/engine/nodes/remote/imageBackgroundRemove.js +37 -0
  222. package/dist/engine/nodes/remote/imageBackgroundRemove.js.map +1 -0
  223. package/dist/engine/nodes/remote/imageDescribe.d.ts +29 -0
  224. package/dist/engine/nodes/remote/imageDescribe.d.ts.map +1 -0
  225. package/dist/engine/nodes/remote/imageDescribe.js +25 -0
  226. package/dist/engine/nodes/remote/imageDescribe.js.map +1 -0
  227. package/dist/engine/nodes/remote/imageReferenceSheet.d.ts +34 -0
  228. package/dist/engine/nodes/remote/imageReferenceSheet.d.ts.map +1 -0
  229. package/dist/engine/nodes/remote/imageReferenceSheet.js +38 -0
  230. package/dist/engine/nodes/remote/imageReferenceSheet.js.map +1 -0
  231. package/dist/engine/nodes/remote/imageSearch.d.ts +18 -0
  232. package/dist/engine/nodes/remote/imageSearch.d.ts.map +1 -0
  233. package/dist/engine/nodes/remote/imageSearch.js +22 -0
  234. package/dist/engine/nodes/remote/imageSearch.js.map +1 -0
  235. package/dist/engine/nodes/remote/imageSelect.d.ts +39 -0
  236. package/dist/engine/nodes/remote/imageSelect.d.ts.map +1 -0
  237. package/dist/engine/nodes/remote/imageSelect.js +45 -0
  238. package/dist/engine/nodes/remote/imageSelect.js.map +1 -0
  239. package/dist/engine/nodes/remote/music.d.ts +45 -0
  240. package/dist/engine/nodes/remote/music.d.ts.map +1 -0
  241. package/dist/engine/nodes/remote/music.js +73 -0
  242. package/dist/engine/nodes/remote/music.js.map +1 -0
  243. package/dist/engine/nodes/remote/soundEffect.d.ts +21 -0
  244. package/dist/engine/nodes/remote/soundEffect.d.ts.map +1 -0
  245. package/dist/engine/nodes/remote/soundEffect.js +41 -0
  246. package/dist/engine/nodes/remote/soundEffect.js.map +1 -0
  247. package/dist/engine/nodes/remote/textGenerate.d.ts +21 -0
  248. package/dist/engine/nodes/remote/textGenerate.d.ts.map +1 -0
  249. package/dist/engine/nodes/remote/textGenerate.js +27 -0
  250. package/dist/engine/nodes/remote/textGenerate.js.map +1 -0
  251. package/dist/engine/nodes/remote/tts.d.ts +45 -0
  252. package/dist/engine/nodes/remote/tts.d.ts.map +1 -0
  253. package/dist/engine/nodes/remote/tts.js +66 -0
  254. package/dist/engine/nodes/remote/tts.js.map +1 -0
  255. package/dist/engine/nodes/remote/video.d.ts +58 -0
  256. package/dist/engine/nodes/remote/video.d.ts.map +1 -0
  257. package/dist/engine/nodes/remote/video.js +44 -0
  258. package/dist/engine/nodes/remote/video.js.map +1 -0
  259. package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts +30 -0
  260. package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts.map +1 -0
  261. package/dist/engine/nodes/remote/videoBackgroundRemove.js +29 -0
  262. package/dist/engine/nodes/remote/videoBackgroundRemove.js.map +1 -0
  263. package/dist/engine/nodes/remote/videoDeconstruct.d.ts +61 -0
  264. package/dist/engine/nodes/remote/videoDeconstruct.d.ts.map +1 -0
  265. package/dist/engine/nodes/remote/videoDeconstruct.js +40 -0
  266. package/dist/engine/nodes/remote/videoDeconstruct.js.map +1 -0
  267. package/dist/engine/nodes/remote/videoLipsync.d.ts +37 -0
  268. package/dist/engine/nodes/remote/videoLipsync.d.ts.map +1 -0
  269. package/dist/engine/nodes/remote/videoLipsync.js +26 -0
  270. package/dist/engine/nodes/remote/videoLipsync.js.map +1 -0
  271. package/dist/engine/nodes/remote/videoTranscribe.d.ts +116 -0
  272. package/dist/engine/nodes/remote/videoTranscribe.d.ts.map +1 -0
  273. package/dist/engine/nodes/remote/videoTranscribe.js +123 -0
  274. package/dist/engine/nodes/remote/videoTranscribe.js.map +1 -0
  275. package/dist/engine/nodes/remote/voiceSelect.d.ts +28 -0
  276. package/dist/engine/nodes/remote/voiceSelect.d.ts.map +1 -0
  277. package/dist/engine/nodes/remote/voiceSelect.js +25 -0
  278. package/dist/engine/nodes/remote/voiceSelect.js.map +1 -0
  279. package/dist/engine/scaffold/staticAd.d.ts +44 -0
  280. package/dist/engine/scaffold/staticAd.d.ts.map +1 -0
  281. package/dist/engine/scaffold/staticAd.js +243 -0
  282. package/dist/engine/scaffold/staticAd.js.map +1 -0
  283. package/dist/engine/scaffold/video.d.ts +56 -0
  284. package/dist/engine/scaffold/video.d.ts.map +1 -0
  285. package/dist/engine/scaffold/video.js +709 -0
  286. package/dist/engine/scaffold/video.js.map +1 -0
  287. package/dist/engine/schema/canvas.d.ts +41 -0
  288. package/dist/engine/schema/canvas.d.ts.map +1 -0
  289. package/dist/engine/schema/canvas.js +67 -0
  290. package/dist/engine/schema/canvas.js.map +1 -0
  291. package/dist/engine/schema/catalog.d.ts +25 -0
  292. package/dist/engine/schema/catalog.d.ts.map +1 -0
  293. package/dist/engine/schema/catalog.js +48 -0
  294. package/dist/engine/schema/catalog.js.map +1 -0
  295. package/dist/engine/schema/primitives.d.ts +6 -0
  296. package/dist/engine/schema/primitives.d.ts.map +1 -0
  297. package/dist/engine/schema/primitives.js +4 -0
  298. package/dist/engine/schema/primitives.js.map +1 -0
  299. package/dist/engine/schema/prompts.d.ts +4 -0
  300. package/dist/engine/schema/prompts.d.ts.map +1 -0
  301. package/dist/engine/schema/prompts.js +23 -0
  302. package/dist/engine/schema/prompts.js.map +1 -0
  303. package/dist/engine/schema/refs.d.ts +113 -0
  304. package/dist/engine/schema/refs.d.ts.map +1 -0
  305. package/dist/engine/schema/refs.js +35 -0
  306. package/dist/engine/schema/refs.js.map +1 -0
  307. package/dist/engine/storage/asset-store.d.ts +48 -0
  308. package/dist/engine/storage/asset-store.d.ts.map +1 -0
  309. package/dist/engine/storage/asset-store.js +166 -0
  310. package/dist/engine/storage/asset-store.js.map +1 -0
  311. package/dist/engine/storage/cache-store.d.ts +21 -0
  312. package/dist/engine/storage/cache-store.d.ts.map +1 -0
  313. package/dist/engine/storage/cache-store.js +31 -0
  314. package/dist/engine/storage/cache-store.js.map +1 -0
  315. package/dist/engine/storage/output-writer.d.ts +18 -0
  316. package/dist/engine/storage/output-writer.d.ts.map +1 -0
  317. package/dist/engine/storage/output-writer.js +52 -0
  318. package/dist/engine/storage/output-writer.js.map +1 -0
  319. package/dist/engine/storage/sha256.d.ts +2 -0
  320. package/dist/engine/storage/sha256.d.ts.map +1 -0
  321. package/dist/engine/storage/sha256.js +7 -0
  322. package/dist/engine/storage/sha256.js.map +1 -0
  323. package/package.json +15 -3
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Kahn's algorithm: produce execution layers from a dependency graph.
3
+ * Each layer contains node ids whose dependencies are all in earlier layers.
4
+ *
5
+ * Throws if the graph has a cycle. The caller should run cycle detection in
6
+ * the validator stage, but we double-check here as a safety net.
7
+ */
8
+ export function topologicalLayers(graph) {
9
+ const remaining = cloneGraph(graph);
10
+ const layers = [];
11
+ while (remaining.size > 0) {
12
+ const ready = collectReady(remaining);
13
+ if (ready.length === 0) {
14
+ throw new Error(`scheduler: cycle detected among ${[...remaining.keys()].join(", ")}`);
15
+ }
16
+ layers.push(ready);
17
+ removeNodes(remaining, ready);
18
+ }
19
+ return layers;
20
+ }
21
+ function cloneGraph(graph) {
22
+ const out = new Map();
23
+ for (const [k, deps] of graph)
24
+ out.set(k, new Set(deps));
25
+ return out;
26
+ }
27
+ function collectReady(remaining) {
28
+ const ready = [];
29
+ for (const [id, deps] of remaining)
30
+ if (deps.size === 0)
31
+ ready.push(id);
32
+ ready.sort();
33
+ return ready;
34
+ }
35
+ function removeNodes(remaining, ready) {
36
+ for (const id of ready)
37
+ remaining.delete(id);
38
+ for (const deps of remaining.values()) {
39
+ for (const id of ready)
40
+ deps.delete(id);
41
+ }
42
+ }
43
+ export function findCycle(graph) {
44
+ const reverseAdj = buildReverseAdj(graph);
45
+ const color = new Map();
46
+ for (const k of graph.keys())
47
+ color.set(k, 0);
48
+ const stack = [];
49
+ for (const id of graph.keys()) {
50
+ if ((color.get(id) ?? 0) !== 0)
51
+ continue;
52
+ const found = dfsCycle(id, color, stack, reverseAdj);
53
+ if (found)
54
+ return found;
55
+ }
56
+ return null;
57
+ }
58
+ function buildReverseAdj(graph) {
59
+ const reverseAdj = new Map();
60
+ for (const [node, deps] of graph) {
61
+ for (const dep of deps) {
62
+ const arr = reverseAdj.get(dep) ?? [];
63
+ arr.push(node);
64
+ reverseAdj.set(dep, arr);
65
+ }
66
+ }
67
+ return reverseAdj;
68
+ }
69
+ function dfsCycle(u, color, stack, reverseAdj) {
70
+ color.set(u, 1);
71
+ stack.push(u);
72
+ const children = reverseAdj.get(u) ?? [];
73
+ for (const v of children) {
74
+ const c = color.get(v) ?? 0;
75
+ if (c === 1) {
76
+ const idx = stack.indexOf(v);
77
+ return [...stack.slice(idx), v];
78
+ }
79
+ if (c === 0) {
80
+ const r = dfsCycle(v, color, stack, reverseAdj);
81
+ if (r)
82
+ return r;
83
+ }
84
+ }
85
+ color.set(u, 2);
86
+ stack.pop();
87
+ return null;
88
+ }
89
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/engine/engine/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type Canvas } from "../schema/canvas.ts";
2
+ import type { ValidationIssue } from "./errors.ts";
3
+ import type { NodeRegistry } from "./registry.ts";
4
+ type ValidationResult = {
5
+ ok: true;
6
+ canvas: Canvas;
7
+ estimatedCredits: number;
8
+ } | {
9
+ ok: false;
10
+ issues: ValidationIssue[];
11
+ };
12
+ type ValidationDeep = ValidationResult & {
13
+ /** Per-node credit estimate, in canvas order. Useful for `validate` cost previews. */
14
+ perNodeCredits?: Array<{
15
+ node_id: string;
16
+ node_type: string;
17
+ credits: number;
18
+ }>;
19
+ };
20
+ export declare function validateCanvas(input: unknown, registry: NodeRegistry): ValidationResult;
21
+ /**
22
+ * Async second pass that lets each node run its own `validateExtra` hook.
23
+ * Use this from `canvas validate` so composition-meta checks (and any
24
+ * future async validators) surface as standard validation issues.
25
+ *
26
+ * Returns the same result the sync pass would, with `perNodeCredits` added
27
+ * when the canvas is structurally OK.
28
+ */
29
+ export declare function validateCanvasDeep(input: unknown, registry: NodeRegistry): Promise<ValidationDeep>;
30
+ export {};
31
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,EAAyD,MAAM,qBAAqB,CAAC;AAIzG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,KAAK,gBAAgB,GACjB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAE7C,KAAK,cAAc,GAAG,gBAAgB,GAAG;IACvC,sFAAsF;IACtF,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF,CAAC;AA0BF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CA0BvF;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoDxG"}
@@ -0,0 +1,501 @@
1
+ import { z } from "zod";
2
+ import { isManagedNodeKind, validateModelInputs, validateModelParams } from "../models/validateParams.js";
3
+ import { CanvasSchema, parseRefExpr, REF_PREFIX } from "../schema/canvas.js";
4
+ import { extractSlots } from "../schema/prompts.js";
5
+ import { resolveOutputKinds } from "./define.js";
6
+ import { didYouMean } from "./didyoumean.js";
7
+ import { findCycle } from "./scheduler.js";
8
+ const MODEL_INPUT_KINDS = new Set(["image", "video", "audio"]);
9
+ const STAGE_CODES = {
10
+ PARSE: "PARSE_ERROR",
11
+ SHAPE: "SHAPE_ERROR",
12
+ UNKNOWN_NODE: "UNKNOWN_NODE_TYPE",
13
+ PARAMS: "INVALID_PARAMS",
14
+ PARAMS_EXTRA: "INVALID_PARAMS_EXTRA",
15
+ MODEL_PARAMS: "MODEL_INVALID_PARAMS",
16
+ MODEL_INPUTS: "MODEL_INVALID_INPUTS",
17
+ REF_UNRESOLVED: "UNRESOLVED_REF",
18
+ REF_OUT_OF_BOUNDS: "REF_INDEX_OUT_OF_BOUNDS",
19
+ REF_TYPE: "REF_TYPE_MISMATCH",
20
+ DUPLICATE_ID: "DUPLICATE_NODE_ID",
21
+ CYCLE: "GRAPH_CYCLE",
22
+ SLOT: "PROMPT_SLOT_UNRESOLVED",
23
+ OUTPUT: "OUTPUT_REF_INVALID",
24
+ };
25
+ export function validateCanvas(input, registry) {
26
+ const issues = [];
27
+ const shape = CanvasSchema.safeParse(input);
28
+ if (!shape.success) {
29
+ pushZodIssues(issues, shape.error, "", STAGE_CODES.SHAPE);
30
+ return { ok: false, issues };
31
+ }
32
+ const canvas = shape.data;
33
+ const idToIndex = buildIdToIndex(canvas);
34
+ const ctx = { canvas, registry, issues, idToIndex };
35
+ checkDuplicateIds(ctx);
36
+ checkUnknownNodeTypes(ctx);
37
+ if (issues.some((i) => i.code === STAGE_CODES.UNKNOWN_NODE))
38
+ return { ok: false, issues };
39
+ checkAllParams(ctx);
40
+ checkAllModelParams(ctx);
41
+ checkAllRefs(ctx);
42
+ checkAllModelInputs(ctx);
43
+ checkCycle(ctx);
44
+ checkAllSlots(ctx);
45
+ const estimatedCredits = estimateCredits(ctx);
46
+ checkOutputRef(ctx);
47
+ if (issues.length > 0)
48
+ return { ok: false, issues };
49
+ return { ok: true, canvas, estimatedCredits };
50
+ }
51
+ /**
52
+ * Async second pass that lets each node run its own `validateExtra` hook.
53
+ * Use this from `canvas validate` so composition-meta checks (and any
54
+ * future async validators) surface as standard validation issues.
55
+ *
56
+ * Returns the same result the sync pass would, with `perNodeCredits` added
57
+ * when the canvas is structurally OK.
58
+ */
59
+ export async function validateCanvasDeep(input, registry) {
60
+ const shallow = validateCanvas(input, registry);
61
+ if (!shallow.ok)
62
+ return shallow;
63
+ const canvas = shallow.canvas;
64
+ const issues = [];
65
+ for (let i = 0; i < canvas.nodes.length; i++) {
66
+ const n = canvas.nodes[i];
67
+ if (!n)
68
+ continue;
69
+ const def = registry.get(n.type);
70
+ if (!def?.validateExtra)
71
+ continue;
72
+ let extra;
73
+ try {
74
+ extra = await def.validateExtra({ rawParams: n.params, rawInputs: n.inputs });
75
+ }
76
+ catch (e) {
77
+ issues.push({
78
+ path: `nodes[${i}].params`,
79
+ code: STAGE_CODES.PARAMS_EXTRA,
80
+ message: e.message,
81
+ node_id: n.id,
82
+ node_type: n.type,
83
+ });
84
+ continue;
85
+ }
86
+ for (const item of extra) {
87
+ issues.push({
88
+ path: `nodes[${i}].${item.path}`,
89
+ code: STAGE_CODES.PARAMS_EXTRA,
90
+ message: item.message,
91
+ node_id: n.id,
92
+ node_type: n.type,
93
+ });
94
+ }
95
+ }
96
+ if (issues.length > 0)
97
+ return { ok: false, issues };
98
+ const perNodeCredits = canvas.nodes.map((n) => {
99
+ const def = registry.get(n.type);
100
+ let credits = 0;
101
+ if (def?.cost) {
102
+ try {
103
+ const parsed = def.params.parse(n.params ?? {});
104
+ credits = def.cost({ params: parsed }).credits;
105
+ }
106
+ catch {
107
+ // Already validated above; defensive fallback.
108
+ }
109
+ }
110
+ return { node_id: n.id, node_type: n.type, credits };
111
+ });
112
+ return { ok: true, canvas, estimatedCredits: shallow.estimatedCredits, perNodeCredits };
113
+ }
114
+ // ---------------------------------------------------------------------------
115
+ // Stage helpers
116
+ // ---------------------------------------------------------------------------
117
+ function buildIdToIndex(canvas) {
118
+ const m = new Map();
119
+ for (let i = 0; i < canvas.nodes.length; i++) {
120
+ const n = canvas.nodes[i];
121
+ if (n)
122
+ m.set(n.id, i);
123
+ }
124
+ return m;
125
+ }
126
+ function checkDuplicateIds(ctx) {
127
+ const seen = new Set();
128
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
129
+ const n = ctx.canvas.nodes[i];
130
+ if (!n)
131
+ continue;
132
+ if (seen.has(n.id)) {
133
+ ctx.issues.push({
134
+ path: `nodes[${i}].id`,
135
+ code: STAGE_CODES.DUPLICATE_ID,
136
+ message: `duplicate node id "${n.id}"`,
137
+ node_id: n.id,
138
+ });
139
+ }
140
+ seen.add(n.id);
141
+ }
142
+ }
143
+ function checkUnknownNodeTypes(ctx) {
144
+ const known = ctx.registry.ids();
145
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
146
+ const n = ctx.canvas.nodes[i];
147
+ if (!n || ctx.registry.has(n.type))
148
+ continue;
149
+ ctx.issues.push({
150
+ path: `nodes[${i}].type`,
151
+ code: STAGE_CODES.UNKNOWN_NODE,
152
+ message: `unknown node type "${n.type}"`,
153
+ received: n.type,
154
+ did_you_mean: didYouMean(n.type, known),
155
+ node_id: n.id,
156
+ node_type: n.type,
157
+ });
158
+ }
159
+ }
160
+ function checkAllParams(ctx) {
161
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
162
+ const n = ctx.canvas.nodes[i];
163
+ if (!n)
164
+ continue;
165
+ const def = ctx.registry.get(n.type);
166
+ if (!def)
167
+ continue;
168
+ const parsed = def.params.safeParse(n.params ?? {});
169
+ if (parsed.success)
170
+ continue;
171
+ pushZodIssues(ctx.issues, parsed.error, `nodes[${i}].params`, STAGE_CODES.PARAMS, n.id, n.type);
172
+ }
173
+ }
174
+ function checkAllModelParams(ctx) {
175
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
176
+ const n = ctx.canvas.nodes[i];
177
+ if (!n || !isManagedNodeKind(n.type))
178
+ continue;
179
+ const params = (n.params ?? {});
180
+ const model = params.model;
181
+ if (typeof model !== "string" || model.length === 0)
182
+ continue; // shape validator will have flagged this
183
+ const r = validateModelParams(n.type, model, params);
184
+ if (r.ok)
185
+ continue;
186
+ for (const err of r.errors) {
187
+ ctx.issues.push({
188
+ path: `nodes[${i}].params${"param" in err ? `.${err.param}` : ""}`,
189
+ code: STAGE_CODES.MODEL_PARAMS,
190
+ message: err.message,
191
+ node_id: n.id,
192
+ node_type: n.type,
193
+ });
194
+ }
195
+ }
196
+ }
197
+ function checkAllRefs(ctx) {
198
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
199
+ const n = ctx.canvas.nodes[i];
200
+ if (!n)
201
+ continue;
202
+ walkRefs(n.inputs, (refStr, jsonPath) => {
203
+ checkOneRef(ctx, n, i, refStr, jsonPath, "inputs");
204
+ });
205
+ walkRefs(n.params, (refStr, jsonPath) => {
206
+ checkOneRef(ctx, n, i, refStr, jsonPath, "params");
207
+ });
208
+ }
209
+ }
210
+ /**
211
+ * For every managed-kind node (image_generate / video_generate / video_lipsync
212
+ * / tts / music / dialogue / sound_effect), confirm the model's REQUIRED input
213
+ * kinds are wired. The kind of each wired ref comes from the target node's
214
+ * declared `outputKinds[slot]`. Refs that can't be resolved (missing target,
215
+ * bad output, etc.) are skipped — `checkAllRefs` already surfaced those.
216
+ */
217
+ function checkAllModelInputs(ctx) {
218
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
219
+ const n = ctx.canvas.nodes[i];
220
+ if (!n || !isManagedNodeKind(n.type))
221
+ continue;
222
+ const params = (n.params ?? {});
223
+ const model = params.model;
224
+ if (typeof model !== "string" || model.length === 0)
225
+ continue;
226
+ const providedKinds = collectProvidedKinds(ctx, n);
227
+ const r = validateModelInputs(n.type, model, providedKinds);
228
+ if (r.ok)
229
+ continue;
230
+ for (const err of r.errors) {
231
+ ctx.issues.push({
232
+ path: `nodes[${i}].inputs`,
233
+ code: STAGE_CODES.MODEL_INPUTS,
234
+ message: err.message,
235
+ node_id: n.id,
236
+ node_type: n.type,
237
+ });
238
+ }
239
+ }
240
+ }
241
+ function collectProvidedKinds(ctx, n) {
242
+ const kinds = new Set();
243
+ walkRefs(n.inputs, (refStr) => {
244
+ const kind = resolveRefKind(ctx, refStr);
245
+ if (kind)
246
+ kinds.add(kind);
247
+ });
248
+ return [...kinds];
249
+ }
250
+ function resolveRefKind(ctx, refStr) {
251
+ if (!refStr.startsWith(REF_PREFIX))
252
+ return null;
253
+ const expr = parseRefExpr(refStr);
254
+ if (!expr || expr.kind !== "ref")
255
+ return null;
256
+ const targetIdx = ctx.idToIndex.get(expr.nodeId);
257
+ if (targetIdx === undefined)
258
+ return null;
259
+ const target = ctx.canvas.nodes[targetIdx];
260
+ if (!target)
261
+ return null;
262
+ const targetDef = ctx.registry.get(target.type);
263
+ if (!targetDef)
264
+ return null;
265
+ const targetParams = targetDef.params.safeParse(target.params ?? {});
266
+ const resolvedKinds = resolveOutputKinds(targetDef.outputKinds, targetParams.success ? targetParams.data : {});
267
+ const kind = resolvedKinds[expr.output];
268
+ return kind && MODEL_INPUT_KINDS.has(kind) ? kind : null;
269
+ }
270
+ function checkOneRef(ctx, n, i, refStr, jsonPath, field) {
271
+ if (!refStr.startsWith(REF_PREFIX))
272
+ return;
273
+ const expr = parseRefExpr(refStr);
274
+ if (!expr || expr.kind !== "ref") {
275
+ ctx.issues.push({
276
+ path: `nodes[${i}].${field}.${jsonPath}`,
277
+ code: STAGE_CODES.REF_UNRESOLVED,
278
+ message: `malformed ref "${refStr}"`,
279
+ node_id: n.id,
280
+ node_type: n.type,
281
+ });
282
+ return;
283
+ }
284
+ const targetIdx = ctx.idToIndex.get(expr.nodeId);
285
+ if (targetIdx === undefined) {
286
+ ctx.issues.push({
287
+ path: `nodes[${i}].${field}.${jsonPath}`,
288
+ code: STAGE_CODES.REF_UNRESOLVED,
289
+ message: `ref "${refStr}" — no node with id "${expr.nodeId}"`,
290
+ did_you_mean: didYouMean(expr.nodeId, [...ctx.idToIndex.keys()]),
291
+ node_id: n.id,
292
+ node_type: n.type,
293
+ });
294
+ return;
295
+ }
296
+ checkRefOutput(ctx, n, i, jsonPath, field, refStr, expr.nodeId, expr.output, targetIdx);
297
+ }
298
+ function checkRefOutput(ctx, n, i, jsonPath, field, refStr, nodeId, output, targetIdx) {
299
+ const target = ctx.canvas.nodes[targetIdx];
300
+ if (!target)
301
+ return;
302
+ const targetDef = ctx.registry.get(target.type);
303
+ if (!targetDef)
304
+ return;
305
+ const outputNames = listShapeKeys(targetDef.outputs);
306
+ if (!outputNames || outputNames.includes(output))
307
+ return;
308
+ ctx.issues.push({
309
+ path: `nodes[${i}].${field}.${jsonPath}`,
310
+ code: STAGE_CODES.REF_UNRESOLVED,
311
+ message: `ref "${refStr}" — node "${nodeId}" (${target.type}) has no output "${output}"`,
312
+ did_you_mean: didYouMean(output, outputNames),
313
+ node_id: n.id,
314
+ node_type: n.type,
315
+ });
316
+ }
317
+ function checkCycle(ctx) {
318
+ const graph = buildDepGraph(ctx.canvas);
319
+ const cycle = findCycle(graph);
320
+ if (cycle) {
321
+ ctx.issues.push({ path: "nodes", code: STAGE_CODES.CYCLE, message: `cycle detected: ${cycle.join(" → ")}` });
322
+ }
323
+ }
324
+ function checkAllSlots(ctx) {
325
+ for (let i = 0; i < ctx.canvas.nodes.length; i++) {
326
+ const n = ctx.canvas.nodes[i];
327
+ if (!n)
328
+ continue;
329
+ if (!ctx.registry.get(n.type))
330
+ continue;
331
+ checkSlotsForNode(ctx, n, i);
332
+ }
333
+ }
334
+ function checkSlotsForNode(ctx, n, _i) {
335
+ const slots = new Set();
336
+ walkPromptStrings(n.params, (text) => {
337
+ for (const s of extractSlots(text))
338
+ slots.add(s);
339
+ });
340
+ if (slots.size === 0)
341
+ return;
342
+ const inputKeys = Object.keys(n.inputs ?? {});
343
+ for (const slot of slots) {
344
+ if (inputKeys.includes(slot))
345
+ continue;
346
+ ctx.issues.push({
347
+ path: `nodes[${_i}].params`,
348
+ code: STAGE_CODES.SLOT,
349
+ message: `prompt slot "{{${slot}}}" has no matching input on node "${n.id}"`,
350
+ did_you_mean: didYouMean(slot, inputKeys),
351
+ node_id: n.id,
352
+ node_type: n.type,
353
+ });
354
+ }
355
+ }
356
+ function estimateCredits(ctx) {
357
+ let total = 0;
358
+ for (const n of ctx.canvas.nodes) {
359
+ const def = ctx.registry.get(n.type);
360
+ if (!def?.cost)
361
+ continue;
362
+ try {
363
+ const parsed = def.params.parse(n.params ?? {});
364
+ total += def.cost({ params: parsed }).credits;
365
+ }
366
+ catch {
367
+ // params already errored above; skip
368
+ }
369
+ }
370
+ return total;
371
+ }
372
+ function checkOutputRef(ctx) {
373
+ const out = ctx.canvas.output;
374
+ if (!out)
375
+ return;
376
+ const targetIdx = ctx.idToIndex.get(out.node);
377
+ if (targetIdx === undefined) {
378
+ ctx.issues.push({
379
+ path: "output.node",
380
+ code: STAGE_CODES.OUTPUT,
381
+ message: `output references unknown node "${out.node}"`,
382
+ did_you_mean: didYouMean(out.node, [...ctx.idToIndex.keys()]),
383
+ });
384
+ return;
385
+ }
386
+ const target = ctx.canvas.nodes[targetIdx];
387
+ if (!target)
388
+ return;
389
+ const targetDef = ctx.registry.get(target.type);
390
+ if (!targetDef)
391
+ return;
392
+ const outs = listShapeKeys(targetDef.outputs);
393
+ if (!outs || outs.includes(out.output))
394
+ return;
395
+ ctx.issues.push({
396
+ path: "output.output",
397
+ code: STAGE_CODES.OUTPUT,
398
+ message: `node "${out.node}" (${target.type}) has no output "${out.output}"`,
399
+ did_you_mean: didYouMean(out.output, outs),
400
+ });
401
+ }
402
+ // ---------------------------------------------------------------------------
403
+ // Helpers
404
+ // ---------------------------------------------------------------------------
405
+ function pushZodIssues(issues, err, pathPrefix, code, nodeId, nodeType) {
406
+ for (const issue of err.issues) {
407
+ const tail = pathToString(issue.path);
408
+ const path = pathPrefix ? (tail ? `${pathPrefix}.${tail}` : pathPrefix) : tail;
409
+ issues.push({
410
+ path,
411
+ code,
412
+ message: issue.message,
413
+ received: issue.code === "invalid_type" ? issue.received : undefined,
414
+ node_id: nodeId,
415
+ node_type: nodeType,
416
+ });
417
+ }
418
+ }
419
+ function pathToString(path) {
420
+ return path
421
+ .map((p) => (typeof p === "number" ? `[${p}]` : `.${String(p)}`))
422
+ .join("")
423
+ .replace(/^\./, "");
424
+ }
425
+ function buildDepGraph(canvas) {
426
+ const graph = new Map();
427
+ for (const n of canvas.nodes)
428
+ graph.set(n.id, new Set());
429
+ for (const n of canvas.nodes) {
430
+ const collect = (refStr) => {
431
+ if (!refStr.startsWith(REF_PREFIX))
432
+ return;
433
+ const expr = parseRefExpr(refStr);
434
+ if (!expr || expr.kind !== "ref")
435
+ return;
436
+ const deps = graph.get(n.id);
437
+ if (deps && graph.has(expr.nodeId))
438
+ deps.add(expr.nodeId);
439
+ };
440
+ walkRefs(n.inputs, collect);
441
+ walkRefs(n.params, collect);
442
+ }
443
+ return graph;
444
+ }
445
+ function walkRefs(value, cb, prefix = "") {
446
+ if (typeof value === "string") {
447
+ if (value.startsWith(REF_PREFIX))
448
+ cb(value, prefix);
449
+ return;
450
+ }
451
+ if (Array.isArray(value)) {
452
+ walkArrayRefs(value, cb, prefix);
453
+ return;
454
+ }
455
+ if (value && typeof value === "object") {
456
+ walkObjectRefs(value, cb, prefix);
457
+ }
458
+ }
459
+ function walkArrayRefs(arr, cb, prefix) {
460
+ for (let i = 0; i < arr.length; i++) {
461
+ walkRefs(arr[i], cb, prefix ? `${prefix}[${i}]` : `[${i}]`);
462
+ }
463
+ }
464
+ function walkObjectRefs(obj, cb, prefix) {
465
+ for (const [k, v] of Object.entries(obj)) {
466
+ walkRefs(v, cb, prefix ? `${prefix}.${k}` : k);
467
+ }
468
+ }
469
+ function walkPromptStrings(value, cb) {
470
+ if (typeof value === "string") {
471
+ cb(value);
472
+ return;
473
+ }
474
+ if (Array.isArray(value)) {
475
+ for (const v of value)
476
+ walkPromptStrings(v, cb);
477
+ return;
478
+ }
479
+ if (value && typeof value === "object") {
480
+ for (const v of Object.values(value)) {
481
+ walkPromptStrings(v, cb);
482
+ }
483
+ }
484
+ }
485
+ function listShapeKeys(schema) {
486
+ const obj = unwrap(schema);
487
+ if (obj instanceof z.ZodObject)
488
+ return Object.keys(obj.shape);
489
+ return undefined;
490
+ }
491
+ function unwrap(schema) {
492
+ let cur = schema;
493
+ for (let i = 0; i < 8; i++) {
494
+ const inner = cur._def?.innerType;
495
+ if (!inner)
496
+ return cur;
497
+ cur = inner;
498
+ }
499
+ return cur;
500
+ }
501
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/engine/engine/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAe,YAAY,EAAiB,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAW1E,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,YAAY,EAAE,mBAAmB;IACjC,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,sBAAsB;IACpC,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,yBAAyB;IAC5C,QAAQ,EAAE,mBAAmB;IAC7B,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,wBAAwB;IAC9B,MAAM,EAAE,oBAAoB;CACpB,CAAC;AASX,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,QAAsB;IACnE,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IAC1B,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEzD,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAE1F,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9C,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAc,EAAE,QAAsB;IAC7E,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,aAAa;YAAE,SAAS;QAClC,IAAI,KAAoD,CAAC;QACzD,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS,CAAC,UAAU;gBAC1B,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAG,CAAW,CAAC,OAAO;gBAC7B,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,SAAS,EAAE,CAAC,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;gBAChC,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,SAAS,EAAE,CAAC,CAAC,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAChD,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC,OAAO,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAC1F,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,CAAC,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC;YAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAQ;IACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,MAAM;gBACtB,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,sBAAsB,CAAC,CAAC,EAAE,GAAG;gBACtC,OAAO,EAAE,CAAC,CAAC,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAQ;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,WAAW,CAAC,YAAY;YAC9B,OAAO,EAAE,sBAAsB,CAAC,CAAC,IAAI,GAAG;YACxC,QAAQ,EAAE,CAAC,CAAC,IAAI;YAChB,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;YACvC,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,OAAO;YAAE,SAAS;QAC7B,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAQ;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,CAAC,yCAAyC;QACxG,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,EAAE;YAAE,SAAS;QACnB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,WAAW,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClE,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,SAAS,EAAE,CAAC,CAAC,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACtC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACtC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,GAAQ;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC9D,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,EAAE;YAAE,SAAS;QACnB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,UAAU;gBAC1B,IAAI,EAAE,WAAW,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,CAAC,CAAC,EAAE;gBACb,SAAS,EAAE,CAAC,CAAC,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAQ,EAAE,CAAW;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IACnC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAE,MAAc;IAC9C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,IAAI,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAiB,CAAC,CAAC,CAAC,CAAE,IAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvF,CAAC;AAED,SAAS,WAAW,CAClB,GAAQ,EACR,CAAW,EACX,CAAS,EACT,MAAc,EACd,QAAgB,EAChB,KAA0B;IAE1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK,IAAI,QAAQ,EAAE;YACxC,IAAI,EAAE,WAAW,CAAC,cAAc;YAChC,OAAO,EAAE,kBAAkB,MAAM,GAAG;YACpC,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK,IAAI,QAAQ,EAAE;YACxC,IAAI,EAAE,WAAW,CAAC,cAAc;YAChC,OAAO,EAAE,QAAQ,MAAM,wBAAwB,IAAI,CAAC,MAAM,GAAG;YAC7D,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,cAAc,CACrB,GAAQ,EACR,CAAW,EACX,CAAS,EACT,QAAgB,EAChB,KAA0B,EAC1B,MAAc,EACd,MAAc,EACd,MAAc,EACd,SAAiB;IAEjB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO;IACzD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK,IAAI,QAAQ,EAAE;QACxC,IAAI,EAAE,WAAW,CAAC,cAAc;QAChC,OAAO,EAAE,QAAQ,MAAM,aAAa,MAAM,MAAM,MAAM,CAAC,IAAI,oBAAoB,MAAM,GAAG;QACxF,YAAY,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7C,OAAO,EAAE,CAAC,CAAC,EAAE;QACb,SAAS,EAAE,CAAC,CAAC,IAAI;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ;IAC1B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAQ;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAQ,EAAE,CAAW,EAAE,EAAU;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,iBAAiB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACnC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACvC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,EAAE,UAAU;YAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,OAAO,EAAE,kBAAkB,IAAI,sCAAsC,CAAC,CAAC,EAAE,GAAG;YAC5E,YAAY,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;YACzC,OAAO,EAAE,CAAC,CAAC,EAAE;YACb,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,IAAI;YAAE,SAAS;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAChD,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,WAAW,CAAC,MAAM;YACxB,OAAO,EAAE,mCAAmC,GAAG,CAAC,IAAI,GAAG;YACvD,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IAC/C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACd,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,WAAW,CAAC,MAAM;QACxB,OAAO,EAAE,SAAS,GAAG,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,oBAAoB,GAAG,CAAC,MAAM,GAAG;QAC5E,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;KAC3C,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,aAAa,CACpB,MAAyB,EACzB,GAAe,EACf,UAAkB,EAClB,IAAY,EACZ,MAAe,EACf,QAAiB;IAEjB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI;YACJ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAE,KAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAChG,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAgC;IACpD,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAChE,IAAI,CAAC,EAAE,CAAC;SACR,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,OAAO;YAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,OAAO;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5B,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,EAA0C,EAAE,MAAM,GAAG,EAAE;IACvF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,cAAc,CAAC,KAAgC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAuB,EAAE,EAA0C,EAAE,MAAc;IACxG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,GAA4B,EAC5B,EAA0C,EAC1C,MAAc;IAEd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,EAA0B;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,EAAE,CAAC,KAAK,CAAC,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;YAChE,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,GAAG,YAAY,CAAC,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,MAAM,CAAC,MAAiB;IAC/B,IAAI,GAAG,GAAc,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAI,GAAuD,CAAC,IAAI,EAAE,SAAS,CAAC;QACvF,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC;QACvB,GAAG,GAAG,KAAK,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}