@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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport { parseDuration } from '../lib/duration'\n\n/**\n * Workflows Module - Zod Validators\n *\n * Comprehensive validation schemas for workflow engine entities.\n */\n\nconst uuid = z.uuid()\n\n// Variable interpolation tokens (e.g., {{context.timeout}}) are resolved at\n// run time, so we must skip strict syntax checks on them at save time.\nconst containsTemplate = (value: string) => value.includes('{{')\n\nexport function isValidDurationString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n try {\n const ms = parseDuration(value)\n return Number.isFinite(ms) && ms > 0\n } catch {\n return false\n }\n}\n\nexport function isValidIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n return !Number.isNaN(d.getTime())\n}\n\nexport function isFutureIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n if (Number.isNaN(d.getTime())) return false\n return d.getTime() > Date.now()\n}\n\nconst DURATION_ERROR = 'Invalid duration. Use ISO 8601 (e.g., PT5M, PT1H, P1D) or simple format (5m, 1h, 3d)'\nconst UNTIL_ERROR = 'Invalid \"until\". Provide an ISO 8601 datetime string'\nconst UNTIL_PAST_ERROR = '\"until\" must be a future datetime'\n\n// ============================================================================\n// Enum Schemas - Workflow Types and Statuses\n// ============================================================================\n\nexport const workflowStepTypeSchema = z.enum([\n 'START',\n 'END',\n 'USER_TASK',\n 'AUTOMATED',\n 'PARALLEL_FORK',\n 'PARALLEL_JOIN',\n 'SUB_WORKFLOW',\n 'WAIT_FOR_SIGNAL',\n 'WAIT_FOR_TIMER',\n])\nexport type WorkflowStepType = z.infer<typeof workflowStepTypeSchema>\n\nexport const workflowInstanceStatusSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n 'FORKED',\n])\nexport type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>\n\nexport const workflowBranchInstanceStatusSchema = z.enum([\n 'ACTIVE',\n 'PAUSED',\n 'WAITING_FOR_ACTIVITIES',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n])\nexport type WorkflowBranchInstanceStatus = z.infer<typeof workflowBranchInstanceStatusSchema>\n\nexport const stepInstanceStatusSchema = z.enum([\n 'PENDING',\n 'ACTIVE',\n 'COMPLETED',\n 'FAILED',\n 'SKIPPED',\n 'CANCELLED',\n])\nexport type StepInstanceStatus = z.infer<typeof stepInstanceStatusSchema>\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\nexport type UserTaskStatus = z.infer<typeof userTaskStatusSchema>\n\nexport const transitionTriggerSchema = z.enum(['auto', 'manual', 'signal', 'timer'])\nexport type TransitionTrigger = z.infer<typeof transitionTriggerSchema>\n\nexport const activityTypeSchema = z.enum([\n 'SEND_EMAIL',\n 'CALL_API',\n 'UPDATE_ENTITY',\n 'EMIT_EVENT',\n 'CALL_WEBHOOK',\n 'EXECUTE_FUNCTION',\n 'WAIT',\n])\nexport type ActivityType = z.infer<typeof activityTypeSchema>\n\nexport const escalationTriggerSchema = z.enum(['sla_breach', 'no_progress', 'custom'])\nexport type EscalationTrigger = z.infer<typeof escalationTriggerSchema>\n\nexport const escalationActionSchema = z.enum(['reassign', 'notify', 'escalate'])\nexport type EscalationAction = z.infer<typeof escalationActionSchema>\n\n// ============================================================================\n// Complex Object Schemas - Workflow Definition Components\n// ============================================================================\n\n// User task configuration\nexport const userTaskConfigSchema = z.object({\n // Support both custom fields array format and JSON Schema format\n formSchema: z.union([\n // Custom format with fields array\n z.object({\n fields: z.array(z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n label: z.string().min(1),\n required: z.boolean().optional(),\n options: z.array(z.any()).optional(),\n }))\n }),\n // JSON Schema format with properties\n z.object({\n type: z.literal('object').optional(),\n properties: z.record(z.string(), z.any()),\n required: z.array(z.string()).optional(),\n }),\n ]).optional(),\n assignedTo: z.union([\n z.string(),\n z.array(z.string()),\n ]).optional(),\n assignmentRule: z.string().optional(), // Business rule ID\n slaDuration: z.string().optional(), // ISO 8601 duration\n escalationRules: z.array(z.object({\n trigger: escalationTriggerSchema,\n action: escalationActionSchema,\n escalateTo: z.string().optional(),\n notifyUsers: z.array(z.string()).optional(),\n })).optional(),\n})\n\n// Sub-workflow configuration (Phase 8)\nexport const subWorkflowConfigSchema = z.object({\n subWorkflowId: z.string().min(1, 'Sub-workflow ID is required'),\n version: z.number().int().positive().optional(),\n inputMapping: z.record(z.string(), z.string()).optional(),\n outputMapping: z.record(z.string(), z.string()).optional(),\n timeoutMs: z.number().int().positive().optional(),\n})\n\n// CALL_API activity configuration\nexport const callApiConfigSchema = z.object({\n endpoint: z.string().min(1, 'API endpoint is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']).default('GET'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n validateTenantMatch: z.boolean().default(true).optional(),\n timeout: z.number().int().positive().optional(),\n})\n\nexport const callWebhookConfigSchema = z.object({\n url: z.string().min(1, 'Webhook URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).default('POST'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n})\nexport type CallWebhookConfig = z.infer<typeof callWebhookConfigSchema>\n\n// Retry policy\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n backoffMs: z.number().int().min(0),\n})\n\n// Activity retry policy (more detailed)\nexport const activityRetryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n initialIntervalMs: z.number().int().min(0),\n backoffCoefficient: z.number().min(1).max(10),\n maxIntervalMs: z.number().int().min(0),\n})\n\n/**\n * Config fields each activity executor requires to run (see\n * `lib/activity-executor.ts`). WAIT is handled separately below because it\n * takes \"duration\" OR \"until\" rather than a fixed key set.\n */\nconst REQUIRED_ACTIVITY_CONFIG_KEYS: Partial<Record<ActivityType, readonly string[]>> = {\n SEND_EMAIL: ['to', 'subject'],\n CALL_API: ['endpoint'],\n CALL_WEBHOOK: ['url'],\n UPDATE_ENTITY: ['commandId', 'input'],\n EMIT_EVENT: ['eventName'],\n EXECUTE_FUNCTION: ['functionName'],\n}\n\n// Activity definition (embedded in transitions)\nexport const activityDefinitionSchema = z.object({\n activityId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Activity ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n activityName: z.string().min(1).max(255),\n activityType: activityTypeSchema,\n config: z.record(z.string(), z.any()),\n async: z.boolean().default(false).optional(), // For Phase 8.3\n retryPolicy: activityRetryPolicySchema.optional(),\n /**\n * Per-activity timeout in milliseconds. This is what the editor writes and\n * what `executeActivity` reads; it was missing from the schema, so\n * `z.object()` stripped it on save and UI-configured timeouts silently did\n * nothing (#4424).\n */\n timeoutMs: z.number().int().positive().optional(),\n /**\n * @deprecated Use `timeoutMs`. Accepted for definitions already stored with\n * an ISO 8601 duration string; the executor normalizes it to milliseconds.\n */\n timeout: z.string().optional(),\n compensation: z.object({\n activityId: z.string().min(1), // ID of compensation activity\n automatic: z.boolean().default(true).optional() // Auto-trigger on failure\n }).optional(), // Compensation configuration (Phase 8.2)\n}).superRefine((activity, ctx) => {\n // Config keys each activity executor requires at runtime. Without this, an\n // activity missing e.g. CALL_API's `endpoint` saved cleanly from the visual\n // editor and only failed once an instance ran it \u2014 the \"edit silently\n // disappeared / nothing told me why\" report in #4232 (and the class of bug\n // #4322 was an instance of). Validating here surfaces the exact missing field\n // at edit time, since both the editor's save path and the API route parse\n // through this schema.\n const requiredConfigKeys = REQUIRED_ACTIVITY_CONFIG_KEYS[activity.activityType]\n if (requiredConfigKeys) {\n const config = activity.config || {}\n for (const key of requiredConfigKeys) {\n const value = config[key]\n const isEmpty =\n value == null ||\n (typeof value === 'string' && value.trim() === '') ||\n (key === 'input' && typeof value !== 'object')\n if (isEmpty) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', key],\n message: `${activity.activityType} activity requires \"${key}\"`,\n })\n }\n }\n }\n\n if (activity.activityType !== 'WAIT') return\n const config = activity.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Localized validation message schema (for START step pre-conditions)\nexport const localizedMessageSchema = z.record(z.string(), z.string())\n\n// START step pre-condition schema (with optional localized validation messages)\nexport const startPreConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n validationMessage: localizedMessageSchema.optional(), // Optional localized error messages\n})\n\nexport type StartPreCondition = z.infer<typeof startPreConditionSchema>\n\n// Step definition\nexport const workflowStepSchema = z.object({\n stepId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Step ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n stepName: z.string().min(1).max(255),\n stepType: workflowStepTypeSchema,\n description: z.string().max(1000).optional(),\n config: z.record(z.string(), z.any()).optional(),\n userTaskConfig: userTaskConfigSchema.optional(),\n subWorkflowConfig: subWorkflowConfigSchema.optional(),\n signalConfig: z.object({\n signalName: z.string().min(1),\n timeout: z.string().optional(),\n }).optional(),\n activities: z.array(activityDefinitionSchema).optional(),\n timeout: z.string().optional(), // ISO 8601 duration\n retryPolicy: retryPolicySchema.optional(),\n // Pre-conditions for START step (business rules to validate before workflow can be started)\n preConditions: z.array(startPreConditionSchema).optional(),\n}).superRefine((step, ctx) => {\n if (step.stepType !== 'WAIT_FOR_TIMER') return\n const config = step.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Transition condition (reference to business rule)\nexport const transitionConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n})\n\n// Transition definition\nexport const workflowTransitionSchema = z.object({\n transitionId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Transition ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n fromStepId: z.string().min(1).max(100),\n toStepId: z.string().min(1).max(100),\n transitionName: z.string().max(255).optional(),\n trigger: transitionTriggerSchema,\n preConditions: z.array(transitionConditionSchema).optional(),\n postConditions: z.array(transitionConditionSchema).optional(),\n activities: z.array(activityDefinitionSchema).optional(), // Activities to execute during transition\n continueOnActivityFailure: z.boolean().default(false).optional(), // If true, transition continues even when activities fail\n priority: z.number().int().min(0).max(9999).default(0),\n})\n\n// Workflow definition trigger schema (embedded in definition)\n// Note: Uses forward reference pattern since eventPatternSchema and eventTriggerConfigSchema are defined later\nexport const workflowDefinitionTriggerSchema = z.object({\n triggerId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Trigger ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n eventPattern: z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n ),\n config: z.object({\n filterConditions: z.array(z.object({\n field: z.string().min(1).max(255),\n operator: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'exists', 'notExists', 'regex']),\n value: z.any(),\n })).max(20).optional(),\n contextMapping: z.array(z.object({\n targetKey: z.string().min(1).max(100),\n sourceExpression: z.string().min(1).max(255),\n defaultValue: z.any().optional(),\n })).max(50).optional(),\n debounceMs: z.number().int().min(0).max(3600000).optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000).optional(),\n }).optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n})\nexport type WorkflowDefinitionTrigger = z.infer<typeof workflowDefinitionTriggerSchema>\n\n// ============================================================================\n// PARALLEL_FORK / PARALLEL_JOIN definition validation\n// ============================================================================\n\n// Error codes surfaced by FORK/JOIN definition validation. Stable identifiers\n// so the visual editor and tests can match on them.\nexport type ForkJoinValidationCode =\n | 'MISSING_JOIN_STEP_ID'\n | 'JOIN_STEP_NOT_FOUND'\n | 'JOIN_STEP_WRONG_TYPE'\n | 'MISSING_FORK_STEP_ID'\n | 'FORK_JOIN_MISMATCH'\n | 'FORK_TOO_FEW_BRANCHES'\n | 'JOIN_TOO_FEW_INCOMING'\n | 'DUPLICATE_BRANCH_KEY'\n | 'NESTED_FORK_NOT_SUPPORTED'\n | 'NO_CONVERGENCE_TO_JOIN'\n | 'FORK_JOIN_CYCLE'\n | 'UNPAIRED_JOIN'\n\nexport interface ForkJoinValidationIssue {\n code: ForkJoinValidationCode\n message: string\n stepId?: string\n}\n\ninterface ForkJoinStepLike {\n stepId: string\n stepType: string\n config?: Record<string, unknown> | null\n}\n\ninterface ForkJoinTransitionLike {\n transitionId: string\n fromStepId: string\n toStepId: string\n trigger: string\n}\n\ninterface ForkJoinDefinitionLike {\n steps: ForkJoinStepLike[]\n transitions: ForkJoinTransitionLike[]\n}\n\n/**\n * Validates PARALLEL_FORK / PARALLEL_JOIN structure of a workflow definition.\n * Pure and side-effect-free so it can be unit tested and reused by the editor.\n *\n * Rules (this iteration \u2014 wait-all, no nesting):\n * 1. Every FORK declares config.joinStepId pointing at an existing PARALLEL_JOIN.\n * 2. The paired JOIN back-references the fork via config.forkStepId.\n * 3. A FORK has >= 2 outgoing `auto` transitions (branch keys unique); a JOIN has >= 2 incoming.\n * 4. Every path from a FORK converges to its JOIN \u2014 no END inside a branch, no dead ends,\n * no path bypassing the JOIN, no path to a different JOIN.\n * 5. No nesting: no FORK appears on a path between a FORK and its JOIN.\n * 6. No cycles back to the FORK within its branch region.\n * 7. Every PARALLEL_JOIN is paired with exactly one FORK.\n */\nexport function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {\n const issues: ForkJoinValidationIssue[] = []\n const steps = definition.steps ?? []\n const transitions = definition.transitions ?? []\n\n const stepById = new Map<string, ForkJoinStepLike>()\n for (const step of steps) stepById.set(step.stepId, step)\n\n const outgoingByStep = new Map<string, ForkJoinTransitionLike[]>()\n const incomingCountByStep = new Map<string, number>()\n for (const transition of transitions) {\n const list = outgoingByStep.get(transition.fromStepId) ?? []\n list.push(transition)\n outgoingByStep.set(transition.fromStepId, list)\n incomingCountByStep.set(transition.toStepId, (incomingCountByStep.get(transition.toStepId) ?? 0) + 1)\n }\n\n const forkSteps = steps.filter((step) => step.stepType === 'PARALLEL_FORK')\n const joinSteps = steps.filter((step) => step.stepType === 'PARALLEL_JOIN')\n\n // Track which JOIN steps are paired with a FORK so we can flag orphan joins.\n const pairedJoinIds = new Set<string>()\n\n for (const fork of forkSteps) {\n const joinStepId = (fork.config?.joinStepId as string | undefined) ?? undefined\n if (!joinStepId) {\n issues.push({ code: 'MISSING_JOIN_STEP_ID', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must declare config.joinStepId` })\n continue\n }\n const joinStep = stepById.get(joinStepId)\n if (!joinStep) {\n issues.push({ code: 'JOIN_STEP_NOT_FOUND', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" references missing join step \"${joinStepId}\"` })\n continue\n }\n if (joinStep.stepType !== 'PARALLEL_JOIN') {\n issues.push({ code: 'JOIN_STEP_WRONG_TYPE', stepId: fork.stepId, message: `Step \"${joinStepId}\" referenced by fork \"${fork.stepId}\" is not a PARALLEL_JOIN` })\n continue\n }\n\n pairedJoinIds.add(joinStepId)\n\n const backForkStepId = (joinStep.config?.forkStepId as string | undefined) ?? undefined\n if (!backForkStepId) {\n issues.push({ code: 'MISSING_FORK_STEP_ID', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must declare config.forkStepId` })\n } else if (backForkStepId !== fork.stepId) {\n issues.push({ code: 'FORK_JOIN_MISMATCH', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" back-reference forkStepId \"${backForkStepId}\" does not match fork \"${fork.stepId}\"` })\n }\n\n const autoBranches = (outgoingByStep.get(fork.stepId) ?? []).filter((transition) => transition.trigger === 'auto')\n if (autoBranches.length < 2) {\n issues.push({ code: 'FORK_TOO_FEW_BRANCHES', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must have at least 2 outgoing auto transitions (found ${autoBranches.length})` })\n }\n const branchKeys = new Set<string>()\n for (const branch of autoBranches) {\n if (branchKeys.has(branch.transitionId)) {\n issues.push({ code: 'DUPLICATE_BRANCH_KEY', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" has duplicate branch key \"${branch.transitionId}\"` })\n }\n branchKeys.add(branch.transitionId)\n }\n\n if ((incomingCountByStep.get(joinStepId) ?? 0) < 2) {\n issues.push({ code: 'JOIN_TOO_FEW_INCOMING', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must have at least 2 incoming transitions` })\n }\n\n // Convergence + no-nesting + no-cycle traversal over the branch region.\n const fullyExplored = new Set<string>()\n const onStack = new Set<string>()\n let reportedNesting = false\n let reportedNoConvergence = false\n let reportedCycle = false\n\n const visit = (stepId: string): void => {\n if (stepId === joinStepId) return // converged\n if (stepId === fork.stepId) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" loops back to the fork before reaching join \"${joinStepId}\"` })\n reportedCycle = true\n }\n return\n }\n const step = stepById.get(stepId)\n if (!step) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches missing step \"${stepId}\" instead of join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'END') {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches an END step before join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_FORK') {\n if (!reportedNesting) {\n issues.push({ code: 'NESTED_FORK_NOT_SUPPORTED', stepId: fork.stepId, message: `Nested PARALLEL_FORK \"${stepId}\" inside fork \"${fork.stepId}\" is not supported` })\n reportedNesting = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_JOIN') {\n // Reached a join that is not this fork's join \u2192 it does not converge correctly.\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches join \"${stepId}\" instead of its own join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (onStack.has(stepId)) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" contains a cycle at step \"${stepId}\"` })\n reportedCycle = true\n }\n return\n }\n if (fullyExplored.has(stepId)) return\n\n const outgoing = outgoingByStep.get(stepId) ?? []\n if (outgoing.length === 0) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" dead-ends at step \"${stepId}\" without reaching join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n onStack.add(stepId)\n for (const transition of outgoing) visit(transition.toStepId)\n onStack.delete(stepId)\n fullyExplored.add(stepId)\n }\n\n for (const branch of autoBranches) visit(branch.toStepId)\n }\n\n // Any PARALLEL_JOIN not paired with a fork is an orphan.\n for (const join of joinSteps) {\n if (!pairedJoinIds.has(join.stepId)) {\n issues.push({ code: 'UNPAIRED_JOIN', stepId: join.stepId, message: `PARALLEL_JOIN \"${join.stepId}\" is not paired with any PARALLEL_FORK` })\n }\n }\n\n return issues\n}\n\n// Workflow definition data (JSONB structure)\nexport const workflowDefinitionDataSchema = z.object({\n steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),\n transitions: z.array(workflowTransitionSchema).min(1, 'Workflow must have at least one transition'),\n triggers: z.array(workflowDefinitionTriggerSchema).optional(), // Event triggers for automatic workflow start\n queries: z.array(z.any()).optional(), // For Phase 7\n signals: z.array(z.any()).optional(), // For Phase 9\n timers: z.array(z.any()).optional(), // For Phase 9\n}).superRefine((definition, ctx) => {\n for (const issue of validateParallelForkJoin(definition as ForkJoinDefinitionLike)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps'],\n message: `[${issue.code}] ${issue.message}`,\n })\n }\n})\n\n// Workflow metadata\nexport const workflowMetadataSchema = z.object({\n tags: z.array(z.string().max(50)).optional(),\n category: z.string().max(100).optional(),\n icon: z.string().max(100).optional(),\n})\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// ============================================================================\n// WorkflowDefinition Schemas\n// ============================================================================\n\n// Full schema for database entities (includes tenant fields)\nexport const createWorkflowDefinitionSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\n\nexport type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinitionSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n})\n\nexport type CreateWorkflowDefinitionApiInput = z.infer<typeof createWorkflowDefinitionInputSchema>\n\nexport const updateWorkflowDefinitionSchema = createWorkflowDefinitionSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinitionSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\n// Accepts the same shape as the create form so the edit page can submit a\n// full payload without triggering \"Unrecognized keys\" validation errors.\n// workflowId is accepted but ignored by the route handler (it identifies the\n// row); version is applied when supplied so the form can bump it explicitly.\nexport const updateWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).optional(),\n workflowName: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().optional(),\n definition: workflowDefinitionDataSchema.optional(),\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n}).strict()\n\nexport type UpdateWorkflowDefinitionApiInput = z.infer<typeof updateWorkflowDefinitionInputSchema>\n\nexport const workflowDefinitionFilterSchema = z.object({\n workflowId: z.string().optional(),\n workflowName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowDefinitionFilter = z.infer<typeof workflowDefinitionFilterSchema>\n\n// ============================================================================\n// WorkflowInstance Schemas\n// ============================================================================\n\nexport const workflowInstanceMetadataSchema = z.object({\n entityType: z.string().max(100).optional(),\n entityId: z.string().max(255).optional(),\n initiatedBy: z.string().max(255).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n})\n\nexport const createWorkflowInstanceSchema = z.object({\n definitionId: uuid,\n workflowId: z.string().min(1).max(100),\n version: z.number().int().positive(),\n status: workflowInstanceStatusSchema,\n currentStepId: z.string().min(1).max(100),\n context: z.record(z.string(), z.any()),\n correlationKey: z.string().max(255).optional().nullable(),\n metadata: workflowInstanceMetadataSchema.optional().nullable(),\n startedAt: z.coerce.date(),\n completedAt: dateOrNull.optional(),\n pausedAt: dateOrNull.optional(),\n cancelledAt: dateOrNull.optional(),\n errorMessage: z.string().max(5000).optional().nullable(),\n errorDetails: z.any().optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowInstanceInput = z.infer<typeof createWorkflowInstanceSchema>\n\nexport const updateWorkflowInstanceSchema = createWorkflowInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowInstanceInput = z.infer<typeof updateWorkflowInstanceSchema>\n\nexport const workflowInstanceFilterSchema = z.object({\n definitionId: uuid.optional(),\n workflowId: z.string().optional(),\n status: workflowInstanceStatusSchema.optional(),\n correlationKey: z.string().optional(),\n currentStepId: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowInstanceFilter = z.infer<typeof workflowInstanceFilterSchema>\n\n// ============================================================================\n// StepInstance Schemas\n// ============================================================================\n\nexport const createStepInstanceSchema = z.object({\n workflowInstanceId: uuid,\n stepId: z.string().min(1).max(100),\n stepName: z.string().min(1).max(255),\n stepType: z.string().min(1).max(50),\n status: stepInstanceStatusSchema,\n inputData: z.any().optional().nullable(),\n outputData: z.any().optional().nullable(),\n errorData: z.any().optional().nullable(),\n enteredAt: dateOrNull.optional(),\n exitedAt: dateOrNull.optional(),\n executionTimeMs: z.number().int().min(0).optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateStepInstanceInput = z.infer<typeof createStepInstanceSchema>\n\nexport const updateStepInstanceSchema = createStepInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateStepInstanceInput = z.infer<typeof updateStepInstanceSchema>\n\nexport const stepInstanceFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepId: z.string().optional(),\n status: stepInstanceStatusSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type StepInstanceFilter = z.infer<typeof stepInstanceFilterSchema>\n\n// ============================================================================\n// UserTask Schemas\n// ============================================================================\n\nexport const createUserTaskSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid,\n taskName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n status: userTaskStatusSchema,\n formSchema: z.any().optional().nullable(),\n formData: z.any().optional().nullable(),\n assignedTo: z.string().max(255).optional().nullable(),\n assignedToRoles: z.array(z.string().max(100)).optional().nullable(),\n claimedBy: z.string().max(255).optional().nullable(),\n claimedAt: dateOrNull.optional(),\n dueDate: dateOrNull.optional(),\n escalatedAt: dateOrNull.optional(),\n escalatedTo: z.string().max(255).optional().nullable(),\n completedBy: z.string().max(255).optional().nullable(),\n completedAt: dateOrNull.optional(),\n comments: z.string().max(5000).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateUserTaskInput = z.infer<typeof createUserTaskSchema>\n\nexport const updateUserTaskSchema = createUserTaskSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateUserTaskInput = z.infer<typeof updateUserTaskSchema>\n\nexport const userTaskFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n status: userTaskStatusSchema.optional(),\n assignedTo: z.string().optional(),\n claimedBy: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type UserTaskFilter = z.infer<typeof userTaskFilterSchema>\n\n// ============================================================================\n// WorkflowEvent Schemas\n// ============================================================================\n\nexport const createWorkflowEventSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid.optional().nullable(),\n eventType: z.string().min(1).max(50),\n eventData: z.any(),\n occurredAt: z.coerce.date().optional(),\n userId: z.string().max(255).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowEventInput = z.infer<typeof createWorkflowEventSchema>\n\nexport const workflowEventFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepInstanceId: uuid.optional(),\n eventType: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n occurredAtFrom: z.date().optional(),\n occurredAtTo: z.date().optional(),\n})\n\nexport type WorkflowEventFilter = z.infer<typeof workflowEventFilterSchema>\n\n// ============================================================================\n// Workflow Execution Context Schema\n// ============================================================================\n\nexport const workflowExecutionContextSchema = z.looseObject({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n context: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n initiatedBy: z.string().optional(),\n})\n\nexport type WorkflowExecutionContextInput = z.infer<typeof workflowExecutionContextSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const startWorkflowInputSchema = z.object({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n initialContext: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n})\n\nexport type StartWorkflowApiInput = z.infer<typeof startWorkflowInputSchema>\n\n// ============================================================================\n// WorkflowEventTrigger Schemas\n// ============================================================================\n\nexport const triggerFilterOperatorSchema = z.enum([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'in',\n 'notIn',\n 'exists',\n 'notExists',\n 'regex',\n])\nexport type TriggerFilterOperator = z.infer<typeof triggerFilterOperatorSchema>\n\nexport const triggerFilterConditionSchema = z.object({\n field: z.string().min(1).max(255, 'Field path must be at most 255 characters'),\n operator: triggerFilterOperatorSchema,\n value: z.any(),\n})\nexport type TriggerFilterCondition = z.infer<typeof triggerFilterConditionSchema>\n\nexport const triggerContextMappingSchema = z.object({\n targetKey: z.string().min(1).max(100, 'Target key must be at most 100 characters'),\n sourceExpression: z.string().min(1).max(255, 'Source expression must be at most 255 characters'),\n defaultValue: z.any().optional(),\n})\nexport type TriggerContextMapping = z.infer<typeof triggerContextMappingSchema>\n\nexport const eventTriggerConfigSchema = z.object({\n filterConditions: z.array(triggerFilterConditionSchema).max(20, 'Maximum 20 filter conditions allowed').optional(),\n contextMapping: z.array(triggerContextMappingSchema).max(50, 'Maximum 50 context mappings allowed').optional(),\n debounceMs: z.number().int().min(0).max(3600000, 'Debounce cannot exceed 1 hour').optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000, 'Max concurrent instances must be between 1 and 1000').optional(),\n})\nexport type EventTriggerConfig = z.infer<typeof eventTriggerConfigSchema>\n\nexport const eventPatternSchema = z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n )\n\nexport const createEventTriggerSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\nexport type CreateEventTriggerInput = z.infer<typeof createEventTriggerSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n priority: z.number().int().min(0).max(9999).default(0).optional(),\n})\nexport type CreateEventTriggerApiInput = z.infer<typeof createEventTriggerInputSchema>\n\nexport const updateEventTriggerSchema = createEventTriggerSchema.partial().extend({\n id: uuid,\n})\nexport type UpdateEventTriggerInput = z.infer<typeof updateEventTriggerSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\nexport const updateEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: eventPatternSchema.optional(),\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n priority: z.number().int().min(0).max(9999).optional(),\n}).strict()\nexport type UpdateEventTriggerApiInput = z.infer<typeof updateEventTriggerInputSchema>\n\nexport const eventTriggerFilterSchema = z.object({\n name: z.string().optional(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\nexport type EventTriggerFilter = z.infer<typeof eventTriggerFilterSchema>\n"],
5
- "mappings": "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",
6
- "names": ["config"]
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { conditionExpressionSchema } from '@open-mercato/core/modules/business_rules/data/validators'\nimport { validateConditionExpressionForApi } from '@open-mercato/core/modules/business_rules/lib/payload-validation'\nimport { parseDuration } from '../lib/duration'\nimport { excludeNonNormalTransitions } from '../lib/route-kinds'\nimport { WORKFLOW_RUN_OUTCOMES } from '../lib/run-outcome'\nimport {\n WORKFLOW_START_FIXTURES_MAX_CHARS,\n WORKFLOW_START_FIXTURES_MAX_COUNT,\n WORKFLOW_START_FIXTURE_NAME_MAX,\n} from '../lib/start-fixtures'\nimport '../lib/activity-registry-bootstrap'\nimport { activityTypeIds } from '../lib/activity-registry'\nimport {\n DURATION_ERROR,\n UNTIL_ERROR,\n UNTIL_PAST_ERROR,\n invokeAgentConfigSchema,\n isFutureIsoDateString,\n isValidDurationString,\n isValidIsoDateString,\n} from './activity-config-schemas'\nimport {\n taskDeadlineSchema,\n taskPrioritySchema,\n taskReminderSchema,\n} from './task-primitives'\n\n/**\n * Workflows Module - Zod Validators\n *\n * Comprehensive validation schemas for workflow engine entities.\n *\n * Per-type activity config schemas live in activity-config-schemas.ts (the\n * registry bootstrap depends on them, and this module depends on the\n * bootstrap for the registry-driven activityTypeSchema) and are re-exported\n * here to keep the historical import surface stable.\n */\n\nexport {\n isValidDurationString,\n isValidIsoDateString,\n isFutureIsoDateString,\n callApiConfigSchema,\n callWebhookConfigSchema,\n sendEmailConfigSchema,\n emitEventConfigSchema,\n updateEntityConfigSchema,\n executeFunctionConfigSchema,\n invokeAgentConfigSchema,\n setVariableAssignmentSchema,\n setVariableConfigSchema,\n waitConfigSchema,\n} from './activity-config-schemas'\nexport type {\n CallWebhookConfig,\n SendEmailConfig,\n EmitEventConfig,\n UpdateEntityConfig,\n ExecuteFunctionConfig,\n InvokeAgentConfig,\n SetVariableConfig,\n WaitConfig,\n} from './activity-config-schemas'\n\nexport {\n taskPrioritySchema,\n taskDeadlineSchema,\n taskReminderSchema,\n} from './task-primitives'\nexport type { TaskPriority, TaskDeadline, TaskReminder } from './task-primitives'\n\nconst uuid = z.uuid()\n\n// ============================================================================\n// Enum Schemas - Workflow Types and Statuses\n// ============================================================================\n\nexport const workflowStepTypeSchema = z.enum([\n 'START',\n 'END',\n 'USER_TASK',\n 'AUTOMATED',\n 'PARALLEL_FORK',\n 'PARALLEL_JOIN',\n 'SUB_WORKFLOW',\n 'WAIT_FOR_SIGNAL',\n 'WAIT_FOR_TIMER',\n 'WAIT_FOR_CONDITION',\n 'IF_ELSE',\n 'SWITCH',\n])\nexport type WorkflowStepType = z.infer<typeof workflowStepTypeSchema>\n\nexport const workflowInstanceStatusSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n 'FORKED',\n])\nexport type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>\n\n/**\n * Terminal run VERDICT (`WorkflowInstance.outcome`), additive alongside the\n * lifecycle `status`. The tuple lives in the pure `lib/run-outcome.ts` so the\n * engine, the schema and the read routes cannot drift apart.\n */\nexport const workflowRunOutcomeSchema = z.enum(\n WORKFLOW_RUN_OUTCOMES as unknown as [string, ...string[]],\n)\n\nexport const workflowBranchInstanceStatusSchema = z.enum([\n 'ACTIVE',\n 'PAUSED',\n 'WAITING_FOR_ACTIVITIES',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n])\nexport type WorkflowBranchInstanceStatus = z.infer<typeof workflowBranchInstanceStatusSchema>\n\nexport const stepInstanceStatusSchema = z.enum([\n 'PENDING',\n 'ACTIVE',\n 'COMPLETED',\n 'FAILED',\n 'SKIPPED',\n 'CANCELLED',\n])\nexport type StepInstanceStatus = z.infer<typeof stepInstanceStatusSchema>\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\nexport type UserTaskStatus = z.infer<typeof userTaskStatusSchema>\n\nexport const transitionTriggerSchema = z.enum(['auto', 'manual', 'signal', 'timer'])\nexport type TransitionTrigger = z.infer<typeof transitionTriggerSchema>\n\n/**\n * Registry-driven: the accepted activity types are whatever the Activity\n * Registry has registered by the time this module loads (the bootstrap import\n * above guarantees the built-ins, INVOKE_AGENT included). Registration order\n * matters \u2014 the enum is frozen at this module's first import, so extension\n * modules MUST call `registerActivityType` before anything imports these\n * validators, or their types will be rejected by every schema built from this\n * enum.\n */\nexport const activityTypeSchema = z.enum(activityTypeIds())\nexport type ActivityType = z.infer<typeof activityTypeSchema>\n\nexport const escalationTriggerSchema = z.enum(['sla_breach', 'no_progress', 'custom'])\nexport type EscalationTrigger = z.infer<typeof escalationTriggerSchema>\n\nexport const escalationActionSchema = z.enum(['reassign', 'notify', 'escalate'])\nexport type EscalationAction = z.infer<typeof escalationActionSchema>\n\n// ============================================================================\n// Task inspector vocabulary (spec \u00A76.1)\n// ============================================================================\n\n/**\n * Author-supplied copy that reaches an end user (task instructions, entity\n * binding labels, decision-button labels).\n *\n * The redesign's \u00A76.5 wants the platform localized-string shape\n * (`{ [locale]: string }`) with a bare string treated as the tenant default\n * locale. No such platform type exists, and promoting one to\n * `packages/shared` would mint a new STABLE type surface, so this shape stays\n * LOCAL to workflows until that call is made.\n *\n * Both members are structural, which keeps every existing single-string value\n * valid forever and lets `interpolateVariables` walk either form unchanged (it\n * already recurses into plain objects).\n */\nexport const taskLocalizedStringSchema = z.union([\n z.string(),\n z.record(z.string(), z.string()),\n])\nexport type TaskLocalizedString = z.infer<typeof taskLocalizedStringSchema>\n\n/**\n * A record the task is about. `idPath` is a context path (the ledger emits\n * `{{context.*}}` pills over the same vocabulary) resolved at task-creation\n * time; `entityType` is the platform entity id (`customers:person`).\n */\nexport const taskEntityBindingSchema = z.object({\n entityType: z.string().min(1),\n idPath: z.string().min(1),\n label: taskLocalizedStringSchema.optional(),\n})\nexport type TaskEntityBinding = z.infer<typeof taskEntityBindingSchema>\n\n/**\n * What happens when the deadline passes: notify, reassign, or follow the\n * SLA-breach route out of the step.\n */\nexport const taskOnBreachSchema = z.object({\n action: z.enum(['notify', 'reassign', 'route']),\n reassignTo: z.string().optional(),\n transitionId: z.string().optional(),\n})\nexport type TaskOnBreach = z.infer<typeof taskOnBreachSchema>\n\n/**\n * A decision button, mapped 1:1 to an outgoing route.\n *\n * `transitionId` binds to the transition's DURABLE id, never its index: route\n * order changes with every edit, and both id forms the engine accepts stay\n * valid forever (`t_\u2026` minted by `generateTransitionId()`, plus the legacy\n * `e_<from>_<to>` ids stored definitions still carry), so the shape is an\n * opaque non-empty string rather than a pattern.\n */\nexport const taskDecisionSchema = z.object({\n id: z.string().min(1),\n label: taskLocalizedStringSchema,\n transitionId: z.string().min(1),\n style: z.enum(['primary', 'secondary', 'destructive']).optional(),\n})\nexport type TaskDecision = z.infer<typeof taskDecisionSchema>\n\n// ============================================================================\n// Complex Object Schemas - Workflow Definition Components\n// ============================================================================\n\n/**\n * The `user_tasks.assignee_kind` vocabulary, declared here because the AUTHORED\n * config is what decides it and the ORM column merely stores the answer.\n */\nexport const userTaskAssigneeKindSchema = z.enum(['user', 'customer'])\nexport type UserTaskAssigneeKind = z.infer<typeof userTaskAssigneeKindSchema>\n\n// User task configuration\nexport const userTaskConfigSchema = z.object({\n // Support both custom fields array format and JSON Schema format\n formSchema: z.union([\n // Custom format with fields array.\n //\n // `label` is OPTIONAL because every consumer already treats it that way:\n // `lib/task-form-schema.ts` \u2014 the single pure mapper behind both form\n // validation and rendering \u2014 declares `label?: string` and resolves\n // `title: field.label ?? field.name`, and the editor's own list renders\n // `field.label || field.name`. Requiring it here made the contract\n // stricter than the code reading it, which rejected definitions the\n // engine would have run: the AI draft schema (`lib/ai-authoring.ts`)\n // and the `create_definition` MCP tool both emit an optional label, so\n // a generated definition could 400 on a field the runtime renders fine.\n //\n // This is a WIDENING change \u2014 payloads rejected before are accepted now,\n // and nothing previously accepted changes \u2014 so it needs no deprecation\n // window. A missing label is an authoring-quality issue, and this module\n // surfaces those through the Problems panel rather than a hard 400.\n z.object({\n fields: z.array(z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n label: z.string().min(1).optional(),\n required: z.boolean().optional(),\n options: z.array(z.any()).optional(),\n }))\n }),\n // JSON Schema format with properties\n z.object({\n type: z.literal('object').optional(),\n properties: z.record(z.string(), z.any()),\n required: z.array(z.string()).optional(),\n }),\n ]).optional(),\n assignedTo: z.union([\n z.string(),\n z.array(z.string()),\n ]).optional(),\n // Role queue the task is offered to when no individual assignee is set. The\n // editor has always written this key (`lib/graph-utils.ts`) and the engine has\n // always read it (`lib/step-handler.ts`), but it was undeclared here \u2014 zod\n // strips unknown keys and the definition PUT persists the PARSED value, so\n // authored role assignment was silently discarded on every save.\n assignedToRoles: z.array(z.string()).optional(),\n /**\n * Which principal namespace `assignedTo` names (design \u00A77.1).\n *\n * `'customer'` addresses the task to a PORTAL principal \u2014 the resolved id is a\n * `CustomerUser.id`, the row is written with `assignee_kind = 'customer'`, and\n * only `/api/workflows/portal/tasks*` can see or complete it. It is honoured\n * only when an individual assignee resolves, and it forces `assignedToRoles`\n * to null: portal roles are a different namespace and a portal principal\n * cannot claim from a backoffice queue.\n *\n * Absent means `'user'`, which is what every definition authored before this\n * key existed has always meant.\n */\n assigneeKind: userTaskAssigneeKindSchema.optional(),\n // Renderer key for an externally registered task form. Same round-trip as\n // `assignedToRoles`: written by the editor, previously stripped on save.\n formKey: z.string().optional(),\n // Actions offered on the task surface (editor default: complete + cancel).\n allowedActions: z.array(z.string()).optional(),\n assignmentRule: z.string().optional(), // Business rule ID\n slaDuration: z.string().optional(), // ISO 8601 duration\n escalationRules: z.array(z.object({\n trigger: escalationTriggerSchema,\n action: escalationActionSchema,\n escalateTo: z.string().optional(),\n notifyUsers: z.array(z.string()).optional(),\n })).optional(),\n // --------------------------------------------------------------------------\n // Task inspector vocabulary (spec \u00A76.1). Every key below is OPTIONAL and\n // additive: a config declaring none of them parses to exactly what it parsed\n // to before, and the engine reads it exactly as it did before. A regression\n // test in `lib/__tests__/user-task-config.test.ts` pins that byte-for-byte.\n // --------------------------------------------------------------------------\n // \"What\": rich instructions shown to the assignee, variable pills included.\n instructions: taskLocalizedStringSchema.optional(),\n // \"About what\": the records this task is about.\n entityBindings: z.array(taskEntityBindingSchema).optional(),\n // \"When\": priority, deadline, reminders, and what happens on breach.\n priority: taskPrioritySchema.optional(),\n deadline: taskDeadlineSchema.optional(),\n reminders: z.array(taskReminderSchema).optional(),\n onBreach: taskOnBreachSchema.optional(),\n // \"Decisions\": buttons bound 1:1 to outgoing routes, plus the subset of form\n // fields the assignee may edit before deciding.\n decisions: z.array(taskDecisionSchema).optional(),\n editablePrefilled: z.array(z.string()).optional(),\n})\nexport type UserTaskConfig = z.infer<typeof userTaskConfigSchema>\n\n// Sub-workflow configuration (Phase 8)\nexport const subWorkflowConfigSchema = z.object({\n subWorkflowId: z.string().min(1, 'Sub-workflow ID is required'),\n version: z.number().int().positive().optional(),\n inputMapping: z.record(z.string(), z.string()).optional(),\n outputMapping: z.record(z.string(), z.string()).optional(),\n timeoutMs: z.number().int().positive().optional(),\n})\n\n// Sub-workflow IO contract (\"ports\"). Business-user-facing typed declaration of\n// the inputs a workflow accepts and the outputs it returns. The five port types\n// are the simple labels surfaced in the Schema Builder; mapped values are\n// coerced and validated against them at the SUB_WORKFLOW boundary by\n// lib/port-contract.ts. Declared on the child definition (definition.io).\nexport const portFieldTypeSchema = z.enum(['text', 'number', 'boolean', 'select', 'date'])\n\nexport const portFieldSchema = z.object({\n name: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'Port name must start with a letter and contain only letters, numbers, and underscores'),\n type: portFieldTypeSchema,\n label: z.string().min(1).max(255),\n required: z.boolean().optional().default(false),\n options: z.array(z.string()).optional(),\n})\n\nexport const workflowIoContractSchema = z.object({\n inputs: z.array(portFieldSchema).optional(),\n outputs: z.array(portFieldSchema).optional(),\n})\n\nexport type PortFieldType = z.infer<typeof portFieldTypeSchema>\nexport type PortField = z.infer<typeof portFieldSchema>\nexport type WorkflowIoContract = z.infer<typeof workflowIoContractSchema>\n\n// Retry policy\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n backoffMs: z.number().int().min(0),\n})\n\n// Activity retry policy (more detailed)\nexport const activityRetryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n initialIntervalMs: z.number().int().min(0),\n backoffCoefficient: z.number().min(1).max(10),\n maxIntervalMs: z.number().int().min(0),\n})\n\n/**\n * Config fields each activity executor requires to run (see\n * `lib/activity-executor.ts`). WAIT is handled separately below because it\n * takes \"duration\" OR \"until\" rather than a fixed key set.\n */\nconst REQUIRED_ACTIVITY_CONFIG_KEYS: Partial<Record<ActivityType, readonly string[]>> = {\n SEND_EMAIL: ['to', 'subject'],\n CALL_API: ['endpoint'],\n CALL_WEBHOOK: ['url'],\n UPDATE_ENTITY: ['commandId', 'input'],\n EMIT_EVENT: ['eventName'],\n EXECUTE_FUNCTION: ['functionName'],\n}\n\n// Activity definition (embedded in transitions)\nexport const activityDefinitionSchema = z.object({\n activityId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Activity ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n activityName: z.string().min(1).max(255),\n activityType: activityTypeSchema,\n config: z.record(z.string(), z.any()),\n async: z.boolean().default(false).optional(), // For Phase 8.3\n retryPolicy: activityRetryPolicySchema.optional(),\n /**\n * Per-activity timeout in milliseconds. This is what the editor writes and\n * what `executeActivity` reads; it was missing from the schema, so\n * `z.object()` stripped it on save and UI-configured timeouts silently did\n * nothing (#4424).\n */\n timeoutMs: z.number().int().positive().optional(),\n /**\n * @deprecated Use `timeoutMs`. Accepted for definitions already stored with\n * an ISO 8601 duration string; the executor normalizes it to milliseconds.\n */\n timeout: z.string().optional(),\n compensation: z.object({\n activityId: z.string().min(1), // ID of compensation activity\n automatic: z.boolean().default(true).optional() // Auto-trigger on failure\n }).optional(), // Compensation configuration (Phase 8.2)\n}).superRefine((activity, ctx) => {\n // Config keys each activity executor requires at runtime. Without this, an\n // activity missing e.g. CALL_API's `endpoint` saved cleanly from the visual\n // editor and only failed once an instance ran it \u2014 the \"edit silently\n // disappeared / nothing told me why\" report in #4232 (and the class of bug\n // #4322 was an instance of). Validating here surfaces the exact missing field\n // at edit time, since both the editor's save path and the API route parse\n // through this schema.\n const requiredConfigKeys = REQUIRED_ACTIVITY_CONFIG_KEYS[activity.activityType]\n if (requiredConfigKeys) {\n const config = activity.config || {}\n for (const key of requiredConfigKeys) {\n const value = config[key]\n const isEmpty =\n value == null ||\n (typeof value === 'string' && value.trim() === '') ||\n (key === 'input' && typeof value !== 'object')\n if (isEmpty) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', key],\n message: `${activity.activityType} activity requires \"${key}\"`,\n })\n }\n }\n }\n\n if (activity.activityType === 'INVOKE_AGENT') {\n const parsed = invokeAgentConfigSchema.safeParse(activity.config || {})\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', ...issue.path],\n message: issue.message,\n })\n }\n }\n return\n }\n if (activity.activityType !== 'WAIT') return\n const config = activity.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Localized validation message schema (for START step pre-conditions)\nexport const localizedMessageSchema = z.record(z.string(), z.string())\n\n// START step pre-condition schema (with optional localized validation messages)\nexport const startPreConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n validationMessage: localizedMessageSchema.optional(), // Optional localized error messages\n})\n\nexport type StartPreCondition = z.infer<typeof startPreConditionSchema>\n\n// WAIT_FOR_CONDITION save-time bounds. Mirrors lib/condition-handler.ts, which\n// clamps at runtime; the validator fails closed instead so a definition that\n// would degenerate into a plain timer never saves.\nexport const CONDITION_POLL_INTERVAL_MIN_MS = 5000\nexport const CONDITION_POLL_INTERVAL_MAX_MS = 3600000\n\nconst CONDITION_REQUIRED_ERROR = 'WAIT_FOR_CONDITION step requires a \"condition\" expression'\nconst CONDITION_TIMEOUT_REQUIRED_ERROR = 'WAIT_FOR_CONDITION step requires a \"timeout\" duration'\nconst CONDITION_ON_TIMEOUT_ERROR = 'WAIT_FOR_CONDITION \"onTimeout\" must be \"FAIL\" or \"CONTINUE\"'\nconst CONDITION_POLL_INTERVAL_RANGE_ERROR = `WAIT_FOR_CONDITION \"pollIntervalMs\" must be an integer between ${CONDITION_POLL_INTERVAL_MIN_MS} and ${CONDITION_POLL_INTERVAL_MAX_MS}`\nconst CONDITION_POLL_INTERVAL_EXCEEDS_TIMEOUT_ERROR =\n 'WAIT_FOR_CONDITION \"pollIntervalMs\" must not exceed \"timeout\" \u2014 the first poll would land after the deadline'\n\n/**\n * Fail-closed save-time validation for a WAIT_FOR_CONDITION step's config.\n * The predicate is checked with the business_rules API validator rather than a\n * hand-rolled shape check, so it inherits that module's safety bounds\n * (nesting depth, rules per group, field-path length, regex linearity).\n */\nfunction refineWaitForConditionStep(config: Record<string, unknown>, ctx: z.RefinementCtx): void {\n const condition = config.condition\n if (condition == null) {\n ctx.addIssue({ code: 'custom', path: ['config', 'condition'], message: CONDITION_REQUIRED_ERROR })\n } else {\n const conditionResult = validateConditionExpressionForApi(condition)\n if (!conditionResult.valid) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'condition'],\n message: conditionResult.error ?? CONDITION_REQUIRED_ERROR,\n })\n }\n }\n\n const timeout = config.timeout\n const hasTimeout = typeof timeout === 'string' && timeout.length > 0\n if (!hasTimeout) {\n ctx.addIssue({ code: 'custom', path: ['config', 'timeout'], message: CONDITION_TIMEOUT_REQUIRED_ERROR })\n } else if (!isValidDurationString(timeout)) {\n ctx.addIssue({ code: 'custom', path: ['config', 'timeout'], message: DURATION_ERROR })\n }\n\n if (config.onTimeout != null && config.onTimeout !== 'FAIL' && config.onTimeout !== 'CONTINUE') {\n ctx.addIssue({ code: 'custom', path: ['config', 'onTimeout'], message: CONDITION_ON_TIMEOUT_ERROR })\n }\n\n if (config.pollIntervalMs == null) return\n\n const pollIntervalMs = config.pollIntervalMs\n if (\n typeof pollIntervalMs !== 'number'\n || !Number.isInteger(pollIntervalMs)\n || pollIntervalMs < CONDITION_POLL_INTERVAL_MIN_MS\n || pollIntervalMs > CONDITION_POLL_INTERVAL_MAX_MS\n ) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'pollIntervalMs'],\n message: CONDITION_POLL_INTERVAL_RANGE_ERROR,\n })\n return\n }\n\n if (hasTimeout && isValidDurationString(timeout)) {\n const timeoutMs = parseDuration(timeout)\n if (pollIntervalMs > timeoutMs) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'pollIntervalMs'],\n message: CONDITION_POLL_INTERVAL_EXCEEDS_TIMEOUT_ERROR,\n })\n }\n }\n}\n\n/**\n * Named error directive applied when a failing step has no wired error route\n * (spec 5.9). Absent means `fail`, which is the pre-existing behavior, so no\n * stored definition changes meaning. `fallbackValue` is authored against the\n * step's output contract and lands in the run context under the step id.\n */\nexport const stepErrorDirectiveSchema = z.object({\n mode: z.enum(['fail', 'continueWithFallback', 'failureQueue']),\n fallbackValue: z.unknown().optional(),\n})\n\nexport type StepErrorDirective = z.infer<typeof stepErrorDirectiveSchema>\n\n/**\n * Transition discriminator. `error` routes are reachable ONLY from a step\n * failure, `slaBreach` routes ONLY from a user task's deadline passing, and\n * `outcome` routes ONLY from an agent step resolving a disposition (spec 7.2) \u2014\n * normal routing filters all of them out \u2014 so adding one never changes the happy\n * path. Absent means `normal`.\n */\nexport const transitionKindSchema = z.enum(['normal', 'error', 'slaBreach', 'outcome'])\n\nexport type WorkflowTransitionKind = z.infer<typeof transitionKindSchema>\n\n/**\n * Definition-level catch-all error handler (spec 5.9). Exactly one form:\n * `workflowId` designates a handler sub-workflow started with\n * `{ failedStepId, error, contextSnapshot }`; `stepId` designates a handler step\n * the run jumps to before failing. Engine construct \u2014 never an event trigger.\n */\nexport const workflowErrorHandlerSchema = z.object({\n workflowId: z.string().min(1).max(100).optional(),\n version: z.number().int().positive().optional(),\n stepId: z.string().min(1).max(100).optional(),\n}).superRefine((handler, ctx) => {\n const forms = [handler.workflowId, handler.stepId].filter((value) => value != null && value !== '')\n if (forms.length !== 1) {\n ctx.addIssue({\n code: 'custom',\n message: 'errorHandler must declare exactly one of \"workflowId\" or \"stepId\"',\n })\n }\n if (handler.version != null && !handler.workflowId) {\n ctx.addIssue({\n code: 'custom',\n path: ['version'],\n message: 'errorHandler.version only applies to the workflowId form',\n })\n }\n})\n\nexport type WorkflowErrorHandlerConfig = z.infer<typeof workflowErrorHandlerSchema>\n\n// Step definition\nexport const workflowStepSchema = z.object({\n stepId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Step ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n stepName: z.string().min(1).max(255),\n stepType: workflowStepTypeSchema,\n description: z.string().max(1000).optional(),\n config: z.record(z.string(), z.any()).optional(),\n userTaskConfig: userTaskConfigSchema.optional(),\n subWorkflowConfig: subWorkflowConfigSchema.optional(),\n signalConfig: z.object({\n signalName: z.string().min(1),\n timeout: z.string().optional(),\n }).optional(),\n activities: z.array(activityDefinitionSchema).optional(),\n timeout: z.string().optional(), // ISO 8601 duration\n retryPolicy: retryPolicySchema.optional(),\n // Pre-conditions for START step (business rules to validate before workflow can be started)\n preConditions: z.array(startPreConditionSchema).optional(),\n // What happens when this step fails and no error route is wired (spec 5.9).\n errorDirective: stepErrorDirectiveSchema.optional(),\n /**\n * The BUSINESS milestone this step announces when it completes.\n *\n * An annotation rather than a step type, deliberately: a milestone is not a\n * step, and modelling it as one would make \"the stage reached after the join\"\n * unexpressible without a no-op node between the join and whatever follows it.\n * Any step can carry one \u2014 an AUTOMATED step, a PARALLEL_JOIN, a USER_TASK \u2014\n * and the engine emits `workflows.instance.milestone_reached` on completion.\n *\n * The key belongs to a vocabulary the consuming module declares; this module\n * only bounds its shape. A key nobody declares is a warning THERE, never an\n * error here \u2014 the engine emits what the author wrote.\n */\n milestone: z.string().min(1).max(100).regex(/^[a-z0-9_]+$/, 'Milestone key must contain only lowercase letters, digits and underscores').optional(),\n // Visual-editor node coordinate persisted in the jsonb definition so a saved\n // graph re-opens exactly as the author arranged it. Additive/optional \u2014 legacy\n // and code-authored definitions omit it and auto-arrange on load.\n _editorPosition: z.object({ x: z.number(), y: z.number() }).optional(),\n // Editor-owned, never executed. Holds `unmappedConfig`: config a step-type\n // conversion could not map onto the new type (spec 4.5). The engine ignores\n // this object entirely; it exists so a conversion never destroys authored\n // configuration and a conversion back can recover it.\n metadata: z.record(z.string(), z.any()).optional(),\n}).superRefine((step, ctx) => {\n if (step.stepType === 'WAIT_FOR_CONDITION') {\n refineWaitForConditionStep(step.config || {}, ctx)\n return\n }\n if (step.stepType !== 'WAIT_FOR_TIMER') return\n const config = step.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Transition condition (reference to business rule)\nexport const transitionConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n})\n\n// Transition definition\nexport const workflowTransitionSchema = z.object({\n transitionId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Transition ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n fromStepId: z.string().min(1).max(100),\n toStepId: z.string().min(1).max(100),\n transitionName: z.string().max(255).optional(),\n trigger: transitionTriggerSchema,\n preConditions: z.array(transitionConditionSchema).optional(),\n postConditions: z.array(transitionConditionSchema).optional(),\n // Inline condition in the business_rules ConditionExpression language \u2014 the\n // one condition language platform-wide. `findValidTransitions` has always\n // evaluated `transition.condition`; declaring it here makes author-time\n // routing (IF_ELSE / SWITCH cases) survive a save round-trip.\n condition: conditionExpressionSchema,\n activities: z.array(activityDefinitionSchema).optional(), // Activities to execute during transition\n continueOnActivityFailure: z.boolean().default(false).optional(), // If true, transition continues even when activities fail\n // Error route marker (spec 5.9). Normal routing never selects an `error`\n // route; the engine follows it only when the source step fails.\n kind: transitionKindSchema.optional(),\n // Which of spec 7.2's five fixed disposition kinds an `outcome` route carries.\n // Additive and optional: a definition declaring no outcome routes never\n // carries it, and an unknown value is surfaced as a Problems-panel issue\n // rather than rejected, so an older definition never fails to load.\n outcomeKind: z.string().min(1).max(50).optional(),\n priority: z.number().int().min(0).max(9999).default(0),\n})\n\n// Workflow definition trigger schema (embedded in definition)\n// Note: Uses forward reference pattern since eventPatternSchema and eventTriggerConfigSchema are defined later\nexport const workflowDefinitionTriggerSchema = z.object({\n triggerId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Trigger ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n eventPattern: z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n ),\n config: z.object({\n filterConditions: z.array(z.object({\n field: z.string().min(1).max(255),\n operator: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'exists', 'notExists', 'regex']),\n value: z.any(),\n })).max(20).optional(),\n contextMapping: z.array(z.object({\n targetKey: z.string().min(1).max(100),\n sourceExpression: z.string().min(1).max(255),\n defaultValue: z.any().optional(),\n })).max(50).optional(),\n debounceMs: z.number().int().min(0).max(3600000).optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000).optional(),\n }).optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n})\nexport type WorkflowDefinitionTrigger = z.infer<typeof workflowDefinitionTriggerSchema>\n\n// ============================================================================\n// PARALLEL_FORK / PARALLEL_JOIN definition validation\n// ============================================================================\n\n// Error codes surfaced by FORK/JOIN definition validation. Stable identifiers\n// so the visual editor and tests can match on them.\nexport type ForkJoinValidationCode =\n | 'MISSING_JOIN_STEP_ID'\n | 'JOIN_STEP_NOT_FOUND'\n | 'JOIN_STEP_WRONG_TYPE'\n | 'MISSING_FORK_STEP_ID'\n | 'FORK_JOIN_MISMATCH'\n | 'FORK_TOO_FEW_BRANCHES'\n | 'JOIN_TOO_FEW_INCOMING'\n | 'DUPLICATE_BRANCH_KEY'\n | 'NESTED_FORK_NOT_SUPPORTED'\n | 'NO_CONVERGENCE_TO_JOIN'\n | 'FORK_JOIN_CYCLE'\n | 'UNPAIRED_JOIN'\n\nexport interface ForkJoinValidationIssue {\n code: ForkJoinValidationCode\n message: string\n stepId?: string\n}\n\ninterface ForkJoinStepLike {\n stepId: string\n stepType: string\n config?: Record<string, unknown> | null\n}\n\ninterface ForkJoinTransitionLike {\n transitionId: string\n fromStepId: string\n toStepId: string\n trigger: string\n kind?: string\n}\n\ninterface ForkJoinDefinitionLike {\n steps: ForkJoinStepLike[]\n transitions: ForkJoinTransitionLike[]\n}\n\n/**\n * Validates PARALLEL_FORK / PARALLEL_JOIN structure of a workflow definition.\n * Pure and side-effect-free so it can be unit tested and reused by the editor.\n *\n * Rules (this iteration \u2014 wait-all, no nesting):\n * 1. Every FORK declares config.joinStepId pointing at an existing PARALLEL_JOIN.\n * 2. The paired JOIN back-references the fork via config.forkStepId.\n * 3. A FORK has >= 2 outgoing `auto` transitions (branch keys unique); a JOIN has >= 2 incoming.\n * 4. Every path from a FORK converges to its JOIN \u2014 no END inside a branch, no dead ends,\n * no path bypassing the JOIN, no path to a different JOIN.\n * 5. No nesting: no FORK appears on a path between a FORK and its JOIN.\n * 6. No cycles back to the FORK within its branch region.\n * 7. Every PARALLEL_JOIN is paired with exactly one FORK.\n */\nexport function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {\n const issues: ForkJoinValidationIssue[] = []\n const steps = definition.steps ?? []\n // Error routes leave the happy-path graph on purpose (spec 5.9): a branch step\n // may route its failure outside the fork region without breaking convergence.\n const transitions = excludeNonNormalTransitions(definition.transitions ?? [])\n\n const stepById = new Map<string, ForkJoinStepLike>()\n for (const step of steps) stepById.set(step.stepId, step)\n\n const outgoingByStep = new Map<string, ForkJoinTransitionLike[]>()\n const incomingCountByStep = new Map<string, number>()\n for (const transition of transitions) {\n const list = outgoingByStep.get(transition.fromStepId) ?? []\n list.push(transition)\n outgoingByStep.set(transition.fromStepId, list)\n incomingCountByStep.set(transition.toStepId, (incomingCountByStep.get(transition.toStepId) ?? 0) + 1)\n }\n\n const forkSteps = steps.filter((step) => step.stepType === 'PARALLEL_FORK')\n const joinSteps = steps.filter((step) => step.stepType === 'PARALLEL_JOIN')\n\n // Track which JOIN steps are paired with a FORK so we can flag orphan joins.\n const pairedJoinIds = new Set<string>()\n\n for (const fork of forkSteps) {\n const joinStepId = (fork.config?.joinStepId as string | undefined) ?? undefined\n if (!joinStepId) {\n issues.push({ code: 'MISSING_JOIN_STEP_ID', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must declare config.joinStepId` })\n continue\n }\n const joinStep = stepById.get(joinStepId)\n if (!joinStep) {\n issues.push({ code: 'JOIN_STEP_NOT_FOUND', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" references missing join step \"${joinStepId}\"` })\n continue\n }\n if (joinStep.stepType !== 'PARALLEL_JOIN') {\n issues.push({ code: 'JOIN_STEP_WRONG_TYPE', stepId: fork.stepId, message: `Step \"${joinStepId}\" referenced by fork \"${fork.stepId}\" is not a PARALLEL_JOIN` })\n continue\n }\n\n pairedJoinIds.add(joinStepId)\n\n const backForkStepId = (joinStep.config?.forkStepId as string | undefined) ?? undefined\n if (!backForkStepId) {\n issues.push({ code: 'MISSING_FORK_STEP_ID', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must declare config.forkStepId` })\n } else if (backForkStepId !== fork.stepId) {\n issues.push({ code: 'FORK_JOIN_MISMATCH', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" back-reference forkStepId \"${backForkStepId}\" does not match fork \"${fork.stepId}\"` })\n }\n\n const autoBranches = (outgoingByStep.get(fork.stepId) ?? []).filter((transition) => transition.trigger === 'auto')\n if (autoBranches.length < 2) {\n issues.push({ code: 'FORK_TOO_FEW_BRANCHES', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must have at least 2 outgoing auto transitions (found ${autoBranches.length})` })\n }\n const branchKeys = new Set<string>()\n for (const branch of autoBranches) {\n if (branchKeys.has(branch.transitionId)) {\n issues.push({ code: 'DUPLICATE_BRANCH_KEY', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" has duplicate branch key \"${branch.transitionId}\"` })\n }\n branchKeys.add(branch.transitionId)\n }\n\n if ((incomingCountByStep.get(joinStepId) ?? 0) < 2) {\n issues.push({ code: 'JOIN_TOO_FEW_INCOMING', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must have at least 2 incoming transitions` })\n }\n\n // Convergence + no-nesting + no-cycle traversal over the branch region.\n const fullyExplored = new Set<string>()\n const onStack = new Set<string>()\n let reportedNesting = false\n let reportedNoConvergence = false\n let reportedCycle = false\n\n const visit = (stepId: string): void => {\n if (stepId === joinStepId) return // converged\n if (stepId === fork.stepId) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" loops back to the fork before reaching join \"${joinStepId}\"` })\n reportedCycle = true\n }\n return\n }\n const step = stepById.get(stepId)\n if (!step) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches missing step \"${stepId}\" instead of join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'END') {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches an END step before join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_FORK') {\n if (!reportedNesting) {\n issues.push({ code: 'NESTED_FORK_NOT_SUPPORTED', stepId: fork.stepId, message: `Nested PARALLEL_FORK \"${stepId}\" inside fork \"${fork.stepId}\" is not supported` })\n reportedNesting = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_JOIN') {\n // Reached a join that is not this fork's join \u2192 it does not converge correctly.\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches join \"${stepId}\" instead of its own join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (onStack.has(stepId)) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" contains a cycle at step \"${stepId}\"` })\n reportedCycle = true\n }\n return\n }\n if (fullyExplored.has(stepId)) return\n\n const outgoing = outgoingByStep.get(stepId) ?? []\n if (outgoing.length === 0) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" dead-ends at step \"${stepId}\" without reaching join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n onStack.add(stepId)\n for (const transition of outgoing) visit(transition.toStepId)\n onStack.delete(stepId)\n fullyExplored.add(stepId)\n }\n\n for (const branch of autoBranches) visit(branch.toStepId)\n }\n\n // Any PARALLEL_JOIN not paired with a fork is an orphan.\n for (const join of joinSteps) {\n if (!pairedJoinIds.has(join.stepId)) {\n issues.push({ code: 'UNPAIRED_JOIN', stepId: join.stepId, message: `PARALLEL_JOIN \"${join.stepId}\" is not paired with any PARALLEL_FORK` })\n }\n }\n\n return issues\n}\n\n// Declared context schema (spec \u00A73.1) \u2014 the typed-input contract for a\n// definition. Field vocabulary mirrors userTaskConfigSchema's formSchema\n// fields so form-driven and context-driven inputs share one shape language.\nexport const contextSchemaFieldSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['text', 'number', 'boolean', 'select', 'date']),\n label: z.string().optional(),\n required: z.boolean().optional(),\n options: z.array(z.string()).optional(),\n})\n\nexport type WorkflowContextSchemaField = z.infer<typeof contextSchemaFieldSchema>\n\nexport const contextSchemaSchema = z.object({\n input: z.object({\n fields: z.array(contextSchemaFieldSchema),\n }).optional(),\n})\n\nexport type WorkflowContextSchema = z.infer<typeof contextSchemaSchema>\n\n// Workflow definition data (JSONB structure)\nexport const workflowDefinitionDataSchema = z.object({\n steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),\n transitions: z.array(workflowTransitionSchema).min(1, 'Workflow must have at least one transition'),\n triggers: z.array(workflowDefinitionTriggerSchema).optional(), // Event triggers for automatic workflow start\n contextSchema: contextSchemaSchema.optional(), // Declared typed-input contract (spec \u00A73.1) \u2014 canonical input contract\n io: workflowIoContractSchema.optional(), // Sub-workflow input/output port contract; io.input is a read-through alias of contextSchema.input for the ledger\n interpolation: z.enum(['strict', 'lenient']).optional(), // Interpolation mode (spec \u00A73.6): absent = lenient; the POST create route defaults NEW definitions to 'strict' \u2014 never default here, it would flip existing lenient definitions on their next full-body update\n errorHandler: workflowErrorHandlerSchema.optional(), // Catch-all error handler (spec \u00A75.9)\n queries: z.array(z.any()).optional(), // For Phase 7\n signals: z.array(z.any()).optional(), // For Phase 9\n timers: z.array(z.any()).optional(), // For Phase 9\n}).superRefine((definition, ctx) => {\n for (const issue of validateParallelForkJoin(definition as ForkJoinDefinitionLike)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps'],\n message: `[${issue.code}] ${issue.message}`,\n })\n }\n\n // A waiting step with no way out strands the run once its predicate holds,\n // so the graph-level rule the other waiting step types carry applies here too.\n definition.steps.forEach((step, index) => {\n if (step.stepType !== 'WAIT_FOR_CONDITION') return\n const hasOutgoing = definition.transitions.some(\n (transition) => transition.fromStepId === step.stepId,\n )\n if (hasOutgoing) return\n ctx.addIssue({\n code: 'custom',\n path: ['steps', index],\n message: `WAIT_FOR_CONDITION step \"${step.stepId}\" requires at least one outgoing transition`,\n })\n })\n})\n\n// Pinned per-step sample envelope (spec \u00A73.6). Samples are stored verbatim\n// with no redaction layer in Phase 2a \u2014 the editor surfaces an explicit\n// warning where pinning happens instead.\nexport const sampleEnvelopeSchema = z.object({\n pinnedAt: z.string().datetime({ offset: true }),\n source: z.enum(['manual', 'test']),\n data: z.unknown(),\n})\n\nexport type WorkflowSampleEnvelopeInput = z.infer<typeof sampleEnvelopeSchema>\n\nexport const WORKFLOW_EDITOR_SAMPLES_MAX_CHARS = 65536\n\nexport const WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS = 65536\n\n// Named START contexts (spec section 8.1). The caps live in the pure\n// `lib/start-fixtures.ts` so the editor and the schema cannot disagree.\nexport const startFixtureSchema = z.object({\n name: z.string().min(1).max(WORKFLOW_START_FIXTURE_NAME_MAX),\n savedAt: z.string().datetime({ offset: true }),\n context: z.record(z.string(), z.any()),\n})\n\nexport type WorkflowStartFixtureInput = z.infer<typeof startFixtureSchema>\n\n// Editor annotations (spec \u00A74.5): markdown sticky notes and named groups. They\n// are documentation only \u2014 never execution semantics \u2014 which is why they live\n// here in metadata and never in `definition.steps`.\nconst annotationPointSchema = z.object({ x: z.number(), y: z.number() })\nconst annotationSizeSchema = z.object({ width: z.number().positive(), height: z.number().positive() })\n\nexport const editorNoteSchema = z.object({\n id: z.string().min(1).max(100),\n markdown: z.string().max(10000),\n position: annotationPointSchema,\n size: annotationSizeSchema,\n})\n\nexport const editorGroupSchema = z.object({\n id: z.string().min(1).max(100),\n name: z.string().max(200),\n rect: z.object({ x: z.number(), y: z.number(), width: z.number().positive(), height: z.number().positive() }),\n collapsed: z.boolean().optional(),\n})\n\nexport const editorAnnotationsSchema = z.object({\n notes: z.array(editorNoteSchema).optional(),\n groups: z.array(editorGroupSchema).optional(),\n})\n\nexport type WorkflowEditorNoteInput = z.infer<typeof editorNoteSchema>\nexport type WorkflowEditorGroupInput = z.infer<typeof editorGroupSchema>\n\n// Workflow metadata\nexport const workflowMetadataSchema = z.object({\n tags: z.array(z.string().max(50)).optional(),\n category: z.string().max(100).optional(),\n icon: z.string().max(100).optional(),\n // Forward-compatibility guard (spec section 5.8): engines below this version\n // refuse to instantiate the definition instead of misexecuting it.\n minEngineVersion: z.number().int().min(1).optional(),\n editor: z.object({\n samples: z.record(z.string(), sampleEnvelopeSchema).optional(),\n annotations: editorAnnotationsSchema.optional(),\n // Named START contexts (spec section 8.1). A different thing from a pinned\n // per-step sample, which is why it gets its own key and its own cap.\n fixtures: z.record(z.string(), startFixtureSchema).optional(),\n }).passthrough().optional(),\n}).superRefine((metadata, ctx) => {\n const samples = metadata.editor?.samples\n if (samples && JSON.stringify(samples).length > WORKFLOW_EDITOR_SAMPLES_MAX_CHARS) {\n ctx.addIssue({\n code: 'custom',\n path: ['editor', 'samples'],\n message: `Pinned samples exceed the ${WORKFLOW_EDITOR_SAMPLES_MAX_CHARS}-character limit; unpin or shrink samples before saving`,\n })\n }\n const annotations = metadata.editor?.annotations\n if (annotations && JSON.stringify(annotations).length > WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS) {\n ctx.addIssue({\n code: 'custom',\n path: ['editor', 'annotations'],\n message: `Notes and groups exceed the ${WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS}-character limit; shorten or remove some before saving`,\n })\n }\n const fixtures = metadata.editor?.fixtures\n if (fixtures && JSON.stringify(fixtures).length > WORKFLOW_START_FIXTURES_MAX_CHARS) {\n ctx.addIssue({\n code: 'custom',\n path: ['editor', 'fixtures'],\n message: `Start fixtures exceed the ${WORKFLOW_START_FIXTURES_MAX_CHARS}-character limit; delete or shrink fixtures before saving`,\n })\n }\n if (fixtures && Object.keys(fixtures).length > WORKFLOW_START_FIXTURES_MAX_COUNT) {\n ctx.addIssue({\n code: 'custom',\n path: ['editor', 'fixtures'],\n message: `A definition may keep at most ${WORKFLOW_START_FIXTURES_MAX_COUNT} start fixtures`,\n })\n }\n})\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// ============================================================================\n// WorkflowDefinition Schemas\n// ============================================================================\n\n// Definition classification + lifecycle\nexport const workflowKindSchema = z.enum(['workflow', 'component'])\nexport const workflowLifecycleSchema = z.enum(['draft', 'published', 'archived'])\n\nexport type WorkflowKind = z.infer<typeof workflowKindSchema>\nexport type WorkflowLifecycle = z.infer<typeof workflowLifecycleSchema>\n\n// A reusable component is invoked only as a SUB_WORKFLOW and never auto-starts,\n// so it MUST NOT declare event triggers.\nconst componentHasNoTriggers = (\n data: { kind?: string | null; definition?: { triggers?: unknown[] } | null },\n ctx: z.RefinementCtx,\n) => {\n const triggers = data.definition && (data.definition as { triggers?: unknown[] }).triggers\n if (data.kind === 'component' && Array.isArray(triggers) && triggers.length > 0) {\n ctx.addIssue({\n code: 'custom',\n path: ['definition', 'triggers'],\n message: 'A component workflow cannot declare event triggers',\n })\n }\n}\n\n// Full schema for database entities (includes tenant fields)\nexport const createWorkflowDefinitionSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n kind: workflowKindSchema.default('workflow'),\n lifecycle: workflowLifecycleSchema.default('published'),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\n\nexport type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinitionSchema>\n\n/**\n * The definition's own execution grant (see `lib/definition-grant.ts`).\n *\n * Absent leaves the stored value untouched; `null` or `[]` clears it back to\n * \"borrow the starting user's identity\". Feature ids only \u2014 the subset check\n * against the saving user's own grants happens in the route, because it needs\n * the live RBAC service.\n */\nexport const workflowGrantedFeaturesSchema = z\n .array(z.string().min(1).max(255))\n .max(200)\n .optional()\n .nullable()\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n kind: workflowKindSchema.optional(),\n lifecycle: workflowLifecycleSchema.optional(),\n grantedFeatures: workflowGrantedFeaturesSchema,\n})\n\nexport type CreateWorkflowDefinitionApiInput = z.infer<typeof createWorkflowDefinitionInputSchema>\n\n// Validation variant that also enforces the component-has-no-triggers rule.\n// Kept separate so the base object stays `.pick()`/`.extend()`-able for OpenAPI.\nexport const createWorkflowDefinitionInputCheckedSchema =\n createWorkflowDefinitionInputSchema.superRefine(componentHasNoTriggers)\n\nexport const updateWorkflowDefinitionSchema = createWorkflowDefinitionSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinitionSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\n// Accepts the same shape as the create form so the edit page can submit a\n// full payload without triggering \"Unrecognized keys\" validation errors.\n// workflowId is accepted but ignored by the route handler (it identifies the\n// row); version is applied when supplied so the form can bump it explicitly.\nexport const updateWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).optional(),\n workflowName: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().optional(),\n definition: workflowDefinitionDataSchema.optional(),\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n kind: workflowKindSchema.optional(),\n lifecycle: workflowLifecycleSchema.optional(),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n grantedFeatures: workflowGrantedFeaturesSchema,\n}).strict()\n\nexport type UpdateWorkflowDefinitionApiInput = z.infer<typeof updateWorkflowDefinitionInputSchema>\n\n// Validation variant that also enforces the component-has-no-triggers rule.\nexport const updateWorkflowDefinitionInputCheckedSchema =\n updateWorkflowDefinitionInputSchema.superRefine(componentHasNoTriggers)\n\nexport const workflowDefinitionFilterSchema = z.object({\n workflowId: z.string().optional(),\n workflowName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowDefinitionFilter = z.infer<typeof workflowDefinitionFilterSchema>\n\n// ============================================================================\n// WorkflowDefinitionDraft Schemas\n// ============================================================================\n\n/**\n * Lenient shape-only schema for per-user editor drafts (spec \u00A74.7).\n *\n * A draft is autosaved mid-edit and may be structurally incomplete \u2014 missing\n * START/END steps, dangling transitions, empty graphs \u2014 so it deliberately\n * does NOT reuse workflowDefinitionDataSchema (min counts, fork/join graph\n * rules). Only truly malformed payloads are rejected: steps and transitions\n * must be arrays of objects. Unknown keys (triggers, queries, signals, timers,\n * future fields) pass through untouched so a draft round-trips losslessly.\n * Full validation runs when the draft is promoted via the definition PUT.\n */\nexport const workflowDefinitionDraftDataSchema = z.object({\n steps: z.array(z.record(z.string(), z.unknown())),\n transitions: z.array(z.record(z.string(), z.unknown())),\n}).passthrough()\n\nexport type WorkflowDefinitionDraftData = z.infer<typeof workflowDefinitionDraftDataSchema>\n\nexport const upsertWorkflowDefinitionDraftInputSchema = z.object({\n definition: workflowDefinitionDraftDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n baseUpdatedAt: dateOrNull.optional(),\n}).strict()\n\nexport type UpsertWorkflowDefinitionDraftApiInput = z.infer<typeof upsertWorkflowDefinitionDraftInputSchema>\n\n// ============================================================================\n// Test-Step (mock-first dry run) Schemas\n// ============================================================================\n\n/**\n * Input for POST /definitions/[id]/test-step (spec \u00A73.6). `config` is the raw\n * (possibly still-templated) activity config exactly as the editor holds it;\n * `context` is the caller-supplied sample workflow context the server\n * interpolates against. Both are intentionally shape-only records: per-type\n * config validation is the registry's concern (warnings, not gates), and a\n * sample context is arbitrary user data.\n */\nexport const testWorkflowStepInputSchema = z.object({\n stepId: z.string().min(1).optional(),\n activityType: z.string().min(1),\n config: z.record(z.string(), z.unknown()),\n context: z.record(z.string(), z.unknown()).default({}),\n}).strict()\n\nexport type TestWorkflowStepApiInput = z.infer<typeof testWorkflowStepInputSchema>\n\n// ============================================================================\n// WorkflowInstance Schemas\n// ============================================================================\n\nexport const workflowInstanceMetadataSchema = z.object({\n entityType: z.string().max(100).optional(),\n entityId: z.string().max(255).optional(),\n initiatedBy: z.string().max(255).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n})\n\nexport const createWorkflowInstanceSchema = z.object({\n definitionId: uuid,\n workflowId: z.string().min(1).max(100),\n version: z.number().int().positive(),\n status: workflowInstanceStatusSchema,\n currentStepId: z.string().min(1).max(100),\n context: z.record(z.string(), z.any()),\n correlationKey: z.string().max(255).optional().nullable(),\n metadata: workflowInstanceMetadataSchema.optional().nullable(),\n startedAt: z.coerce.date(),\n completedAt: dateOrNull.optional(),\n pausedAt: dateOrNull.optional(),\n cancelledAt: dateOrNull.optional(),\n errorMessage: z.string().max(5000).optional().nullable(),\n errorDetails: z.any().optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n isDryRun: z.boolean().default(false),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowInstanceInput = z.infer<typeof createWorkflowInstanceSchema>\n\nexport const updateWorkflowInstanceSchema = createWorkflowInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowInstanceInput = z.infer<typeof updateWorkflowInstanceSchema>\n\nexport const workflowInstanceFilterSchema = z.object({\n definitionId: uuid.optional(),\n workflowId: z.string().optional(),\n status: workflowInstanceStatusSchema.optional(),\n correlationKey: z.string().optional(),\n currentStepId: z.string().optional(),\n isDryRun: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowInstanceFilter = z.infer<typeof workflowInstanceFilterSchema>\n\n// ============================================================================\n// StepInstance Schemas\n// ============================================================================\n\nexport const createStepInstanceSchema = z.object({\n workflowInstanceId: uuid,\n stepId: z.string().min(1).max(100),\n stepName: z.string().min(1).max(255),\n stepType: z.string().min(1).max(50),\n status: stepInstanceStatusSchema,\n inputData: z.any().optional().nullable(),\n outputData: z.any().optional().nullable(),\n errorData: z.any().optional().nullable(),\n enteredAt: dateOrNull.optional(),\n exitedAt: dateOrNull.optional(),\n executionTimeMs: z.number().int().min(0).optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateStepInstanceInput = z.infer<typeof createStepInstanceSchema>\n\nexport const updateStepInstanceSchema = createStepInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateStepInstanceInput = z.infer<typeof updateStepInstanceSchema>\n\nexport const stepInstanceFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepId: z.string().optional(),\n status: stepInstanceStatusSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type StepInstanceFilter = z.infer<typeof stepInstanceFilterSchema>\n\n// ============================================================================\n// UserTask Schemas\n// ============================================================================\n\nexport const createUserTaskSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid,\n taskName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n status: userTaskStatusSchema,\n formSchema: z.any().optional().nullable(),\n formData: z.any().optional().nullable(),\n assignedTo: z.string().max(255).optional().nullable(),\n assignedToRoles: z.array(z.string().max(100)).optional().nullable(),\n claimedBy: z.string().max(255).optional().nullable(),\n claimedAt: dateOrNull.optional(),\n dueDate: dateOrNull.optional(),\n escalatedAt: dateOrNull.optional(),\n escalatedTo: z.string().max(255).optional().nullable(),\n completedBy: z.string().max(255).optional().nullable(),\n completedAt: dateOrNull.optional(),\n comments: z.string().max(5000).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateUserTaskInput = z.infer<typeof createUserTaskSchema>\n\nexport const updateUserTaskSchema = createUserTaskSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateUserTaskInput = z.infer<typeof updateUserTaskSchema>\n\n/**\n * Body of `POST /api/workflows/tasks/[id]/reassign`.\n *\n * The refinement is the point: \u00A76.4 makes a task with no assignee AND no role\n * queue actionable by nobody, so a reassignment that wrote that shape would\n * create the very state reassignment exists to repair. Empty arrays and blank\n * strings are normalized away first, so `{ assignedTo: ' ' }` is refused rather\n * than silently storing whitespace as a user id.\n */\nexport const reassignUserTaskSchema = z\n .object({\n assignedTo: z\n .string()\n .max(255)\n .nullable()\n .optional()\n .transform((value) => {\n const trimmed = typeof value === 'string' ? value.trim() : ''\n return trimmed.length > 0 ? trimmed : null\n }),\n assignedToRoles: z\n .array(z.string().max(100))\n .nullable()\n .optional()\n .transform((value) => {\n if (!Array.isArray(value)) return null\n const roles = value.map((role) => role.trim()).filter((role) => role.length > 0)\n return roles.length > 0 ? roles : null\n }),\n reason: z\n .string()\n .max(2000)\n .nullable()\n .optional()\n .transform((value) => {\n const trimmed = typeof value === 'string' ? value.trim() : ''\n return trimmed.length > 0 ? trimmed : null\n }),\n })\n .refine((value) => value.assignedTo !== null || value.assignedToRoles !== null, {\n message: 'Provide an assignee or at least one role queue',\n path: ['assignedTo'],\n })\n\nexport type ReassignUserTaskInput = z.infer<typeof reassignUserTaskSchema>\n\nexport const userTaskFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n status: userTaskStatusSchema.optional(),\n assignedTo: z.string().optional(),\n claimedBy: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type UserTaskFilter = z.infer<typeof userTaskFilterSchema>\n\n// ============================================================================\n// WorkflowEvent Schemas\n// ============================================================================\n\nexport const createWorkflowEventSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid.optional().nullable(),\n eventType: z.string().min(1).max(50),\n eventData: z.any(),\n occurredAt: z.coerce.date().optional(),\n userId: z.string().max(255).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowEventInput = z.infer<typeof createWorkflowEventSchema>\n\nexport const workflowEventFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepInstanceId: uuid.optional(),\n eventType: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n occurredAtFrom: z.date().optional(),\n occurredAtTo: z.date().optional(),\n})\n\nexport type WorkflowEventFilter = z.infer<typeof workflowEventFilterSchema>\n\n// ============================================================================\n// Workflow Execution Context Schema\n// ============================================================================\n\nexport const workflowExecutionContextSchema = z.looseObject({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n context: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n initiatedBy: z.string().optional(),\n})\n\nexport type WorkflowExecutionContextInput = z.infer<typeof workflowExecutionContextSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const startWorkflowInputSchema = z.object({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n initialContext: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n /**\n * Start the run as a side-effect-free simulation (spec section 8.2). Opting\n * IN is the only way to get one: absent means a real run, exactly as before.\n * The route gates it behind `workflows.definitions.test_run`.\n */\n dryRun: z.boolean().optional(),\n /**\n * Pause before each step so the author can inspect the context and continue\n * or abort (spec section 8.2). Gated by the same `test_run` feature as\n * `dryRun`, and independent of it: a real run can be stepped through too.\n */\n stepThrough: z.boolean().optional(),\n})\n\nexport type StartWorkflowApiInput = z.infer<typeof startWorkflowInputSchema>\n\n// ============================================================================\n// WorkflowEventTrigger Schemas\n// ============================================================================\n\nexport const triggerFilterOperatorSchema = z.enum([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'in',\n 'notIn',\n 'exists',\n 'notExists',\n 'regex',\n])\nexport type TriggerFilterOperator = z.infer<typeof triggerFilterOperatorSchema>\n\nexport const triggerFilterConditionSchema = z.object({\n field: z.string().min(1).max(255, 'Field path must be at most 255 characters'),\n operator: triggerFilterOperatorSchema,\n value: z.any(),\n})\nexport type TriggerFilterCondition = z.infer<typeof triggerFilterConditionSchema>\n\nexport const triggerContextMappingSchema = z.object({\n targetKey: z.string().min(1).max(100, 'Target key must be at most 100 characters'),\n sourceExpression: z.string().min(1).max(255, 'Source expression must be at most 255 characters'),\n defaultValue: z.any().optional(),\n})\nexport type TriggerContextMapping = z.infer<typeof triggerContextMappingSchema>\n\nexport const eventTriggerConfigSchema = z.object({\n filterConditions: z.array(triggerFilterConditionSchema).max(20, 'Maximum 20 filter conditions allowed').optional(),\n contextMapping: z.array(triggerContextMappingSchema).max(50, 'Maximum 50 context mappings allowed').optional(),\n debounceMs: z.number().int().min(0).max(3600000, 'Debounce cannot exceed 1 hour').optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000, 'Max concurrent instances must be between 1 and 1000').optional(),\n})\nexport type EventTriggerConfig = z.infer<typeof eventTriggerConfigSchema>\n\nexport const eventPatternSchema = z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n )\n\nexport const createEventTriggerSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\nexport type CreateEventTriggerInput = z.infer<typeof createEventTriggerSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n priority: z.number().int().min(0).max(9999).default(0).optional(),\n})\nexport type CreateEventTriggerApiInput = z.infer<typeof createEventTriggerInputSchema>\n\nexport const updateEventTriggerSchema = createEventTriggerSchema.partial().extend({\n id: uuid,\n})\nexport type UpdateEventTriggerInput = z.infer<typeof updateEventTriggerSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\nexport const updateEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: eventPatternSchema.optional(),\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n priority: z.number().int().min(0).max(9999).optional(),\n}).strict()\nexport type UpdateEventTriggerApiInput = z.infer<typeof updateEventTriggerInputSchema>\n\nexport const eventTriggerFilterSchema = z.object({\n name: z.string().optional(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\nexport type EventTriggerFilter = z.infer<typeof eventTriggerFilterSchema>\n"],
5
+ "mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,iCAAiC;AAC1C,SAAS,yCAAyC;AAClD,SAAS,qBAAqB;AAC9B,SAAS,mCAAmC;AAC5C,SAAS,6BAA6B;AACtC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,OAAO;AACP,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAaP;AAAA,EACE,yBAAAA;AAAA,EACA,wBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,2BAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYP;AAAA,EACE,sBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,sBAAAC;AAAA,OACK;AAGP,MAAM,OAAO,EAAE,KAAK;AAMb,MAAM,yBAAyB,EAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,+BAA+B,EAAE,KAAK;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAQM,MAAM,2BAA2B,EAAE;AAAA,EACxC;AACF;AAEO,MAAM,qCAAqC,EAAE,KAAK;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,2BAA2B,EAAE,KAAK;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,uBAAuB,EAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,0BAA0B,EAAE,KAAK,CAAC,QAAQ,UAAU,UAAU,OAAO,CAAC;AAY5E,MAAM,qBAAqB,EAAE,KAAK,gBAAgB,CAAC;AAGnD,MAAM,0BAA0B,EAAE,KAAK,CAAC,cAAc,eAAe,QAAQ,CAAC;AAG9E,MAAM,yBAAyB,EAAE,KAAK,CAAC,YAAY,UAAU,UAAU,CAAC;AAqBxE,MAAM,4BAA4B,EAAE,MAAM;AAAA,EAC/C,EAAE,OAAO;AAAA,EACT,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AACjC,CAAC;AAQM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,OAAO,0BAA0B,SAAS;AAC5C,CAAC;AAOM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,QAAQ,EAAE,KAAK,CAAC,UAAU,YAAY,OAAO,CAAC;AAAA,EAC9C,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,cAAc,EAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAYM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,OAAO;AAAA,EACP,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,OAAO,EAAE,KAAK,CAAC,WAAW,aAAa,aAAa,CAAC,EAAE,SAAS;AAClE,CAAC;AAWM,MAAM,6BAA6B,EAAE,KAAK,CAAC,QAAQ,UAAU,CAAC;AAI9D,MAAM,uBAAuB,EAAE,OAAO;AAAA;AAAA,EAE3C,YAAY,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBlB,EAAE,OAAO;AAAA,MACP,QAAQ,EAAE,MAAM,EAAE,OAAO;AAAA,QACvB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,QACtB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,QACtB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,QAClC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,QAC/B,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MACrC,CAAC,CAAC;AAAA,IACJ,CAAC;AAAA;AAAA,IAED,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,QAAQ,EAAE,SAAS;AAAA,MACnC,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,MACxC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACzC,CAAC;AAAA,EACH,CAAC,EAAE,SAAS;AAAA,EACZ,YAAY,EAAE,MAAM;AAAA,IAClB,EAAE,OAAO;AAAA,IACT,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EACpB,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9C,cAAc,2BAA2B,SAAS;AAAA;AAAA;AAAA,EAGlD,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE7B,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EACpC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EACjC,iBAAiB,EAAE,MAAM,EAAE,OAAO;AAAA,IAChC,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,CAAC,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb,cAAc,0BAA0B,SAAS;AAAA;AAAA,EAEjD,gBAAgB,EAAE,MAAM,uBAAuB,EAAE,SAAS;AAAA;AAAA,EAE1D,UAAU,mBAAmB,SAAS;AAAA,EACtC,UAAU,mBAAmB,SAAS;AAAA,EACtC,WAAW,EAAE,MAAM,kBAAkB,EAAE,SAAS;AAAA,EAChD,UAAU,mBAAmB,SAAS;AAAA;AAAA;AAAA,EAGtC,WAAW,EAAE,MAAM,kBAAkB,EAAE,SAAS;AAAA,EAChD,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAClD,CAAC;AAIM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,eAAe,EAAE,OAAO,EAAE,IAAI,GAAG,6BAA6B;AAAA,EAC9D,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxD,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAClD,CAAC;AAOM,MAAM,sBAAsB,EAAE,KAAK,CAAC,QAAQ,UAAU,WAAW,UAAU,MAAM,CAAC;AAElF,MAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,MAAM,EACH,OAAO,EACP,IAAI,CAAC,EACL,IAAI,GAAG,EACP,MAAM,2BAA2B,uFAAuF;AAAA,EAC3H,MAAM;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAChC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC9C,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AACxC,CAAC;AAEM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,QAAQ,EAAE,MAAM,eAAe,EAAE,SAAS;AAAA,EAC1C,SAAS,EAAE,MAAM,eAAe,EAAE,SAAS;AAC7C,CAAC;AAOM,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC3C,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AACnC,CAAC;AAGM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC3C,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EACzC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC5C,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AACvC,CAAC;AAOD,MAAM,gCAAkF;AAAA,EACtF,YAAY,CAAC,MAAM,SAAS;AAAA,EAC5B,UAAU,CAAC,UAAU;AAAA,EACrB,cAAc,CAAC,KAAK;AAAA,EACpB,eAAe,CAAC,aAAa,OAAO;AAAA,EACpC,YAAY,CAAC,WAAW;AAAA,EACxB,kBAAkB,CAAC,cAAc;AACnC;AAGO,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,iBAAiB,oFAAoF;AAAA,EAClJ,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,cAAc;AAAA,EACd,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,EACpC,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA;AAAA,EAC3C,aAAa,0BAA0B,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhD,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKhD,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,cAAc,EAAE,OAAO;AAAA,IACrB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,IAC5B,WAAW,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA;AAAA,EAChD,CAAC,EAAE,SAAS;AAAA;AACd,CAAC,EAAE,YAAY,CAAC,UAAU,QAAQ;AAQhC,QAAM,qBAAqB,8BAA8B,SAAS,YAAY;AAC9E,MAAI,oBAAoB;AACtB,UAAMC,UAAS,SAAS,UAAU,CAAC;AACnC,eAAW,OAAO,oBAAoB;AACpC,YAAM,QAAQA,QAAO,GAAG;AACxB,YAAM,UACJ,SAAS,QACR,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,MAC9C,QAAQ,WAAW,OAAO,UAAU;AACvC,UAAI,SAAS;AACX,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,CAAC,UAAU,GAAG;AAAA,UACpB,SAAS,GAAG,SAAS,YAAY,uBAAuB,GAAG;AAAA,QAC7D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,iBAAiB,gBAAgB;AAC5C,UAAM,SAAS,wBAAwB,UAAU,SAAS,UAAU,CAAC,CAAC;AACtE,QAAI,CAAC,OAAO,SAAS;AACnB,iBAAW,SAAS,OAAO,MAAM,QAAQ;AACvC,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI;AAAA,UAC9B,SAAS,MAAM;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,SAAS,iBAAiB,OAAQ;AACtC,QAAM,SAAS,SAAS,UAAU,CAAC;AACnC,QAAM,cAAc,OAAO,YAAY,QAAQ,OAAO,aAAa;AACnE,QAAM,WAAW,OAAO,SAAS,QAAQ,OAAO,UAAU;AAC1D,MAAI,CAAC,eAAe,CAAC,UAAU;AAC7B,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AACA,MAAI,eAAe,UAAU;AAC3B,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AACA,MAAI,eAAe,CAAC,sBAAsB,OAAO,QAAQ,GAAG;AAC1D,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,UAAU;AAAA,MAC3B,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,UAAU;AACZ,QAAI,CAAC,qBAAqB,OAAO,KAAK,GAAG;AACvC,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,OAAO;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,CAAC,sBAAsB,OAAO,KAAK,GAAG;AAC/C,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,OAAO;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAGM,MAAM,yBAAyB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAG9D,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA;AAAA,EAChC,UAAU,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAClC,mBAAmB,uBAAuB,SAAS;AAAA;AACrD,CAAC;AAOM,MAAM,iCAAiC;AACvC,MAAM,iCAAiC;AAE9C,MAAM,2BAA2B;AACjC,MAAM,mCAAmC;AACzC,MAAM,6BAA6B;AACnC,MAAM,sCAAsC,kEAAkE,8BAA8B,QAAQ,8BAA8B;AAClL,MAAM,gDACJ;AAQF,SAAS,2BAA2B,QAAiC,KAA4B;AAC/F,QAAM,YAAY,OAAO;AACzB,MAAI,aAAa,MAAM;AACrB,QAAI,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,WAAW,GAAG,SAAS,yBAAyB,CAAC;AAAA,EACnG,OAAO;AACL,UAAM,kBAAkB,kCAAkC,SAAS;AACnE,QAAI,CAAC,gBAAgB,OAAO;AAC1B,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,WAAW;AAAA,QAC5B,SAAS,gBAAgB,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,UAAU,OAAO;AACvB,QAAM,aAAa,OAAO,YAAY,YAAY,QAAQ,SAAS;AACnE,MAAI,CAAC,YAAY;AACf,QAAI,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,SAAS,GAAG,SAAS,iCAAiC,CAAC;AAAA,EACzG,WAAW,CAAC,sBAAsB,OAAO,GAAG;AAC1C,QAAI,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,SAAS,GAAG,SAAS,eAAe,CAAC;AAAA,EACvF;AAEA,MAAI,OAAO,aAAa,QAAQ,OAAO,cAAc,UAAU,OAAO,cAAc,YAAY;AAC9F,QAAI,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,WAAW,GAAG,SAAS,2BAA2B,CAAC;AAAA,EACrG;AAEA,MAAI,OAAO,kBAAkB,KAAM;AAEnC,QAAM,iBAAiB,OAAO;AAC9B,MACE,OAAO,mBAAmB,YACvB,CAAC,OAAO,UAAU,cAAc,KAChC,iBAAiB,kCACjB,iBAAiB,gCACpB;AACA,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,gBAAgB;AAAA,MACjC,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,MAAI,cAAc,sBAAsB,OAAO,GAAG;AAChD,UAAM,YAAY,cAAc,OAAO;AACvC,QAAI,iBAAiB,WAAW;AAC9B,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,gBAAgB;AAAA,QACjC,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAQO,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,KAAK,CAAC,QAAQ,wBAAwB,cAAc,CAAC;AAAA,EAC7D,eAAe,EAAE,QAAQ,EAAE,SAAS;AACtC,CAAC;AAWM,MAAM,uBAAuB,EAAE,KAAK,CAAC,UAAU,SAAS,aAAa,SAAS,CAAC;AAU/E,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAChD,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAC9C,CAAC,EAAE,YAAY,CAAC,SAAS,QAAQ;AAC/B,QAAM,QAAQ,CAAC,QAAQ,YAAY,QAAQ,MAAM,EAAE,OAAO,CAAC,UAAU,SAAS,QAAQ,UAAU,EAAE;AAClG,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,QAAQ,WAAW,QAAQ,CAAC,QAAQ,YAAY;AAClD,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,SAAS;AAAA,MAChB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAKM,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,iBAAiB,gFAAgF;AAAA,EAC1I,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACnC,UAAU;AAAA,EACV,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EAC3C,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC/C,gBAAgB,qBAAqB,SAAS;AAAA,EAC9C,mBAAmB,wBAAwB,SAAS;AAAA,EACpD,cAAc,EAAE,OAAO;AAAA,IACrB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC5B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC,EAAE,SAAS;AAAA,EACZ,YAAY,EAAE,MAAM,wBAAwB,EAAE,SAAS;AAAA,EACvD,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAC7B,aAAa,kBAAkB,SAAS;AAAA;AAAA,EAExC,eAAe,EAAE,MAAM,uBAAuB,EAAE,SAAS;AAAA;AAAA,EAEzD,gBAAgB,yBAAyB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAclD,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,gBAAgB,2EAA2E,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAIlJ,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AACnD,CAAC,EAAE,YAAY,CAAC,MAAM,QAAQ;AAC5B,MAAI,KAAK,aAAa,sBAAsB;AAC1C,+BAA2B,KAAK,UAAU,CAAC,GAAG,GAAG;AACjD;AAAA,EACF;AACA,MAAI,KAAK,aAAa,iBAAkB;AACxC,QAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,QAAM,cAAc,OAAO,YAAY,QAAQ,OAAO,aAAa;AACnE,QAAM,WAAW,OAAO,SAAS,QAAQ,OAAO,UAAU;AAC1D,MAAI,CAAC,eAAe,CAAC,UAAU;AAC7B,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AACA,MAAI,eAAe,UAAU;AAC3B,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,QAAQ;AAAA,MACf,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AACA,MAAI,eAAe,CAAC,sBAAsB,OAAO,QAAQ,GAAG;AAC1D,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,UAAU;AAAA,MAC3B,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,UAAU;AACZ,QAAI,CAAC,qBAAqB,OAAO,KAAK,GAAG;AACvC,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,OAAO;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,CAAC,sBAAsB,OAAO,KAAK,GAAG;AAC/C,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,OAAO;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAGM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA;AAAA,EAChC,UAAU,EAAE,QAAQ,EAAE,QAAQ,IAAI;AACpC,CAAC;AAGM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,iBAAiB,sFAAsF;AAAA,EACtJ,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACrC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACnC,gBAAgB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC7C,SAAS;AAAA,EACT,eAAe,EAAE,MAAM,yBAAyB,EAAE,SAAS;AAAA,EAC3D,gBAAgB,EAAE,MAAM,yBAAyB,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK5D,WAAW;AAAA,EACX,YAAY,EAAE,MAAM,wBAAwB,EAAE,SAAS;AAAA;AAAA,EACvD,2BAA2B,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAG/D,MAAM,qBAAqB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EAChD,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC;AACvD,CAAC;AAIM,MAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,iBAAiB,mFAAmF;AAAA,EAChJ,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,cAAc,EAAE,OAAO,EACpB,IAAI,GAAG,2BAA2B,EAClC,IAAI,KAAK,8CAA8C,EACvD;AAAA,IACC;AAAA,IACA;AAAA,EACF;AAAA,EACF,QAAQ,EAAE,OAAO;AAAA,IACf,kBAAkB,EAAE,MAAM,EAAE,OAAO;AAAA,MACjC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAChC,UAAU,EAAE,KAAK,CAAC,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,YAAY,cAAc,YAAY,MAAM,SAAS,UAAU,aAAa,OAAO,CAAC;AAAA,MAC7I,OAAO,EAAE,IAAI;AAAA,IACf,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACrB,gBAAgB,EAAE,MAAM,EAAE,OAAO;AAAA,MAC/B,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MACpC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAC3C,cAAc,EAAE,IAAI,EAAE,SAAS;AAAA,IACjC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACrB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAO,EAAE,SAAS;AAAA,IAC1D,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EACrE,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACvB,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACjC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC;AACvD,CAAC;AA8DM,SAAS,yBAAyB,YAA+D;AACtG,QAAM,SAAoC,CAAC;AAC3C,QAAM,QAAQ,WAAW,SAAS,CAAC;AAGnC,QAAM,cAAc,4BAA4B,WAAW,eAAe,CAAC,CAAC;AAE5E,QAAM,WAAW,oBAAI,IAA8B;AACnD,aAAW,QAAQ,MAAO,UAAS,IAAI,KAAK,QAAQ,IAAI;AAExD,QAAM,iBAAiB,oBAAI,IAAsC;AACjE,QAAM,sBAAsB,oBAAI,IAAoB;AACpD,aAAW,cAAc,aAAa;AACpC,UAAM,OAAO,eAAe,IAAI,WAAW,UAAU,KAAK,CAAC;AAC3D,SAAK,KAAK,UAAU;AACpB,mBAAe,IAAI,WAAW,YAAY,IAAI;AAC9C,wBAAoB,IAAI,WAAW,WAAW,oBAAoB,IAAI,WAAW,QAAQ,KAAK,KAAK,CAAC;AAAA,EACtG;AAEA,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,eAAe;AAC1E,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,aAAa,eAAe;AAG1E,QAAM,gBAAgB,oBAAI,IAAY;AAEtC,aAAW,QAAQ,WAAW;AAC5B,UAAM,aAAc,KAAK,QAAQ,cAAqC;AACtE,QAAI,CAAC,YAAY;AACf,aAAO,KAAK,EAAE,MAAM,wBAAwB,QAAQ,KAAK,QAAQ,SAAS,kBAAkB,KAAK,MAAM,mCAAmC,CAAC;AAC3I;AAAA,IACF;AACA,UAAM,WAAW,SAAS,IAAI,UAAU;AACxC,QAAI,CAAC,UAAU;AACb,aAAO,KAAK,EAAE,MAAM,uBAAuB,QAAQ,KAAK,QAAQ,SAAS,kBAAkB,KAAK,MAAM,mCAAmC,UAAU,IAAI,CAAC;AACxJ;AAAA,IACF;AACA,QAAI,SAAS,aAAa,iBAAiB;AACzC,aAAO,KAAK,EAAE,MAAM,wBAAwB,QAAQ,KAAK,QAAQ,SAAS,SAAS,UAAU,yBAAyB,KAAK,MAAM,2BAA2B,CAAC;AAC7J;AAAA,IACF;AAEA,kBAAc,IAAI,UAAU;AAE5B,UAAM,iBAAkB,SAAS,QAAQ,cAAqC;AAC9E,QAAI,CAAC,gBAAgB;AACnB,aAAO,KAAK,EAAE,MAAM,wBAAwB,QAAQ,YAAY,SAAS,kBAAkB,UAAU,mCAAmC,CAAC;AAAA,IAC3I,WAAW,mBAAmB,KAAK,QAAQ;AACzC,aAAO,KAAK,EAAE,MAAM,sBAAsB,QAAQ,YAAY,SAAS,kBAAkB,UAAU,gCAAgC,cAAc,0BAA0B,KAAK,MAAM,IAAI,CAAC;AAAA,IAC7L;AAEA,UAAM,gBAAgB,eAAe,IAAI,KAAK,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,eAAe,WAAW,YAAY,MAAM;AACjH,QAAI,aAAa,SAAS,GAAG;AAC3B,aAAO,KAAK,EAAE,MAAM,yBAAyB,QAAQ,KAAK,QAAQ,SAAS,kBAAkB,KAAK,MAAM,2DAA2D,aAAa,MAAM,IAAI,CAAC;AAAA,IAC7L;AACA,UAAM,aAAa,oBAAI,IAAY;AACnC,eAAW,UAAU,cAAc;AACjC,UAAI,WAAW,IAAI,OAAO,YAAY,GAAG;AACvC,eAAO,KAAK,EAAE,MAAM,wBAAwB,QAAQ,KAAK,QAAQ,SAAS,kBAAkB,KAAK,MAAM,+BAA+B,OAAO,YAAY,IAAI,CAAC;AAAA,MAChK;AACA,iBAAW,IAAI,OAAO,YAAY;AAAA,IACpC;AAEA,SAAK,oBAAoB,IAAI,UAAU,KAAK,KAAK,GAAG;AAClD,aAAO,KAAK,EAAE,MAAM,yBAAyB,QAAQ,YAAY,SAAS,kBAAkB,UAAU,8CAA8C,CAAC;AAAA,IACvJ;AAGA,UAAM,gBAAgB,oBAAI,IAAY;AACtC,UAAM,UAAU,oBAAI,IAAY;AAChC,QAAI,kBAAkB;AACtB,QAAI,wBAAwB;AAC5B,QAAI,gBAAgB;AAEpB,UAAM,QAAQ,CAAC,WAAyB;AACtC,UAAI,WAAW,WAAY;AAC3B,UAAI,WAAW,KAAK,QAAQ;AAC1B,YAAI,CAAC,eAAe;AAClB,iBAAO,KAAK,EAAE,MAAM,mBAAmB,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,kDAAkD,UAAU,IAAI,CAAC;AACtK,0BAAgB;AAAA,QAClB;AACA;AAAA,MACF;AACA,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,UAAI,CAAC,MAAM;AACT,YAAI,CAAC,uBAAuB;AAC1B,iBAAO,KAAK,EAAE,MAAM,0BAA0B,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,2BAA2B,MAAM,sBAAsB,UAAU,IAAI,CAAC;AAClL,kCAAwB;AAAA,QAC1B;AACA;AAAA,MACF;AACA,UAAI,KAAK,aAAa,OAAO;AAC3B,YAAI,CAAC,uBAAuB;AAC1B,iBAAO,KAAK,EAAE,MAAM,0BAA0B,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,sCAAsC,UAAU,IAAI,CAAC;AACjK,kCAAwB;AAAA,QAC1B;AACA;AAAA,MACF;AACA,UAAI,KAAK,aAAa,iBAAiB;AACrC,YAAI,CAAC,iBAAiB;AACpB,iBAAO,KAAK,EAAE,MAAM,6BAA6B,QAAQ,KAAK,QAAQ,SAAS,yBAAyB,MAAM,kBAAkB,KAAK,MAAM,qBAAqB,CAAC;AACjK,4BAAkB;AAAA,QACpB;AACA;AAAA,MACF;AACA,UAAI,KAAK,aAAa,iBAAiB;AAErC,YAAI,CAAC,uBAAuB;AAC1B,iBAAO,KAAK,EAAE,MAAM,0BAA0B,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,mBAAmB,MAAM,8BAA8B,UAAU,IAAI,CAAC;AAClL,kCAAwB;AAAA,QAC1B;AACA;AAAA,MACF;AACA,UAAI,QAAQ,IAAI,MAAM,GAAG;AACvB,YAAI,CAAC,eAAe;AAClB,iBAAO,KAAK,EAAE,MAAM,mBAAmB,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,+BAA+B,MAAM,IAAI,CAAC;AAC/I,0BAAgB;AAAA,QAClB;AACA;AAAA,MACF;AACA,UAAI,cAAc,IAAI,MAAM,EAAG;AAE/B,YAAM,WAAW,eAAe,IAAI,MAAM,KAAK,CAAC;AAChD,UAAI,SAAS,WAAW,GAAG;AACzB,YAAI,CAAC,uBAAuB;AAC1B,iBAAO,KAAK,EAAE,MAAM,0BAA0B,QAAQ,KAAK,QAAQ,SAAS,qBAAqB,KAAK,MAAM,wBAAwB,MAAM,4BAA4B,UAAU,IAAI,CAAC;AACrL,kCAAwB;AAAA,QAC1B;AACA;AAAA,MACF;AACA,cAAQ,IAAI,MAAM;AAClB,iBAAW,cAAc,SAAU,OAAM,WAAW,QAAQ;AAC5D,cAAQ,OAAO,MAAM;AACrB,oBAAc,IAAI,MAAM;AAAA,IAC1B;AAEA,eAAW,UAAU,aAAc,OAAM,OAAO,QAAQ;AAAA,EAC1D;AAGA,aAAW,QAAQ,WAAW;AAC5B,QAAI,CAAC,cAAc,IAAI,KAAK,MAAM,GAAG;AACnC,aAAO,KAAK,EAAE,MAAM,iBAAiB,QAAQ,KAAK,QAAQ,SAAS,kBAAkB,KAAK,MAAM,yCAAyC,CAAC;AAAA,IAC5I;AAAA,EACF;AAEA,SAAO;AACT;AAKO,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,UAAU,WAAW,UAAU,MAAM,CAAC;AAAA,EAC5D,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AACxC,CAAC;AAIM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO;AAAA,IACd,QAAQ,EAAE,MAAM,wBAAwB;AAAA,EAC1C,CAAC,EAAE,SAAS;AACd,CAAC;AAKM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,OAAO,EAAE,MAAM,kBAAkB,EAAE,IAAI,GAAG,iDAAiD;AAAA,EAC3F,aAAa,EAAE,MAAM,wBAAwB,EAAE,IAAI,GAAG,4CAA4C;AAAA,EAClG,UAAU,EAAE,MAAM,+BAA+B,EAAE,SAAS;AAAA;AAAA,EAC5D,eAAe,oBAAoB,SAAS;AAAA;AAAA,EAC5C,IAAI,yBAAyB,SAAS;AAAA;AAAA,EACtC,eAAe,EAAE,KAAK,CAAC,UAAU,SAAS,CAAC,EAAE,SAAS;AAAA;AAAA,EACtD,cAAc,2BAA2B,SAAS;AAAA;AAAA,EAClD,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AAAA,EACnC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AAAA,EACnC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AACpC,CAAC,EAAE,YAAY,CAAC,YAAY,QAAQ;AAClC,aAAW,SAAS,yBAAyB,UAAoC,GAAG;AAClF,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,OAAO;AAAA,MACd,SAAS,IAAI,MAAM,IAAI,KAAK,MAAM,OAAO;AAAA,IAC3C,CAAC;AAAA,EACH;AAIA,aAAW,MAAM,QAAQ,CAAC,MAAM,UAAU;AACxC,QAAI,KAAK,aAAa,qBAAsB;AAC5C,UAAM,cAAc,WAAW,YAAY;AAAA,MACzC,CAAC,eAAe,WAAW,eAAe,KAAK;AAAA,IACjD;AACA,QAAI,YAAa;AACjB,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,SAAS,KAAK;AAAA,MACrB,SAAS,4BAA4B,KAAK,MAAM;AAAA,IAClD,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAKM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,EAC9C,QAAQ,EAAE,KAAK,CAAC,UAAU,MAAM,CAAC;AAAA,EACjC,MAAM,EAAE,QAAQ;AAClB,CAAC;AAIM,MAAM,oCAAoC;AAE1C,MAAM,wCAAwC;AAI9C,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,+BAA+B;AAAA,EAC3D,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,KAAK,CAAC;AAAA,EAC7C,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AACvC,CAAC;AAOD,MAAM,wBAAwB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC;AACvE,MAAM,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAE9F,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC7B,UAAU,EAAE,OAAO,EAAE,IAAI,GAAK;AAAA,EAC9B,UAAU;AAAA,EACV,MAAM;AACR,CAAC;AAEM,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC7B,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG;AAAA,EACxB,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EAC5G,WAAW,EAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,OAAO,EAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EAC1C,QAAQ,EAAE,MAAM,iBAAiB,EAAE,SAAS;AAC9C,CAAC;AAMM,MAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS;AAAA,EAC3C,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACvC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA;AAAA;AAAA,EAGnC,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnD,QAAQ,EAAE,OAAO;AAAA,IACf,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,oBAAoB,EAAE,SAAS;AAAA,IAC7D,aAAa,wBAAwB,SAAS;AAAA;AAAA;AAAA,IAG9C,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,kBAAkB,EAAE,SAAS;AAAA,EAC9D,CAAC,EAAE,YAAY,EAAE,SAAS;AAC5B,CAAC,EAAE,YAAY,CAAC,UAAU,QAAQ;AAChC,QAAM,UAAU,SAAS,QAAQ;AACjC,MAAI,WAAW,KAAK,UAAU,OAAO,EAAE,SAAS,mCAAmC;AACjF,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,SAAS;AAAA,MAC1B,SAAS,6BAA6B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AACA,QAAM,cAAc,SAAS,QAAQ;AACrC,MAAI,eAAe,KAAK,UAAU,WAAW,EAAE,SAAS,uCAAuC;AAC7F,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,aAAa;AAAA,MAC9B,SAAS,+BAA+B,qCAAqC;AAAA,IAC/E,CAAC;AAAA,EACH;AACA,QAAM,WAAW,SAAS,QAAQ;AAClC,MAAI,YAAY,KAAK,UAAU,QAAQ,EAAE,SAAS,mCAAmC;AACnF,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,UAAU;AAAA,MAC3B,SAAS,6BAA6B,iCAAiC;AAAA,IACzE,CAAC;AAAA,EACH;AACA,MAAI,YAAY,OAAO,KAAK,QAAQ,EAAE,SAAS,mCAAmC;AAChF,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,UAAU,UAAU;AAAA,MAC3B,SAAS,iCAAiC,iCAAiC;AAAA,IAC7E,CAAC;AAAA,EACH;AACF,CAAC;AAGD,MAAM,aAAa,EAAE,WAAW,CAAC,UAAU;AACzC,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,GAAI,QAAO;AAClE,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,OAAO,KAAK,CAAC;AACnE,SAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO;AAC/C,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC;AAOf,MAAM,qBAAqB,EAAE,KAAK,CAAC,YAAY,WAAW,CAAC;AAC3D,MAAM,0BAA0B,EAAE,KAAK,CAAC,SAAS,aAAa,UAAU,CAAC;AAOhF,MAAM,yBAAyB,CAC7B,MACA,QACG;AACH,QAAM,WAAW,KAAK,cAAe,KAAK,WAAwC;AAClF,MAAI,KAAK,SAAS,eAAe,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS,GAAG;AAC/E,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,cAAc,UAAU;AAAA,MAC/B,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAGO,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,kBAAkB,0FAA0F;AAAA,EACzJ,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EAC9C,YAAY;AAAA,EACZ,UAAU,uBAAuB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACjC,MAAM,mBAAmB,QAAQ,UAAU;AAAA,EAC3C,WAAW,wBAAwB,QAAQ,WAAW;AAAA,EACtD,eAAe,WAAW,SAAS;AAAA,EACnC,aAAa,WAAW,SAAS;AAAA,EACjC,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AACrD,CAAC;AAYM,MAAM,gCAAgC,EAC1C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAChC,IAAI,GAAG,EACP,SAAS,EACT,SAAS;AAGL,MAAM,sCAAsC,EAAE,OAAO;AAAA,EAC1D,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,MAAM,kBAAkB,0FAA0F;AAAA,EACzJ,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EAC9C,YAAY;AAAA,EACZ,UAAU,uBAAuB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC5C,MAAM,mBAAmB,SAAS;AAAA,EAClC,WAAW,wBAAwB,SAAS;AAAA,EAC5C,iBAAiB;AACnB,CAAC;AAMM,MAAM,6CACX,oCAAoC,YAAY,sBAAsB;AAEjE,MAAM,iCAAiC,+BAA+B,QAAQ,EAAE,OAAO;AAAA,EAC5F,IAAI;AACN,CAAC;AASM,MAAM,sCAAsC,EAAE,OAAO;AAAA,EAC1D,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAChD,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAClD,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,YAAY,6BAA6B,SAAS;AAAA,EAClD,UAAU,uBAAuB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,MAAM,mBAAmB,SAAS;AAAA,EAClC,WAAW,wBAAwB,SAAS;AAAA,EAC5C,eAAe,WAAW,SAAS;AAAA,EACnC,aAAa,WAAW,SAAS;AAAA,EACjC,iBAAiB;AACnB,CAAC,EAAE,OAAO;AAKH,MAAM,6CACX,oCAAoC,YAAY,sBAAsB;AAEjE,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAmBM,MAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChD,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC,EAAE,YAAY;AAIR,MAAM,2CAA2C,EAAE,OAAO;AAAA,EAC/D,YAAY;AAAA,EACZ,UAAU,uBAAuB,SAAS,EAAE,SAAS;AAAA,EACrD,eAAe,WAAW,SAAS;AACrC,CAAC,EAAE,OAAO;AAgBH,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC;AAAA,EACxC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,EAAE,OAAO;AAQH,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACzC,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACvC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC1C,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AACpD,CAAC;AAEM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,cAAc;AAAA,EACd,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACrC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,QAAQ;AAAA,EACR,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACxC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,EACrC,gBAAgB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,UAAU,+BAA+B,SAAS,EAAE,SAAS;AAAA,EAC7D,WAAW,EAAE,OAAO,KAAK;AAAA,EACzB,aAAa,WAAW,SAAS;AAAA,EACjC,UAAU,WAAW,SAAS;AAAA,EAC9B,aAAa,WAAW,SAAS;AAAA,EACjC,cAAc,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC7C,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACnC,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC;AAIM,MAAM,+BAA+B,6BAA6B,QAAQ,EAAE,OAAO;AAAA,EACxF,IAAI;AACN,CAAC;AAIM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,cAAc,KAAK,SAAS;AAAA,EAC5B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,6BAA6B,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAQM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,oBAAoB;AAAA,EACpB,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACjC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACnC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAClC,QAAQ;AAAA,EACR,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,WAAW,WAAW,SAAS;AAAA,EAC/B,UAAU,WAAW,SAAS;AAAA,EAC9B,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7D,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC7C,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC;AAIM,MAAM,2BAA2B,yBAAyB,QAAQ,EAAE,OAAO;AAAA,EAChF,IAAI;AACN,CAAC;AAIM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,oBAAoB,KAAK,SAAS;AAAA,EAClC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQ,yBAAyB,SAAS;AAAA,EAC1C,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAQM,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,QAAQ;AAAA,EACR,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAClE,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,WAAW,WAAW,SAAS;AAAA,EAC/B,SAAS,WAAW,SAAS;AAAA,EAC7B,aAAa,WAAW,SAAS;AAAA,EACjC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,aAAa,WAAW,SAAS;AAAA,EACjC,UAAU,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC;AAIM,MAAM,uBAAuB,qBAAqB,QAAQ,EAAE,OAAO;AAAA,EACxE,IAAI;AACN,CAAC;AAaM,MAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,YAAY,EACT,OAAO,EACP,IAAI,GAAG,EACP,SAAS,EACT,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,UAAM,UAAU,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAC3D,WAAO,QAAQ,SAAS,IAAI,UAAU;AAAA,EACxC,CAAC;AAAA,EACH,iBAAiB,EACd,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EACzB,SAAS,EACT,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,QAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,UAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAC/E,WAAO,MAAM,SAAS,IAAI,QAAQ;AAAA,EACpC,CAAC;AAAA,EACH,QAAQ,EACL,OAAO,EACP,IAAI,GAAI,EACR,SAAS,EACT,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,UAAM,UAAU,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAC3D,WAAO,QAAQ,SAAS,IAAI,UAAU;AAAA,EACxC,CAAC;AACL,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,eAAe,QAAQ,MAAM,oBAAoB,MAAM;AAAA,EAC9E,SAAS;AAAA,EACT,MAAM,CAAC,YAAY;AACrB,CAAC;AAII,MAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,oBAAoB,KAAK,SAAS;AAAA,EAClC,QAAQ,qBAAqB,SAAS;AAAA,EACtC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAQM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,oBAAoB;AAAA,EACpB,gBAAgB,KAAK,SAAS,EAAE,SAAS;AAAA,EACzC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACnC,WAAW,EAAE,IAAI;AAAA,EACjB,YAAY,EAAE,OAAO,KAAK,EAAE,SAAS;AAAA,EACrC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC;AAIM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,oBAAoB,KAAK,SAAS;AAAA,EAClC,gBAAgB,KAAK,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAAA,EAC9B,gBAAgB,EAAE,KAAK,EAAE,SAAS;AAAA,EAClC,cAAc,EAAE,KAAK,EAAE,SAAS;AAClC,CAAC;AAQM,MAAM,iCAAiC,EAAE,YAAY;AAAA,EAC1D,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAChD,UAAU,+BAA+B,SAAS;AAAA,EAClD,UAAU,EAAE,KAAK,+BAA+B;AAAA,EAChD,gBAAgB,EAAE,KAAK,qCAAqC;AAAA,EAC5D,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAKM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvD,UAAU,+BAA+B,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlD,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM7B,aAAa,EAAE,QAAQ,EAAE,SAAS;AACpC,CAAC;AAQM,MAAM,8BAA8B,EAAE,KAAK;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,2CAA2C;AAAA,EAC7E,UAAU;AAAA,EACV,OAAO,EAAE,IAAI;AACf,CAAC;AAGM,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,2CAA2C;AAAA,EACjF,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,kDAAkD;AAAA,EAC/F,cAAc,EAAE,IAAI,EAAE,SAAS;AACjC,CAAC;AAGM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,kBAAkB,EAAE,MAAM,4BAA4B,EAAE,IAAI,IAAI,sCAAsC,EAAE,SAAS;AAAA,EACjH,gBAAgB,EAAE,MAAM,2BAA2B,EAAE,IAAI,IAAI,qCAAqC,EAAE,SAAS;AAAA,EAC7G,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,MAAS,+BAA+B,EAAE,SAAS;AAAA,EAC3F,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,KAAM,qDAAqD,EAAE,SAAS;AAC5H,CAAC;AAGM,MAAM,qBAAqB,EAAE,OAAO,EACxC,IAAI,GAAG,2BAA2B,EAClC,IAAI,KAAK,8CAA8C,EACvD;AAAA,EACC;AAAA,EACA;AACF;AAEK,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,QAAQ,yBAAyB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACjC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC;AAAA,EACrD,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AACrD,CAAC;AAIM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,QAAQ,yBAAyB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAC,EAAE,SAAS;AAClE,CAAC;AAGM,MAAM,2BAA2B,yBAAyB,QAAQ,EAAE,OAAO;AAAA,EAChF,IAAI;AACN,CAAC;AAIM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,sBAAsB,KAAK,SAAS;AAAA,EACpC,cAAc,mBAAmB,SAAS;AAAA,EAC1C,QAAQ,yBAAyB,SAAS,EAAE,SAAS;AAAA,EACrD,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,SAAS;AACvD,CAAC,EAAE,OAAO;AAGH,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,sBAAsB,KAAK,SAAS;AAAA,EACpC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;",
6
+ "names": ["isValidDurationString", "isValidIsoDateString", "isFutureIsoDateString", "invokeAgentConfigSchema", "taskPrioritySchema", "taskDeadlineSchema", "taskReminderSchema", "config"]
7
7
  }
@@ -9,6 +9,12 @@ import * as activityExecutor from "./lib/activity-executor.js";
9
9
  import * as eventLogger from "./lib/event-logger.js";
10
10
  import * as signalHandler from "./lib/signal-handler.js";
11
11
  import * as timerHandler from "./lib/timer-handler.js";
12
+ import * as conditionHandler from "./lib/condition-handler.js";
13
+ import * as taskHandler from "./lib/task-handler.js";
14
+ import * as workInboxService from "./lib/work-inbox/service.js";
15
+ import { createWorkflowDefinitionAuthoring } from "./lib/owned-definition.js";
16
+ import { registerWorkInboxSources } from "./lib/work-inbox/provider.js";
17
+ import { userTaskWorkInboxSource, WORKFLOWS_MODULE_ID } from "./lib/work-inbox/user-task-source.js";
12
18
  registerOptimisticLockReaders({
13
19
  "workflows.definition": createGenericOptimisticLockReader({
14
20
  entity: WorkflowDefinition,
@@ -18,6 +24,9 @@ registerOptimisticLockReaders({
18
24
  softDeleteField: "deletedAt"
19
25
  })
20
26
  });
27
+ registerWorkInboxSources([
28
+ { moduleId: WORKFLOWS_MODULE_ID, sources: [userTaskWorkInboxSource] }
29
+ ]);
21
30
  function register(container) {
22
31
  container.register({
23
32
  workflowExecutor: asFunction(() => workflowExecutor).scoped(),
@@ -26,7 +35,13 @@ function register(container) {
26
35
  activityExecutor: asFunction(() => activityExecutor).scoped(),
27
36
  eventLogger: asFunction(() => eventLogger).scoped(),
28
37
  signalHandler: asFunction(() => signalHandler).scoped(),
29
- timerHandler: asFunction(() => timerHandler).scoped()
38
+ timerHandler: asFunction(() => timerHandler).scoped(),
39
+ conditionHandler: asFunction(() => conditionHandler).scoped(),
40
+ taskHandler: asFunction(() => taskHandler).scoped(),
41
+ workInboxService: asFunction(() => workInboxService).scoped(),
42
+ // Lets another module own a real workflow definition instead of building a
43
+ // second executor for its simple case — see lib/owned-definition.ts.
44
+ workflowDefinitionAuthoring: asFunction(() => createWorkflowDefinitionAuthoring(container)).scoped()
30
45
  });
31
46
  }
32
47
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/workflows/di.ts"],
4
- "sourcesContent": ["/**\n * Workflows Module - Dependency Injection\n *\n * Register workflow engine services in the DI container.\n */\n\nimport type { AwilixContainer } from 'awilix'\nimport { asFunction } from 'awilix'\nimport { createGenericOptimisticLockReader } from '@open-mercato/shared/lib/crud/optimistic-lock'\nimport { registerOptimisticLockReaders } from '@open-mercato/shared/lib/crud/optimistic-lock-store'\nimport { WorkflowDefinition } from './data/entities'\nimport * as workflowExecutor from './lib/workflow-executor'\nimport * as stepHandler from './lib/step-handler'\nimport * as transitionHandler from './lib/transition-handler'\nimport * as activityExecutor from './lib/activity-executor'\nimport * as eventLogger from './lib/event-logger'\nimport * as signalHandler from './lib/signal-handler'\nimport * as timerHandler from './lib/timer-handler'\n\n// Register the `workflows.definition` optimistic-lock reader at module-DI load\n// time (top-level, like sales/customers) so it is present in the global reader\n// store before any request-scoped `crudMutationGuardService` snapshots\n// `getAllOptimisticLockReaders()`. Registering it only as a side-effect of\n// importing the definition route module left it absent from that snapshot, so\n// the guard short-circuited and the visual editor's stale saves overwrote with\n// no 409 and no conflict bar.\nregisterOptimisticLockReaders({\n 'workflows.definition': createGenericOptimisticLockReader({\n entity: WorkflowDefinition,\n idField: 'id',\n tenantField: 'tenantId',\n orgField: 'organizationId',\n softDeleteField: 'deletedAt',\n }),\n})\n\nexport function register(container: AwilixContainer): void {\n container.register({\n workflowExecutor: asFunction(() => workflowExecutor).scoped(),\n stepHandler: asFunction(() => stepHandler).scoped(),\n transitionHandler: asFunction(() => transitionHandler).scoped(),\n activityExecutor: asFunction(() => activityExecutor).scoped(),\n eventLogger: asFunction(() => eventLogger).scoped(),\n signalHandler: asFunction(() => signalHandler).scoped(),\n timerHandler: asFunction(() => timerHandler).scoped(),\n })\n}\n"],
5
- "mappings": "AAOA,SAAS,kBAAkB;AAC3B,SAAS,yCAAyC;AAClD,SAAS,qCAAqC;AAC9C,SAAS,0BAA0B;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,uBAAuB;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,mBAAmB;AAC/B,YAAY,kBAAkB;AAS9B,8BAA8B;AAAA,EAC5B,wBAAwB,kCAAkC;AAAA,IACxD,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB,CAAC;AACH,CAAC;AAEM,SAAS,SAAS,WAAkC;AACzD,YAAU,SAAS;AAAA,IACjB,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA,IAC5D,aAAa,WAAW,MAAM,WAAW,EAAE,OAAO;AAAA,IAClD,mBAAmB,WAAW,MAAM,iBAAiB,EAAE,OAAO;AAAA,IAC9D,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA,IAC5D,aAAa,WAAW,MAAM,WAAW,EAAE,OAAO;AAAA,IAClD,eAAe,WAAW,MAAM,aAAa,EAAE,OAAO;AAAA,IACtD,cAAc,WAAW,MAAM,YAAY,EAAE,OAAO;AAAA,EACtD,CAAC;AACH;",
4
+ "sourcesContent": ["/**\n * Workflows Module - Dependency Injection\n *\n * Register workflow engine services in the DI container.\n */\n\nimport type { AwilixContainer } from 'awilix'\nimport { asFunction } from 'awilix'\nimport { createGenericOptimisticLockReader } from '@open-mercato/shared/lib/crud/optimistic-lock'\nimport { registerOptimisticLockReaders } from '@open-mercato/shared/lib/crud/optimistic-lock-store'\nimport { WorkflowDefinition } from './data/entities'\nimport * as workflowExecutor from './lib/workflow-executor'\nimport * as stepHandler from './lib/step-handler'\nimport * as transitionHandler from './lib/transition-handler'\nimport * as activityExecutor from './lib/activity-executor'\nimport * as eventLogger from './lib/event-logger'\nimport * as signalHandler from './lib/signal-handler'\nimport * as timerHandler from './lib/timer-handler'\nimport * as conditionHandler from './lib/condition-handler'\nimport * as taskHandler from './lib/task-handler'\nimport * as workInboxService from './lib/work-inbox/service'\nimport { createWorkflowDefinitionAuthoring } from './lib/owned-definition'\nimport { registerWorkInboxSources } from './lib/work-inbox/provider'\nimport { userTaskWorkInboxSource, WORKFLOWS_MODULE_ID } from './lib/work-inbox/user-task-source'\n\n// Register the `workflows.definition` optimistic-lock reader at module-DI load\n// time (top-level, like sales/customers) so it is present in the global reader\n// store before any request-scoped `crudMutationGuardService` snapshots\n// `getAllOptimisticLockReaders()`. Registering it only as a side-effect of\n// importing the definition route module left it absent from that snapshot, so\n// the guard short-circuited and the visual editor's stale saves overwrote with\n// no 409 and no conflict bar.\nregisterOptimisticLockReaders({\n 'workflows.definition': createGenericOptimisticLockReader({\n entity: WorkflowDefinition,\n idField: 'id',\n tenantField: 'tenantId',\n orgField: 'organizationId',\n softDeleteField: 'deletedAt',\n }),\n})\n\n// Registered at module-DI load time (top-level, like the optimistic-lock reader\n// above) so the `user_task` source is present before the first work-inbox\n// request resolves `workInboxService`. Registration merges by module id, so\n// `agent_orchestrator` registering `agent_disposition` from its own `di.ts` adds\n// to this set regardless of which module loads first \u2014 and when enterprise is\n// absent the inbox simply lists workflow tasks (spec \u00A72.3).\nregisterWorkInboxSources([\n { moduleId: WORKFLOWS_MODULE_ID, sources: [userTaskWorkInboxSource] },\n])\n\nexport function register(container: AwilixContainer): void {\n container.register({\n workflowExecutor: asFunction(() => workflowExecutor).scoped(),\n stepHandler: asFunction(() => stepHandler).scoped(),\n transitionHandler: asFunction(() => transitionHandler).scoped(),\n activityExecutor: asFunction(() => activityExecutor).scoped(),\n eventLogger: asFunction(() => eventLogger).scoped(),\n signalHandler: asFunction(() => signalHandler).scoped(),\n timerHandler: asFunction(() => timerHandler).scoped(),\n conditionHandler: asFunction(() => conditionHandler).scoped(),\n taskHandler: asFunction(() => taskHandler).scoped(),\n workInboxService: asFunction(() => workInboxService).scoped(),\n // Lets another module own a real workflow definition instead of building a\n // second executor for its simple case \u2014 see lib/owned-definition.ts.\n workflowDefinitionAuthoring: asFunction(() => createWorkflowDefinitionAuthoring(container)).scoped(),\n })\n}\n"],
5
+ "mappings": "AAOA,SAAS,kBAAkB;AAC3B,SAAS,yCAAyC;AAClD,SAAS,qCAAqC;AAC9C,SAAS,0BAA0B;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,uBAAuB;AACnC,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,mBAAmB;AAC/B,YAAY,kBAAkB;AAC9B,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,sBAAsB;AAClC,SAAS,yCAAyC;AAClD,SAAS,gCAAgC;AACzC,SAAS,yBAAyB,2BAA2B;AAS7D,8BAA8B;AAAA,EAC5B,wBAAwB,kCAAkC;AAAA,IACxD,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB,CAAC;AACH,CAAC;AAQD,yBAAyB;AAAA,EACvB,EAAE,UAAU,qBAAqB,SAAS,CAAC,uBAAuB,EAAE;AACtE,CAAC;AAEM,SAAS,SAAS,WAAkC;AACzD,YAAU,SAAS;AAAA,IACjB,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA,IAC5D,aAAa,WAAW,MAAM,WAAW,EAAE,OAAO;AAAA,IAClD,mBAAmB,WAAW,MAAM,iBAAiB,EAAE,OAAO;AAAA,IAC9D,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA,IAC5D,aAAa,WAAW,MAAM,WAAW,EAAE,OAAO;AAAA,IAClD,eAAe,WAAW,MAAM,aAAa,EAAE,OAAO;AAAA,IACtD,cAAc,WAAW,MAAM,YAAY,EAAE,OAAO;AAAA,IACpD,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA,IAC5D,aAAa,WAAW,MAAM,WAAW,EAAE,OAAO;AAAA,IAClD,kBAAkB,WAAW,MAAM,gBAAgB,EAAE,OAAO;AAAA;AAAA;AAAA,IAG5D,6BAA6B,WAAW,MAAM,kCAAkC,SAAS,CAAC,EAAE,OAAO;AAAA,EACrG,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -6,22 +6,80 @@ const events = [
6
6
  { id: "workflows.definition.deleted", label: "Workflow Definition Deleted", entity: "definition", category: "crud" },
7
7
  { id: "workflows.definition.customized", label: "Workflow Definition Customized", entity: "definition", category: "lifecycle" },
8
8
  { id: "workflows.definition.reset_to_code", label: "Workflow Definition Reset to Code", entity: "definition", category: "lifecycle" },
9
+ { id: "workflows.definition.published", label: "Workflow Definition Published", entity: "definition", category: "lifecycle" },
9
10
  // Workflow Instances
10
11
  { id: "workflows.instance.created", label: "Workflow Instance Created", entity: "instance", category: "crud" },
11
12
  { id: "workflows.instance.updated", label: "Workflow Instance Updated", entity: "instance", category: "crud" },
12
13
  { id: "workflows.instance.deleted", label: "Workflow Instance Deleted", entity: "instance", category: "crud" },
13
- // Workflow Lifecycle Events
14
- { id: "workflows.instance.started", label: "Workflow Started", category: "lifecycle" },
15
- { id: "workflows.instance.completed", label: "Workflow Completed", category: "lifecycle" },
16
- { id: "workflows.instance.failed", label: "Workflow Failed", category: "lifecycle" },
17
- { id: "workflows.instance.cancelled", label: "Workflow Cancelled", category: "lifecycle" },
18
- { id: "workflows.instance.paused", label: "Workflow Paused", category: "lifecycle" },
19
- { id: "workflows.instance.resumed", label: "Workflow Resumed", category: "lifecycle" },
14
+ /**
15
+ * Workflow lifecycle. All six carry `clientBroadcast: true` so the run views
16
+ * update live through the DOM Event Bridge (spec §8.3).
17
+ *
18
+ * Safe to broadcast: the payload `emitInstanceLifecycleEvent` publishes is
19
+ * instance identity and state — id, tenant, organization, workflowId,
20
+ * version, status, current stepId — and carries no authored content, no task
21
+ * name and no run context. It is also already tenant + organization scoped by
22
+ * the bridge, which refuses to deliver a payload with no `tenantId` at all.
23
+ *
24
+ * `paused` and `resumed` are declared but have never had an emit site (see
25
+ * `InstanceLifecycleEventId` in `lib/workflow-executor.ts`); the flag is
26
+ * declared on them anyway so that whoever wires the emit does not have to
27
+ * revisit the contract.
28
+ */
29
+ { id: "workflows.instance.started", label: "Workflow Started", category: "lifecycle", clientBroadcast: true },
30
+ { id: "workflows.instance.completed", label: "Workflow Completed", category: "lifecycle", clientBroadcast: true },
31
+ { id: "workflows.instance.failed", label: "Workflow Failed", category: "lifecycle", clientBroadcast: true },
32
+ { id: "workflows.instance.cancelled", label: "Workflow Cancelled", category: "lifecycle", clientBroadcast: true },
33
+ { id: "workflows.instance.paused", label: "Workflow Paused", category: "lifecycle", clientBroadcast: true },
34
+ { id: "workflows.instance.resumed", label: "Workflow Resumed", category: "lifecycle", clientBroadcast: true },
35
+ /**
36
+ * A BUSINESS milestone the run announced — emitted when a step carrying a
37
+ * `milestone` annotation completes.
38
+ *
39
+ * It is deliberately not a step event. A milestone can be announced after a
40
+ * parallel join, after a retry, or after ten steps, and a consumer reading the
41
+ * business narrative must never have to know which. `milestoneKey` is the
42
+ * business vocabulary; `stepId` rides along for the trace, not for matching.
43
+ */
44
+ { id: "workflows.instance.milestone_reached", label: "Workflow Milestone Reached", category: "lifecycle", clientBroadcast: true },
45
+ // User Task Events
46
+ { id: "workflows.task.assigned", label: "Task Assigned", entity: "task", category: "lifecycle" },
47
+ { id: "workflows.task.reminder_due", label: "Task Reminder Due", entity: "task", category: "lifecycle" },
48
+ { id: "workflows.task.deadline_breached", label: "Task Deadline Breached", entity: "task", category: "lifecycle" },
49
+ /**
50
+ * A task addressed to a PORTAL principal, bridged to that principal's browser
51
+ * so it appears without a reload.
52
+ *
53
+ * A separate event rather than `portalBroadcast` on `workflows.task.assigned`,
54
+ * and the difference is a leak. The portal SSE bridge scopes a payload by
55
+ * tenant + organization and narrows to one user ONLY when the payload carries
56
+ * `recipientUserId`; `workflows.task.assigned` carries none, plus the task
57
+ * name and its entity bindings — broadcasting it would hand every portal user
58
+ * in the organization the name of every other customer's task. This one is
59
+ * addressed to exactly one principal and carries an ID and nothing else, so
60
+ * the receiver has to ask the (authorized) API what it is.
61
+ */
62
+ { id: "workflows.task.portal_assigned", label: "Portal Task Assigned", entity: "task", category: "lifecycle", portalBroadcast: true, excludeFromTriggers: true },
20
63
  // Activity Events
21
64
  { id: "workflows.activity.started", label: "Activity Started", category: "lifecycle" },
22
65
  { id: "workflows.activity.completed", label: "Activity Completed", category: "lifecycle" },
23
66
  { id: "workflows.activity.failed", label: "Activity Failed", category: "lifecycle" },
24
- { id: "workflows.task.assigned", label: "Task Assigned", entity: "task", category: "lifecycle" },
67
+ /**
68
+ * Live agent-action telemetry for an INVOKE_AGENT step (spec §Phase 2). Emitted
69
+ * per AI-SDK step by the optional `agent_orchestrator` peer's native runner so
70
+ * the run view can show what the agent is doing WHILE it runs, instead of only
71
+ * refetching on `instance.*` lifecycle changes. `clientBroadcast` so it reaches
72
+ * the browser via the DOM Event Bridge; `excludeFromTriggers` because it is UI
73
+ * telemetry, not a business signal a workflow should react to.
74
+ *
75
+ * Ephemeral and safe to broadcast: the payload is instance/step identity plus
76
+ * a coarse action descriptor (`kind`: step_finish | tool_call, an optional tool
77
+ * `name`, step index, tool-call count) — NO token text, NO model output, NO
78
+ * authored content — and is tenant + organization scoped like the lifecycle
79
+ * events. Low-frequency (a handful per agent run), so it fits the bridge's
80
+ * dedup/heartbeat envelope where a token stream never could.
81
+ */
82
+ { id: "workflows.agent.action", label: "Workflow Agent Action", category: "lifecycle", clientBroadcast: true, excludeFromTriggers: true },
25
83
  // Event Triggers
26
84
  { id: "workflows.trigger.created", label: "Trigger Created", entity: "trigger", category: "crud" },
27
85
  { id: "workflows.trigger.updated", label: "Trigger Updated", entity: "trigger", category: "crud" },