@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,521 @@
1
+ import { CorrelationTimeoutError } from '../../errors/correlation-timeout.js';
2
+ /** Default no-op logger used when none is provided. */
3
+ const noopLogger = {
4
+ info() { },
5
+ warn() { },
6
+ error() { },
7
+ debug() { },
8
+ };
9
+ // ---------------------------------------------------------------------------
10
+ // Mapping helpers
11
+ // ---------------------------------------------------------------------------
12
+ /** Buffer added to the caller's timeout for the expiresAt field (5 minutes). */
13
+ const EXPIRY_BUFFER_MS = 5 * 60 * 1000;
14
+ /**
15
+ * Maps workflow-engine urgency to Humancy Cloud API urgency.
16
+ */
17
+ function mapUrgency(urgency) {
18
+ switch (urgency) {
19
+ case 'low':
20
+ case 'normal':
21
+ return 'when_available';
22
+ case 'blocking_soon':
23
+ return 'blocking_soon';
24
+ case 'blocking_now':
25
+ return 'blocking_now';
26
+ }
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Handler
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Concrete HumanDecisionHandler that communicates with the Humancy
33
+ * Cloud API's decision endpoints to request and await human decisions.
34
+ */
35
+ export class HumancyApiDecisionHandler {
36
+ config;
37
+ logger;
38
+ constructor(config, logger) {
39
+ this.config = {
40
+ apiUrl: config.apiUrl.replace(/\/+$/, ''), // strip trailing slashes
41
+ agentId: config.agentId,
42
+ projectId: config.projectId,
43
+ authToken: config.authToken,
44
+ fallbackToSimulation: config.fallbackToSimulation ?? true,
45
+ sseReconnectDelay: config.sseReconnectDelay ?? 1000,
46
+ maxReconnectAttempts: config.maxReconnectAttempts ?? 10,
47
+ };
48
+ this.logger = logger ?? noopLogger;
49
+ }
50
+ /**
51
+ * Maps a workflow-engine ReviewDecisionRequest to the Humancy Cloud API's
52
+ * POST /decisions payload (CreateDecisionInput shape).
53
+ *
54
+ * Field mapping:
55
+ * title → question
56
+ * description → context (with workflow/step metadata)
57
+ * artifact → appended to context
58
+ * options → options (requiresComment → description hint)
59
+ * urgency → urgency (low/normal → when_available)
60
+ * type → type ('review')
61
+ * config.agentId → agentId
62
+ * config.projectId → projectId
63
+ * timeout+5min → expiresAt
64
+ */
65
+ mapRequestToPayload(request, timeout) {
66
+ // Build context string from description, artifact, and workflow metadata
67
+ const contextParts = [];
68
+ if (request.description) {
69
+ contextParts.push(request.description);
70
+ }
71
+ if (request.artifact) {
72
+ contextParts.push(`\n---\nArtifact:\n${request.artifact}`);
73
+ }
74
+ // Include workflow/step IDs as metadata for traceability
75
+ contextParts.push(`\n[workflow=${request.workflowId}, step=${request.stepId}]`);
76
+ const context = contextParts.join('');
77
+ const options = request.options.map((opt) => {
78
+ const mapped = {
79
+ id: opt.id,
80
+ label: opt.label,
81
+ };
82
+ if (opt.requiresComment) {
83
+ mapped.description = 'Comment required';
84
+ }
85
+ return mapped;
86
+ });
87
+ const payload = {
88
+ agentId: this.config.agentId,
89
+ type: 'review',
90
+ urgency: mapUrgency(request.urgency),
91
+ question: request.title,
92
+ context,
93
+ options: options.length > 0 ? options : undefined,
94
+ expiresAt: new Date(Date.now() + timeout + EXPIRY_BUFFER_MS).toISOString(),
95
+ };
96
+ if (this.config.projectId) {
97
+ payload.projectId = this.config.projectId;
98
+ }
99
+ return payload;
100
+ }
101
+ /**
102
+ * Maps a Humancy Cloud API decision:resolved event response back to the
103
+ * workflow engine's ReviewDecisionResponse format.
104
+ *
105
+ * Response mapping:
106
+ * selectedOptionId === first option → approved: true
107
+ * selectedOptionId !== first option → approved: false, decision: selectedOptionId
108
+ * customResponse → input (free-text response)
109
+ * respondedAt → respondedAt
110
+ */
111
+ mapResolvedEvent(response, request) {
112
+ const result = {
113
+ respondedBy: 'human',
114
+ respondedAt: response.respondedAt,
115
+ };
116
+ if (response.customResponse) {
117
+ result.input = response.customResponse;
118
+ }
119
+ const firstOptionId = request.options[0]?.id;
120
+ if (response.selectedOptionId) {
121
+ result.decision = response.selectedOptionId;
122
+ result.approved = response.selectedOptionId === firstOptionId;
123
+ }
124
+ else if (response.customResponse) {
125
+ // Free-text response without option selection — treat as custom input
126
+ result.approved = false;
127
+ }
128
+ else {
129
+ // No option selected and no custom response — treat as rejection
130
+ result.approved = false;
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Async generator that parses SSE text protocol from a fetch Response body.
136
+ *
137
+ * Reads the streaming body via `getReader()`, splits on newlines, and
138
+ * interprets SSE fields:
139
+ * - `event: <type>` — sets the event type
140
+ * - `data: <payload>` — appends to data buffer (multi-line joined with \n)
141
+ * - `id: <value>` — sets the event ID and updates lastEventId
142
+ * - `:<comment>` — ignored (used for heartbeats)
143
+ * - empty line — dispatches the accumulated event
144
+ *
145
+ * Tracks `lastEventId` on the instance for reconnection support.
146
+ */
147
+ lastEventId = '';
148
+ async *parseSSEStream(body) {
149
+ const reader = body.getReader();
150
+ const decoder = new TextDecoder();
151
+ // Accumulator for partial lines split across chunks
152
+ let buffer = '';
153
+ // Current event fields being accumulated
154
+ let eventType = '';
155
+ let dataLines = [];
156
+ let eventId = '';
157
+ try {
158
+ for (;;) {
159
+ const { done, value } = await reader.read();
160
+ if (done) {
161
+ // Stream ended — if there's a pending event with data, dispatch it
162
+ if (dataLines.length > 0) {
163
+ yield { event: eventType, data: dataLines.join('\n'), id: eventId };
164
+ }
165
+ break;
166
+ }
167
+ buffer += decoder.decode(value, { stream: true });
168
+ // Process complete lines (SSE uses \n, \r\n, or \r as line endings)
169
+ const lines = buffer.split(/\r\n|\r|\n/);
170
+ // The last element may be an incomplete line — keep it in the buffer
171
+ buffer = lines.pop() ?? '';
172
+ for (const line of lines) {
173
+ if (line === '') {
174
+ // Empty line = dispatch event (only if we have data)
175
+ if (dataLines.length > 0) {
176
+ const parsed = {
177
+ event: eventType,
178
+ data: dataLines.join('\n'),
179
+ id: eventId,
180
+ };
181
+ // Update lastEventId for reconnection (per SSE spec:
182
+ // only update when id field was present in the event)
183
+ if (eventId) {
184
+ this.lastEventId = eventId;
185
+ }
186
+ yield parsed;
187
+ // Reset accumulators for next event
188
+ eventType = '';
189
+ dataLines = [];
190
+ eventId = '';
191
+ }
192
+ continue;
193
+ }
194
+ if (line.startsWith(':')) {
195
+ // Comment line (heartbeat) — ignore
196
+ continue;
197
+ }
198
+ // Parse field name and value
199
+ const colonIndex = line.indexOf(':');
200
+ let field;
201
+ let fieldValue;
202
+ if (colonIndex === -1) {
203
+ // Line with no colon — field name is the entire line, value is empty
204
+ field = line;
205
+ fieldValue = '';
206
+ }
207
+ else {
208
+ field = line.slice(0, colonIndex);
209
+ // Per SSE spec: if first char after colon is a space, strip it
210
+ fieldValue = line[colonIndex + 1] === ' '
211
+ ? line.slice(colonIndex + 2)
212
+ : line.slice(colonIndex + 1);
213
+ }
214
+ switch (field) {
215
+ case 'event':
216
+ eventType = fieldValue;
217
+ break;
218
+ case 'data':
219
+ dataLines.push(fieldValue);
220
+ break;
221
+ case 'id':
222
+ // Per SSE spec: ignore id fields containing null (\0)
223
+ if (!fieldValue.includes('\0')) {
224
+ eventId = fieldValue;
225
+ }
226
+ break;
227
+ case 'retry':
228
+ // Retry field — not used by this parser (reconnection logic
229
+ // is handled by connectSSE with fixed config delays)
230
+ break;
231
+ default:
232
+ // Unknown field — ignore per SSE spec
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ }
238
+ finally {
239
+ reader.releaseLock();
240
+ }
241
+ }
242
+ /**
243
+ * Connects to the Humancy Cloud API's SSE endpoint and yields parsed events,
244
+ * automatically reconnecting on stream errors or unexpected closes.
245
+ *
246
+ * Uses `GET {apiUrl}/decisions/events?token={authToken}` with:
247
+ * - Auth via `token` query parameter (Humancy SSE auth convention)
248
+ * - `Last-Event-ID` header on reconnection attempts
249
+ * - `Accept: text/event-stream` header
250
+ *
251
+ * The generator transparently reconnects up to `maxReconnectAttempts` times
252
+ * with a delay of `sseReconnectDelay` ms between attempts. Each reconnection
253
+ * sends the last received event ID so the server can replay missed events.
254
+ *
255
+ * Cancellation is supported via the provided `AbortSignal` — when aborted,
256
+ * the current fetch is cancelled and the generator returns cleanly.
257
+ */
258
+ async *connectSSE(signal) {
259
+ let attempts = 0;
260
+ while (attempts <= this.config.maxReconnectAttempts) {
261
+ // Build SSE endpoint URL with token auth via query parameter
262
+ const sseUrl = new URL(`${this.config.apiUrl}/decisions/events`);
263
+ if (this.config.authToken) {
264
+ sseUrl.searchParams.set('token', this.config.authToken);
265
+ }
266
+ const url = sseUrl.toString();
267
+ // Build headers
268
+ const headers = {
269
+ Accept: 'text/event-stream',
270
+ 'Cache-Control': 'no-cache',
271
+ };
272
+ if (this.lastEventId) {
273
+ headers['Last-Event-ID'] = this.lastEventId;
274
+ }
275
+ let response;
276
+ try {
277
+ response = await fetch(url, {
278
+ method: 'GET',
279
+ headers,
280
+ signal,
281
+ });
282
+ }
283
+ catch (err) {
284
+ // If the signal was aborted, exit cleanly (timeout or cancellation)
285
+ if (signal.aborted) {
286
+ return;
287
+ }
288
+ attempts++;
289
+ if (attempts > this.config.maxReconnectAttempts) {
290
+ this.logger.error(`SSE connection failed after ${this.config.maxReconnectAttempts} reconnection attempts: ${String(err)}`);
291
+ throw new Error(`SSE connection failed after ${this.config.maxReconnectAttempts} attempts: ${String(err)}`);
292
+ }
293
+ this.logger.warn(`SSE connection error, reconnecting (attempt ${attempts}/${this.config.maxReconnectAttempts}): ${String(err)}`);
294
+ await this.delay(this.config.sseReconnectDelay, signal);
295
+ if (signal.aborted)
296
+ return;
297
+ continue;
298
+ }
299
+ // Check for non-200 responses
300
+ if (!response.ok) {
301
+ attempts++;
302
+ if (attempts > this.config.maxReconnectAttempts) {
303
+ this.logger.error(`SSE endpoint returned ${response.status} after ${this.config.maxReconnectAttempts} reconnection attempts`);
304
+ throw new Error(`SSE connection failed: server returned ${response.status} ${response.statusText}`);
305
+ }
306
+ this.logger.warn(`SSE endpoint returned ${response.status}, reconnecting (attempt ${attempts}/${this.config.maxReconnectAttempts})`);
307
+ await this.delay(this.config.sseReconnectDelay, signal);
308
+ if (signal.aborted)
309
+ return;
310
+ continue;
311
+ }
312
+ if (!response.body) {
313
+ throw new Error('SSE response has no body');
314
+ }
315
+ this.logger.debug(`SSE connected to ${this.config.apiUrl}/decisions/events${this.lastEventId ? ` (resuming from ${this.lastEventId})` : ''}`);
316
+ // Reset attempts on successful connection
317
+ attempts = 0;
318
+ // Parse and yield events from the stream
319
+ try {
320
+ for await (const event of this.parseSSEStream(response.body)) {
321
+ yield event;
322
+ }
323
+ }
324
+ catch (err) {
325
+ // If the signal was aborted, exit cleanly
326
+ if (signal.aborted) {
327
+ return;
328
+ }
329
+ // Stream broke unexpectedly — attempt reconnection
330
+ attempts++;
331
+ if (attempts > this.config.maxReconnectAttempts) {
332
+ this.logger.error(`SSE stream broke after ${this.config.maxReconnectAttempts} reconnection attempts: ${String(err)}`);
333
+ throw new Error(`SSE stream failed after ${this.config.maxReconnectAttempts} reconnection attempts: ${String(err)}`);
334
+ }
335
+ this.logger.warn(`SSE stream error, reconnecting (attempt ${attempts}/${this.config.maxReconnectAttempts}): ${String(err)}`);
336
+ await this.delay(this.config.sseReconnectDelay, signal);
337
+ if (signal.aborted)
338
+ return;
339
+ continue;
340
+ }
341
+ // Stream ended cleanly (server closed connection) — reconnect
342
+ // This can happen if the server restarts or the connection times out
343
+ attempts++;
344
+ if (attempts > this.config.maxReconnectAttempts) {
345
+ this.logger.error(`SSE stream closed by server after ${this.config.maxReconnectAttempts} reconnection attempts`);
346
+ throw new Error(`SSE connection lost: stream closed by server after ${this.config.maxReconnectAttempts} reconnection attempts`);
347
+ }
348
+ this.logger.warn(`SSE stream closed by server, reconnecting (attempt ${attempts}/${this.config.maxReconnectAttempts})`);
349
+ await this.delay(this.config.sseReconnectDelay, signal);
350
+ if (signal.aborted)
351
+ return;
352
+ }
353
+ }
354
+ /**
355
+ * Delay helper that respects AbortSignal for cancellation.
356
+ * Resolves after `ms` milliseconds, or immediately if the signal is aborted.
357
+ */
358
+ delay(ms, signal) {
359
+ return new Promise((resolve) => {
360
+ if (signal.aborted) {
361
+ resolve();
362
+ return;
363
+ }
364
+ const timer = setTimeout(resolve, ms);
365
+ signal.addEventListener('abort', () => {
366
+ clearTimeout(timer);
367
+ resolve();
368
+ }, { once: true });
369
+ });
370
+ }
371
+ /**
372
+ * Request a human decision via the Humancy Cloud API.
373
+ *
374
+ * Flow:
375
+ * 1. Map ReviewDecisionRequest → CreateDecisionPayload
376
+ * 2. POST /decisions to create the decision
377
+ * 3. On POST failure → fall back to simulation if configured
378
+ * 4. Connect to SSE stream and wait for decision:resolved matching the decision ID
379
+ * 5. Extract response from the event data
380
+ * 6. Map response → ReviewDecisionResponse
381
+ * 7. Clean up timeout timer and SSE connection
382
+ *
383
+ * Throws CorrelationTimeoutError if the timeout elapses before a response.
384
+ */
385
+ async requestDecision(request, timeout) {
386
+ // --- Step 1: Map request to Humancy Cloud API payload ---
387
+ const payload = this.mapRequestToPayload(request, timeout);
388
+ // --- Step 2: Set up abort controller for timeout management ---
389
+ const controller = new AbortController();
390
+ const { signal } = controller;
391
+ let timeoutTimer;
392
+ let decisionId;
393
+ try {
394
+ // --- Step 3: POST /decisions to create the decision ---
395
+ const createUrl = `${this.config.apiUrl}/decisions`;
396
+ const headers = {
397
+ 'Content-Type': 'application/json',
398
+ };
399
+ if (this.config.authToken) {
400
+ headers['Authorization'] = `Bearer ${this.config.authToken}`;
401
+ }
402
+ let createResponse;
403
+ try {
404
+ createResponse = await fetch(createUrl, {
405
+ method: 'POST',
406
+ headers,
407
+ body: JSON.stringify(payload),
408
+ signal,
409
+ });
410
+ }
411
+ catch (err) {
412
+ // Network error during POST — apply fallback logic
413
+ return this.handlePostFailure(err, 'network');
414
+ }
415
+ if (!createResponse.ok) {
416
+ // HTTP error — classify and apply fallback logic
417
+ const status = createResponse.status;
418
+ const body = await createResponse.text().catch(() => '');
419
+ const errorMsg = `POST /decisions failed: ${status} ${createResponse.statusText}${body ? ` — ${body}` : ''}`;
420
+ if (status >= 400 && status < 500) {
421
+ // 4xx = client error / misconfiguration — always throw, never fall back
422
+ throw new Error(errorMsg);
423
+ }
424
+ // 5xx = server error — apply fallback logic
425
+ return this.handlePostFailure(new Error(errorMsg), 'server');
426
+ }
427
+ // Humancy Cloud API returns { id, status, createdAt, expiresAt, success, data }
428
+ const createdItem = (await createResponse.json());
429
+ decisionId = createdItem.id;
430
+ this.logger.info(`Decision created: ${decisionId} (workflow=${request.workflowId}, step=${request.stepId})`);
431
+ // --- Step 4: Set up timeout timer ---
432
+ // The timer aborts the SSE connection and rejects with CorrelationTimeoutError
433
+ const timeoutPromise = new Promise((_resolve, reject) => {
434
+ timeoutTimer = setTimeout(() => {
435
+ this.logger.error(`Decision timed out: ${decisionId} after ${timeout}ms (workflow=${request.workflowId}, step=${request.stepId})`);
436
+ controller.abort();
437
+ reject(new CorrelationTimeoutError(`Decision ${decisionId} timed out after ${timeout}ms`, decisionId));
438
+ }, timeout);
439
+ });
440
+ // --- Step 5: Connect to SSE and wait for matching event ---
441
+ const resolutionPromise = this.waitForResolution(decisionId, request, signal);
442
+ // Race: resolution vs timeout
443
+ const result = await Promise.race([resolutionPromise, timeoutPromise]);
444
+ return result;
445
+ }
446
+ finally {
447
+ // --- Step 7: Clean up ---
448
+ if (timeoutTimer !== undefined) {
449
+ clearTimeout(timeoutTimer);
450
+ }
451
+ // Abort any in-flight SSE connection if still open
452
+ if (!signal.aborted) {
453
+ controller.abort();
454
+ }
455
+ }
456
+ }
457
+ /**
458
+ * Connects to SSE and waits for a `decision:resolved` event whose
459
+ * `data.id` matches the given decisionId. Returns the mapped response.
460
+ *
461
+ * Humancy Cloud API SSE event format:
462
+ * event: decision:resolved
463
+ * id: evt_<timestamp>_<random>
464
+ * data: { id, type, urgency, preview, projectId, status, response }
465
+ */
466
+ async waitForResolution(decisionId, request, signal) {
467
+ for await (const event of this.connectSSE(signal)) {
468
+ this.logger.debug(`SSE event received: ${event.event} (id=${event.id})`);
469
+ if (event.event !== 'decision:resolved') {
470
+ continue;
471
+ }
472
+ // Parse the event data to check if it matches our decision
473
+ let eventData;
474
+ try {
475
+ eventData = JSON.parse(event.data);
476
+ }
477
+ catch {
478
+ this.logger.warn(`Failed to parse SSE event data: ${event.data.slice(0, 200)}`);
479
+ continue;
480
+ }
481
+ if (eventData.id !== decisionId) {
482
+ continue;
483
+ }
484
+ // Matched! Extract the response from the event data
485
+ if (!eventData.response) {
486
+ this.logger.warn(`decision:resolved event for ${decisionId} has no response — treating as rejection`);
487
+ return {
488
+ approved: false,
489
+ respondedBy: 'human',
490
+ respondedAt: new Date().toISOString(),
491
+ };
492
+ }
493
+ const mapped = this.mapResolvedEvent(eventData.response, request);
494
+ this.logger.info(`Decision resolved: ${decisionId} (${mapped.approved ? 'approved' : 'rejected'}${mapped.decision ? `, decision=${mapped.decision}` : ''})`);
495
+ return mapped;
496
+ }
497
+ // SSE stream exhausted without matching event (all reconnect attempts failed)
498
+ throw new Error(`SSE stream ended without receiving resolution for decision ${decisionId}`);
499
+ }
500
+ /**
501
+ * Handles POST /decisions failures with optional simulation fallback.
502
+ *
503
+ * Fallback rules:
504
+ * - Network errors (connection refused, DNS, fetch errors) → fall back if configured
505
+ * - 5xx server errors → fall back if configured
506
+ * - 4xx client errors → always throw (misconfiguration, fail loudly)
507
+ * - fallbackToSimulation=false → always throw
508
+ */
509
+ handlePostFailure(err, category) {
510
+ if (!this.config.fallbackToSimulation) {
511
+ throw err instanceof Error ? err : new Error(String(err));
512
+ }
513
+ this.logger.warn(`Humancy API unreachable (${category} error), falling back to simulation mode: ${String(err)}`);
514
+ return {
515
+ approved: true,
516
+ respondedBy: 'simulated',
517
+ respondedAt: new Date().toISOString(),
518
+ };
519
+ }
520
+ }
521
+ //# sourceMappingURL=humancy-api-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"humancy-api-handler.js","sourceRoot":"","sources":["../../../src/actions/builtin/humancy-api-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { BaseAction } from '../base-action.js';
2
+ import type { ActionContext, ActionResult, ActionType, ValidationResult, StepDefinition, HumancyUrgency } from '../../types/index.js';
3
+ import type { WorkflowStore } from '../../types/store.js';
4
+ /**
5
+ * Decision request payload for HumanHandler
6
+ */
7
+ interface ReviewDecisionRequest {
8
+ type: 'review';
9
+ title: string;
10
+ description: string;
11
+ options: Array<{
12
+ id: string;
13
+ label: string;
14
+ requiresComment?: boolean;
15
+ }>;
16
+ workflowId: string;
17
+ stepId: string;
18
+ urgency: HumancyUrgency;
19
+ artifact?: string;
20
+ }
21
+ /**
22
+ * Decision response from HumanHandler
23
+ */
24
+ interface ReviewDecisionResponse {
25
+ approved?: boolean;
26
+ decision?: string;
27
+ input?: string;
28
+ respondedBy: string;
29
+ respondedAt: string;
30
+ }
31
+ /**
32
+ * Human handler interface for requesting decisions.
33
+ * This interface allows dependency injection for testing.
34
+ */
35
+ export interface HumanDecisionHandler {
36
+ requestDecision(request: ReviewDecisionRequest, timeout: number): Promise<ReviewDecisionResponse>;
37
+ }
38
+ /**
39
+ * HumancyReviewAction implementation.
40
+ * Handles humancy.request_review workflow steps.
41
+ */
42
+ export declare class HumancyReviewAction extends BaseAction {
43
+ readonly type: ActionType;
44
+ private store;
45
+ private humanHandler;
46
+ /**
47
+ * Create a new HumancyReviewAction
48
+ * @param humanHandler Optional human handler for decision routing
49
+ * @param store Optional workflow store for state persistence
50
+ */
51
+ constructor(humanHandler?: HumanDecisionHandler, store?: WorkflowStore);
52
+ /**
53
+ * Set the human handler for decision routing.
54
+ * This allows late binding when the handler is created after the action.
55
+ */
56
+ setHumanHandler(handler: HumanDecisionHandler): void;
57
+ /**
58
+ * Set the workflow store for state persistence.
59
+ */
60
+ setStore(store: WorkflowStore): void;
61
+ /**
62
+ * Check if this handler can process the given step
63
+ */
64
+ canHandle(step: StepDefinition): boolean;
65
+ /**
66
+ * Validate step configuration
67
+ */
68
+ validate(step: StepDefinition): ValidationResult;
69
+ /**
70
+ * Execute the humancy review action
71
+ */
72
+ protected executeInternal(step: StepDefinition, context: ActionContext): Promise<Omit<ActionResult, 'duration'>>;
73
+ /**
74
+ * Save workflow checkpoint before waiting for human response
75
+ */
76
+ private saveCheckpoint;
77
+ /**
78
+ * Clear workflow checkpoint after successful completion
79
+ */
80
+ private clearCheckpoint;
81
+ }
82
+ export {};
83
+ //# sourceMappingURL=humancy-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"humancy-review.d.ts","sourceRoot":"","sources":["../../../src/actions/builtin/humancy-review.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,cAAc,EAGd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAUzE;;GAEG;AACH,UAAU,qBAAqB;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACnG;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAA4B;IACrD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,YAAY,CAA8B;IAElD;;;;OAIG;gBACS,YAAY,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,aAAa;IAMtE;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAIpD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAIxC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;IAsDhD;;OAEG;cACa,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAgH1C;;OAEG;YACW,cAAc;IA8C5B;;OAEG;YACW,eAAe;CAO9B"}