@open-mercato/core 0.7.1-develop.7193.1.910a5b0a1e → 0.7.1-develop.7195.1.b5efd1d51a

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 (1241) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/AGENTS.md +4 -3
  3. package/agentic/standalone-guide.md +1 -1
  4. package/build.mjs +16 -0
  5. package/dist/bootstrap.js +7 -3
  6. package/dist/bootstrap.js.map +2 -2
  7. package/dist/generated/entities/action_log/index.js +2 -0
  8. package/dist/generated/entities/action_log/index.js.map +2 -2
  9. package/dist/generated/entities/user/index.js +2 -0
  10. package/dist/generated/entities/user/index.js.map +2 -2
  11. package/dist/generated/entities/user_task/index.js +14 -0
  12. package/dist/generated/entities/user_task/index.js.map +2 -2
  13. package/dist/generated/entities/workflow_definition/index.js +6 -0
  14. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  15. package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
  16. package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
  17. package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
  18. package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
  19. package/dist/generated/entities/workflow_instance/index.js +4 -0
  20. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  21. package/dist/generated/entities.ids.generated.js +4 -1
  22. package/dist/generated/entities.ids.generated.js.map +2 -2
  23. package/dist/generated/entity-fields-registry.js +39 -0
  24. package/dist/generated/entity-fields-registry.js.map +2 -2
  25. package/dist/helpers/integration/workflowsFixtures.js +477 -2
  26. package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
  27. package/dist/helpers/integration/workflowsUi.js +148 -0
  28. package/dist/helpers/integration/workflowsUi.js.map +7 -0
  29. package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
  30. package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
  31. package/dist/modules/audit_logs/data/entities.js +5 -0
  32. package/dist/modules/audit_logs/data/entities.js.map +2 -2
  33. package/dist/modules/audit_logs/data/validators.js +1 -0
  34. package/dist/modules/audit_logs/data/validators.js.map +2 -2
  35. package/dist/modules/audit_logs/lib/projections.js +2 -1
  36. package/dist/modules/audit_logs/lib/projections.js.map +2 -2
  37. package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
  38. package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
  39. package/dist/modules/audit_logs/services/actionLogService.js +3 -0
  40. package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
  41. package/dist/modules/auth/data/entities.js +6 -0
  42. package/dist/modules/auth/data/entities.js.map +2 -2
  43. package/dist/modules/auth/lib/executionPrincipal.js +140 -0
  44. package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
  45. package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
  46. package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
  47. package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
  48. package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
  49. package/dist/modules/business_rules/data/validators.js +6 -0
  50. package/dist/modules/business_rules/data/validators.js.map +2 -2
  51. package/dist/modules/business_rules/lib/rule-engine.js +5 -3
  52. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  53. package/dist/modules/catalog/commands/products.js +5 -0
  54. package/dist/modules/catalog/commands/products.js.map +2 -2
  55. package/dist/modules/catalog/workflows.js +19 -0
  56. package/dist/modules/catalog/workflows.js.map +7 -0
  57. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
  58. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  59. package/dist/modules/customer_accounts/cli.js +80 -0
  60. package/dist/modules/customer_accounts/cli.js.map +7 -0
  61. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
  62. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
  63. package/dist/modules/customer_accounts/setup.js +4 -2
  64. package/dist/modules/customer_accounts/setup.js.map +2 -2
  65. package/dist/modules/customers/commands/deals.js +4 -0
  66. package/dist/modules/customers/commands/deals.js.map +2 -2
  67. package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
  68. package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
  69. package/dist/modules/customers/components/detail/utils.js +2 -0
  70. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  71. package/dist/modules/customers/events.js +13 -2
  72. package/dist/modules/customers/events.js.map +2 -2
  73. package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
  74. package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
  75. package/dist/modules/customers/lib/todoCompatibility.js +1 -1
  76. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  77. package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
  78. package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
  79. package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
  80. package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
  81. package/dist/modules/customers/workflows.js +29 -0
  82. package/dist/modules/customers/workflows.js.map +7 -0
  83. package/dist/modules/entities/api/records.js +13 -33
  84. package/dist/modules/entities/api/records.js.map +3 -3
  85. package/dist/modules/entities/lib/entityClassification.js +60 -0
  86. package/dist/modules/entities/lib/entityClassification.js.map +7 -0
  87. package/dist/modules/sales/commands/documents.js +31 -0
  88. package/dist/modules/sales/commands/documents.js.map +2 -2
  89. package/dist/modules/sales/events.js +12 -1
  90. package/dist/modules/sales/events.js.map +2 -2
  91. package/dist/modules/sales/workflows.js +12 -1
  92. package/dist/modules/sales/workflows.js.map +2 -2
  93. package/dist/modules/seeds/cli.js +199 -0
  94. package/dist/modules/seeds/cli.js.map +7 -0
  95. package/dist/modules/seeds/examples/sample-seed.json +26 -0
  96. package/dist/modules/seeds/index.js +12 -0
  97. package/dist/modules/seeds/index.js.map +7 -0
  98. package/dist/modules/workflows/acl.js +96 -0
  99. package/dist/modules/workflows/acl.js.map +2 -2
  100. package/dist/modules/workflows/ai-agents.js +50 -0
  101. package/dist/modules/workflows/ai-agents.js.map +7 -0
  102. package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
  103. package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
  104. package/dist/modules/workflows/ai-tools/types.js +43 -0
  105. package/dist/modules/workflows/ai-tools/types.js.map +7 -0
  106. package/dist/modules/workflows/ai-tools.js +10 -0
  107. package/dist/modules/workflows/ai-tools.js.map +7 -0
  108. package/dist/modules/workflows/api/command-settings/route.js +137 -0
  109. package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
  110. package/dist/modules/workflows/api/commands/route.js +72 -0
  111. package/dist/modules/workflows/api/commands/route.js.map +7 -0
  112. package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
  113. package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
  114. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
  115. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
  116. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
  117. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
  118. package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
  119. package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
  120. package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
  121. package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
  122. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
  123. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
  124. package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
  125. package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
  126. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
  127. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
  128. package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
  129. package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
  130. package/dist/modules/workflows/api/definitions/route.js +61 -113
  131. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  132. package/dist/modules/workflows/api/definitions/serialize.js +9 -0
  133. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  134. package/dist/modules/workflows/api/endpoints/route.js +69 -0
  135. package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
  136. package/dist/modules/workflows/api/functions/route.js +73 -0
  137. package/dist/modules/workflows/api/functions/route.js.map +7 -0
  138. package/dist/modules/workflows/api/grantable-features/route.js +75 -0
  139. package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
  140. package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
  141. package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
  142. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
  143. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
  144. package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
  145. package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
  146. package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
  147. package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
  148. package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
  149. package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
  150. package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
  151. package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
  152. package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
  153. package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
  154. package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
  155. package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
  156. package/dist/modules/workflows/api/instances/route.js +94 -3
  157. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  158. package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
  159. package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
  160. package/dist/modules/workflows/api/openapi.js +415 -4
  161. package/dist/modules/workflows/api/openapi.js.map +2 -2
  162. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
  163. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
  164. package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
  165. package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
  166. package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
  167. package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
  168. package/dist/modules/workflows/api/rule-usage/route.js +80 -0
  169. package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
  170. package/dist/modules/workflows/api/task-settings/route.js +107 -0
  171. package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
  172. package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
  173. package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
  174. package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
  175. package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
  176. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
  177. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
  178. package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
  179. package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
  180. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
  181. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
  182. package/dist/modules/workflows/api/tasks/route.js +37 -6
  183. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  184. package/dist/modules/workflows/api/tasks/serialize.js +83 -0
  185. package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
  186. package/dist/modules/workflows/api/templates/route.js +69 -0
  187. package/dist/modules/workflows/api/templates/route.js.map +7 -0
  188. package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
  189. package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
  190. package/dist/modules/workflows/api/work-inbox/route.js +119 -0
  191. package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
  192. package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
  193. package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
  194. package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
  195. package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
  196. package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
  197. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
  198. package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
  199. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  200. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  201. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  202. package/dist/modules/workflows/backend/definitions/page.js +131 -51
  203. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  204. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
  205. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
  206. package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
  207. package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
  208. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
  209. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
  210. package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
  211. package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
  212. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
  213. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
  214. package/dist/modules/workflows/backend/instances/page.js +159 -22
  215. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  216. package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
  217. package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
  218. package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
  219. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
  220. package/dist/modules/workflows/backend/tasks/page.js +8 -250
  221. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  222. package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
  223. package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
  224. package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
  225. package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
  226. package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
  227. package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
  228. package/dist/modules/workflows/cli.js +1 -1
  229. package/dist/modules/workflows/cli.js.map +2 -2
  230. package/dist/modules/workflows/commands/tasks.js +81 -0
  231. package/dist/modules/workflows/commands/tasks.js.map +7 -0
  232. package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
  233. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  234. package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
  235. package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
  236. package/dist/modules/workflows/components/AgentSelector.js +115 -0
  237. package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
  238. package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
  239. package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
  240. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
  241. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
  242. package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
  243. package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
  244. package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
  245. package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
  246. package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
  247. package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
  248. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
  249. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
  250. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
  251. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
  252. package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
  253. package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
  254. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
  255. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
  256. package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
  257. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  258. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
  259. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
  260. package/dist/modules/workflows/components/InputDataPanel.js +128 -0
  261. package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
  262. package/dist/modules/workflows/components/InspectorPanel.js +161 -0
  263. package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
  264. package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
  265. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  266. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
  267. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
  268. package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
  269. package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
  270. package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
  271. package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
  272. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  273. package/dist/modules/workflows/components/TriggersDialog.js +53 -0
  274. package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
  275. package/dist/modules/workflows/components/TriggersEditor.js +331 -0
  276. package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
  277. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
  278. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
  279. package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
  280. package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
  281. package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
  282. package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
  283. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
  284. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
  285. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
  286. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
  287. package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
  288. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  289. package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
  290. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
  291. package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
  292. package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
  293. package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
  294. package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
  295. package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
  296. package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
  297. package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
  298. package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
  299. package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
  300. package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
  301. package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
  302. package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
  303. package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
  304. package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
  305. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
  306. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
  307. package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
  308. package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
  309. package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
  310. package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
  311. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
  312. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
  313. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
  314. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
  315. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
  316. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
  317. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
  318. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  319. package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
  320. package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
  321. package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
  322. package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
  323. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
  324. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
  325. package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
  326. package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
  327. package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
  328. package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
  329. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
  330. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
  331. package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
  332. package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
  333. package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
  334. package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
  335. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
  336. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
  337. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
  338. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  339. package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
  340. package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
  341. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
  342. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
  343. package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
  344. package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
  345. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
  346. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
  347. package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
  348. package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
  349. package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
  350. package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
  351. package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
  352. package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
  353. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
  354. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
  355. package/dist/modules/workflows/components/formConfig.js +39 -10
  356. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  357. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  358. package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
  359. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
  360. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  361. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
  362. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
  363. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
  364. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
  365. package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
  366. package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
  367. package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
  368. package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
  369. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
  370. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
  371. package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
  372. package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
  373. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
  374. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
  375. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
  376. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
  377. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
  378. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
  379. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
  380. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
  381. package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
  382. package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
  383. package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
  384. package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
  385. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
  386. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
  387. package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
  388. package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
  389. package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
  390. package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
  391. package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
  392. package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
  393. package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
  394. package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
  395. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
  396. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
  397. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
  398. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
  399. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
  400. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
  401. package/dist/modules/workflows/components/nodes/index.js +14 -0
  402. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  403. package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
  404. package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
  405. package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
  406. package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
  407. package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
  408. package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
  409. package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
  410. package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
  411. package/dist/modules/workflows/components/run/RunGantt.js +130 -0
  412. package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
  413. package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
  414. package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
  415. package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
  416. package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
  417. package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
  418. package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
  419. package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
  420. package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
  421. package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
  422. package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
  423. package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
  424. package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
  425. package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
  426. package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
  427. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
  428. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
  429. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
  430. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
  431. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
  432. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
  433. package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
  434. package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
  435. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
  436. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
  437. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
  438. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
  439. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
  440. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
  441. package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
  442. package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
  443. package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
  444. package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
  445. package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
  446. package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
  447. package/dist/modules/workflows/data/entities.js +144 -4
  448. package/dist/modules/workflows/data/entities.js.map +2 -2
  449. package/dist/modules/workflows/data/metrics-validators.js +35 -0
  450. package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
  451. package/dist/modules/workflows/data/task-primitives.js +14 -0
  452. package/dist/modules/workflows/data/task-primitives.js.map +7 -0
  453. package/dist/modules/workflows/data/validators.js +504 -61
  454. package/dist/modules/workflows/data/validators.js.map +3 -3
  455. package/dist/modules/workflows/di.js +16 -1
  456. package/dist/modules/workflows/di.js.map +2 -2
  457. package/dist/modules/workflows/events.js +66 -8
  458. package/dist/modules/workflows/events.js.map +2 -2
  459. package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  460. package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  461. package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
  462. package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
  463. package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
  464. package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
  465. package/dist/modules/workflows/extension-points.js +1 -1
  466. package/dist/modules/workflows/extension-points.js.map +2 -2
  467. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
  468. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
  469. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
  470. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
  471. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
  472. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
  473. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
  474. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
  475. package/dist/modules/workflows/lib/activity-executor.js +505 -137
  476. package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
  477. package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
  478. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  479. package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
  480. package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
  481. package/dist/modules/workflows/lib/activity-registry.js +27 -0
  482. package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
  483. package/dist/modules/workflows/lib/activity-types.js +291 -0
  484. package/dist/modules/workflows/lib/activity-types.js.map +7 -0
  485. package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
  486. package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
  487. package/dist/modules/workflows/lib/advanced-config.js +31 -0
  488. package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
  489. package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
  490. package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
  491. package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
  492. package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
  493. package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
  494. package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
  495. package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
  496. package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
  497. package/dist/modules/workflows/lib/agent-review.js +66 -0
  498. package/dist/modules/workflows/lib/agent-review.js.map +7 -0
  499. package/dist/modules/workflows/lib/ai-authoring.js +155 -0
  500. package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
  501. package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
  502. package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
  503. package/dist/modules/workflows/lib/annotation-events.js +10 -0
  504. package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
  505. package/dist/modules/workflows/lib/branching-routes.js +182 -0
  506. package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
  507. package/dist/modules/workflows/lib/breach-routing.js +50 -0
  508. package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
  509. package/dist/modules/workflows/lib/bulk-replay.js +101 -0
  510. package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
  511. package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
  512. package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
  513. package/dist/modules/workflows/lib/caller-graph.js +53 -0
  514. package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
  515. package/dist/modules/workflows/lib/code-view-apply.js +86 -0
  516. package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
  517. package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
  518. package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
  519. package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
  520. package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
  521. package/dist/modules/workflows/lib/component-guard.js +7 -0
  522. package/dist/modules/workflows/lib/component-guard.js.map +7 -0
  523. package/dist/modules/workflows/lib/condition-handler.js +443 -0
  524. package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
  525. package/dist/modules/workflows/lib/context-ledger.js +448 -0
  526. package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
  527. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
  528. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
  529. package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
  530. package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
  531. package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
  532. package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
  533. package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
  534. package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
  535. package/dist/modules/workflows/lib/definition-error-body.js +33 -0
  536. package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
  537. package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
  538. package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
  539. package/dist/modules/workflows/lib/definition-grant.js +90 -0
  540. package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
  541. package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
  542. package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
  543. package/dist/modules/workflows/lib/definition-payload.js +31 -0
  544. package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
  545. package/dist/modules/workflows/lib/draft-restore.js +49 -0
  546. package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
  547. package/dist/modules/workflows/lib/dry-run.js +106 -0
  548. package/dist/modules/workflows/lib/dry-run.js.map +7 -0
  549. package/dist/modules/workflows/lib/duration.js +66 -17
  550. package/dist/modules/workflows/lib/duration.js.map +2 -2
  551. package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
  552. package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
  553. package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
  554. package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
  555. package/dist/modules/workflows/lib/editor-annotations.js +195 -0
  556. package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
  557. package/dist/modules/workflows/lib/editor-commands.js +103 -0
  558. package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
  559. package/dist/modules/workflows/lib/editor-history.js +51 -0
  560. package/dist/modules/workflows/lib/editor-history.js.map +7 -0
  561. package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
  562. package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
  563. package/dist/modules/workflows/lib/endpoint-path.js +90 -0
  564. package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
  565. package/dist/modules/workflows/lib/engine-version.js +42 -0
  566. package/dist/modules/workflows/lib/engine-version.js.map +7 -0
  567. package/dist/modules/workflows/lib/error-handler.js +132 -0
  568. package/dist/modules/workflows/lib/error-handler.js.map +7 -0
  569. package/dist/modules/workflows/lib/error-routing.js +104 -0
  570. package/dist/modules/workflows/lib/error-routing.js.map +7 -0
  571. package/dist/modules/workflows/lib/event-logger.js +23 -0
  572. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  573. package/dist/modules/workflows/lib/expression-refs.js +168 -0
  574. package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
  575. package/dist/modules/workflows/lib/failure-grouping.js +62 -0
  576. package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
  577. package/dist/modules/workflows/lib/find-definition.js +1 -0
  578. package/dist/modules/workflows/lib/find-definition.js.map +2 -2
  579. package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
  580. package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
  581. package/dist/modules/workflows/lib/graph-utils.js +328 -77
  582. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  583. package/dist/modules/workflows/lib/icon-search.js +32 -0
  584. package/dist/modules/workflows/lib/icon-search.js.map +7 -0
  585. package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
  586. package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
  587. package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
  588. package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
  589. package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
  590. package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
  591. package/dist/modules/workflows/lib/ledger-drag.js +28 -0
  592. package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
  593. package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
  594. package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
  595. package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
  596. package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
  597. package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
  598. package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
  599. package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
  600. package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
  601. package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
  602. package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
  603. package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
  604. package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
  605. package/dist/modules/workflows/lib/node-config-summary.js +128 -0
  606. package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
  607. package/dist/modules/workflows/lib/node-geometry.js +53 -0
  608. package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
  609. package/dist/modules/workflows/lib/node-nudge.js +44 -0
  610. package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
  611. package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
  612. package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
  613. package/dist/modules/workflows/lib/node-placement.js +55 -0
  614. package/dist/modules/workflows/lib/node-placement.js.map +7 -0
  615. package/dist/modules/workflows/lib/node-type-icons.js +54 -13
  616. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  617. package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
  618. package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
  619. package/dist/modules/workflows/lib/outcome-routing.js +158 -0
  620. package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
  621. package/dist/modules/workflows/lib/owned-definition.js +107 -0
  622. package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
  623. package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
  624. package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
  625. package/dist/modules/workflows/lib/palette-drag.js +36 -0
  626. package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
  627. package/dist/modules/workflows/lib/palette-drop.js +45 -0
  628. package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
  629. package/dist/modules/workflows/lib/parallel-handler.js +57 -2
  630. package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
  631. package/dist/modules/workflows/lib/port-contract.js +54 -0
  632. package/dist/modules/workflows/lib/port-contract.js.map +7 -0
  633. package/dist/modules/workflows/lib/portal-task-access.js +89 -0
  634. package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
  635. package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
  636. package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
  637. package/dist/modules/workflows/lib/route-chip-events.js +23 -0
  638. package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
  639. package/dist/modules/workflows/lib/route-chips.js +91 -0
  640. package/dist/modules/workflows/lib/route-chips.js.map +7 -0
  641. package/dist/modules/workflows/lib/route-edge.js +17 -0
  642. package/dist/modules/workflows/lib/route-edge.js.map +7 -0
  643. package/dist/modules/workflows/lib/route-kinds.js +67 -0
  644. package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
  645. package/dist/modules/workflows/lib/route-priority.js +104 -0
  646. package/dist/modules/workflows/lib/route-priority.js.map +7 -0
  647. package/dist/modules/workflows/lib/run-duration.js +44 -0
  648. package/dist/modules/workflows/lib/run-duration.js.map +7 -0
  649. package/dist/modules/workflows/lib/run-event-tone.js +25 -0
  650. package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
  651. package/dist/modules/workflows/lib/run-execution.js +305 -0
  652. package/dist/modules/workflows/lib/run-execution.js.map +7 -0
  653. package/dist/modules/workflows/lib/run-gantt.js +180 -0
  654. package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
  655. package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
  656. package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
  657. package/dist/modules/workflows/lib/run-outcome.js +48 -0
  658. package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
  659. package/dist/modules/workflows/lib/sample-resolver.js +71 -0
  660. package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
  661. package/dist/modules/workflows/lib/seeds.js +1 -1
  662. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  663. package/dist/modules/workflows/lib/server-output-contract.js +65 -0
  664. package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
  665. package/dist/modules/workflows/lib/set-variable.js +47 -0
  666. package/dist/modules/workflows/lib/set-variable.js.map +7 -0
  667. package/dist/modules/workflows/lib/signal-handler.js +63 -4
  668. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  669. package/dist/modules/workflows/lib/start-fixtures.js +42 -0
  670. package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
  671. package/dist/modules/workflows/lib/status-colors.js +153 -22
  672. package/dist/modules/workflows/lib/status-colors.js.map +2 -2
  673. package/dist/modules/workflows/lib/step-handler.js +529 -53
  674. package/dist/modules/workflows/lib/step-handler.js.map +3 -3
  675. package/dist/modules/workflows/lib/step-presentation.js +147 -0
  676. package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
  677. package/dist/modules/workflows/lib/step-through.js +26 -0
  678. package/dist/modules/workflows/lib/step-through.js.map +7 -0
  679. package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
  680. package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
  681. package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
  682. package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
  683. package/dist/modules/workflows/lib/task-decision-context.js +38 -0
  684. package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
  685. package/dist/modules/workflows/lib/task-decisions.js +49 -0
  686. package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
  687. package/dist/modules/workflows/lib/task-entity-access.js +62 -0
  688. package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
  689. package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
  690. package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
  691. package/dist/modules/workflows/lib/task-entity-types.js +36 -0
  692. package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
  693. package/dist/modules/workflows/lib/task-form-registry.js +33 -0
  694. package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
  695. package/dist/modules/workflows/lib/task-form-schema.js +75 -0
  696. package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
  697. package/dist/modules/workflows/lib/task-handler.js +251 -32
  698. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  699. package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
  700. package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
  701. package/dist/modules/workflows/lib/task-list-query.js +19 -0
  702. package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
  703. package/dist/modules/workflows/lib/task-notifications.js +119 -0
  704. package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
  705. package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
  706. package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
  707. package/dist/modules/workflows/lib/task-presets.js +35 -0
  708. package/dist/modules/workflows/lib/task-presets.js.map +7 -0
  709. package/dist/modules/workflows/lib/task-quick-action.js +45 -0
  710. package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
  711. package/dist/modules/workflows/lib/task-resolution.js +120 -0
  712. package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
  713. package/dist/modules/workflows/lib/task-sla.js +357 -0
  714. package/dist/modules/workflows/lib/task-sla.js.map +7 -0
  715. package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
  716. package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
  717. package/dist/modules/workflows/lib/task-visibility.js +194 -0
  718. package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
  719. package/dist/modules/workflows/lib/timer-handler.js +3 -1
  720. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  721. package/dist/modules/workflows/lib/transition-handler.js +148 -20
  722. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  723. package/dist/modules/workflows/lib/trigger-node.js +121 -0
  724. package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
  725. package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
  726. package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
  727. package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
  728. package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
  729. package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
  730. package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
  731. package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
  732. package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
  733. package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
  734. package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
  735. package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
  736. package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
  737. package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
  738. package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
  739. package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
  740. package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
  741. package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
  742. package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
  743. package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
  744. package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
  745. package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
  746. package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
  747. package/dist/modules/workflows/lib/workflow-executor.js +658 -6
  748. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  749. package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
  750. package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
  751. package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
  752. package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
  753. package/dist/modules/workflows/lib/workflow-templates.js +69 -0
  754. package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
  755. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
  756. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
  757. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
  758. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
  759. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
  760. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
  761. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
  762. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
  763. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
  764. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
  765. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
  766. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
  767. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
  768. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
  769. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
  770. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
  771. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
  772. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
  773. package/dist/modules/workflows/notifications.js +38 -10
  774. package/dist/modules/workflows/notifications.js.map +2 -2
  775. package/dist/modules/workflows/setup.js +81 -1
  776. package/dist/modules/workflows/setup.js.map +2 -2
  777. package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
  778. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
  779. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
  780. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
  781. package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
  782. package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
  783. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
  784. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
  785. package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
  786. package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
  787. package/dist/modules/workflows/widgets/injection-table.js +26 -0
  788. package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
  789. package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
  790. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  791. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
  792. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
  793. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
  794. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
  795. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
  796. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
  797. package/generated/entities/action_log/index.ts +1 -0
  798. package/generated/entities/user/index.ts +1 -0
  799. package/generated/entities/user_task/index.ts +7 -0
  800. package/generated/entities/workflow_definition/index.ts +3 -0
  801. package/generated/entities/workflow_definition_draft/index.ts +11 -0
  802. package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
  803. package/generated/entities/workflow_instance/index.ts +2 -0
  804. package/generated/entities.ids.generated.ts +4 -1
  805. package/generated/entity-fields-registry.ts +39 -0
  806. package/jest.setup.ts +13 -0
  807. package/package.json +8 -7
  808. package/src/bootstrap.ts +13 -3
  809. package/src/helpers/integration/workflowsFixtures.ts +765 -5
  810. package/src/helpers/integration/workflowsUi.ts +318 -0
  811. package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
  812. package/src/modules/audit_logs/data/entities.ts +12 -0
  813. package/src/modules/audit_logs/data/validators.ts +1 -0
  814. package/src/modules/audit_logs/lib/projections.ts +5 -1
  815. package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
  816. package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
  817. package/src/modules/audit_logs/services/actionLogService.ts +3 -0
  818. package/src/modules/auth/data/entities.ts +21 -0
  819. package/src/modules/auth/i18n/de.json +31 -0
  820. package/src/modules/auth/i18n/en.json +31 -0
  821. package/src/modules/auth/i18n/es.json +31 -0
  822. package/src/modules/auth/i18n/ko.json +31 -0
  823. package/src/modules/auth/i18n/pl.json +31 -0
  824. package/src/modules/auth/lib/executionPrincipal.ts +235 -0
  825. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  826. package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
  827. package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
  828. package/src/modules/business_rules/data/validators.ts +6 -0
  829. package/src/modules/business_rules/i18n/de.json +4 -0
  830. package/src/modules/business_rules/i18n/en.json +4 -0
  831. package/src/modules/business_rules/i18n/es.json +4 -0
  832. package/src/modules/business_rules/i18n/ko.json +4 -0
  833. package/src/modules/business_rules/i18n/pl.json +4 -0
  834. package/src/modules/business_rules/lib/rule-engine.ts +15 -1
  835. package/src/modules/catalog/commands/products.ts +12 -0
  836. package/src/modules/catalog/i18n/de.json +1 -0
  837. package/src/modules/catalog/i18n/en.json +1 -0
  838. package/src/modules/catalog/i18n/es.json +1 -0
  839. package/src/modules/catalog/i18n/ko.json +1 -0
  840. package/src/modules/catalog/i18n/pl.json +1 -0
  841. package/src/modules/catalog/workflows.ts +35 -0
  842. package/src/modules/customer_accounts/AGENTS.md +11 -0
  843. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
  844. package/src/modules/customer_accounts/cli.ts +96 -0
  845. package/src/modules/customer_accounts/i18n/de.json +5 -0
  846. package/src/modules/customer_accounts/i18n/en.json +5 -0
  847. package/src/modules/customer_accounts/i18n/es.json +5 -0
  848. package/src/modules/customer_accounts/i18n/ko.json +5 -0
  849. package/src/modules/customer_accounts/i18n/pl.json +5 -0
  850. package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
  851. package/src/modules/customer_accounts/setup.ts +15 -3
  852. package/src/modules/customers/commands/deals.ts +5 -0
  853. package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
  854. package/src/modules/customers/components/detail/utils.ts +2 -0
  855. package/src/modules/customers/events.ts +21 -3
  856. package/src/modules/customers/i18n/de.json +4 -0
  857. package/src/modules/customers/i18n/en.json +4 -0
  858. package/src/modules/customers/i18n/es.json +4 -0
  859. package/src/modules/customers/i18n/ko.json +4 -0
  860. package/src/modules/customers/i18n/pl.json +4 -0
  861. package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
  862. package/src/modules/customers/lib/todoCompatibility.ts +4 -1
  863. package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
  864. package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
  865. package/src/modules/customers/workflows.ts +57 -0
  866. package/src/modules/entities/api/records.ts +18 -62
  867. package/src/modules/entities/lib/entityClassification.ts +102 -0
  868. package/src/modules/sales/commands/documents.ts +46 -0
  869. package/src/modules/sales/events.ts +20 -2
  870. package/src/modules/sales/i18n/de.json +2 -1
  871. package/src/modules/sales/i18n/en.json +2 -1
  872. package/src/modules/sales/i18n/es.json +2 -1
  873. package/src/modules/sales/i18n/ko.json +2 -1
  874. package/src/modules/sales/i18n/pl.json +2 -1
  875. package/src/modules/sales/workflows.ts +12 -1
  876. package/src/modules/seeds/README.md +86 -0
  877. package/src/modules/seeds/cli.ts +220 -0
  878. package/src/modules/seeds/examples/sample-seed.json +26 -0
  879. package/src/modules/seeds/index.ts +11 -0
  880. package/src/modules/workflows/AGENTS.md +851 -10
  881. package/src/modules/workflows/acl.ts +96 -0
  882. package/src/modules/workflows/ai-agents.ts +80 -0
  883. package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
  884. package/src/modules/workflows/ai-tools/types.ts +117 -0
  885. package/src/modules/workflows/ai-tools.ts +20 -0
  886. package/src/modules/workflows/api/command-settings/route.ts +171 -0
  887. package/src/modules/workflows/api/commands/route.ts +109 -0
  888. package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
  889. package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
  890. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
  891. package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
  892. package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
  893. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
  894. package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
  895. package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
  896. package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
  897. package/src/modules/workflows/api/definitions/route.ts +88 -113
  898. package/src/modules/workflows/api/definitions/serialize.ts +9 -0
  899. package/src/modules/workflows/api/endpoints/route.ts +88 -0
  900. package/src/modules/workflows/api/functions/route.ts +91 -0
  901. package/src/modules/workflows/api/grantable-features/route.ts +102 -0
  902. package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
  903. package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
  904. package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
  905. package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
  906. package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
  907. package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
  908. package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
  909. package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
  910. package/src/modules/workflows/api/instances/route.ts +135 -3
  911. package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
  912. package/src/modules/workflows/api/openapi.ts +549 -2
  913. package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
  914. package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
  915. package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
  916. package/src/modules/workflows/api/rule-usage/route.ts +94 -0
  917. package/src/modules/workflows/api/task-settings/route.ts +138 -0
  918. package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
  919. package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
  920. package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
  921. package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
  922. package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
  923. package/src/modules/workflows/api/tasks/route.ts +60 -5
  924. package/src/modules/workflows/api/tasks/serialize.ts +119 -0
  925. package/src/modules/workflows/api/templates/route.ts +87 -0
  926. package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
  927. package/src/modules/workflows/api/work-inbox/route.ts +153 -0
  928. package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
  929. package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
  930. package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
  931. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  932. package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
  933. package/src/modules/workflows/backend/definitions/page.tsx +156 -76
  934. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
  935. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
  936. package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
  937. package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
  938. package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
  939. package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
  940. package/src/modules/workflows/backend/instances/page.tsx +218 -38
  941. package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
  942. package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
  943. package/src/modules/workflows/backend/tasks/page.tsx +20 -333
  944. package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
  945. package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
  946. package/src/modules/workflows/cli.ts +1 -1
  947. package/src/modules/workflows/commands/tasks.ts +146 -0
  948. package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
  949. package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
  950. package/src/modules/workflows/components/AgentSelector.tsx +200 -0
  951. package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
  952. package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
  953. package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
  954. package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
  955. package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
  956. package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
  957. package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
  958. package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
  959. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
  960. package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
  961. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
  962. package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
  963. package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
  964. package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
  965. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
  966. package/src/modules/workflows/components/StepsEditor.tsx +9 -2
  967. package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
  968. package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
  969. package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
  970. package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
  971. package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
  972. package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
  973. package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
  974. package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
  975. package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
  976. package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
  977. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
  978. package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
  979. package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
  980. package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
  981. package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
  982. package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
  983. package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
  984. package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
  985. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
  986. package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
  987. package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
  988. package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
  989. package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
  990. package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
  991. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
  992. package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
  993. package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
  994. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
  995. package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
  996. package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
  997. package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
  998. package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
  999. package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
  1000. package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
  1001. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
  1002. package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
  1003. package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
  1004. package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
  1005. package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
  1006. package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
  1007. package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
  1008. package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
  1009. package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
  1010. package/src/modules/workflows/components/formConfig.tsx +84 -10
  1011. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
  1012. package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
  1013. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
  1014. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
  1015. package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
  1016. package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
  1017. package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
  1018. package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
  1019. package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
  1020. package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
  1021. package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
  1022. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
  1023. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
  1024. package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
  1025. package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
  1026. package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
  1027. package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
  1028. package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
  1029. package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
  1030. package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
  1031. package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
  1032. package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
  1033. package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
  1034. package/src/modules/workflows/components/nodes/index.ts +17 -0
  1035. package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
  1036. package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
  1037. package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
  1038. package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
  1039. package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
  1040. package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
  1041. package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
  1042. package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
  1043. package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
  1044. package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
  1045. package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
  1046. package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
  1047. package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
  1048. package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
  1049. package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
  1050. package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
  1051. package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
  1052. package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
  1053. package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
  1054. package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
  1055. package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
  1056. package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
  1057. package/src/modules/workflows/data/entities.ts +397 -4
  1058. package/src/modules/workflows/data/metrics-validators.ts +51 -0
  1059. package/src/modules/workflows/data/task-primitives.ts +36 -0
  1060. package/src/modules/workflows/data/types.ts +81 -2
  1061. package/src/modules/workflows/data/validators.ts +729 -60
  1062. package/src/modules/workflows/di.ts +22 -0
  1063. package/src/modules/workflows/events.ts +68 -8
  1064. package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  1065. package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  1066. package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
  1067. package/src/modules/workflows/examples/templates/order-approval.json +230 -0
  1068. package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
  1069. package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
  1070. package/src/modules/workflows/extension-points.ts +1 -1
  1071. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
  1072. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
  1073. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
  1074. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
  1075. package/src/modules/workflows/i18n/de.json +1083 -24
  1076. package/src/modules/workflows/i18n/en.json +1081 -22
  1077. package/src/modules/workflows/i18n/es.json +1083 -24
  1078. package/src/modules/workflows/i18n/ko.json +1072 -13
  1079. package/src/modules/workflows/i18n/pl.json +1082 -23
  1080. package/src/modules/workflows/lib/activity-executor.ts +855 -186
  1081. package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
  1082. package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
  1083. package/src/modules/workflows/lib/activity-registry.ts +89 -0
  1084. package/src/modules/workflows/lib/activity-types.ts +415 -0
  1085. package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
  1086. package/src/modules/workflows/lib/advanced-config.ts +41 -0
  1087. package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
  1088. package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
  1089. package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
  1090. package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
  1091. package/src/modules/workflows/lib/agent-review.ts +171 -0
  1092. package/src/modules/workflows/lib/ai-authoring.ts +402 -0
  1093. package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
  1094. package/src/modules/workflows/lib/annotation-events.ts +15 -0
  1095. package/src/modules/workflows/lib/branching-routes.ts +280 -0
  1096. package/src/modules/workflows/lib/breach-routing.ts +142 -0
  1097. package/src/modules/workflows/lib/bulk-replay.ts +185 -0
  1098. package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
  1099. package/src/modules/workflows/lib/caller-graph.ts +104 -0
  1100. package/src/modules/workflows/lib/code-view-apply.ts +178 -0
  1101. package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
  1102. package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
  1103. package/src/modules/workflows/lib/component-guard.ts +13 -0
  1104. package/src/modules/workflows/lib/condition-handler.ts +658 -0
  1105. package/src/modules/workflows/lib/context-ledger.ts +814 -0
  1106. package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
  1107. package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
  1108. package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
  1109. package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
  1110. package/src/modules/workflows/lib/definition-error-body.ts +43 -0
  1111. package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
  1112. package/src/modules/workflows/lib/definition-grant.ts +211 -0
  1113. package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
  1114. package/src/modules/workflows/lib/definition-payload.ts +81 -0
  1115. package/src/modules/workflows/lib/draft-restore.ts +72 -0
  1116. package/src/modules/workflows/lib/dry-run.ts +203 -0
  1117. package/src/modules/workflows/lib/duration.ts +138 -24
  1118. package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
  1119. package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
  1120. package/src/modules/workflows/lib/editor-annotations.ts +301 -0
  1121. package/src/modules/workflows/lib/editor-commands.ts +205 -0
  1122. package/src/modules/workflows/lib/editor-history.ts +151 -0
  1123. package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
  1124. package/src/modules/workflows/lib/endpoint-path.ts +134 -0
  1125. package/src/modules/workflows/lib/engine-version.ts +67 -0
  1126. package/src/modules/workflows/lib/error-handler.ts +192 -0
  1127. package/src/modules/workflows/lib/error-routing.ts +236 -0
  1128. package/src/modules/workflows/lib/event-logger.ts +27 -0
  1129. package/src/modules/workflows/lib/expression-refs.ts +291 -0
  1130. package/src/modules/workflows/lib/failure-grouping.ts +134 -0
  1131. package/src/modules/workflows/lib/find-definition.ts +4 -0
  1132. package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
  1133. package/src/modules/workflows/lib/graph-utils.ts +620 -110
  1134. package/src/modules/workflows/lib/icon-search.ts +65 -0
  1135. package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
  1136. package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
  1137. package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
  1138. package/src/modules/workflows/lib/ledger-drag.ts +61 -0
  1139. package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
  1140. package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
  1141. package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
  1142. package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
  1143. package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
  1144. package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
  1145. package/src/modules/workflows/lib/node-config-summary.ts +235 -0
  1146. package/src/modules/workflows/lib/node-geometry.ts +168 -0
  1147. package/src/modules/workflows/lib/node-nudge.ts +63 -0
  1148. package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
  1149. package/src/modules/workflows/lib/node-placement.ts +104 -0
  1150. package/src/modules/workflows/lib/node-type-icons.ts +71 -10
  1151. package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
  1152. package/src/modules/workflows/lib/outcome-routing.ts +346 -0
  1153. package/src/modules/workflows/lib/owned-definition.ts +188 -0
  1154. package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
  1155. package/src/modules/workflows/lib/palette-drag.ts +68 -0
  1156. package/src/modules/workflows/lib/palette-drop.ts +114 -0
  1157. package/src/modules/workflows/lib/parallel-handler.ts +79 -2
  1158. package/src/modules/workflows/lib/port-contract.ts +107 -0
  1159. package/src/modules/workflows/lib/portal-task-access.ts +220 -0
  1160. package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
  1161. package/src/modules/workflows/lib/route-chip-events.ts +45 -0
  1162. package/src/modules/workflows/lib/route-chips.ts +177 -0
  1163. package/src/modules/workflows/lib/route-edge.ts +57 -0
  1164. package/src/modules/workflows/lib/route-kinds.ts +166 -0
  1165. package/src/modules/workflows/lib/route-priority.ts +197 -0
  1166. package/src/modules/workflows/lib/run-duration.ts +70 -0
  1167. package/src/modules/workflows/lib/run-event-tone.ts +46 -0
  1168. package/src/modules/workflows/lib/run-execution.ts +598 -0
  1169. package/src/modules/workflows/lib/run-gantt.ts +311 -0
  1170. package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
  1171. package/src/modules/workflows/lib/run-outcome.ts +142 -0
  1172. package/src/modules/workflows/lib/sample-resolver.ts +113 -0
  1173. package/src/modules/workflows/lib/seeds.ts +3 -1
  1174. package/src/modules/workflows/lib/server-output-contract.ts +120 -0
  1175. package/src/modules/workflows/lib/set-variable.ts +94 -0
  1176. package/src/modules/workflows/lib/signal-handler.ts +134 -4
  1177. package/src/modules/workflows/lib/start-fixtures.ts +93 -0
  1178. package/src/modules/workflows/lib/status-colors.ts +220 -21
  1179. package/src/modules/workflows/lib/step-handler.ts +744 -68
  1180. package/src/modules/workflows/lib/step-presentation.ts +295 -0
  1181. package/src/modules/workflows/lib/step-through.ts +71 -0
  1182. package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
  1183. package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
  1184. package/src/modules/workflows/lib/task-decision-context.ts +76 -0
  1185. package/src/modules/workflows/lib/task-decisions.ts +117 -0
  1186. package/src/modules/workflows/lib/task-entity-access.ts +181 -0
  1187. package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
  1188. package/src/modules/workflows/lib/task-entity-types.ts +66 -0
  1189. package/src/modules/workflows/lib/task-form-registry.ts +123 -0
  1190. package/src/modules/workflows/lib/task-form-schema.ts +129 -0
  1191. package/src/modules/workflows/lib/task-handler.ts +492 -51
  1192. package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
  1193. package/src/modules/workflows/lib/task-list-query.ts +46 -0
  1194. package/src/modules/workflows/lib/task-notifications.ts +218 -0
  1195. package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
  1196. package/src/modules/workflows/lib/task-presets.ts +95 -0
  1197. package/src/modules/workflows/lib/task-quick-action.ts +111 -0
  1198. package/src/modules/workflows/lib/task-resolution.ts +270 -0
  1199. package/src/modules/workflows/lib/task-sla.ts +628 -0
  1200. package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
  1201. package/src/modules/workflows/lib/task-visibility.ts +627 -0
  1202. package/src/modules/workflows/lib/timer-handler.ts +8 -1
  1203. package/src/modules/workflows/lib/transition-handler.ts +228 -20
  1204. package/src/modules/workflows/lib/trigger-node.ts +272 -0
  1205. package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
  1206. package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
  1207. package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
  1208. package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
  1209. package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
  1210. package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
  1211. package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
  1212. package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
  1213. package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
  1214. package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
  1215. package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
  1216. package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
  1217. package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
  1218. package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
  1219. package/src/modules/workflows/lib/workflow-templates.ts +91 -0
  1220. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
  1221. package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
  1222. package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
  1223. package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
  1224. package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
  1225. package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
  1226. package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
  1227. package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
  1228. package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
  1229. package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
  1230. package/src/modules/workflows/notifications.ts +40 -10
  1231. package/src/modules/workflows/setup.ts +128 -0
  1232. package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
  1233. package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
  1234. package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
  1235. package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
  1236. package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
  1237. package/src/modules/workflows/widgets/injection-table.ts +52 -2
  1238. package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
  1239. package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
  1240. package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
  1241. package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
@@ -1,14 +1,33 @@
1
- import { WorkflowInstance } from "../data/entities.js";
2
- import { logWorkflowEvent } from "./event-logger.js";
1
+ import { mapAgentResultToContext } from "./agent-result-mapping.js";
3
2
  import {
4
- executeSendEmail,
5
- executeEmitEvent,
6
- executeUpdateEntity,
7
- executeCallWebhook,
8
- executeFunction
9
- } from "./activity-executor.js";
3
+ WORKFLOW_GUARDRAIL_BLOCK_CONTEXT_KEY,
4
+ isGuardrailBlockedError,
5
+ listWiredOutcomes,
6
+ readGuardrailBlockEvidenceRef
7
+ } from "./outcome-routing.js";
8
+ import { WORKFLOW_ERROR_CONTEXT_KEY, buildErrorContextEntry } from "./error-routing.js";
9
+ import { LockMode } from "@mikro-orm/core";
10
+ import { WorkflowDefinition, WorkflowInstance, StepInstance } from "../data/entities.js";
11
+ import { logWorkflowEvent } from "./event-logger.js";
12
+ import "./activity-registry-bootstrap.js";
13
+ import { SUB_WORKFLOW_SIGNAL_NAME } from "./activity-executor.js";
14
+ import { getActivityType } from "./activity-registry.js";
10
15
  import { createLogger } from "@open-mercato/shared/lib/logger";
11
16
  const logger = createLogger("workflows").child({ component: "activity-worker" });
17
+ const INVOKE_AGENT_QUEUE_MAX_ATTEMPTS = 3;
18
+ async function executeRegistryActivity(payload, activityContext, deps) {
19
+ const entry = getActivityType(payload.activityType);
20
+ if (!entry) {
21
+ throw new Error(`Unsupported activity type: ${payload.activityType}`);
22
+ }
23
+ if (entry.async.capable === false) {
24
+ throw new Error(
25
+ `[internal] Activity type ${payload.activityType} cannot run asynchronously (${entry.async.reason})`
26
+ );
27
+ }
28
+ const runActivity = entry.executeAsync ?? entry.execute;
29
+ return await runActivity(payload.activityConfig, activityContext, deps);
30
+ }
12
31
  function createActivityWorkerHandler(em, container) {
13
32
  return async (job, ctx) => {
14
33
  const { payload } = job;
@@ -30,6 +49,85 @@ function createActivityWorkerHandler(em, container) {
30
49
  }
31
50
  return;
32
51
  }
52
+ if (payload.kind === "condition") {
53
+ logger.debug("Evaluating wait condition", {
54
+ instanceId: payload.workflowInstanceId,
55
+ stepInstanceId: payload.stepInstanceId,
56
+ attempt: payload.attempt,
57
+ jobId: ctx.jobId
58
+ });
59
+ try {
60
+ const { evaluateWaitCondition } = await import("./condition-handler.js");
61
+ await evaluateWaitCondition(em, container, {
62
+ instanceId: payload.workflowInstanceId,
63
+ stepInstanceId: payload.stepInstanceId,
64
+ branchInstanceId: payload.branchInstanceId,
65
+ deadlineAt: payload.deadlineAt,
66
+ attempt: payload.attempt,
67
+ tenantId: payload.tenantId,
68
+ organizationId: payload.organizationId,
69
+ userId: payload.userId
70
+ });
71
+ } catch (error) {
72
+ logger.error("Failed to evaluate wait condition", {
73
+ instanceId: payload.workflowInstanceId,
74
+ err: error
75
+ });
76
+ throw error;
77
+ }
78
+ return;
79
+ }
80
+ if (payload.kind === "task_sla") {
81
+ logger.debug("Running task SLA job", {
82
+ instanceId: payload.workflowInstanceId,
83
+ userTaskId: payload.userTaskId,
84
+ phase: payload.phase,
85
+ jobId: ctx.jobId
86
+ });
87
+ try {
88
+ const { runTaskSlaJob } = await import("./task-sla.js");
89
+ await runTaskSlaJob(em, container, {
90
+ userTaskId: payload.userTaskId,
91
+ stepInstanceId: payload.stepInstanceId,
92
+ workflowInstanceId: payload.workflowInstanceId,
93
+ branchInstanceId: payload.branchInstanceId,
94
+ phase: payload.phase,
95
+ deadlineAt: payload.deadlineAt,
96
+ tenantId: payload.tenantId,
97
+ organizationId: payload.organizationId,
98
+ userId: payload.userId
99
+ });
100
+ } catch (error) {
101
+ logger.error("Failed to run task SLA job", {
102
+ instanceId: payload.workflowInstanceId,
103
+ userTaskId: payload.userTaskId,
104
+ err: error
105
+ });
106
+ throw error;
107
+ }
108
+ return;
109
+ }
110
+ if (payload.kind === "invoke_agent") {
111
+ await handleInvokeAgentJob(em, container, payload, {
112
+ attemptNumber: ctx.attemptNumber,
113
+ maxAttempts: INVOKE_AGENT_QUEUE_MAX_ATTEMPTS
114
+ });
115
+ return;
116
+ }
117
+ if (payload.kind === "resume_subworkflow_parent") {
118
+ await resumeParentAfterSubWorkflow(em, container, payload);
119
+ return;
120
+ }
121
+ if (payload.kind === "workflow_error_handler") {
122
+ logger.debug("Starting workflow error handler", {
123
+ instanceId: payload.workflowInstanceId,
124
+ handlerWorkflowId: payload.handlerWorkflowId,
125
+ jobId: ctx.jobId
126
+ });
127
+ const { runWorkflowErrorHandler } = await import("./error-handler.js");
128
+ await runWorkflowErrorHandler(em, container, payload);
129
+ return;
130
+ }
33
131
  logger.debug("Processing activity", { activityId: payload.activityId, jobId: ctx.jobId });
34
132
  try {
35
133
  const instance = await em.findOne(WorkflowInstance, {
@@ -48,29 +146,10 @@ function createActivityWorkerHandler(em, container) {
48
146
  userId: payload.userId
49
147
  };
50
148
  let result;
51
- const executeActivityByType = async () => {
52
- switch (payload.activityType) {
53
- case "SEND_EMAIL":
54
- return await executeSendEmail(payload.activityConfig, activityContext, container);
55
- case "EMIT_EVENT":
56
- return await executeEmitEvent(payload.activityConfig, activityContext, container);
57
- case "UPDATE_ENTITY":
58
- return await executeUpdateEntity(
59
- em,
60
- payload.activityConfig,
61
- activityContext,
62
- container
63
- );
64
- case "CALL_WEBHOOK":
65
- return await executeCallWebhook(payload.activityConfig, activityContext);
66
- case "EXECUTE_FUNCTION":
67
- return await executeFunction(payload.activityConfig, activityContext, container);
68
- case "WAIT":
69
- return { waited: true, async: true };
70
- default:
71
- throw new Error(`Unsupported activity type: ${payload.activityType}`);
72
- }
73
- };
149
+ const executeActivityByType = async () => executeRegistryActivity(payload, activityContext, {
150
+ em,
151
+ container
152
+ });
74
153
  if (payload.timeoutMs) {
75
154
  result = await Promise.race([
76
155
  executeActivityByType(),
@@ -131,6 +210,348 @@ function createActivityWorkerHandler(em, container) {
131
210
  }
132
211
  };
133
212
  }
213
+ function isRetryableError(err) {
214
+ return typeof err === "object" && err !== null && err.retryable === true;
215
+ }
216
+ const RESOLVED_STEP_ATTEMPT_STATUSES = /* @__PURE__ */ new Set([
217
+ "COMPLETED",
218
+ "FAILED",
219
+ "SKIPPED",
220
+ "CANCELLED"
221
+ ]);
222
+ async function awaitStepParkingCommit(em, instanceId) {
223
+ const scopedEm = em;
224
+ if (typeof scopedEm.transactional !== "function") return;
225
+ if (typeof scopedEm.isInTransaction === "function" && scopedEm.isInTransaction()) return;
226
+ await scopedEm.transactional(async (trx) => {
227
+ await trx.findOne(WorkflowInstance, { id: instanceId }, { lockMode: LockMode.PESSIMISTIC_WRITE });
228
+ });
229
+ }
230
+ async function handleInvokeAgentJob(em, container, payload, attempt = {
231
+ attemptNumber: 1,
232
+ maxAttempts: INVOKE_AGENT_QUEUE_MAX_ATTEMPTS
233
+ }) {
234
+ await awaitStepParkingCommit(em, payload.workflowInstanceId);
235
+ const instance = await em.findOne(WorkflowInstance, {
236
+ id: payload.workflowInstanceId,
237
+ tenantId: payload.tenantId,
238
+ organizationId: payload.organizationId
239
+ });
240
+ if (!instance) {
241
+ throw new Error(
242
+ `Workflow instance ${payload.workflowInstanceId} not found for invoke_agent job`
243
+ );
244
+ }
245
+ const stepAttempt = await em.findOne(StepInstance, {
246
+ id: payload.stepInstanceId,
247
+ workflowInstanceId: payload.workflowInstanceId,
248
+ tenantId: payload.tenantId,
249
+ organizationId: payload.organizationId
250
+ });
251
+ if (!stepAttempt) {
252
+ throw new Error(
253
+ `invoke_agent: step attempt ${payload.stepInstanceId} for step ${payload.stepId} is not visible yet (parking transaction not committed); retrying`
254
+ );
255
+ }
256
+ if (RESOLVED_STEP_ATTEMPT_STATUSES.has(stepAttempt.status)) {
257
+ logger.info("invoke_agent job skipped \u2014 this step attempt already resolved", {
258
+ workflowInstanceId: payload.workflowInstanceId,
259
+ stepInstanceId: payload.stepInstanceId,
260
+ stepId: payload.stepId,
261
+ stepAttemptStatus: stepAttempt.status,
262
+ currentStepId: instance.currentStepId
263
+ });
264
+ return;
265
+ }
266
+ if (instance.status !== "PAUSED") {
267
+ throw new Error(
268
+ `invoke_agent: instance ${payload.workflowInstanceId} not parked yet (status=${instance.status}); retrying`
269
+ );
270
+ }
271
+ let bridge;
272
+ try {
273
+ bridge = container.resolve("agentWorkflowBridge");
274
+ } catch {
275
+ throw new Error("[internal] agent_orchestrator not installed (agentWorkflowBridge unavailable)");
276
+ }
277
+ let outcome;
278
+ try {
279
+ outcome = await bridge.invokeAgentForWorkflow({
280
+ agentId: payload.agentId,
281
+ input: payload.input,
282
+ onResult: payload.onResult,
283
+ ctx: {
284
+ tenantId: payload.tenantId,
285
+ organizationId: payload.organizationId,
286
+ userId: payload.userId,
287
+ workflowInstanceId: instance.id,
288
+ stepId: payload.stepId,
289
+ // The step-attempt row the job was enqueued for — the invocation's own
290
+ // identity, carried across the process boundary on the job itself.
291
+ invocationId: payload.stepInstanceId,
292
+ ...payload.subject ? { subject: payload.subject } : {},
293
+ ...payload.review ? { review: payload.review } : {}
294
+ }
295
+ });
296
+ } catch (agentError) {
297
+ if (isRetryableError(agentError) && attempt.attemptNumber < attempt.maxAttempts) {
298
+ logger.warn("invoke_agent rejected by capacity; rethrowing for queue retry", {
299
+ agentId: payload.agentId,
300
+ workflowInstanceId: payload.workflowInstanceId,
301
+ error: agentError instanceof Error ? agentError.message : String(agentError)
302
+ });
303
+ throw agentError;
304
+ }
305
+ if (isGuardrailBlockedError(agentError)) {
306
+ const routed = await resumeInvokeAgentWithGuardrailBlock(em, container, instance, payload, agentError);
307
+ if (routed) return;
308
+ } else {
309
+ const routed = await resumeInvokeAgentWithError(em, container, instance, payload, agentError);
310
+ if (routed) return;
311
+ }
312
+ await failInvokeAgentStep(em, container, instance, payload, agentError);
313
+ return;
314
+ }
315
+ if (outcome.kind === "user_task") {
316
+ logger.info("invoke_agent routed to human; leaving instance parked", {
317
+ agentId: payload.agentId,
318
+ proposalId: outcome.proposalId,
319
+ workflowInstanceId: payload.workflowInstanceId
320
+ });
321
+ return;
322
+ }
323
+ const proposalOutcome = outcome.kind === "auto_approved" || outcome.kind === "none_proposed" ? outcome : null;
324
+ const mappedPayload = mapAgentResultToContext(
325
+ {
326
+ kind: outcome.kind,
327
+ agentId: payload.agentId,
328
+ proposalId: proposalOutcome?.proposalId,
329
+ proposalPayload: proposalOutcome?.payload,
330
+ data: outcome.kind === "research" ? outcome.data : void 0,
331
+ artifacts: outcome.kind === "artifact" ? outcome.artifacts : void 0
332
+ },
333
+ payload.outputMapping
334
+ );
335
+ const signalPayload = mappedPayload ?? (proposalOutcome ? {
336
+ disposition: proposalOutcome.kind,
337
+ agentId: payload.agentId,
338
+ agentProposalId: proposalOutcome.proposalId,
339
+ proposalPayload: proposalOutcome.payload
340
+ } : {
341
+ disposition: "researcher",
342
+ agentId: payload.agentId,
343
+ [`${payload.stepId}_agent`]: outcome.kind === "research" ? outcome.data : outcome.kind === "artifact" ? { artifacts: outcome.artifacts, summary: outcome.summary } : void 0
344
+ });
345
+ try {
346
+ const { sendSignal } = await import("./signal-handler.js");
347
+ await sendSignal(em, container, {
348
+ instanceId: payload.workflowInstanceId,
349
+ signalName: payload.signalName,
350
+ payload: signalPayload,
351
+ // `none_proposed` and `artifact` both take the researcher handle — the agent
352
+ // reported something rather than deciding something, which is what that
353
+ // route means.
354
+ agentOutcome: outcome.kind === "auto_approved" ? "approved" : "researcher",
355
+ agentProposalId: proposalOutcome?.proposalId,
356
+ userId: payload.userId,
357
+ tenantId: payload.tenantId,
358
+ organizationId: payload.organizationId
359
+ });
360
+ } catch (resumeError) {
361
+ logger.error("invoke_agent ran but resume failed; left parked", {
362
+ agentId: payload.agentId,
363
+ workflowInstanceId: payload.workflowInstanceId,
364
+ error: resumeError instanceof Error ? resumeError.message : String(resumeError)
365
+ });
366
+ }
367
+ }
368
+ async function resumeParentAfterSubWorkflow(em, container, payload) {
369
+ const { parentInstanceId, parentStepId, parentStepInstanceId, childInstanceId, childStatus, tenantId, organizationId } = payload;
370
+ const parent = await em.findOne(WorkflowInstance, {
371
+ id: parentInstanceId,
372
+ tenantId,
373
+ organizationId
374
+ });
375
+ if (!parent) {
376
+ throw new Error(`Parent workflow instance ${parentInstanceId} not found for resume_subworkflow_parent job`);
377
+ }
378
+ if (parent.currentStepId !== parentStepId) {
379
+ logger.info(
380
+ "resume_subworkflow_parent skipped \u2014 parent is on a different step (already resolved or synchronous fast path)",
381
+ { parentInstanceId, currentStepId: parent.currentStepId, parentStepId }
382
+ );
383
+ return;
384
+ }
385
+ if (parent.status !== "PAUSED") {
386
+ throw new Error(
387
+ `resume_subworkflow_parent: parent ${parentInstanceId} not parked yet (status=${parent.status}); retrying`
388
+ );
389
+ }
390
+ const { completeWorkflow } = await import("./workflow-executor.js");
391
+ const failParent = async (error) => {
392
+ const activeStep = await em.findOne(StepInstance, {
393
+ workflowInstanceId: parentInstanceId,
394
+ stepId: parentStepId,
395
+ status: "ACTIVE"
396
+ });
397
+ if (activeStep) {
398
+ const now = /* @__PURE__ */ new Date();
399
+ activeStep.status = "FAILED";
400
+ activeStep.errorData = { error };
401
+ activeStep.exitedAt = now;
402
+ activeStep.updatedAt = now;
403
+ await em.flush();
404
+ }
405
+ await completeWorkflow(em, container, parentInstanceId, "FAILED", { error });
406
+ };
407
+ if (childStatus === "FAILED") {
408
+ const message = `Sub-workflow child ${childInstanceId} failed`;
409
+ await logWorkflowEvent(em, {
410
+ workflowInstanceId: parentInstanceId,
411
+ stepInstanceId: parentStepInstanceId,
412
+ eventType: "SUB_WORKFLOW_FAILED",
413
+ eventData: { childInstanceId, error: message },
414
+ tenantId,
415
+ organizationId
416
+ });
417
+ await failParent(message);
418
+ return;
419
+ }
420
+ const parentDefinition = await em.findOne(WorkflowDefinition, { id: parent.definitionId });
421
+ const stepDef = parentDefinition?.definition.steps.find((s) => s.stepId === parentStepId);
422
+ const { subWorkflowId, outputMapping, version } = stepDef?.config || {};
423
+ const childInstance = await em.findOne(WorkflowInstance, {
424
+ id: childInstanceId,
425
+ tenantId,
426
+ organizationId
427
+ });
428
+ if (!childInstance) {
429
+ throw new Error(`Child workflow instance ${childInstanceId} not found for resume_subworkflow_parent job`);
430
+ }
431
+ const { findWorkflowDefinition } = await import("./find-definition.js");
432
+ const childDefinition = subWorkflowId ? await findWorkflowDefinition(em, { workflowId: subWorkflowId, version, tenantId, organizationId }) : null;
433
+ const ioContract = childDefinition?.definition?.io;
434
+ const { mapSubWorkflowOutput } = await import("./step-handler.js");
435
+ const mapped = mapSubWorkflowOutput(childInstance.context || {}, outputMapping || {}, ioContract);
436
+ if (mapped.error) {
437
+ await logWorkflowEvent(em, {
438
+ workflowInstanceId: parentInstanceId,
439
+ stepInstanceId: parentStepInstanceId,
440
+ eventType: "SUB_WORKFLOW_FAILED",
441
+ eventData: { childInstanceId, reason: "OUTPUT_VALIDATION", error: mapped.error },
442
+ tenantId,
443
+ organizationId
444
+ });
445
+ await failParent(mapped.error);
446
+ return;
447
+ }
448
+ const outputData = mapped.outputData;
449
+ await logWorkflowEvent(em, {
450
+ workflowInstanceId: parentInstanceId,
451
+ stepInstanceId: parentStepInstanceId,
452
+ eventType: "SUB_WORKFLOW_COMPLETED",
453
+ eventData: { childInstanceId, outputData },
454
+ tenantId,
455
+ organizationId
456
+ });
457
+ try {
458
+ const { sendSignal } = await import("./signal-handler.js");
459
+ await sendSignal(em, container, {
460
+ instanceId: parentInstanceId,
461
+ signalName: SUB_WORKFLOW_SIGNAL_NAME,
462
+ payload: outputData,
463
+ userId: payload.userId,
464
+ tenantId,
465
+ organizationId
466
+ });
467
+ } catch (resumeError) {
468
+ logger.error("resume_subworkflow_parent: child completed but resuming parent failed; left parked", {
469
+ childInstanceId,
470
+ parentInstanceId,
471
+ error: resumeError instanceof Error ? resumeError.message : String(resumeError)
472
+ });
473
+ }
474
+ }
475
+ async function resumeInvokeAgentWithOutcome(em, container, instance, payload, outcome, contextPayload) {
476
+ let definition = null;
477
+ try {
478
+ const { findDefinitionForInstance } = await import("./find-definition.js");
479
+ definition = await findDefinitionForInstance(em, instance);
480
+ } catch {
481
+ return false;
482
+ }
483
+ if (!definition?.definition) return false;
484
+ if (listWiredOutcomes(definition.definition, payload.stepId).length === 0) return false;
485
+ try {
486
+ const { sendSignal } = await import("./signal-handler.js");
487
+ await sendSignal(em, container, {
488
+ instanceId: payload.workflowInstanceId,
489
+ signalName: payload.signalName,
490
+ payload: contextPayload,
491
+ agentOutcome: outcome,
492
+ userId: payload.userId,
493
+ tenantId: payload.tenantId,
494
+ organizationId: payload.organizationId
495
+ });
496
+ return true;
497
+ } catch (resumeError) {
498
+ logger.error("invoke_agent outcome could not be routed; falling back to fail-stop", {
499
+ agentId: payload.agentId,
500
+ outcome,
501
+ workflowInstanceId: payload.workflowInstanceId,
502
+ error: resumeError instanceof Error ? resumeError.message : String(resumeError)
503
+ });
504
+ return false;
505
+ }
506
+ }
507
+ async function resumeInvokeAgentWithGuardrailBlock(em, container, instance, payload, agentError) {
508
+ const evidenceRef = readGuardrailBlockEvidenceRef(agentError);
509
+ return resumeInvokeAgentWithOutcome(em, container, instance, payload, "guardrailBlocked", {
510
+ disposition: "guardrail_blocked",
511
+ agentId: payload.agentId,
512
+ [WORKFLOW_GUARDRAIL_BLOCK_CONTEXT_KEY]: { stepId: payload.stepId, ...evidenceRef }
513
+ });
514
+ }
515
+ async function resumeInvokeAgentWithError(em, container, instance, payload, agentError) {
516
+ const message = agentError instanceof Error ? agentError.message : String(agentError);
517
+ return resumeInvokeAgentWithOutcome(em, container, instance, payload, "error", {
518
+ agentId: payload.agentId,
519
+ [WORKFLOW_ERROR_CONTEXT_KEY]: buildErrorContextEntry(payload.stepId, message)
520
+ });
521
+ }
522
+ async function failInvokeAgentStep(em, container, instance, payload, agentError) {
523
+ const message = agentError instanceof Error ? agentError.message : String(agentError);
524
+ logger.error("invoke_agent failed; failing instance", {
525
+ agentId: payload.agentId,
526
+ workflowInstanceId: payload.workflowInstanceId,
527
+ error: message
528
+ });
529
+ try {
530
+ const { StepInstance: StepInstance2 } = await import("../data/entities.js");
531
+ const stepInstance = await em.findOne(StepInstance2, {
532
+ id: payload.stepInstanceId,
533
+ tenantId: payload.tenantId,
534
+ organizationId: payload.organizationId
535
+ });
536
+ if (stepInstance && stepInstance.status === "ACTIVE") {
537
+ stepInstance.status = "FAILED";
538
+ stepInstance.errorData = { agentId: payload.agentId, error: message };
539
+ stepInstance.exitedAt = /* @__PURE__ */ new Date();
540
+ await em.flush();
541
+ }
542
+ const { completeWorkflow } = await import("./workflow-executor.js");
543
+ await completeWorkflow(em, container, payload.workflowInstanceId, "FAILED", {
544
+ error: `INVOKE_AGENT step ${payload.stepId} failed: ${message}`,
545
+ details: { agentId: payload.agentId, stepId: payload.stepId }
546
+ });
547
+ } catch (failError) {
548
+ logger.error("invoke_agent: could not mark instance FAILED", {
549
+ agentId: payload.agentId,
550
+ workflowInstanceId: payload.workflowInstanceId,
551
+ error: failError?.message ?? String(failError)
552
+ });
553
+ }
554
+ }
134
555
  async function checkAndResumeWorkflow(em, container, workflowInstanceId) {
135
556
  const { resumeWorkflowAfterActivities } = await import("./workflow-executor.js");
136
557
  try {
@@ -142,6 +563,9 @@ async function checkAndResumeWorkflow(em, container, workflowInstanceId) {
142
563
  }
143
564
  }
144
565
  export {
145
- createActivityWorkerHandler
566
+ createActivityWorkerHandler,
567
+ executeRegistryActivity,
568
+ handleInvokeAgentJob,
569
+ resumeParentAfterSubWorkflow
146
570
  };
147
571
  //# sourceMappingURL=activity-worker-handler.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/lib/activity-worker-handler.ts"],
4
- "sourcesContent": ["/**\n * Workflow Activity Worker Handler\n *\n * Background worker that processes async activities from the queue.\n * Executes activities with timeout, logs events, and triggers workflow resume.\n */\n\nimport { JobHandler } from '@open-mercato/queue'\nimport { WorkflowActivityJob } from './activity-queue-types'\nimport { EntityManager } from '@mikro-orm/core'\nimport type { AwilixContainer } from 'awilix'\nimport { WorkflowInstance } from '../data/entities'\nimport { logWorkflowEvent } from './event-logger'\nimport {\n executeSendEmail,\n executeEmitEvent,\n executeUpdateEntity,\n executeCallWebhook,\n executeFunction,\n} from './activity-executor'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows').child({ component: 'activity-worker' })\n\n/**\n * Create activity worker handler for queue processing\n *\n * @param em - Entity manager\n * @param container - DI container\n * @returns JobHandler function\n */\nexport function createActivityWorkerHandler(\n em: EntityManager,\n container: AwilixContainer\n): JobHandler<WorkflowActivityJob> {\n return async (job, ctx) => {\n const { payload } = job\n const startTime = Date.now()\n\n // Timer jobs (kind: 'timer') are a distinct flow \u2014 they resume a paused\n // workflow instance rather than executing an activity. Handle them first.\n if (payload.kind === 'timer') {\n logger.debug('Firing timer for instance', { instanceId: payload.workflowInstanceId, jobId: ctx.jobId })\n try {\n const { fireTimer } = await import('./timer-handler')\n await fireTimer(em, container, {\n instanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n userId: payload.userId,\n })\n } catch (error: any) {\n logger.error('Failed to fire timer for instance', { instanceId: payload.workflowInstanceId, err: error })\n throw error\n }\n return\n }\n\n logger.debug('Processing activity', { activityId: payload.activityId, jobId: ctx.jobId })\n\n try {\n // Fetch workflow instance\n const instance = await em.findOne(WorkflowInstance, {\n id: payload.workflowInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n if (!instance) {\n throw new Error(`Workflow instance ${payload.workflowInstanceId} not found`)\n }\n\n // Build activity context\n const activityContext = {\n workflowInstance: instance,\n workflowContext: payload.workflowContext,\n stepContext: payload.stepContext,\n stepInstanceId: payload.stepInstanceId,\n userId: payload.userId,\n }\n\n // Execute activity by type (with timeout if specified)\n let result: any\n\n const executeActivityByType = async () => {\n switch (payload.activityType) {\n case 'SEND_EMAIL':\n return await executeSendEmail(payload.activityConfig, activityContext, container)\n case 'EMIT_EVENT':\n return await executeEmitEvent(payload.activityConfig, activityContext, container)\n case 'UPDATE_ENTITY':\n return await executeUpdateEntity(\n em,\n payload.activityConfig,\n activityContext,\n container\n )\n case 'CALL_WEBHOOK':\n return await executeCallWebhook(payload.activityConfig, activityContext)\n case 'EXECUTE_FUNCTION':\n return await executeFunction(payload.activityConfig, activityContext, container)\n case 'WAIT':\n // Delay already applied by the queue via delayMs; the worker\n // only needs to record completion so the workflow can resume.\n return { waited: true, async: true }\n default:\n throw new Error(`Unsupported activity type: ${payload.activityType}`)\n }\n }\n\n // Apply timeout if specified\n if (payload.timeoutMs) {\n result = await Promise.race([\n executeActivityByType(),\n new Promise((_, reject) =>\n setTimeout(\n () => reject(new Error(`Activity timeout after ${payload.timeoutMs}ms`)),\n payload.timeoutMs\n )\n ),\n ])\n } else {\n result = await executeActivityByType()\n }\n\n const executionTimeMs = Date.now() - startTime\n\n // Log success event\n await logWorkflowEvent(em, {\n workflowInstanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n eventType: 'ACTIVITY_COMPLETED',\n eventData: {\n activityId: payload.activityId,\n activityName: payload.activityName,\n async: true,\n jobId: ctx.jobId,\n attemptNumber: ctx.attemptNumber,\n executionTimeMs,\n output: result,\n },\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n logger.debug('Activity completed', { activityId: payload.activityId, executionTimeMs })\n\n // Trigger workflow resume check (via event or direct call)\n await checkAndResumeWorkflow(em, container, payload.workflowInstanceId)\n } catch (error: any) {\n const executionTimeMs = Date.now() - startTime\n\n logger.error('Activity failed', { activityId: payload.activityId, err: error })\n\n // Log failure event\n await logWorkflowEvent(em, {\n workflowInstanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n eventType: 'ACTIVITY_FAILED',\n eventData: {\n activityId: payload.activityId,\n activityName: payload.activityName,\n async: true,\n jobId: ctx.jobId,\n attemptNumber: ctx.attemptNumber,\n error: error.message,\n executionTimeMs,\n },\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n // Check if this was final attempt (BullMQ handles retries automatically)\n if (ctx.attemptNumber >= (payload.retryPolicy?.maxAttempts || 1)) {\n // Final failure - fail workflow\n await checkAndResumeWorkflow(em, container, payload.workflowInstanceId)\n }\n\n // Re-throw to let BullMQ handle retry\n throw error\n }\n }\n}\n\n/**\n * Helper to check if workflow can resume after activities complete/fail\n */\nasync function checkAndResumeWorkflow(\n em: EntityManager,\n container: AwilixContainer,\n workflowInstanceId: string\n): Promise<void> {\n // Import here to avoid circular dependency\n const { resumeWorkflowAfterActivities } = await import('./workflow-executor')\n\n\n try {\n await resumeWorkflowAfterActivities(em, container, workflowInstanceId)\n } catch (error: any) {\n // Ignore error if workflow not ready to resume yet\n if (!error.message?.includes('Activities still pending')) {\n logger.error('Failed to resume workflow', { instanceId: workflowInstanceId, err: error })\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/**\n * Workflow Activity Worker Handler\n *\n * Background worker that processes async activities from the queue.\n * Executes activities with timeout, logs events, and triggers workflow resume.\n */\n\nimport { JobHandler } from '@open-mercato/queue'\nimport {\n WorkflowActivityJob,\n WorkflowActivityJobActivity,\n WorkflowActivityJobInvokeAgent,\n WorkflowActivityJobResumeSubWorkflowParent,\n} from './activity-queue-types'\nimport { mapAgentResultToContext } from './agent-result-mapping'\nimport type { AgentDispositionReview } from './agent-disposition-task'\nimport {\n WORKFLOW_GUARDRAIL_BLOCK_CONTEXT_KEY,\n isGuardrailBlockedError,\n listWiredOutcomes,\n readGuardrailBlockEvidenceRef,\n type AgentOutcomeKind,\n type OutcomeRoutingDefinitionLike,\n} from './outcome-routing'\nimport { WORKFLOW_ERROR_CONTEXT_KEY, buildErrorContextEntry } from './error-routing'\nimport { EntityManager, LockMode } from '@mikro-orm/core'\nimport type { EntityManager as PostgreSqlEntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { WorkflowDefinition, WorkflowInstance, StepInstance } from '../data/entities'\nimport type { StepInstanceStatus } from '../data/entities'\nimport type { WorkflowIoContract } from '../data/validators'\nimport { logWorkflowEvent } from './event-logger'\nimport './activity-registry-bootstrap'\nimport type { ActivityContext } from './activity-executor'\nimport { SUB_WORKFLOW_SIGNAL_NAME } from './activity-executor'\nimport { getActivityType, type ActivityExecuteDeps } from './activity-registry'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows').child({ component: 'activity-worker' })\nconst INVOKE_AGENT_QUEUE_MAX_ATTEMPTS = 3\n\n/**\n * Shared async dispatch through the Activity Registry \u2014 the single lookup\n * path for every queue consumer (this handler and the auto-discovered\n * workers/workflow-activities.worker.ts). Importing this module also\n * guarantees the registry bootstrap and the executor handler binding are in\n * place, so callers never need their own side-effect imports.\n */\nexport async function executeRegistryActivity(\n payload: Pick<WorkflowActivityJobActivity, 'activityType' | 'activityConfig'>,\n activityContext: ActivityContext,\n deps: ActivityExecuteDeps\n): Promise<unknown> {\n const entry = getActivityType(payload.activityType)\n if (!entry) {\n throw new Error(`Unsupported activity type: ${payload.activityType}`)\n }\n if (entry.async.capable === false) {\n throw new Error(\n `[internal] Activity type ${payload.activityType} cannot run asynchronously (${entry.async.reason})`\n )\n }\n const runActivity = entry.executeAsync ?? entry.execute\n return await runActivity(payload.activityConfig, activityContext, deps)\n}\n\n/**\n * Create activity worker handler for queue processing\n *\n * @param em - Entity manager\n * @param container - DI container\n * @returns JobHandler function\n */\nexport function createActivityWorkerHandler(\n em: EntityManager,\n container: AwilixContainer\n): JobHandler<WorkflowActivityJob> {\n return async (job, ctx) => {\n const { payload } = job\n const startTime = Date.now()\n\n // Timer jobs (kind: 'timer') are a distinct flow \u2014 they resume a paused\n // workflow instance rather than executing an activity. Handle them first.\n if (payload.kind === 'timer') {\n logger.debug('Firing timer for instance', { instanceId: payload.workflowInstanceId, jobId: ctx.jobId })\n try {\n const { fireTimer } = await import('./timer-handler')\n await fireTimer(em, container, {\n instanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n userId: payload.userId,\n })\n } catch (error: any) {\n logger.error('Failed to fire timer for instance', { instanceId: payload.workflowInstanceId, err: error })\n throw error\n }\n return\n }\n\n // Condition jobs are the durability backstop for WAIT_FOR_CONDITION steps:\n // they re-evaluate the predicate and enforce the absolute deadline. A job\n // whose waiter was already resumed by the event-driven path is a no-op.\n if (payload.kind === 'condition') {\n logger.debug('Evaluating wait condition', {\n instanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n attempt: payload.attempt,\n jobId: ctx.jobId,\n })\n try {\n const { evaluateWaitCondition } = await import('./condition-handler')\n await evaluateWaitCondition(em, container, {\n instanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n branchInstanceId: payload.branchInstanceId,\n deadlineAt: payload.deadlineAt,\n attempt: payload.attempt,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n userId: payload.userId,\n })\n } catch (error: unknown) {\n logger.error('Failed to evaluate wait condition', {\n instanceId: payload.workflowInstanceId,\n err: error,\n })\n throw error\n }\n return\n }\n\n // Task SLA jobs fire a reminder or the deadline breach for a USER_TASK. The\n // deadline is absolute on the payload and the handler is idempotent, so an\n // at-least-once delivery still breaches exactly once.\n if (payload.kind === 'task_sla') {\n logger.debug('Running task SLA job', {\n instanceId: payload.workflowInstanceId,\n userTaskId: payload.userTaskId,\n phase: payload.phase,\n jobId: ctx.jobId,\n })\n try {\n const { runTaskSlaJob } = await import('./task-sla')\n await runTaskSlaJob(em, container, {\n userTaskId: payload.userTaskId,\n stepInstanceId: payload.stepInstanceId,\n workflowInstanceId: payload.workflowInstanceId,\n branchInstanceId: payload.branchInstanceId,\n phase: payload.phase,\n deadlineAt: payload.deadlineAt,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n userId: payload.userId,\n })\n } catch (error: unknown) {\n logger.error('Failed to run task SLA job', {\n instanceId: payload.workflowInstanceId,\n userTaskId: payload.userTaskId,\n err: error,\n })\n throw error\n }\n return\n }\n\n // Invoke-agent jobs run an INVOKE_AGENT step's agent OUTSIDE the workflow\n // transaction, then resume the parked step (see handleInvokeAgentJob).\n if (payload.kind === 'invoke_agent') {\n await handleInvokeAgentJob(em, container, payload, {\n attemptNumber: ctx.attemptNumber,\n maxAttempts: INVOKE_AGENT_QUEUE_MAX_ATTEMPTS,\n })\n return\n }\n\n // Resume-parent jobs resume a parent instance parked on a SUB_WORKFLOW step\n // after its child reached a terminal state (see resumeParentAfterSubWorkflow).\n if (payload.kind === 'resume_subworkflow_parent') {\n await resumeParentAfterSubWorkflow(em, container, payload)\n return\n }\n\n // Workflow-level error handler jobs start the designated handler workflow\n // for a failed instance, outside the transaction that recorded the failure.\n if (payload.kind === 'workflow_error_handler') {\n logger.debug('Starting workflow error handler', {\n instanceId: payload.workflowInstanceId,\n handlerWorkflowId: payload.handlerWorkflowId,\n jobId: ctx.jobId,\n })\n const { runWorkflowErrorHandler } = await import('./error-handler')\n await runWorkflowErrorHandler(em, container, payload)\n return\n }\n\n logger.debug('Processing activity', { activityId: payload.activityId, jobId: ctx.jobId })\n\n try {\n // Fetch workflow instance\n const instance = await em.findOne(WorkflowInstance, {\n id: payload.workflowInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n if (!instance) {\n throw new Error(`Workflow instance ${payload.workflowInstanceId} not found`)\n }\n\n // Build activity context\n const activityContext = {\n workflowInstance: instance,\n workflowContext: payload.workflowContext,\n stepContext: payload.stepContext,\n stepInstanceId: payload.stepInstanceId,\n userId: payload.userId,\n }\n\n // Execute activity by type (with timeout if specified)\n let result: any\n\n const executeActivityByType = async () =>\n executeRegistryActivity(payload, activityContext, {\n em: em as PostgreSqlEntityManager,\n container,\n })\n\n // Apply timeout if specified\n if (payload.timeoutMs) {\n result = await Promise.race([\n executeActivityByType(),\n new Promise((_, reject) =>\n setTimeout(\n () => reject(new Error(`Activity timeout after ${payload.timeoutMs}ms`)),\n payload.timeoutMs\n )\n ),\n ])\n } else {\n result = await executeActivityByType()\n }\n\n const executionTimeMs = Date.now() - startTime\n\n // Log success event\n await logWorkflowEvent(em, {\n workflowInstanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n eventType: 'ACTIVITY_COMPLETED',\n eventData: {\n activityId: payload.activityId,\n activityName: payload.activityName,\n async: true,\n jobId: ctx.jobId,\n attemptNumber: ctx.attemptNumber,\n executionTimeMs,\n output: result,\n },\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n logger.debug('Activity completed', { activityId: payload.activityId, executionTimeMs })\n\n // Trigger workflow resume check (via event or direct call)\n await checkAndResumeWorkflow(em, container, payload.workflowInstanceId)\n } catch (error: any) {\n const executionTimeMs = Date.now() - startTime\n\n logger.error('Activity failed', { activityId: payload.activityId, err: error })\n\n // Log failure event\n await logWorkflowEvent(em, {\n workflowInstanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n eventType: 'ACTIVITY_FAILED',\n eventData: {\n activityId: payload.activityId,\n activityName: payload.activityName,\n async: true,\n jobId: ctx.jobId,\n attemptNumber: ctx.attemptNumber,\n error: error.message,\n executionTimeMs,\n },\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n // Check if this was final attempt (BullMQ handles retries automatically)\n if (ctx.attemptNumber >= (payload.retryPolicy?.maxAttempts || 1)) {\n // Final failure - fail workflow\n await checkAndResumeWorkflow(em, container, payload.workflowInstanceId)\n }\n\n // Re-throw to let BullMQ handle retry\n throw error\n }\n }\n}\n\n/**\n * Structural retryable-error marker. The agent runtime raises transient\n * capacity rejections (e.g. `AgentCapacityError`) carrying `retryable: true`;\n * core cannot import enterprise error classes, so the contract is duck-typed on\n * that marker (mirrors how the bridge itself is resolved by DI key).\n */\nfunction isRetryableError(err: unknown): boolean {\n return typeof err === 'object' && err !== null && (err as { retryable?: unknown }).retryable === true\n}\n\n/**\n * Minimal surface of the optional agent_orchestrator bridge consumed here.\n * Resolved by DI key so @open-mercato/core does not import the enterprise module.\n */\ntype AgentWorkflowBridgeLike = {\n invokeAgentForWorkflow: (args: {\n agentId: string\n input: unknown\n onResult: { autoApproveThreshold: number; autoApproveMargin?: number } | { alwaysAsk: true }\n ctx: {\n tenantId: string\n organizationId: string\n userId?: string\n workflowInstanceId: string\n stepId: string\n /**\n * The step-attempt id. With the instance and the step it IS this\n * invocation's identity, so the run it produces can be correlated by name\n * rather than by \"the newest run for this agent since now\".\n */\n invocationId?: string\n // Optional interpolated business-record descriptor (invokeAgentConfigSchema.subject).\n subject?: unknown\n // Optional already-resolved Review section (spec 7.5); see the identical\n // declaration in `lib/activity-executor.ts`.\n review?: AgentDispositionReview\n }\n }) => Promise<\n | { kind: 'research'; data: unknown }\n | { kind: 'auto_approved'; proposalId: string; payload: unknown }\n | { kind: 'user_task'; proposalId: string }\n // The agent proposed nothing: terminal like `research`, never parked.\n | { kind: 'none_proposed'; proposalId: string; payload: unknown }\n // The agent PRODUCED files. Terminal and non-mutating, so it routes onto the\n // same governance handle as a research result: the five outcome handles are a\n // vocabulary of DECISIONS, and \"it made a document\" is not one of them.\n | { kind: 'artifact'; artifacts: unknown[]; summary?: string }\n >\n}\n\n/**\n * Step-attempt statuses that mean THIS invocation is over. The step attempt\n * (`step_instances` row) is the invocation's identity \u2014 one row per entry into\n * the step \u2014 so a job addressed to a resolved attempt is a duplicate delivery\n * and must be dropped. That is the idempotency the invoke_agent guard exists\n * for, and unlike an equality check on `instance.currentStepId` it stays correct\n * when a loop re-enters the same step id under a NEW attempt.\n */\nconst RESOLVED_STEP_ATTEMPT_STATUSES: ReadonlySet<StepInstanceStatus> = new Set<StepInstanceStatus>([\n 'COMPLETED',\n 'FAILED',\n 'SKIPPED',\n 'CANCELLED',\n])\n\n/**\n * Block until the transaction that parks the step has committed.\n *\n * `executeInvokeAgent` enqueues this job from INSIDE the workflow execution\n * transaction, so the worker \u2014 reading on its own connection \u2014 can observe a\n * snapshot taken before the step was ever entered. The executor holds a\n * `PESSIMISTIC_WRITE` lock on the instance row for the whole of that\n * transaction (`getWorkflowInstanceForExecution`) and has already written the\n * advanced `current_step_id` to it before the step's activities run, so\n * requesting the SAME lock here waits for that transaction to finish and then\n * reads its committed result. No polling, no sleep, no timing window: the lock\n * IS the happens-before edge between \"the step parked\" and \"the agent may run\".\n *\n * The lock is released immediately (the transaction only reads), so the agent\n * run itself never holds it. A no-op when the entity manager cannot open a\n * transaction, or is already inside one \u2014 an outer transaction has a fixed\n * snapshot the barrier could not refresh anyway, and holding a row lock for the\n * length of an LLM run would be far worse than the race it guards.\n */\nasync function awaitStepParkingCommit(em: EntityManager, instanceId: string): Promise<void> {\n const scopedEm = em as EntityManager & {\n transactional?: <TResult>(callback: (trx: EntityManager) => Promise<TResult>) => Promise<TResult>\n isInTransaction?: () => boolean\n }\n if (typeof scopedEm.transactional !== 'function') return\n if (typeof scopedEm.isInTransaction === 'function' && scopedEm.isInTransaction()) return\n await scopedEm.transactional(async (trx) => {\n await trx.findOne(WorkflowInstance, { id: instanceId }, { lockMode: LockMode.PESSIMISTIC_WRITE })\n })\n}\n\n/**\n * Run an INVOKE_AGENT step's agent OUTSIDE the workflow transaction, then resume\n * the parked step.\n *\n * The step parked on `agent_orchestrator.proposal.ready` (committing the workflow\n * transaction) before this job runs, so the agent \u2014 and all of its own\n * bookkeeping writes \u2014 execute on this worker's independent connection. That is\n * what stops a failing or cross-process (OpenCode) agent run from aborting the\n * workflow transaction, and lets the separate mcp:serve-http process see the\n * committed per-run session rows it needs to authenticate submit_outcome.\n *\n * Idempotency: the agent must run exactly once and only after the step parks.\n * The guard below enforces both, keyed on the STEP ATTEMPT the job was enqueued\n * for (skip when that attempt already resolved; retry while it is not visible or\n * the instance is not parked yet) after `awaitStepParkingCommit` has made the\n * parking transaction's result observable. Once the agent has run, a resume\n * failure is logged rather than rethrown so the job is NOT retried \u2014 re-running\n * an auto_approved agent would re-execute its effector.\n */\nexport async function handleInvokeAgentJob(\n em: EntityManager,\n container: AwilixContainer,\n payload: WorkflowActivityJobInvokeAgent,\n attempt: { attemptNumber: number; maxAttempts: number } = {\n attemptNumber: 1,\n maxAttempts: INVOKE_AGENT_QUEUE_MAX_ATTEMPTS,\n },\n): Promise<void> {\n await awaitStepParkingCommit(em, payload.workflowInstanceId)\n\n const instance = await em.findOne(WorkflowInstance, {\n id: payload.workflowInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n if (!instance) {\n // The parking transaction may not be visible yet \u2014 retry.\n throw new Error(\n `Workflow instance ${payload.workflowInstanceId} not found for invoke_agent job`\n )\n }\n\n // The step attempt is this invocation's identity. Its ABSENCE means the\n // parking transaction is still not observable (the instance has not reached\n // the step yet) \u2014 a re-delivery, never a drop. `instance.currentStepId` cannot\n // make that distinction: it reads the same on \"not arrived yet\" as on \"already\n // moved past\", and dropping the job in the first case parks the instance\n // forever waiting for work that will never run (issue #5986).\n const stepAttempt = await em.findOne(StepInstance, {\n id: payload.stepInstanceId,\n workflowInstanceId: payload.workflowInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n if (!stepAttempt) {\n throw new Error(\n `invoke_agent: step attempt ${payload.stepInstanceId} for step ${payload.stepId} is not visible yet ` +\n `(parking transaction not committed); retrying`\n )\n }\n if (RESOLVED_STEP_ATTEMPT_STATUSES.has(stepAttempt.status)) {\n logger.info('invoke_agent job skipped \u2014 this step attempt already resolved', {\n workflowInstanceId: payload.workflowInstanceId,\n stepInstanceId: payload.stepInstanceId,\n stepId: payload.stepId,\n stepAttemptStatus: stepAttempt.status,\n currentStepId: instance.currentStepId,\n })\n return\n }\n if (instance.status !== 'PAUSED') {\n // Parking transaction has not committed yet; retry before running the agent.\n throw new Error(\n `invoke_agent: instance ${payload.workflowInstanceId} not parked yet (status=${instance.status}); retrying`\n )\n }\n\n let bridge: AgentWorkflowBridgeLike\n try {\n bridge = container.resolve<AgentWorkflowBridgeLike>('agentWorkflowBridge')\n } catch {\n throw new Error('[internal] agent_orchestrator not installed (agentWorkflowBridge unavailable)')\n }\n\n let outcome: Awaited<ReturnType<AgentWorkflowBridgeLike['invokeAgentForWorkflow']>>\n try {\n outcome = await bridge.invokeAgentForWorkflow({\n agentId: payload.agentId,\n input: payload.input,\n onResult: payload.onResult,\n ctx: {\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n userId: payload.userId,\n workflowInstanceId: instance.id,\n stepId: payload.stepId,\n // The step-attempt row the job was enqueued for \u2014 the invocation's own\n // identity, carried across the process boundary on the job itself.\n invocationId: payload.stepInstanceId,\n ...(payload.subject ? { subject: payload.subject } : {}),\n ...(payload.review ? { review: payload.review } : {}),\n },\n })\n } catch (agentError: unknown) {\n // Transient capacity rejection (structural `retryable: true`, e.g. the\n // enterprise AgentCapacityError): the agent never ran, so rethrow and let\n // the queue's retry/backoff re-attempt instead of fail-stopping the step.\n // The terminal attempt becomes the declarative `error` outcome when this\n // step opted into outcome routing; legacy steps keep their fail-stop.\n if (isRetryableError(agentError) && attempt.attemptNumber < attempt.maxAttempts) {\n logger.warn('invoke_agent rejected by capacity; rethrowing for queue retry', {\n agentId: payload.agentId,\n workflowInstanceId: payload.workflowInstanceId,\n error: agentError instanceof Error ? agentError.message : String(agentError),\n })\n throw agentError\n }\n // Guardrail escalation (spec 7.3). A guardrail `block` is a GOVERNANCE\n // outcome, not an infra failure: when the step wired the `guardrailBlocked`\n // handle, resume it down that route (typically \u2192 a review task carrying the\n // guardrail evidence REFERENCE \u2014 never the evidence blob, which stays on the\n // AgentGuardrailCheck row). A step that wired no such route keeps the\n // fail-stop below byte-for-byte, so nothing changes until an author opts in.\n if (isGuardrailBlockedError(agentError)) {\n const routed = await resumeInvokeAgentWithGuardrailBlock(em, container, instance, payload, agentError)\n if (routed) return\n } else {\n const routed = await resumeInvokeAgentWithError(em, container, instance, payload, agentError)\n if (routed) return\n }\n\n // Fail-stop: an INVOKE_AGENT step whose agent cannot produce an outcome\n // (unknown agent id, run error, an unwired guardrail block) must HALT the\n // instance, not\n // silently retry the job forever while the step stays parked. Mark the parked\n // step + instance FAILED so progression stops and the failure is visible, and\n // do NOT rethrow \u2014 a retry would never succeed and would re-run any partial\n // agent work. (A genuine human-review pause is the `user_task` branch below,\n // which is unaffected.)\n await failInvokeAgentStep(em, container, instance, payload, agentError)\n return\n }\n\n // user_task: leave the step parked \u2014 agent_orchestrator's human dispose path\n // fires the same proposal-ready signal to resume it (unchanged behavior).\n if (outcome.kind === 'user_task') {\n logger.info('invoke_agent routed to human; leaving instance parked', {\n agentId: payload.agentId,\n proposalId: outcome.proposalId,\n workflowInstanceId: payload.workflowInstanceId,\n })\n return\n }\n\n // research / auto_approved: resume the parked step by firing the signal. The\n // payload is merged into workflow context (top-level), mirroring the prior\n // inline-resolution behavior so the outgoing transition can branch. When the\n // activity declared an outputMapping, route the result into the chosen keys;\n // otherwise fall back to the legacy fixed-key payload.\n // `auto_approved` and `none_proposed` both carry a proposal; `researcher`\n // carries agent data and `artifact` carries a file list. Narrowed explicitly\n // rather than through a boolean, which the discriminated union does not follow.\n const proposalOutcome =\n outcome.kind === 'auto_approved' || outcome.kind === 'none_proposed' ? outcome : null\n const mappedPayload = mapAgentResultToContext(\n {\n kind: outcome.kind,\n agentId: payload.agentId,\n proposalId: proposalOutcome?.proposalId,\n proposalPayload: proposalOutcome?.payload,\n data: outcome.kind === 'research' ? outcome.data : undefined,\n artifacts: outcome.kind === 'artifact' ? outcome.artifacts : undefined,\n },\n payload.outputMapping\n )\n const signalPayload =\n mappedPayload ??\n (proposalOutcome\n ? {\n disposition: proposalOutcome.kind,\n agentId: payload.agentId,\n agentProposalId: proposalOutcome.proposalId,\n proposalPayload: proposalOutcome.payload,\n }\n : {\n disposition: 'researcher',\n agentId: payload.agentId,\n [`${payload.stepId}_agent`]:\n outcome.kind === 'research'\n ? outcome.data\n : outcome.kind === 'artifact'\n ? { artifacts: outcome.artifacts, summary: outcome.summary }\n : undefined,\n })\n\n try {\n const { sendSignal } = await import('./signal-handler')\n await sendSignal(em, container, {\n instanceId: payload.workflowInstanceId,\n signalName: payload.signalName,\n payload: signalPayload,\n // `none_proposed` and `artifact` both take the researcher handle \u2014 the agent\n // reported something rather than deciding something, which is what that\n // route means.\n agentOutcome: outcome.kind === 'auto_approved' ? 'approved' : 'researcher',\n agentProposalId: proposalOutcome?.proposalId,\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n } catch (resumeError: unknown) {\n // The agent already ran (and, for auto_approved, its effector already\n // executed). Re-running on retry would double-execute, so do NOT rethrow:\n // log and leave the instance parked (resumable via a manual signal).\n logger.error('invoke_agent ran but resume failed; left parked', {\n agentId: payload.agentId,\n workflowInstanceId: payload.workflowInstanceId,\n error: resumeError instanceof Error ? resumeError.message : String(resumeError),\n })\n }\n}\n\n/**\n * Resume a parent instance parked on a SUB_WORKFLOW step after its child reached\n * a terminal state. Modelled on `handleInvokeAgentJob`:\n *\n * Idempotency / ordering guards (mirror handleInvokeAgentJob):\n * - parent not found \u2192 throw (parking txn may not be visible yet; retry)\n * - parent.currentStepId !== parentStepId \u2192 already advanced or never parked\n * here (synchronous fast path) \u2192 skip (no retry)\n * - parent.status !== 'PAUSED' \u2192 not parked yet \u2192 throw (retry)\n *\n * A COMPLETED child maps its output (shared mapSubWorkflowOutput helper) and\n * resumes via `sendSignal`. A FAILED child fails the parent. Once the resume work\n * has run, a resume failure is logged rather than rethrown so a retry cannot\n * double-execute side effects.\n */\nexport async function resumeParentAfterSubWorkflow(\n em: EntityManager,\n container: AwilixContainer,\n payload: WorkflowActivityJobResumeSubWorkflowParent\n): Promise<void> {\n const { parentInstanceId, parentStepId, parentStepInstanceId, childInstanceId, childStatus, tenantId, organizationId } =\n payload\n\n const parent = await em.findOne(WorkflowInstance, {\n id: parentInstanceId,\n tenantId,\n organizationId,\n })\n if (!parent) {\n // The parking transaction may not be visible yet \u2014 retry.\n throw new Error(`Parent workflow instance ${parentInstanceId} not found for resume_subworkflow_parent job`)\n }\n\n if (parent.currentStepId !== parentStepId) {\n logger.info(\n 'resume_subworkflow_parent skipped \u2014 parent is on a different step (already resolved or synchronous fast path)',\n { parentInstanceId, currentStepId: parent.currentStepId, parentStepId },\n )\n return\n }\n if (parent.status !== 'PAUSED') {\n // Parking transaction has not committed yet; retry before resuming.\n throw new Error(\n `resume_subworkflow_parent: parent ${parentInstanceId} not parked yet (status=${parent.status}); retrying`\n )\n }\n\n const { completeWorkflow } = await import('./workflow-executor')\n\n const failParent = async (error: string): Promise<void> => {\n const activeStep = await em.findOne(StepInstance, {\n workflowInstanceId: parentInstanceId,\n stepId: parentStepId,\n status: 'ACTIVE',\n })\n if (activeStep) {\n const now = new Date()\n activeStep.status = 'FAILED'\n activeStep.errorData = { error }\n activeStep.exitedAt = now\n activeStep.updatedAt = now\n await em.flush()\n }\n await completeWorkflow(em, container, parentInstanceId, 'FAILED', { error })\n }\n\n if (childStatus === 'FAILED') {\n const message = `Sub-workflow child ${childInstanceId} failed`\n await logWorkflowEvent(em, {\n workflowInstanceId: parentInstanceId,\n stepInstanceId: parentStepInstanceId,\n eventType: 'SUB_WORKFLOW_FAILED',\n eventData: { childInstanceId, error: message },\n tenantId,\n organizationId,\n })\n await failParent(message)\n return\n }\n\n // COMPLETED child: map its output against the SUB_WORKFLOW step's outputMapping\n // and the child's declared io output ports.\n const parentDefinition = await em.findOne(WorkflowDefinition, { id: parent.definitionId })\n const stepDef = parentDefinition?.definition.steps.find((s: any) => s.stepId === parentStepId)\n const { subWorkflowId, outputMapping, version } = (stepDef?.config || {}) as {\n subWorkflowId?: string\n outputMapping?: Record<string, string>\n version?: number\n }\n\n const childInstance = await em.findOne(WorkflowInstance, {\n id: childInstanceId,\n tenantId,\n organizationId,\n })\n if (!childInstance) {\n throw new Error(`Child workflow instance ${childInstanceId} not found for resume_subworkflow_parent job`)\n }\n\n const { findWorkflowDefinition } = await import('./find-definition')\n const childDefinition = subWorkflowId\n ? await findWorkflowDefinition(em, { workflowId: subWorkflowId, version, tenantId, organizationId })\n : null\n const ioContract = (childDefinition?.definition as { io?: WorkflowIoContract } | undefined)?.io\n\n const { mapSubWorkflowOutput } = await import('./step-handler')\n const mapped = mapSubWorkflowOutput(childInstance.context || {}, outputMapping || {}, ioContract)\n\n if (mapped.error) {\n await logWorkflowEvent(em, {\n workflowInstanceId: parentInstanceId,\n stepInstanceId: parentStepInstanceId,\n eventType: 'SUB_WORKFLOW_FAILED',\n eventData: { childInstanceId, reason: 'OUTPUT_VALIDATION', error: mapped.error },\n tenantId,\n organizationId,\n })\n await failParent(mapped.error)\n return\n }\n\n const outputData = mapped.outputData\n\n await logWorkflowEvent(em, {\n workflowInstanceId: parentInstanceId,\n stepInstanceId: parentStepInstanceId,\n eventType: 'SUB_WORKFLOW_COMPLETED',\n eventData: { childInstanceId, outputData },\n tenantId,\n organizationId,\n })\n\n // Resume the parent via sendSignal: merges outputData into context, exits the\n // active SUB_WORKFLOW step, runs the auto transition out of it, and resumes\n // executeWorkflow(parent). After this side-effecting work, a failure is logged\n // rather than rethrown to avoid double-execution on retry.\n try {\n const { sendSignal } = await import('./signal-handler')\n await sendSignal(em, container, {\n instanceId: parentInstanceId,\n signalName: SUB_WORKFLOW_SIGNAL_NAME,\n payload: outputData,\n userId: payload.userId,\n tenantId,\n organizationId,\n })\n } catch (resumeError: unknown) {\n logger.error('resume_subworkflow_parent: child completed but resuming parent failed; left parked', {\n childInstanceId,\n parentInstanceId,\n error: resumeError instanceof Error ? resumeError.message : String(resumeError),\n })\n }\n}\n\n/**\n * Resume a parked agent step through declarative outcome handling.\n *\n * Returns false \u2014 leaving the caller's legacy fail-stop to run \u2014 when the step\n * declares no outcome routing at all. Once a step opts in, an unwired outcome\n * is still resumed so the executor can apply the inherited error directive.\n */\nasync function resumeInvokeAgentWithOutcome(\n em: EntityManager,\n container: AwilixContainer,\n instance: WorkflowInstance,\n payload: WorkflowActivityJobInvokeAgent,\n outcome: AgentOutcomeKind,\n contextPayload: Record<string, unknown>,\n): Promise<boolean> {\n let definition: { definition?: OutcomeRoutingDefinitionLike } | null = null\n try {\n const { findDefinitionForInstance } = await import('./find-definition')\n definition = await findDefinitionForInstance(em, instance)\n } catch {\n return false\n }\n if (!definition?.definition) return false\n if (listWiredOutcomes(definition.definition, payload.stepId).length === 0) return false\n\n try {\n const { sendSignal } = await import('./signal-handler')\n await sendSignal(em, container, {\n instanceId: payload.workflowInstanceId,\n signalName: payload.signalName,\n payload: contextPayload,\n agentOutcome: outcome,\n userId: payload.userId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n return true\n } catch (resumeError: unknown) {\n logger.error('invoke_agent outcome could not be routed; falling back to fail-stop', {\n agentId: payload.agentId,\n outcome,\n workflowInstanceId: payload.workflowInstanceId,\n error: resumeError instanceof Error ? resumeError.message : String(resumeError),\n })\n return false\n }\n}\n\nasync function resumeInvokeAgentWithGuardrailBlock(\n em: EntityManager,\n container: AwilixContainer,\n instance: WorkflowInstance,\n payload: WorkflowActivityJobInvokeAgent,\n agentError: unknown,\n): Promise<boolean> {\n const evidenceRef = readGuardrailBlockEvidenceRef(agentError)\n return resumeInvokeAgentWithOutcome(em, container, instance, payload, 'guardrailBlocked', {\n disposition: 'guardrail_blocked',\n agentId: payload.agentId,\n [WORKFLOW_GUARDRAIL_BLOCK_CONTEXT_KEY]: { stepId: payload.stepId, ...evidenceRef },\n })\n}\n\nasync function resumeInvokeAgentWithError(\n em: EntityManager,\n container: AwilixContainer,\n instance: WorkflowInstance,\n payload: WorkflowActivityJobInvokeAgent,\n agentError: unknown,\n): Promise<boolean> {\n const message = agentError instanceof Error ? agentError.message : String(agentError)\n return resumeInvokeAgentWithOutcome(em, container, instance, payload, 'error', {\n agentId: payload.agentId,\n [WORKFLOW_ERROR_CONTEXT_KEY]: buildErrorContextEntry(payload.stepId, message),\n })\n}\n\nasync function failInvokeAgentStep(\n em: EntityManager,\n container: AwilixContainer,\n instance: WorkflowInstance,\n payload: WorkflowActivityJobInvokeAgent,\n agentError: unknown,\n): Promise<void> {\n const message = agentError instanceof Error ? agentError.message : String(agentError)\n logger.error('invoke_agent failed; failing instance', {\n agentId: payload.agentId,\n workflowInstanceId: payload.workflowInstanceId,\n error: message,\n })\n try {\n const { StepInstance } = await import('../data/entities')\n const stepInstance = await em.findOne(StepInstance, {\n id: payload.stepInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n if (stepInstance && stepInstance.status === 'ACTIVE') {\n stepInstance.status = 'FAILED'\n stepInstance.errorData = { agentId: payload.agentId, error: message }\n stepInstance.exitedAt = new Date()\n await em.flush()\n }\n\n const { completeWorkflow } = await import('./workflow-executor')\n await completeWorkflow(em, container, payload.workflowInstanceId, 'FAILED', {\n error: `INVOKE_AGENT step ${payload.stepId} failed: ${message}`,\n details: { agentId: payload.agentId, stepId: payload.stepId },\n })\n } catch (failError: any) {\n logger.error('invoke_agent: could not mark instance FAILED', {\n agentId: payload.agentId,\n workflowInstanceId: payload.workflowInstanceId,\n error: failError?.message ?? String(failError),\n })\n }\n}\n\n/**\n * Helper to check if workflow can resume after activities complete/fail\n */\nasync function checkAndResumeWorkflow(\n em: EntityManager,\n container: AwilixContainer,\n workflowInstanceId: string\n): Promise<void> {\n // Import here to avoid circular dependency\n const { resumeWorkflowAfterActivities } = await import('./workflow-executor')\n\n\n try {\n await resumeWorkflowAfterActivities(em, container, workflowInstanceId)\n } catch (error: any) {\n // Ignore error if workflow not ready to resume yet\n if (!error.message?.includes('Activities still pending')) {\n logger.error('Failed to resume workflow', { instanceId: workflowInstanceId, err: error })\n }\n }\n}\n"],
5
+ "mappings": "AAcA,SAAS,+BAA+B;AAExC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,4BAA4B,8BAA8B;AACnE,SAAwB,gBAAgB;AAGxC,SAAS,oBAAoB,kBAAkB,oBAAoB;AAGnE,SAAS,wBAAwB;AACjC,OAAO;AAEP,SAAS,gCAAgC;AACzC,SAAS,uBAAiD;AAC1D,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,WAAW,EAAE,MAAM,EAAE,WAAW,kBAAkB,CAAC;AAC/E,MAAM,kCAAkC;AASxC,eAAsB,wBACpB,SACA,iBACA,MACkB;AAClB,QAAM,QAAQ,gBAAgB,QAAQ,YAAY;AAClD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,8BAA8B,QAAQ,YAAY,EAAE;AAAA,EACtE;AACA,MAAI,MAAM,MAAM,YAAY,OAAO;AACjC,UAAM,IAAI;AAAA,MACR,4BAA4B,QAAQ,YAAY,+BAA+B,MAAM,MAAM,MAAM;AAAA,IACnG;AAAA,EACF;AACA,QAAM,cAAc,MAAM,gBAAgB,MAAM;AAChD,SAAO,MAAM,YAAY,QAAQ,gBAAgB,iBAAiB,IAAI;AACxE;AASO,SAAS,4BACd,IACA,WACiC;AACjC,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,YAAY,KAAK,IAAI;AAI3B,QAAI,QAAQ,SAAS,SAAS;AAC5B,aAAO,MAAM,6BAA6B,EAAE,YAAY,QAAQ,oBAAoB,OAAO,IAAI,MAAM,CAAC;AACtG,UAAI;AACF,cAAM,EAAE,UAAU,IAAI,MAAM,OAAO,iBAAiB;AACpD,cAAM,UAAU,IAAI,WAAW;AAAA,UAC7B,YAAY,QAAQ;AAAA,UACpB,gBAAgB,QAAQ;AAAA,UACxB,UAAU,QAAQ;AAAA,UAClB,gBAAgB,QAAQ;AAAA,UACxB,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,MACH,SAAS,OAAY;AACnB,eAAO,MAAM,qCAAqC,EAAE,YAAY,QAAQ,oBAAoB,KAAK,MAAM,CAAC;AACxG,cAAM;AAAA,MACR;AACA;AAAA,IACF;AAKA,QAAI,QAAQ,SAAS,aAAa;AAChC,aAAO,MAAM,6BAA6B;AAAA,QACxC,YAAY,QAAQ;AAAA,QACpB,gBAAgB,QAAQ;AAAA,QACxB,SAAS,QAAQ;AAAA,QACjB,OAAO,IAAI;AAAA,MACb,CAAC;AACD,UAAI;AACF,cAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,qBAAqB;AACpE,cAAM,sBAAsB,IAAI,WAAW;AAAA,UACzC,YAAY,QAAQ;AAAA,UACpB,gBAAgB,QAAQ;AAAA,UACxB,kBAAkB,QAAQ;AAAA,UAC1B,YAAY,QAAQ;AAAA,UACpB,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ;AAAA,UAClB,gBAAgB,QAAQ;AAAA,UACxB,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,MACH,SAAS,OAAgB;AACvB,eAAO,MAAM,qCAAqC;AAAA,UAChD,YAAY,QAAQ;AAAA,UACpB,KAAK;AAAA,QACP,CAAC;AACD,cAAM;AAAA,MACR;AACA;AAAA,IACF;AAKA,QAAI,QAAQ,SAAS,YAAY;AAC/B,aAAO,MAAM,wBAAwB;AAAA,QACnC,YAAY,QAAQ;AAAA,QACpB,YAAY,QAAQ;AAAA,QACpB,OAAO,QAAQ;AAAA,QACf,OAAO,IAAI;AAAA,MACb,CAAC;AACD,UAAI;AACF,cAAM,EAAE,cAAc,IAAI,MAAM,OAAO,YAAY;AACnD,cAAM,cAAc,IAAI,WAAW;AAAA,UACjC,YAAY,QAAQ;AAAA,UACpB,gBAAgB,QAAQ;AAAA,UACxB,oBAAoB,QAAQ;AAAA,UAC5B,kBAAkB,QAAQ;AAAA,UAC1B,OAAO,QAAQ;AAAA,UACf,YAAY,QAAQ;AAAA,UACpB,UAAU,QAAQ;AAAA,UAClB,gBAAgB,QAAQ;AAAA,UACxB,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,MACH,SAAS,OAAgB;AACvB,eAAO,MAAM,8BAA8B;AAAA,UACzC,YAAY,QAAQ;AAAA,UACpB,YAAY,QAAQ;AAAA,UACpB,KAAK;AAAA,QACP,CAAC;AACD,cAAM;AAAA,MACR;AACA;AAAA,IACF;AAIA,QAAI,QAAQ,SAAS,gBAAgB;AACnC,YAAM,qBAAqB,IAAI,WAAW,SAAS;AAAA,QACjD,eAAe,IAAI;AAAA,QACnB,aAAa;AAAA,MACf,CAAC;AACD;AAAA,IACF;AAIA,QAAI,QAAQ,SAAS,6BAA6B;AAChD,YAAM,6BAA6B,IAAI,WAAW,OAAO;AACzD;AAAA,IACF;AAIA,QAAI,QAAQ,SAAS,0BAA0B;AAC7C,aAAO,MAAM,mCAAmC;AAAA,QAC9C,YAAY,QAAQ;AAAA,QACpB,mBAAmB,QAAQ;AAAA,QAC3B,OAAO,IAAI;AAAA,MACb,CAAC;AACD,YAAM,EAAE,wBAAwB,IAAI,MAAM,OAAO,iBAAiB;AAClE,YAAM,wBAAwB,IAAI,WAAW,OAAO;AACpD;AAAA,IACF;AAEA,WAAO,MAAM,uBAAuB,EAAE,YAAY,QAAQ,YAAY,OAAO,IAAI,MAAM,CAAC;AAExF,QAAI;AAEF,YAAM,WAAW,MAAM,GAAG,QAAQ,kBAAkB;AAAA,QAClD,IAAI,QAAQ;AAAA,QACZ,UAAU,QAAQ;AAAA,QAClB,gBAAgB,QAAQ;AAAA,MAC1B,CAAC;AAED,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,qBAAqB,QAAQ,kBAAkB,YAAY;AAAA,MAC7E;AAGA,YAAM,kBAAkB;AAAA,QACtB,kBAAkB;AAAA,QAClB,iBAAiB,QAAQ;AAAA,QACzB,aAAa,QAAQ;AAAA,QACrB,gBAAgB,QAAQ;AAAA,QACxB,QAAQ,QAAQ;AAAA,MAClB;AAGA,UAAI;AAEJ,YAAM,wBAAwB,YAC5B,wBAAwB,SAAS,iBAAiB;AAAA,QAChD;AAAA,QACA;AAAA,MACF,CAAC;AAGH,UAAI,QAAQ,WAAW;AACrB,iBAAS,MAAM,QAAQ,KAAK;AAAA,UAC1B,sBAAsB;AAAA,UACtB,IAAI;AAAA,YAAQ,CAAC,GAAG,WACd;AAAA,cACE,MAAM,OAAO,IAAI,MAAM,0BAA0B,QAAQ,SAAS,IAAI,CAAC;AAAA,cACvE,QAAQ;AAAA,YACV;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,iBAAS,MAAM,sBAAsB;AAAA,MACvC;AAEA,YAAM,kBAAkB,KAAK,IAAI,IAAI;AAGrC,YAAM,iBAAiB,IAAI;AAAA,QACzB,oBAAoB,QAAQ;AAAA,QAC5B,gBAAgB,QAAQ;AAAA,QACxB,WAAW;AAAA,QACX,WAAW;AAAA,UACT,YAAY,QAAQ;AAAA,UACpB,cAAc,QAAQ;AAAA,UACtB,OAAO;AAAA,UACP,OAAO,IAAI;AAAA,UACX,eAAe,IAAI;AAAA,UACnB;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,gBAAgB,QAAQ;AAAA,MAC1B,CAAC;AAED,aAAO,MAAM,sBAAsB,EAAE,YAAY,QAAQ,YAAY,gBAAgB,CAAC;AAGtF,YAAM,uBAAuB,IAAI,WAAW,QAAQ,kBAAkB;AAAA,IACxE,SAAS,OAAY;AACnB,YAAM,kBAAkB,KAAK,IAAI,IAAI;AAErC,aAAO,MAAM,mBAAmB,EAAE,YAAY,QAAQ,YAAY,KAAK,MAAM,CAAC;AAG9E,YAAM,iBAAiB,IAAI;AAAA,QACzB,oBAAoB,QAAQ;AAAA,QAC5B,gBAAgB,QAAQ;AAAA,QACxB,WAAW;AAAA,QACX,WAAW;AAAA,UACT,YAAY,QAAQ;AAAA,UACpB,cAAc,QAAQ;AAAA,UACtB,OAAO;AAAA,UACP,OAAO,IAAI;AAAA,UACX,eAAe,IAAI;AAAA,UACnB,OAAO,MAAM;AAAA,UACb;AAAA,QACF;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,gBAAgB,QAAQ;AAAA,MAC1B,CAAC;AAGD,UAAI,IAAI,kBAAkB,QAAQ,aAAa,eAAe,IAAI;AAEhE,cAAM,uBAAuB,IAAI,WAAW,QAAQ,kBAAkB;AAAA,MACxE;AAGA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAQA,SAAS,iBAAiB,KAAuB;AAC/C,SAAO,OAAO,QAAQ,YAAY,QAAQ,QAAS,IAAgC,cAAc;AACnG;AAkDA,MAAM,iCAAkE,oBAAI,IAAwB;AAAA,EAClG;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAqBD,eAAe,uBAAuB,IAAmB,YAAmC;AAC1F,QAAM,WAAW;AAIjB,MAAI,OAAO,SAAS,kBAAkB,WAAY;AAClD,MAAI,OAAO,SAAS,oBAAoB,cAAc,SAAS,gBAAgB,EAAG;AAClF,QAAM,SAAS,cAAc,OAAO,QAAQ;AAC1C,UAAM,IAAI,QAAQ,kBAAkB,EAAE,IAAI,WAAW,GAAG,EAAE,UAAU,SAAS,kBAAkB,CAAC;AAAA,EAClG,CAAC;AACH;AAqBA,eAAsB,qBACpB,IACA,WACA,SACA,UAA0D;AAAA,EACxD,eAAe;AAAA,EACf,aAAa;AACf,GACe;AACf,QAAM,uBAAuB,IAAI,QAAQ,kBAAkB;AAE3D,QAAM,WAAW,MAAM,GAAG,QAAQ,kBAAkB;AAAA,IAClD,IAAI,QAAQ;AAAA,IACZ,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AACD,MAAI,CAAC,UAAU;AAEb,UAAM,IAAI;AAAA,MACR,qBAAqB,QAAQ,kBAAkB;AAAA,IACjD;AAAA,EACF;AAQA,QAAM,cAAc,MAAM,GAAG,QAAQ,cAAc;AAAA,IACjD,IAAI,QAAQ;AAAA,IACZ,oBAAoB,QAAQ;AAAA,IAC5B,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AACD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI;AAAA,MACR,8BAA8B,QAAQ,cAAc,aAAa,QAAQ,MAAM;AAAA,IAEjF;AAAA,EACF;AACA,MAAI,+BAA+B,IAAI,YAAY,MAAM,GAAG;AAC1D,WAAO,KAAK,sEAAiE;AAAA,MAC3E,oBAAoB,QAAQ;AAAA,MAC5B,gBAAgB,QAAQ;AAAA,MACxB,QAAQ,QAAQ;AAAA,MAChB,mBAAmB,YAAY;AAAA,MAC/B,eAAe,SAAS;AAAA,IAC1B,CAAC;AACD;AAAA,EACF;AACA,MAAI,SAAS,WAAW,UAAU;AAEhC,UAAM,IAAI;AAAA,MACR,0BAA0B,QAAQ,kBAAkB,2BAA2B,SAAS,MAAM;AAAA,IAChG;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,UAAU,QAAiC,qBAAqB;AAAA,EAC3E,QAAQ;AACN,UAAM,IAAI,MAAM,+EAA+E;AAAA,EACjG;AAEA,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,OAAO,uBAAuB;AAAA,MAC5C,SAAS,QAAQ;AAAA,MACjB,OAAO,QAAQ;AAAA,MACf,UAAU,QAAQ;AAAA,MAClB,KAAK;AAAA,QACH,UAAU,QAAQ;AAAA,QAClB,gBAAgB,QAAQ;AAAA,QACxB,QAAQ,QAAQ;AAAA,QAChB,oBAAoB,SAAS;AAAA,QAC7B,QAAQ,QAAQ;AAAA;AAAA;AAAA,QAGhB,cAAc,QAAQ;AAAA,QACtB,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,QACtD,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH,SAAS,YAAqB;AAM5B,QAAI,iBAAiB,UAAU,KAAK,QAAQ,gBAAgB,QAAQ,aAAa;AAC/E,aAAO,KAAK,iEAAiE;AAAA,QAC3E,SAAS,QAAQ;AAAA,QACjB,oBAAoB,QAAQ;AAAA,QAC5B,OAAO,sBAAsB,QAAQ,WAAW,UAAU,OAAO,UAAU;AAAA,MAC7E,CAAC;AACD,YAAM;AAAA,IACR;AAOA,QAAI,wBAAwB,UAAU,GAAG;AACvC,YAAM,SAAS,MAAM,oCAAoC,IAAI,WAAW,UAAU,SAAS,UAAU;AACrG,UAAI,OAAQ;AAAA,IACd,OAAO;AACL,YAAM,SAAS,MAAM,2BAA2B,IAAI,WAAW,UAAU,SAAS,UAAU;AAC5F,UAAI,OAAQ;AAAA,IACd;AAUA,UAAM,oBAAoB,IAAI,WAAW,UAAU,SAAS,UAAU;AACtE;AAAA,EACF;AAIA,MAAI,QAAQ,SAAS,aAAa;AAChC,WAAO,KAAK,yDAAyD;AAAA,MACnE,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ;AAAA,MACpB,oBAAoB,QAAQ;AAAA,IAC9B,CAAC;AACD;AAAA,EACF;AAUA,QAAM,kBACJ,QAAQ,SAAS,mBAAmB,QAAQ,SAAS,kBAAkB,UAAU;AACnF,QAAM,gBAAgB;AAAA,IACpB;AAAA,MACE,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,YAAY,iBAAiB;AAAA,MAC7B,iBAAiB,iBAAiB;AAAA,MAClC,MAAM,QAAQ,SAAS,aAAa,QAAQ,OAAO;AAAA,MACnD,WAAW,QAAQ,SAAS,aAAa,QAAQ,YAAY;AAAA,IAC/D;AAAA,IACA,QAAQ;AAAA,EACV;AACA,QAAM,gBACJ,kBACC,kBACG;AAAA,IACE,aAAa,gBAAgB;AAAA,IAC7B,SAAS,QAAQ;AAAA,IACjB,iBAAiB,gBAAgB;AAAA,IACjC,iBAAiB,gBAAgB;AAAA,EACnC,IACA;AAAA,IACE,aAAa;AAAA,IACb,SAAS,QAAQ;AAAA,IACjB,CAAC,GAAG,QAAQ,MAAM,QAAQ,GACxB,QAAQ,SAAS,aACb,QAAQ,OACR,QAAQ,SAAS,aACf,EAAE,WAAW,QAAQ,WAAW,SAAS,QAAQ,QAAQ,IACzD;AAAA,EACV;AAEN,MAAI;AACF,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,kBAAkB;AACtD,UAAM,WAAW,IAAI,WAAW;AAAA,MAC9B,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA,MACpB,SAAS;AAAA;AAAA;AAAA;AAAA,MAIT,cAAc,QAAQ,SAAS,kBAAkB,aAAa;AAAA,MAC9D,iBAAiB,iBAAiB;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AAAA,EACH,SAAS,aAAsB;AAI7B,WAAO,MAAM,mDAAmD;AAAA,MAC9D,SAAS,QAAQ;AAAA,MACjB,oBAAoB,QAAQ;AAAA,MAC5B,OAAO,uBAAuB,QAAQ,YAAY,UAAU,OAAO,WAAW;AAAA,IAChF,CAAC;AAAA,EACH;AACF;AAiBA,eAAsB,6BACpB,IACA,WACA,SACe;AACf,QAAM,EAAE,kBAAkB,cAAc,sBAAsB,iBAAiB,aAAa,UAAU,eAAe,IACnH;AAEF,QAAM,SAAS,MAAM,GAAG,QAAQ,kBAAkB;AAAA,IAChD,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,QAAQ;AAEX,UAAM,IAAI,MAAM,4BAA4B,gBAAgB,8CAA8C;AAAA,EAC5G;AAEA,MAAI,OAAO,kBAAkB,cAAc;AACzC,WAAO;AAAA,MACL;AAAA,MACA,EAAE,kBAAkB,eAAe,OAAO,eAAe,aAAa;AAAA,IACxE;AACA;AAAA,EACF;AACA,MAAI,OAAO,WAAW,UAAU;AAE9B,UAAM,IAAI;AAAA,MACR,qCAAqC,gBAAgB,2BAA2B,OAAO,MAAM;AAAA,IAC/F;AAAA,EACF;AAEA,QAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,qBAAqB;AAE/D,QAAM,aAAa,OAAO,UAAiC;AACzD,UAAM,aAAa,MAAM,GAAG,QAAQ,cAAc;AAAA,MAChD,oBAAoB;AAAA,MACpB,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AACD,QAAI,YAAY;AACd,YAAM,MAAM,oBAAI,KAAK;AACrB,iBAAW,SAAS;AACpB,iBAAW,YAAY,EAAE,MAAM;AAC/B,iBAAW,WAAW;AACtB,iBAAW,YAAY;AACvB,YAAM,GAAG,MAAM;AAAA,IACjB;AACA,UAAM,iBAAiB,IAAI,WAAW,kBAAkB,UAAU,EAAE,MAAM,CAAC;AAAA,EAC7E;AAEA,MAAI,gBAAgB,UAAU;AAC5B,UAAM,UAAU,sBAAsB,eAAe;AACrD,UAAM,iBAAiB,IAAI;AAAA,MACzB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,WAAW,EAAE,iBAAiB,OAAO,QAAQ;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,WAAW,OAAO;AACxB;AAAA,EACF;AAIA,QAAM,mBAAmB,MAAM,GAAG,QAAQ,oBAAoB,EAAE,IAAI,OAAO,aAAa,CAAC;AACzF,QAAM,UAAU,kBAAkB,WAAW,MAAM,KAAK,CAAC,MAAW,EAAE,WAAW,YAAY;AAC7F,QAAM,EAAE,eAAe,eAAe,QAAQ,IAAK,SAAS,UAAU,CAAC;AAMvE,QAAM,gBAAgB,MAAM,GAAG,QAAQ,kBAAkB;AAAA,IACvD,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,2BAA2B,eAAe,8CAA8C;AAAA,EAC1G;AAEA,QAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,mBAAmB;AACnE,QAAM,kBAAkB,gBACpB,MAAM,uBAAuB,IAAI,EAAE,YAAY,eAAe,SAAS,UAAU,eAAe,CAAC,IACjG;AACJ,QAAM,aAAc,iBAAiB,YAAwD;AAE7F,QAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,gBAAgB;AAC9D,QAAM,SAAS,qBAAqB,cAAc,WAAW,CAAC,GAAG,iBAAiB,CAAC,GAAG,UAAU;AAEhG,MAAI,OAAO,OAAO;AAChB,UAAM,iBAAiB,IAAI;AAAA,MACzB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,WAAW,EAAE,iBAAiB,QAAQ,qBAAqB,OAAO,OAAO,MAAM;AAAA,MAC/E;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,WAAW,OAAO,KAAK;AAC7B;AAAA,EACF;AAEA,QAAM,aAAa,OAAO;AAE1B,QAAM,iBAAiB,IAAI;AAAA,IACzB,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,WAAW,EAAE,iBAAiB,WAAW;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAMD,MAAI;AACF,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,kBAAkB;AACtD,UAAM,WAAW,IAAI,WAAW;AAAA,MAC9B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,aAAsB;AAC7B,WAAO,MAAM,sFAAsF;AAAA,MACjG;AAAA,MACA;AAAA,MACA,OAAO,uBAAuB,QAAQ,YAAY,UAAU,OAAO,WAAW;AAAA,IAChF,CAAC;AAAA,EACH;AACF;AASA,eAAe,6BACb,IACA,WACA,UACA,SACA,SACA,gBACkB;AAClB,MAAI,aAAmE;AACvE,MAAI;AACF,UAAM,EAAE,0BAA0B,IAAI,MAAM,OAAO,mBAAmB;AACtE,iBAAa,MAAM,0BAA0B,IAAI,QAAQ;AAAA,EAC3D,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,CAAC,YAAY,WAAY,QAAO;AACpC,MAAI,kBAAkB,WAAW,YAAY,QAAQ,MAAM,EAAE,WAAW,EAAG,QAAO;AAElF,MAAI;AACF,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,kBAAkB;AACtD,UAAM,WAAW,IAAI,WAAW;AAAA,MAC9B,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA,MACpB,SAAS;AAAA,MACT,cAAc;AAAA,MACd,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AACD,WAAO;AAAA,EACT,SAAS,aAAsB;AAC7B,WAAO,MAAM,uEAAuE;AAAA,MAClF,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA,oBAAoB,QAAQ;AAAA,MAC5B,OAAO,uBAAuB,QAAQ,YAAY,UAAU,OAAO,WAAW;AAAA,IAChF,CAAC;AACD,WAAO;AAAA,EACT;AACF;AAEA,eAAe,oCACb,IACA,WACA,UACA,SACA,YACkB;AAClB,QAAM,cAAc,8BAA8B,UAAU;AAC5D,SAAO,6BAA6B,IAAI,WAAW,UAAU,SAAS,oBAAoB;AAAA,IACxF,aAAa;AAAA,IACb,SAAS,QAAQ;AAAA,IACjB,CAAC,oCAAoC,GAAG,EAAE,QAAQ,QAAQ,QAAQ,GAAG,YAAY;AAAA,EACnF,CAAC;AACH;AAEA,eAAe,2BACb,IACA,WACA,UACA,SACA,YACkB;AAClB,QAAM,UAAU,sBAAsB,QAAQ,WAAW,UAAU,OAAO,UAAU;AACpF,SAAO,6BAA6B,IAAI,WAAW,UAAU,SAAS,SAAS;AAAA,IAC7E,SAAS,QAAQ;AAAA,IACjB,CAAC,0BAA0B,GAAG,uBAAuB,QAAQ,QAAQ,OAAO;AAAA,EAC9E,CAAC;AACH;AAEA,eAAe,oBACb,IACA,WACA,UACA,SACA,YACe;AACf,QAAM,UAAU,sBAAsB,QAAQ,WAAW,UAAU,OAAO,UAAU;AACpF,SAAO,MAAM,yCAAyC;AAAA,IACpD,SAAS,QAAQ;AAAA,IACjB,oBAAoB,QAAQ;AAAA,IAC5B,OAAO;AAAA,EACT,CAAC;AACD,MAAI;AACF,UAAM,EAAE,cAAAA,cAAa,IAAI,MAAM,OAAO,kBAAkB;AACxD,UAAM,eAAe,MAAM,GAAG,QAAQA,eAAc;AAAA,MAClD,IAAI,QAAQ;AAAA,MACZ,UAAU,QAAQ;AAAA,MAClB,gBAAgB,QAAQ;AAAA,IAC1B,CAAC;AACD,QAAI,gBAAgB,aAAa,WAAW,UAAU;AACpD,mBAAa,SAAS;AACtB,mBAAa,YAAY,EAAE,SAAS,QAAQ,SAAS,OAAO,QAAQ;AACpE,mBAAa,WAAW,oBAAI,KAAK;AACjC,YAAM,GAAG,MAAM;AAAA,IACjB;AAEA,UAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,qBAAqB;AAC/D,UAAM,iBAAiB,IAAI,WAAW,QAAQ,oBAAoB,UAAU;AAAA,MAC1E,OAAO,qBAAqB,QAAQ,MAAM,YAAY,OAAO;AAAA,MAC7D,SAAS,EAAE,SAAS,QAAQ,SAAS,QAAQ,QAAQ,OAAO;AAAA,IAC9D,CAAC;AAAA,EACH,SAAS,WAAgB;AACvB,WAAO,MAAM,gDAAgD;AAAA,MAC3D,SAAS,QAAQ;AAAA,MACjB,oBAAoB,QAAQ;AAAA,MAC5B,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;AAKA,eAAe,uBACb,IACA,WACA,oBACe;AAEf,QAAM,EAAE,8BAA8B,IAAI,MAAM,OAAO,qBAAqB;AAG5E,MAAI;AACF,UAAM,8BAA8B,IAAI,WAAW,kBAAkB;AAAA,EACvE,SAAS,OAAY;AAEnB,QAAI,CAAC,MAAM,SAAS,SAAS,0BAA0B,GAAG;AACxD,aAAO,MAAM,6BAA6B,EAAE,YAAY,oBAAoB,KAAK,MAAM,CAAC;AAAA,IAC1F;AAAA,EACF;AACF;",
6
+ "names": ["StepInstance"]
7
7
  }