@generacy-ai/workflow-engine 0.0.0-preview-20260304013206

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 (347) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +265 -0
  3. package/dist/actions/base-action.d.ts +63 -0
  4. package/dist/actions/base-action.d.ts.map +1 -0
  5. package/dist/actions/base-action.js +130 -0
  6. package/dist/actions/base-action.js.map +1 -0
  7. package/dist/actions/builtin/agent-invoke.d.ts +16 -0
  8. package/dist/actions/builtin/agent-invoke.d.ts.map +1 -0
  9. package/dist/actions/builtin/agent-invoke.js +108 -0
  10. package/dist/actions/builtin/agent-invoke.js.map +1 -0
  11. package/dist/actions/builtin/humancy-api-handler.d.ts +191 -0
  12. package/dist/actions/builtin/humancy-api-handler.d.ts.map +1 -0
  13. package/dist/actions/builtin/humancy-api-handler.js +521 -0
  14. package/dist/actions/builtin/humancy-api-handler.js.map +1 -0
  15. package/dist/actions/builtin/humancy-review.d.ts +83 -0
  16. package/dist/actions/builtin/humancy-review.d.ts.map +1 -0
  17. package/dist/actions/builtin/humancy-review.js +250 -0
  18. package/dist/actions/builtin/humancy-review.js.map +1 -0
  19. package/dist/actions/builtin/pr-create.d.ts +16 -0
  20. package/dist/actions/builtin/pr-create.d.ts.map +1 -0
  21. package/dist/actions/builtin/pr-create.js +110 -0
  22. package/dist/actions/builtin/pr-create.js.map +1 -0
  23. package/dist/actions/builtin/shell.d.ts +16 -0
  24. package/dist/actions/builtin/shell.d.ts.map +1 -0
  25. package/dist/actions/builtin/shell.js +80 -0
  26. package/dist/actions/builtin/shell.js.map +1 -0
  27. package/dist/actions/builtin/speckit/index.d.ts +47 -0
  28. package/dist/actions/builtin/speckit/index.d.ts.map +1 -0
  29. package/dist/actions/builtin/speckit/index.js +347 -0
  30. package/dist/actions/builtin/speckit/index.js.map +1 -0
  31. package/dist/actions/builtin/speckit/lib/feature.d.ts +17 -0
  32. package/dist/actions/builtin/speckit/lib/feature.d.ts.map +1 -0
  33. package/dist/actions/builtin/speckit/lib/feature.js +430 -0
  34. package/dist/actions/builtin/speckit/lib/feature.js.map +1 -0
  35. package/dist/actions/builtin/speckit/lib/fs.d.ts +62 -0
  36. package/dist/actions/builtin/speckit/lib/fs.d.ts.map +1 -0
  37. package/dist/actions/builtin/speckit/lib/fs.js +181 -0
  38. package/dist/actions/builtin/speckit/lib/fs.js.map +1 -0
  39. package/dist/actions/builtin/speckit/lib/paths.d.ts +7 -0
  40. package/dist/actions/builtin/speckit/lib/paths.d.ts.map +1 -0
  41. package/dist/actions/builtin/speckit/lib/paths.js +161 -0
  42. package/dist/actions/builtin/speckit/lib/paths.js.map +1 -0
  43. package/dist/actions/builtin/speckit/lib/prereqs.d.ts +8 -0
  44. package/dist/actions/builtin/speckit/lib/prereqs.d.ts.map +1 -0
  45. package/dist/actions/builtin/speckit/lib/prereqs.js +194 -0
  46. package/dist/actions/builtin/speckit/lib/prereqs.js.map +1 -0
  47. package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts +14 -0
  48. package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts.map +1 -0
  49. package/dist/actions/builtin/speckit/lib/stream-batcher.js +31 -0
  50. package/dist/actions/builtin/speckit/lib/stream-batcher.js.map +1 -0
  51. package/dist/actions/builtin/speckit/lib/templates.d.ts +15 -0
  52. package/dist/actions/builtin/speckit/lib/templates.d.ts.map +1 -0
  53. package/dist/actions/builtin/speckit/lib/templates.js +176 -0
  54. package/dist/actions/builtin/speckit/lib/templates.js.map +1 -0
  55. package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts +11 -0
  56. package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts.map +1 -0
  57. package/dist/actions/builtin/speckit/operations/check-prereqs.js +22 -0
  58. package/dist/actions/builtin/speckit/operations/check-prereqs.js.map +1 -0
  59. package/dist/actions/builtin/speckit/operations/clarify.d.ts +7 -0
  60. package/dist/actions/builtin/speckit/operations/clarify.d.ts.map +1 -0
  61. package/dist/actions/builtin/speckit/operations/clarify.js +302 -0
  62. package/dist/actions/builtin/speckit/operations/clarify.js.map +1 -0
  63. package/dist/actions/builtin/speckit/operations/copy-template.d.ts +11 -0
  64. package/dist/actions/builtin/speckit/operations/copy-template.d.ts.map +1 -0
  65. package/dist/actions/builtin/speckit/operations/copy-template.js +23 -0
  66. package/dist/actions/builtin/speckit/operations/copy-template.js.map +1 -0
  67. package/dist/actions/builtin/speckit/operations/create-feature.d.ts +11 -0
  68. package/dist/actions/builtin/speckit/operations/create-feature.d.ts.map +1 -0
  69. package/dist/actions/builtin/speckit/operations/create-feature.js +25 -0
  70. package/dist/actions/builtin/speckit/operations/create-feature.js.map +1 -0
  71. package/dist/actions/builtin/speckit/operations/get-paths.d.ts +11 -0
  72. package/dist/actions/builtin/speckit/operations/get-paths.d.ts.map +1 -0
  73. package/dist/actions/builtin/speckit/operations/get-paths.js +17 -0
  74. package/dist/actions/builtin/speckit/operations/get-paths.js.map +1 -0
  75. package/dist/actions/builtin/speckit/operations/implement.d.ts +7 -0
  76. package/dist/actions/builtin/speckit/operations/implement.d.ts.map +1 -0
  77. package/dist/actions/builtin/speckit/operations/implement.js +246 -0
  78. package/dist/actions/builtin/speckit/operations/implement.js.map +1 -0
  79. package/dist/actions/builtin/speckit/operations/plan.d.ts +7 -0
  80. package/dist/actions/builtin/speckit/operations/plan.d.ts.map +1 -0
  81. package/dist/actions/builtin/speckit/operations/plan.js +253 -0
  82. package/dist/actions/builtin/speckit/operations/plan.js.map +1 -0
  83. package/dist/actions/builtin/speckit/operations/specify.d.ts +7 -0
  84. package/dist/actions/builtin/speckit/operations/specify.d.ts.map +1 -0
  85. package/dist/actions/builtin/speckit/operations/specify.js +178 -0
  86. package/dist/actions/builtin/speckit/operations/specify.js.map +1 -0
  87. package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts +42 -0
  88. package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts.map +1 -0
  89. package/dist/actions/builtin/speckit/operations/tasks-to-issues.js +386 -0
  90. package/dist/actions/builtin/speckit/operations/tasks-to-issues.js.map +1 -0
  91. package/dist/actions/builtin/speckit/operations/tasks.d.ts +7 -0
  92. package/dist/actions/builtin/speckit/operations/tasks.d.ts.map +1 -0
  93. package/dist/actions/builtin/speckit/operations/tasks.js +234 -0
  94. package/dist/actions/builtin/speckit/operations/tasks.js.map +1 -0
  95. package/dist/actions/builtin/speckit/types.d.ts +268 -0
  96. package/dist/actions/builtin/speckit/types.d.ts.map +1 -0
  97. package/dist/actions/builtin/speckit/types.js +11 -0
  98. package/dist/actions/builtin/speckit/types.js.map +1 -0
  99. package/dist/actions/builtin/verification-check.d.ts +16 -0
  100. package/dist/actions/builtin/verification-check.d.ts.map +1 -0
  101. package/dist/actions/builtin/verification-check.js +99 -0
  102. package/dist/actions/builtin/verification-check.js.map +1 -0
  103. package/dist/actions/builtin/workspace-prepare.d.ts +16 -0
  104. package/dist/actions/builtin/workspace-prepare.d.ts.map +1 -0
  105. package/dist/actions/builtin/workspace-prepare.js +108 -0
  106. package/dist/actions/builtin/workspace-prepare.js.map +1 -0
  107. package/dist/actions/cli-utils.d.ts +76 -0
  108. package/dist/actions/cli-utils.d.ts.map +1 -0
  109. package/dist/actions/cli-utils.js +278 -0
  110. package/dist/actions/cli-utils.js.map +1 -0
  111. package/dist/actions/epic/check-completion.d.ts +14 -0
  112. package/dist/actions/epic/check-completion.d.ts.map +1 -0
  113. package/dist/actions/epic/check-completion.js +57 -0
  114. package/dist/actions/epic/check-completion.js.map +1 -0
  115. package/dist/actions/epic/close.d.ts +18 -0
  116. package/dist/actions/epic/close.d.ts.map +1 -0
  117. package/dist/actions/epic/close.js +76 -0
  118. package/dist/actions/epic/close.js.map +1 -0
  119. package/dist/actions/epic/create-pr.d.ts +22 -0
  120. package/dist/actions/epic/create-pr.d.ts.map +1 -0
  121. package/dist/actions/epic/create-pr.js +140 -0
  122. package/dist/actions/epic/create-pr.js.map +1 -0
  123. package/dist/actions/epic/dispatch-children.d.ts +16 -0
  124. package/dist/actions/epic/dispatch-children.d.ts.map +1 -0
  125. package/dist/actions/epic/dispatch-children.js +95 -0
  126. package/dist/actions/epic/dispatch-children.js.map +1 -0
  127. package/dist/actions/epic/find-children.d.ts +16 -0
  128. package/dist/actions/epic/find-children.d.ts.map +1 -0
  129. package/dist/actions/epic/find-children.js +92 -0
  130. package/dist/actions/epic/find-children.js.map +1 -0
  131. package/dist/actions/epic/index.d.ts +20 -0
  132. package/dist/actions/epic/index.d.ts.map +1 -0
  133. package/dist/actions/epic/index.js +35 -0
  134. package/dist/actions/epic/index.js.map +1 -0
  135. package/dist/actions/epic/post-tasks-summary.d.ts +18 -0
  136. package/dist/actions/epic/post-tasks-summary.d.ts.map +1 -0
  137. package/dist/actions/epic/post-tasks-summary.js +123 -0
  138. package/dist/actions/epic/post-tasks-summary.js.map +1 -0
  139. package/dist/actions/epic/update-status.d.ts +22 -0
  140. package/dist/actions/epic/update-status.d.ts.map +1 -0
  141. package/dist/actions/epic/update-status.js +105 -0
  142. package/dist/actions/epic/update-status.js.map +1 -0
  143. package/dist/actions/github/add-comment.d.ts +14 -0
  144. package/dist/actions/github/add-comment.d.ts.map +1 -0
  145. package/dist/actions/github/add-comment.js +44 -0
  146. package/dist/actions/github/add-comment.js.map +1 -0
  147. package/dist/actions/github/client/gh-cli.d.ts +68 -0
  148. package/dist/actions/github/client/gh-cli.d.ts.map +1 -0
  149. package/dist/actions/github/client/gh-cli.js +781 -0
  150. package/dist/actions/github/client/gh-cli.js.map +1 -0
  151. package/dist/actions/github/client/index.d.ts +12 -0
  152. package/dist/actions/github/client/index.d.ts.map +1 -0
  153. package/dist/actions/github/client/index.js +10 -0
  154. package/dist/actions/github/client/index.js.map +1 -0
  155. package/dist/actions/github/client/interface.d.ts +270 -0
  156. package/dist/actions/github/client/interface.d.ts.map +1 -0
  157. package/dist/actions/github/client/interface.js +2 -0
  158. package/dist/actions/github/client/interface.js.map +1 -0
  159. package/dist/actions/github/commit-and-push.d.ts +19 -0
  160. package/dist/actions/github/commit-and-push.d.ts.map +1 -0
  161. package/dist/actions/github/commit-and-push.js +86 -0
  162. package/dist/actions/github/commit-and-push.js.map +1 -0
  163. package/dist/actions/github/create-draft-pr.d.ts +18 -0
  164. package/dist/actions/github/create-draft-pr.d.ts.map +1 -0
  165. package/dist/actions/github/create-draft-pr.js +76 -0
  166. package/dist/actions/github/create-draft-pr.js.map +1 -0
  167. package/dist/actions/github/get-context.d.ts +23 -0
  168. package/dist/actions/github/get-context.d.ts.map +1 -0
  169. package/dist/actions/github/get-context.js +109 -0
  170. package/dist/actions/github/get-context.js.map +1 -0
  171. package/dist/actions/github/index.d.ts +32 -0
  172. package/dist/actions/github/index.d.ts.map +1 -0
  173. package/dist/actions/github/index.js +67 -0
  174. package/dist/actions/github/index.js.map +1 -0
  175. package/dist/actions/github/label-definitions.d.ts +19 -0
  176. package/dist/actions/github/label-definitions.d.ts.map +1 -0
  177. package/dist/actions/github/label-definitions.js +71 -0
  178. package/dist/actions/github/label-definitions.js.map +1 -0
  179. package/dist/actions/github/mark-pr-ready.d.ts +14 -0
  180. package/dist/actions/github/mark-pr-ready.d.ts.map +1 -0
  181. package/dist/actions/github/mark-pr-ready.js +43 -0
  182. package/dist/actions/github/mark-pr-ready.js.map +1 -0
  183. package/dist/actions/github/merge-from-base.d.ts +15 -0
  184. package/dist/actions/github/merge-from-base.d.ts.map +1 -0
  185. package/dist/actions/github/merge-from-base.js +120 -0
  186. package/dist/actions/github/merge-from-base.js.map +1 -0
  187. package/dist/actions/github/preflight.d.ts +36 -0
  188. package/dist/actions/github/preflight.d.ts.map +1 -0
  189. package/dist/actions/github/preflight.js +292 -0
  190. package/dist/actions/github/preflight.js.map +1 -0
  191. package/dist/actions/github/read-pr-feedback.d.ts +14 -0
  192. package/dist/actions/github/read-pr-feedback.d.ts.map +1 -0
  193. package/dist/actions/github/read-pr-feedback.js +53 -0
  194. package/dist/actions/github/read-pr-feedback.js.map +1 -0
  195. package/dist/actions/github/respond-pr-feedback.d.ts +14 -0
  196. package/dist/actions/github/respond-pr-feedback.d.ts.map +1 -0
  197. package/dist/actions/github/respond-pr-feedback.js +58 -0
  198. package/dist/actions/github/respond-pr-feedback.js.map +1 -0
  199. package/dist/actions/github/review-changes.d.ts +19 -0
  200. package/dist/actions/github/review-changes.d.ts.map +1 -0
  201. package/dist/actions/github/review-changes.js +95 -0
  202. package/dist/actions/github/review-changes.js.map +1 -0
  203. package/dist/actions/github/sync-labels.d.ts +14 -0
  204. package/dist/actions/github/sync-labels.d.ts.map +1 -0
  205. package/dist/actions/github/sync-labels.js +81 -0
  206. package/dist/actions/github/sync-labels.js.map +1 -0
  207. package/dist/actions/github/update-pr.d.ts +14 -0
  208. package/dist/actions/github/update-pr.d.ts.map +1 -0
  209. package/dist/actions/github/update-pr.js +63 -0
  210. package/dist/actions/github/update-pr.js.map +1 -0
  211. package/dist/actions/index.d.ts +109 -0
  212. package/dist/actions/index.d.ts.map +1 -0
  213. package/dist/actions/index.js +233 -0
  214. package/dist/actions/index.js.map +1 -0
  215. package/dist/actions/workflow/check-gate.d.ts +15 -0
  216. package/dist/actions/workflow/check-gate.d.ts.map +1 -0
  217. package/dist/actions/workflow/check-gate.js +75 -0
  218. package/dist/actions/workflow/check-gate.js.map +1 -0
  219. package/dist/actions/workflow/index.d.ts +21 -0
  220. package/dist/actions/workflow/index.d.ts.map +1 -0
  221. package/dist/actions/workflow/index.js +31 -0
  222. package/dist/actions/workflow/index.js.map +1 -0
  223. package/dist/actions/workflow/update-phase.d.ts +15 -0
  224. package/dist/actions/workflow/update-phase.d.ts.map +1 -0
  225. package/dist/actions/workflow/update-phase.js +143 -0
  226. package/dist/actions/workflow/update-phase.js.map +1 -0
  227. package/dist/actions/workflow/update-stage.d.ts +19 -0
  228. package/dist/actions/workflow/update-stage.d.ts.map +1 -0
  229. package/dist/actions/workflow/update-stage.js +137 -0
  230. package/dist/actions/workflow/update-stage.js.map +1 -0
  231. package/dist/errors/base-workflow-not-found.d.ts +10 -0
  232. package/dist/errors/base-workflow-not-found.d.ts.map +1 -0
  233. package/dist/errors/base-workflow-not-found.js +18 -0
  234. package/dist/errors/base-workflow-not-found.js.map +1 -0
  235. package/dist/errors/circular-extends.d.ts +9 -0
  236. package/dist/errors/circular-extends.d.ts.map +1 -0
  237. package/dist/errors/circular-extends.js +13 -0
  238. package/dist/errors/circular-extends.js.map +1 -0
  239. package/dist/errors/correlation-timeout.d.ts +9 -0
  240. package/dist/errors/correlation-timeout.d.ts.map +1 -0
  241. package/dist/errors/correlation-timeout.js +13 -0
  242. package/dist/errors/correlation-timeout.js.map +1 -0
  243. package/dist/errors/workflow-override.d.ts +9 -0
  244. package/dist/errors/workflow-override.d.ts.map +1 -0
  245. package/dist/errors/workflow-override.js +12 -0
  246. package/dist/errors/workflow-override.js.map +1 -0
  247. package/dist/executor/events.d.ts +55 -0
  248. package/dist/executor/events.d.ts.map +1 -0
  249. package/dist/executor/events.js +72 -0
  250. package/dist/executor/events.js.map +1 -0
  251. package/dist/executor/gate-handler.d.ts +55 -0
  252. package/dist/executor/gate-handler.d.ts.map +1 -0
  253. package/dist/executor/gate-handler.js +139 -0
  254. package/dist/executor/gate-handler.js.map +1 -0
  255. package/dist/executor/index.d.ts +140 -0
  256. package/dist/executor/index.d.ts.map +1 -0
  257. package/dist/executor/index.js +681 -0
  258. package/dist/executor/index.js.map +1 -0
  259. package/dist/index.d.ts +24 -0
  260. package/dist/index.d.ts.map +1 -0
  261. package/dist/index.js +34 -0
  262. package/dist/index.js.map +1 -0
  263. package/dist/interpolation/context.d.ts +117 -0
  264. package/dist/interpolation/context.d.ts.map +1 -0
  265. package/dist/interpolation/context.js +256 -0
  266. package/dist/interpolation/context.js.map +1 -0
  267. package/dist/interpolation/index.d.ts +76 -0
  268. package/dist/interpolation/index.d.ts.map +1 -0
  269. package/dist/interpolation/index.js +264 -0
  270. package/dist/interpolation/index.js.map +1 -0
  271. package/dist/loader/extends.d.ts +48 -0
  272. package/dist/loader/extends.d.ts.map +1 -0
  273. package/dist/loader/extends.js +140 -0
  274. package/dist/loader/extends.js.map +1 -0
  275. package/dist/loader/index.d.ts +50 -0
  276. package/dist/loader/index.d.ts.map +1 -0
  277. package/dist/loader/index.js +190 -0
  278. package/dist/loader/index.js.map +1 -0
  279. package/dist/loader/schema.d.ts +506 -0
  280. package/dist/loader/schema.d.ts.map +1 -0
  281. package/dist/loader/schema.js +63 -0
  282. package/dist/loader/schema.js.map +1 -0
  283. package/dist/loader/validator.d.ts +33 -0
  284. package/dist/loader/validator.d.ts.map +1 -0
  285. package/dist/loader/validator.js +135 -0
  286. package/dist/loader/validator.js.map +1 -0
  287. package/dist/registry/index.d.ts +42 -0
  288. package/dist/registry/index.d.ts.map +1 -0
  289. package/dist/registry/index.js +77 -0
  290. package/dist/registry/index.js.map +1 -0
  291. package/dist/retry/index.d.ts +37 -0
  292. package/dist/retry/index.d.ts.map +1 -0
  293. package/dist/retry/index.js +225 -0
  294. package/dist/retry/index.js.map +1 -0
  295. package/dist/retry/strategies.d.ts +74 -0
  296. package/dist/retry/strategies.d.ts.map +1 -0
  297. package/dist/retry/strategies.js +136 -0
  298. package/dist/retry/strategies.js.map +1 -0
  299. package/dist/store/filesystem-store.d.ts +52 -0
  300. package/dist/store/filesystem-store.d.ts.map +1 -0
  301. package/dist/store/filesystem-store.js +230 -0
  302. package/dist/store/filesystem-store.js.map +1 -0
  303. package/dist/store/index.d.ts +7 -0
  304. package/dist/store/index.d.ts.map +1 -0
  305. package/dist/store/index.js +6 -0
  306. package/dist/store/index.js.map +1 -0
  307. package/dist/types/action.d.ts +358 -0
  308. package/dist/types/action.d.ts.map +1 -0
  309. package/dist/types/action.js +96 -0
  310. package/dist/types/action.js.map +1 -0
  311. package/dist/types/events.d.ts +25 -0
  312. package/dist/types/events.d.ts.map +1 -0
  313. package/dist/types/events.js +6 -0
  314. package/dist/types/events.js.map +1 -0
  315. package/dist/types/execution.d.ts +145 -0
  316. package/dist/types/execution.d.ts.map +1 -0
  317. package/dist/types/execution.js +2 -0
  318. package/dist/types/execution.js.map +1 -0
  319. package/dist/types/gate.d.ts +98 -0
  320. package/dist/types/gate.d.ts.map +1 -0
  321. package/dist/types/gate.js +41 -0
  322. package/dist/types/gate.js.map +1 -0
  323. package/dist/types/github.d.ts +706 -0
  324. package/dist/types/github.d.ts.map +1 -0
  325. package/dist/types/github.js +6 -0
  326. package/dist/types/github.js.map +1 -0
  327. package/dist/types/index.d.ts +17 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/index.js +8 -0
  330. package/dist/types/index.js.map +1 -0
  331. package/dist/types/logger.d.ts +60 -0
  332. package/dist/types/logger.d.ts.map +1 -0
  333. package/dist/types/logger.js +66 -0
  334. package/dist/types/logger.js.map +1 -0
  335. package/dist/types/retry.d.ts +36 -0
  336. package/dist/types/retry.d.ts.map +1 -0
  337. package/dist/types/retry.js +6 -0
  338. package/dist/types/retry.js.map +1 -0
  339. package/dist/types/store.d.ts +88 -0
  340. package/dist/types/store.d.ts.map +1 -0
  341. package/dist/types/store.js +6 -0
  342. package/dist/types/store.js.map +1 -0
  343. package/dist/types/workflow.d.ts +105 -0
  344. package/dist/types/workflow.d.ts.map +1 -0
  345. package/dist/types/workflow.js +6 -0
  346. package/dist/types/workflow.js.map +1 -0
  347. package/package.json +69 -0
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Regular expression for matching variable expressions
3
+ * Matches both ${{ ... }} (double-brace, GitHub Actions style) and ${...} (single-brace) patterns.
4
+ * Double-brace is checked first so ${{ expr }} doesn't partially match as ${ expr }.
5
+ */
6
+ const VARIABLE_PATTERN = /\$\{\{\s*([^}]+?)\s*\}\}|\$\{([^}]+)\}/g;
7
+ /**
8
+ * Parse a variable reference from an expression
9
+ * @param expression The expression inside ${...}
10
+ * @returns Parsed variable reference
11
+ */
12
+ export function parseVariableReference(expression) {
13
+ const trimmed = expression.trim();
14
+ const segments = trimmed.split('.');
15
+ const [type, ...path] = segments;
16
+ let refType = 'unknown';
17
+ if (type === 'inputs')
18
+ refType = 'inputs';
19
+ else if (type === 'steps')
20
+ refType = 'steps';
21
+ else if (type === 'env')
22
+ refType = 'env';
23
+ else if (['success', 'failure', 'always'].includes(type ?? '')) {
24
+ refType = 'function';
25
+ }
26
+ return {
27
+ expression: trimmed,
28
+ type: refType,
29
+ path,
30
+ };
31
+ }
32
+ /**
33
+ * Resolve a variable reference in the given context
34
+ * @param ref The variable reference to resolve
35
+ * @param context The interpolation context
36
+ * @returns The resolved value
37
+ */
38
+ export function resolveVariableReference(ref, context) {
39
+ switch (ref.type) {
40
+ case 'inputs':
41
+ return resolvePath(context.inputs, ref.path);
42
+ case 'steps': {
43
+ const [stepId, ...fieldPath] = ref.path;
44
+ if (!stepId)
45
+ return undefined;
46
+ const output = context.steps[stepId];
47
+ if (!output)
48
+ return undefined;
49
+ // If no field path, return the entire output
50
+ if (fieldPath.length === 0) {
51
+ return output.parsed ?? output.raw;
52
+ }
53
+ // Handle 'output' prefix (${steps.stepId.output.field})
54
+ if (fieldPath[0] === 'output') {
55
+ const outputPath = fieldPath.slice(1);
56
+ if (outputPath.length === 0) {
57
+ return output.parsed ?? output.raw;
58
+ }
59
+ // Resolve path in parsed output
60
+ if (output.parsed !== null && typeof output.parsed === 'object') {
61
+ return resolvePath(output.parsed, outputPath);
62
+ }
63
+ return undefined;
64
+ }
65
+ // Direct field access
66
+ if (fieldPath[0] === 'raw')
67
+ return output.raw;
68
+ if (fieldPath[0] === 'exitCode')
69
+ return output.exitCode;
70
+ if (fieldPath[0] === 'completedAt')
71
+ return output.completedAt;
72
+ if (fieldPath[0] === 'parsed') {
73
+ const parsedPath = fieldPath.slice(1);
74
+ if (parsedPath.length === 0)
75
+ return output.parsed;
76
+ if (output.parsed !== null && typeof output.parsed === 'object') {
77
+ return resolvePath(output.parsed, parsedPath);
78
+ }
79
+ return undefined;
80
+ }
81
+ // Try to resolve in parsed output
82
+ if (output.parsed !== null && typeof output.parsed === 'object') {
83
+ return resolvePath(output.parsed, fieldPath);
84
+ }
85
+ return undefined;
86
+ }
87
+ case 'env':
88
+ return ref.path.length > 0 ? context.env[ref.path[0]] : undefined;
89
+ case 'function': {
90
+ const funcName = ref.expression.replace('()', '').trim();
91
+ if (funcName === 'success')
92
+ return context.functions.success();
93
+ if (funcName === 'failure')
94
+ return context.functions.failure();
95
+ if (funcName === 'always')
96
+ return context.functions.always();
97
+ return undefined;
98
+ }
99
+ default:
100
+ return undefined;
101
+ }
102
+ }
103
+ /**
104
+ * Helper to resolve a path in a nested object
105
+ */
106
+ function resolvePath(obj, path) {
107
+ let current = obj;
108
+ for (const segment of path) {
109
+ if (current === null || current === undefined) {
110
+ return undefined;
111
+ }
112
+ // Handle array indexing (e.g., 'items[0]')
113
+ const arrayMatch = segment.match(/^(\w+)\[(\d+)\]$/);
114
+ if (arrayMatch) {
115
+ const [, key, indexStr] = arrayMatch;
116
+ if (typeof current !== 'object')
117
+ return undefined;
118
+ const arr = current[key];
119
+ if (!Array.isArray(arr))
120
+ return undefined;
121
+ const index = parseInt(indexStr, 10);
122
+ current = arr[index];
123
+ continue;
124
+ }
125
+ // Handle numeric index for arrays
126
+ if (Array.isArray(current) && /^\d+$/.test(segment)) {
127
+ const index = parseInt(segment, 10);
128
+ current = current[index];
129
+ continue;
130
+ }
131
+ // Handle object property access
132
+ if (typeof current === 'object') {
133
+ current = current[segment];
134
+ }
135
+ else {
136
+ return undefined;
137
+ }
138
+ }
139
+ return current;
140
+ }
141
+ /**
142
+ * Resolve a path safely, returning undefined for any errors
143
+ */
144
+ export function resolvePathSafe(obj, path) {
145
+ try {
146
+ if (obj === null || obj === undefined)
147
+ return undefined;
148
+ if (typeof obj !== 'object')
149
+ return undefined;
150
+ return resolvePath(obj, path.split('.'));
151
+ }
152
+ catch {
153
+ return undefined;
154
+ }
155
+ }
156
+ /**
157
+ * Convert a value to string for interpolation
158
+ */
159
+ function valueToString(value) {
160
+ if (value === undefined || value === null) {
161
+ return '';
162
+ }
163
+ if (typeof value === 'string') {
164
+ return value;
165
+ }
166
+ if (typeof value === 'number' || typeof value === 'boolean') {
167
+ return String(value);
168
+ }
169
+ if (typeof value === 'object') {
170
+ try {
171
+ return JSON.stringify(value);
172
+ }
173
+ catch {
174
+ return String(value);
175
+ }
176
+ }
177
+ return String(value);
178
+ }
179
+ /**
180
+ * Interpolate variables in a template string
181
+ * @param template The template string with ${...} patterns
182
+ * @param context The interpolation context
183
+ * @param options Interpolation options
184
+ * @returns The interpolated string
185
+ * @throws Error if strict mode and variable not found
186
+ */
187
+ export function interpolate(template, context, options = {}) {
188
+ const { strict = false, defaultValue = '', coerceToString = true } = options;
189
+ return template.replace(VARIABLE_PATTERN, (match, doubleBrace, singleBrace) => {
190
+ const expression = (doubleBrace ?? singleBrace ?? '').trim();
191
+ const ref = parseVariableReference(expression);
192
+ const value = resolveVariableReference(ref, context);
193
+ if (value === undefined) {
194
+ if (strict) {
195
+ throw new Error(`Unresolved variable: ${expression}`);
196
+ }
197
+ return defaultValue;
198
+ }
199
+ if (coerceToString) {
200
+ return valueToString(value);
201
+ }
202
+ // For non-string coercion, only return if already a string
203
+ if (typeof value === 'string') {
204
+ return value;
205
+ }
206
+ // Return the original match if can't coerce
207
+ return match;
208
+ });
209
+ }
210
+ /**
211
+ * Interpolate a value that may be a string, object, or array
212
+ * Recursively processes all string values
213
+ * @param value The value to interpolate
214
+ * @param context The interpolation context
215
+ * @param options Interpolation options
216
+ * @returns The interpolated value
217
+ */
218
+ export function interpolateValue(value, context, options = {}) {
219
+ if (typeof value === 'string') {
220
+ return interpolate(value, context, options);
221
+ }
222
+ if (Array.isArray(value)) {
223
+ return value.map(item => interpolateValue(item, context, options));
224
+ }
225
+ if (value !== null && typeof value === 'object') {
226
+ const result = {};
227
+ for (const [key, val] of Object.entries(value)) {
228
+ result[key] = interpolateValue(val, context, options);
229
+ }
230
+ return result;
231
+ }
232
+ // Return primitives as-is
233
+ return value;
234
+ }
235
+ /**
236
+ * Extract all variable references from a template
237
+ * @param template The template string
238
+ * @returns Array of variable references found
239
+ */
240
+ export function extractVariableReferences(template) {
241
+ const refs = [];
242
+ let match;
243
+ while ((match = VARIABLE_PATTERN.exec(template)) !== null) {
244
+ const expression = (match[1] ?? match[2] ?? '').trim();
245
+ refs.push(parseVariableReference(expression));
246
+ }
247
+ // Reset lastIndex for subsequent calls
248
+ VARIABLE_PATTERN.lastIndex = 0;
249
+ return refs;
250
+ }
251
+ /**
252
+ * Check if a template contains any variable references
253
+ * @param template The template string
254
+ * @returns true if template contains ${...} patterns
255
+ */
256
+ export function hasVariables(template) {
257
+ VARIABLE_PATTERN.lastIndex = 0;
258
+ const result = VARIABLE_PATTERN.test(template);
259
+ VARIABLE_PATTERN.lastIndex = 0;
260
+ return result;
261
+ }
262
+ // Re-export context
263
+ export { ExecutionContext } from './context.js';
264
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interpolation/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { WorkflowDefinition, PhaseDefinition, StepDefinition, InputDefinition, RetryConfig } from '../types/workflow.js';
2
+ /**
3
+ * Override definition for a single phase.
4
+ * Used within the `overrides.phases` block of an extending workflow.
5
+ */
6
+ export interface PhaseOverride {
7
+ /** Replacement steps for an existing phase */
8
+ steps?: StepDefinition[];
9
+ /** Override condition for an existing phase */
10
+ condition?: string;
11
+ /** Insert this new phase before the named phase */
12
+ before?: string;
13
+ /** Insert this new phase after the named phase */
14
+ after?: string;
15
+ }
16
+ /**
17
+ * The `overrides:` block from an extending workflow YAML.
18
+ */
19
+ export interface WorkflowOverride {
20
+ phases?: Record<string, PhaseOverride>;
21
+ inputs?: InputDefinition[];
22
+ env?: Record<string, string>;
23
+ }
24
+ /**
25
+ * The override data extracted from an extending workflow's YAML.
26
+ * Contains both top-level scalar overrides and the structured `overrides` block.
27
+ */
28
+ export interface WorkflowOverrideData {
29
+ name?: string;
30
+ description?: string;
31
+ version?: string;
32
+ timeout?: number;
33
+ retry?: RetryConfig;
34
+ overrides?: WorkflowOverride;
35
+ /** Full replacement mode: replace all phases instead of merging */
36
+ phases?: PhaseDefinition[];
37
+ }
38
+ /**
39
+ * Merge a base WorkflowDefinition with override data from an extending workflow.
40
+ *
41
+ * @param base - The fully resolved base workflow definition
42
+ * @param overrideData - Override data from the extending workflow
43
+ * @returns A new WorkflowDefinition with overrides applied
44
+ * @throws WorkflowOverrideError if phases and overrides.phases are both present,
45
+ * or if a phase override references an unknown phase without a positional directive
46
+ */
47
+ export declare function mergeWorkflows(base: WorkflowDefinition, overrideData: WorkflowOverrideData): WorkflowDefinition;
48
+ //# sourceMappingURL=extends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extends.d.ts","sourceRoot":"","sources":["../../src/loader/extends.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,kBAAkB,EACxB,YAAY,EAAE,oBAAoB,GACjC,kBAAkB,CA6CpB"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Workflow merge logic for the `extends` inheritance mechanism.
3
+ *
4
+ * Merge semantics:
5
+ * - Top-level scalars (name, description, version, timeout, retry): override wins if present
6
+ * - Phases: matched by name from overrides.phases
7
+ * - Existing phase matched by name: steps replaced entirely, condition overridden if provided
8
+ * - New phase with before:/after: directive: inserted at specified position
9
+ * - New phase without positional directive: throws WorkflowOverrideError (fail fast on typos)
10
+ * - Inputs: merged (base + override, override wins on name collision)
11
+ * - Env: shallow merge, override wins on key collision
12
+ * - `phases` and `overrides.phases` are mutually exclusive — throws WorkflowOverrideError if both present
13
+ */
14
+ import { WorkflowOverrideError } from '../errors/workflow-override.js';
15
+ /**
16
+ * Merge a base WorkflowDefinition with override data from an extending workflow.
17
+ *
18
+ * @param base - The fully resolved base workflow definition
19
+ * @param overrideData - Override data from the extending workflow
20
+ * @returns A new WorkflowDefinition with overrides applied
21
+ * @throws WorkflowOverrideError if phases and overrides.phases are both present,
22
+ * or if a phase override references an unknown phase without a positional directive
23
+ */
24
+ export function mergeWorkflows(base, overrideData) {
25
+ // Mutual exclusivity: phases and overrides.phases cannot coexist
26
+ if (overrideData.phases && overrideData.overrides?.phases) {
27
+ throw new WorkflowOverrideError('Cannot specify both "phases" and "overrides.phases" — use "phases" for full replacement or "overrides.phases" for selective override, not both.');
28
+ }
29
+ // Start with a copy of the base
30
+ const merged = {
31
+ ...base,
32
+ phases: [...base.phases.map(p => ({ ...p, steps: [...p.steps] }))],
33
+ };
34
+ // Top-level scalar overrides: override wins if present
35
+ if (overrideData.name !== undefined)
36
+ merged.name = overrideData.name;
37
+ if (overrideData.description !== undefined)
38
+ merged.description = overrideData.description;
39
+ if (overrideData.version !== undefined)
40
+ merged.version = overrideData.version;
41
+ if (overrideData.timeout !== undefined)
42
+ merged.timeout = overrideData.timeout;
43
+ if (overrideData.retry !== undefined)
44
+ merged.retry = overrideData.retry;
45
+ // Full replacement mode: overrideData.phases replaces all base phases
46
+ if (overrideData.phases) {
47
+ merged.phases = overrideData.phases;
48
+ }
49
+ // Selective phase overrides via overrides.phases
50
+ if (overrideData.overrides?.phases) {
51
+ merged.phases = mergePhases(merged.phases, overrideData.overrides.phases);
52
+ }
53
+ // Input merging: base + override, override wins on name collision
54
+ if (overrideData.overrides?.inputs) {
55
+ merged.inputs = mergeInputs(base.inputs, overrideData.overrides.inputs);
56
+ }
57
+ // Env merging: shallow merge, override wins on key collision
58
+ if (overrideData.overrides?.env) {
59
+ merged.env = {
60
+ ...base.env,
61
+ ...overrideData.overrides.env,
62
+ };
63
+ }
64
+ return merged;
65
+ }
66
+ /**
67
+ * Merge base phases with phase overrides.
68
+ *
69
+ * - Existing phase matched by name: steps replaced entirely, condition overridden if provided
70
+ * - New phase with before:/after: directive: inserted at specified position
71
+ * - New phase without positional directive: throws WorkflowOverrideError
72
+ */
73
+ function mergePhases(basePhases, phaseOverrides) {
74
+ const result = basePhases.map(p => ({ ...p, steps: [...p.steps] }));
75
+ const basePhaseNames = new Set(basePhases.map(p => p.name));
76
+ // Track insertions to apply after processing all overrides
77
+ const insertions = [];
78
+ for (const [phaseName, override] of Object.entries(phaseOverrides)) {
79
+ if (basePhaseNames.has(phaseName)) {
80
+ // Override existing phase
81
+ const idx = result.findIndex(p => p.name === phaseName);
82
+ if (override.steps) {
83
+ result[idx].steps = override.steps;
84
+ }
85
+ if (override.condition !== undefined) {
86
+ result[idx].condition = override.condition;
87
+ }
88
+ }
89
+ else if (override.before || override.after) {
90
+ // New phase with positional directive
91
+ if (!override.steps || override.steps.length === 0) {
92
+ throw new WorkflowOverrideError(`New phase "${phaseName}" requires at least one step.`);
93
+ }
94
+ const anchor = (override.before ?? override.after);
95
+ if (!basePhaseNames.has(anchor)) {
96
+ throw new WorkflowOverrideError(`Phase "${phaseName}" references anchor phase "${anchor}" which does not exist in the base workflow.`);
97
+ }
98
+ insertions.push({
99
+ phase: {
100
+ name: phaseName,
101
+ steps: override.steps,
102
+ condition: override.condition,
103
+ },
104
+ position: override.before ? 'before' : 'after',
105
+ anchor,
106
+ });
107
+ }
108
+ else {
109
+ // Unknown phase without positional directive — fail fast on typos
110
+ throw new WorkflowOverrideError(`Phase "${phaseName}" does not exist in the base workflow and has no "before" or "after" directive. ` +
111
+ `Did you mean one of: ${[...basePhaseNames].join(', ')}?`);
112
+ }
113
+ }
114
+ // Apply insertions (process in reverse order of anchor index to maintain correct positions)
115
+ for (const insertion of insertions) {
116
+ const anchorIdx = result.findIndex(p => p.name === insertion.anchor);
117
+ const insertIdx = insertion.position === 'before' ? anchorIdx : anchorIdx + 1;
118
+ result.splice(insertIdx, 0, insertion.phase);
119
+ }
120
+ return result;
121
+ }
122
+ /**
123
+ * Merge base inputs with override inputs.
124
+ * Override wins on name collision.
125
+ */
126
+ function mergeInputs(baseInputs, overrideInputs) {
127
+ const inputMap = new Map();
128
+ // Add base inputs first
129
+ if (baseInputs) {
130
+ for (const input of baseInputs) {
131
+ inputMap.set(input.name, input);
132
+ }
133
+ }
134
+ // Override inputs win on name collision
135
+ for (const input of overrideInputs) {
136
+ inputMap.set(input.name, input);
137
+ }
138
+ return [...inputMap.values()];
139
+ }
140
+ //# sourceMappingURL=extends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extends.js","sourceRoot":"","sources":["../../src/loader/extends.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { WorkflowDefinition } from '../types/workflow.js';
2
+ import type { ExecutableWorkflow } from '../types/execution.js';
3
+ /**
4
+ * Resolves a workflow name to a file path.
5
+ * Used by `loadWorkflowWithExtends` to find base workflows.
6
+ *
7
+ * @param name - The workflow name or path to resolve
8
+ * @param excludePath - Optional file path to exclude from resolution (prevents self-resolution)
9
+ * @returns The resolved absolute file path
10
+ * @throws BaseWorkflowNotFoundError if the workflow cannot be found
11
+ */
12
+ export type WorkflowResolver = (name: string, excludePath?: string) => string;
13
+ /**
14
+ * Load a workflow from a YAML file
15
+ * @param filePath Path to the workflow YAML file
16
+ * @returns Parsed and validated WorkflowDefinition
17
+ * @throws Error if file cannot be read or validation fails
18
+ */
19
+ export declare function loadWorkflow(filePath: string): Promise<WorkflowDefinition>;
20
+ /**
21
+ * Load a workflow from a YAML string
22
+ * @param content YAML content string
23
+ * @returns Parsed and validated WorkflowDefinition
24
+ */
25
+ export declare function loadWorkflowFromString(content: string): WorkflowDefinition;
26
+ /**
27
+ * Convert a WorkflowDefinition to an ExecutableWorkflow
28
+ * @param definition The workflow definition
29
+ * @param inputs Runtime input values
30
+ * @param env Additional environment variables
31
+ * @returns ExecutableWorkflow ready for execution
32
+ */
33
+ export declare function prepareWorkflow(definition: WorkflowDefinition, inputs?: Record<string, unknown>, env?: Record<string, string>): ExecutableWorkflow;
34
+ /**
35
+ * Load a workflow with `extends` inheritance support.
36
+ *
37
+ * Uses two-pass validation:
38
+ * 1. Parse YAML loosely (no schema validation)
39
+ * 2. If `extends` present, resolve base, recurse, merge
40
+ * 3. Validate final merged result against WorkflowDefinitionSchema
41
+ *
42
+ * @param filePath - Path to the workflow YAML file
43
+ * @param resolver - Function to resolve workflow names to file paths
44
+ * @param _seen - Internal: set of resolved file paths for circular detection
45
+ * @returns Parsed, merged, and validated WorkflowDefinition
46
+ */
47
+ export declare function loadWorkflowWithExtends(filePath: string, resolver: WorkflowResolver, _seen?: Set<string>): Promise<WorkflowDefinition>;
48
+ export { validateWorkflow, isValidWorkflow, WorkflowValidationError } from './validator.js';
49
+ export { WorkflowDefinitionSchema, PhaseDefinitionSchema, StepDefinitionSchema, InputDefinitionSchema, RetryConfigSchema, } from './schema.js';
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9E;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsBhF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAW1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,kBAAkB,EAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,kBAAkB,CAqCpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA6E7B;AAGD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}