@open-mercato/core 0.7.1-develop.7193.1.910a5b0a1e → 0.7.1-develop.7194.1.ab4fc81f82

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 (1238) 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/generated/entities/action_log/index.js +2 -0
  6. package/dist/generated/entities/action_log/index.js.map +2 -2
  7. package/dist/generated/entities/user/index.js +2 -0
  8. package/dist/generated/entities/user/index.js.map +2 -2
  9. package/dist/generated/entities/user_task/index.js +14 -0
  10. package/dist/generated/entities/user_task/index.js.map +2 -2
  11. package/dist/generated/entities/workflow_definition/index.js +6 -0
  12. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  13. package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
  14. package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
  15. package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
  16. package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
  17. package/dist/generated/entities/workflow_instance/index.js +4 -0
  18. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  19. package/dist/generated/entities.ids.generated.js +4 -1
  20. package/dist/generated/entities.ids.generated.js.map +2 -2
  21. package/dist/generated/entity-fields-registry.js +39 -0
  22. package/dist/generated/entity-fields-registry.js.map +2 -2
  23. package/dist/helpers/integration/workflowsFixtures.js +477 -2
  24. package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
  25. package/dist/helpers/integration/workflowsUi.js +148 -0
  26. package/dist/helpers/integration/workflowsUi.js.map +7 -0
  27. package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
  28. package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
  29. package/dist/modules/audit_logs/data/entities.js +5 -0
  30. package/dist/modules/audit_logs/data/entities.js.map +2 -2
  31. package/dist/modules/audit_logs/data/validators.js +1 -0
  32. package/dist/modules/audit_logs/data/validators.js.map +2 -2
  33. package/dist/modules/audit_logs/lib/projections.js +2 -1
  34. package/dist/modules/audit_logs/lib/projections.js.map +2 -2
  35. package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
  36. package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
  37. package/dist/modules/audit_logs/services/actionLogService.js +3 -0
  38. package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
  39. package/dist/modules/auth/data/entities.js +6 -0
  40. package/dist/modules/auth/data/entities.js.map +2 -2
  41. package/dist/modules/auth/lib/executionPrincipal.js +140 -0
  42. package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
  43. package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
  44. package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
  45. package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
  46. package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
  47. package/dist/modules/business_rules/data/validators.js +6 -0
  48. package/dist/modules/business_rules/data/validators.js.map +2 -2
  49. package/dist/modules/business_rules/lib/rule-engine.js +5 -3
  50. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  51. package/dist/modules/catalog/commands/products.js +5 -0
  52. package/dist/modules/catalog/commands/products.js.map +2 -2
  53. package/dist/modules/catalog/workflows.js +19 -0
  54. package/dist/modules/catalog/workflows.js.map +7 -0
  55. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
  56. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  57. package/dist/modules/customer_accounts/cli.js +80 -0
  58. package/dist/modules/customer_accounts/cli.js.map +7 -0
  59. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
  60. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
  61. package/dist/modules/customer_accounts/setup.js +4 -2
  62. package/dist/modules/customer_accounts/setup.js.map +2 -2
  63. package/dist/modules/customers/commands/deals.js +4 -0
  64. package/dist/modules/customers/commands/deals.js.map +2 -2
  65. package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
  66. package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
  67. package/dist/modules/customers/components/detail/utils.js +2 -0
  68. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  69. package/dist/modules/customers/events.js +13 -2
  70. package/dist/modules/customers/events.js.map +2 -2
  71. package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
  72. package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
  73. package/dist/modules/customers/lib/todoCompatibility.js +1 -1
  74. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  75. package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
  76. package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
  77. package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
  78. package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
  79. package/dist/modules/customers/workflows.js +29 -0
  80. package/dist/modules/customers/workflows.js.map +7 -0
  81. package/dist/modules/entities/api/records.js +13 -33
  82. package/dist/modules/entities/api/records.js.map +3 -3
  83. package/dist/modules/entities/lib/entityClassification.js +60 -0
  84. package/dist/modules/entities/lib/entityClassification.js.map +7 -0
  85. package/dist/modules/sales/commands/documents.js +31 -0
  86. package/dist/modules/sales/commands/documents.js.map +2 -2
  87. package/dist/modules/sales/events.js +12 -1
  88. package/dist/modules/sales/events.js.map +2 -2
  89. package/dist/modules/sales/workflows.js +12 -1
  90. package/dist/modules/sales/workflows.js.map +2 -2
  91. package/dist/modules/seeds/cli.js +199 -0
  92. package/dist/modules/seeds/cli.js.map +7 -0
  93. package/dist/modules/seeds/examples/sample-seed.json +26 -0
  94. package/dist/modules/seeds/index.js +12 -0
  95. package/dist/modules/seeds/index.js.map +7 -0
  96. package/dist/modules/workflows/acl.js +96 -0
  97. package/dist/modules/workflows/acl.js.map +2 -2
  98. package/dist/modules/workflows/ai-agents.js +50 -0
  99. package/dist/modules/workflows/ai-agents.js.map +7 -0
  100. package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
  101. package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
  102. package/dist/modules/workflows/ai-tools/types.js +43 -0
  103. package/dist/modules/workflows/ai-tools/types.js.map +7 -0
  104. package/dist/modules/workflows/ai-tools.js +10 -0
  105. package/dist/modules/workflows/ai-tools.js.map +7 -0
  106. package/dist/modules/workflows/api/command-settings/route.js +137 -0
  107. package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
  108. package/dist/modules/workflows/api/commands/route.js +72 -0
  109. package/dist/modules/workflows/api/commands/route.js.map +7 -0
  110. package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
  111. package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
  112. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
  113. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
  114. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
  115. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
  116. package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
  117. package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
  118. package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
  119. package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
  120. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
  121. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
  122. package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
  123. package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
  124. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
  125. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
  126. package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
  127. package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
  128. package/dist/modules/workflows/api/definitions/route.js +61 -113
  129. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  130. package/dist/modules/workflows/api/definitions/serialize.js +9 -0
  131. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  132. package/dist/modules/workflows/api/endpoints/route.js +69 -0
  133. package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
  134. package/dist/modules/workflows/api/functions/route.js +73 -0
  135. package/dist/modules/workflows/api/functions/route.js.map +7 -0
  136. package/dist/modules/workflows/api/grantable-features/route.js +75 -0
  137. package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
  138. package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
  139. package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
  140. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
  141. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
  142. package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
  143. package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
  144. package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
  145. package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
  146. package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
  147. package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
  148. package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
  149. package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
  150. package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
  151. package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
  152. package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
  153. package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
  154. package/dist/modules/workflows/api/instances/route.js +94 -3
  155. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  156. package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
  157. package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
  158. package/dist/modules/workflows/api/openapi.js +415 -4
  159. package/dist/modules/workflows/api/openapi.js.map +2 -2
  160. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
  161. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
  162. package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
  163. package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
  164. package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
  165. package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
  166. package/dist/modules/workflows/api/rule-usage/route.js +80 -0
  167. package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
  168. package/dist/modules/workflows/api/task-settings/route.js +107 -0
  169. package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
  170. package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
  171. package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
  172. package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
  173. package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
  174. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
  175. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
  176. package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
  177. package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
  178. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
  179. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
  180. package/dist/modules/workflows/api/tasks/route.js +37 -6
  181. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  182. package/dist/modules/workflows/api/tasks/serialize.js +83 -0
  183. package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
  184. package/dist/modules/workflows/api/templates/route.js +69 -0
  185. package/dist/modules/workflows/api/templates/route.js.map +7 -0
  186. package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
  187. package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
  188. package/dist/modules/workflows/api/work-inbox/route.js +119 -0
  189. package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
  190. package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
  191. package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
  192. package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
  193. package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
  194. package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
  195. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
  196. package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
  197. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  198. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  199. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  200. package/dist/modules/workflows/backend/definitions/page.js +131 -51
  201. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  202. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
  203. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
  204. package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
  205. package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
  206. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
  207. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
  208. package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
  209. package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
  210. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
  211. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
  212. package/dist/modules/workflows/backend/instances/page.js +159 -22
  213. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  214. package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
  215. package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
  216. package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
  217. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
  218. package/dist/modules/workflows/backend/tasks/page.js +8 -250
  219. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  220. package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
  221. package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
  222. package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
  223. package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
  224. package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
  225. package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
  226. package/dist/modules/workflows/cli.js +1 -1
  227. package/dist/modules/workflows/cli.js.map +2 -2
  228. package/dist/modules/workflows/commands/tasks.js +81 -0
  229. package/dist/modules/workflows/commands/tasks.js.map +7 -0
  230. package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
  231. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  232. package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
  233. package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
  234. package/dist/modules/workflows/components/AgentSelector.js +115 -0
  235. package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
  236. package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
  237. package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
  238. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
  239. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
  240. package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
  241. package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
  242. package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
  243. package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
  244. package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
  245. package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
  246. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
  247. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
  248. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
  249. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
  250. package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
  251. package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
  252. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
  253. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
  254. package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
  255. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  256. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
  257. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
  258. package/dist/modules/workflows/components/InputDataPanel.js +128 -0
  259. package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
  260. package/dist/modules/workflows/components/InspectorPanel.js +161 -0
  261. package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
  262. package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
  263. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  264. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
  265. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
  266. package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
  267. package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
  268. package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
  269. package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
  270. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  271. package/dist/modules/workflows/components/TriggersDialog.js +53 -0
  272. package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
  273. package/dist/modules/workflows/components/TriggersEditor.js +331 -0
  274. package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
  275. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
  276. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
  277. package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
  278. package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
  279. package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
  280. package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
  281. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
  282. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
  283. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
  284. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
  285. package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
  286. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  287. package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
  288. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
  289. package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
  290. package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
  291. package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
  292. package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
  293. package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
  294. package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
  295. package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
  296. package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
  297. package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
  298. package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
  299. package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
  300. package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
  301. package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
  302. package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
  303. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
  304. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
  305. package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
  306. package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
  307. package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
  308. package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
  309. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
  310. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
  311. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
  312. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
  313. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
  314. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
  315. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
  316. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  317. package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
  318. package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
  319. package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
  320. package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
  321. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
  322. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
  323. package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
  324. package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
  325. package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
  326. package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
  327. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
  328. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
  329. package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
  330. package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
  331. package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
  332. package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
  333. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
  334. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
  335. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
  336. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  337. package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
  338. package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
  339. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
  340. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
  341. package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
  342. package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
  343. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
  344. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
  345. package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
  346. package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
  347. package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
  348. package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
  349. package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
  350. package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
  351. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
  352. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
  353. package/dist/modules/workflows/components/formConfig.js +39 -10
  354. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  355. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  356. package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
  357. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
  358. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  359. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
  360. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
  361. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
  362. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
  363. package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
  364. package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
  365. package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
  366. package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
  367. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
  368. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
  369. package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
  370. package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
  371. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
  372. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
  373. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
  374. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
  375. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
  376. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
  377. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
  378. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
  379. package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
  380. package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
  381. package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
  382. package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
  383. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
  384. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
  385. package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
  386. package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
  387. package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
  388. package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
  389. package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
  390. package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
  391. package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
  392. package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
  393. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
  394. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
  395. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
  396. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
  397. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
  398. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
  399. package/dist/modules/workflows/components/nodes/index.js +14 -0
  400. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  401. package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
  402. package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
  403. package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
  404. package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
  405. package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
  406. package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
  407. package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
  408. package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
  409. package/dist/modules/workflows/components/run/RunGantt.js +130 -0
  410. package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
  411. package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
  412. package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
  413. package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
  414. package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
  415. package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
  416. package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
  417. package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
  418. package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
  419. package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
  420. package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
  421. package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
  422. package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
  423. package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
  424. package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
  425. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
  426. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
  427. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
  428. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
  429. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
  430. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
  431. package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
  432. package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
  433. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
  434. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
  435. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
  436. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
  437. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
  438. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
  439. package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
  440. package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
  441. package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
  442. package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
  443. package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
  444. package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
  445. package/dist/modules/workflows/data/entities.js +144 -4
  446. package/dist/modules/workflows/data/entities.js.map +2 -2
  447. package/dist/modules/workflows/data/metrics-validators.js +35 -0
  448. package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
  449. package/dist/modules/workflows/data/task-primitives.js +14 -0
  450. package/dist/modules/workflows/data/task-primitives.js.map +7 -0
  451. package/dist/modules/workflows/data/validators.js +504 -61
  452. package/dist/modules/workflows/data/validators.js.map +3 -3
  453. package/dist/modules/workflows/di.js +16 -1
  454. package/dist/modules/workflows/di.js.map +2 -2
  455. package/dist/modules/workflows/events.js +66 -8
  456. package/dist/modules/workflows/events.js.map +2 -2
  457. package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  458. package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  459. package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
  460. package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
  461. package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
  462. package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
  463. package/dist/modules/workflows/extension-points.js +1 -1
  464. package/dist/modules/workflows/extension-points.js.map +2 -2
  465. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
  466. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
  467. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
  468. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
  469. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
  470. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
  471. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
  472. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
  473. package/dist/modules/workflows/lib/activity-executor.js +505 -137
  474. package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
  475. package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
  476. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  477. package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
  478. package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
  479. package/dist/modules/workflows/lib/activity-registry.js +27 -0
  480. package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
  481. package/dist/modules/workflows/lib/activity-types.js +291 -0
  482. package/dist/modules/workflows/lib/activity-types.js.map +7 -0
  483. package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
  484. package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
  485. package/dist/modules/workflows/lib/advanced-config.js +31 -0
  486. package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
  487. package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
  488. package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
  489. package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
  490. package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
  491. package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
  492. package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
  493. package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
  494. package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
  495. package/dist/modules/workflows/lib/agent-review.js +66 -0
  496. package/dist/modules/workflows/lib/agent-review.js.map +7 -0
  497. package/dist/modules/workflows/lib/ai-authoring.js +155 -0
  498. package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
  499. package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
  500. package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
  501. package/dist/modules/workflows/lib/annotation-events.js +10 -0
  502. package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
  503. package/dist/modules/workflows/lib/branching-routes.js +182 -0
  504. package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
  505. package/dist/modules/workflows/lib/breach-routing.js +50 -0
  506. package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
  507. package/dist/modules/workflows/lib/bulk-replay.js +101 -0
  508. package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
  509. package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
  510. package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
  511. package/dist/modules/workflows/lib/caller-graph.js +53 -0
  512. package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
  513. package/dist/modules/workflows/lib/code-view-apply.js +86 -0
  514. package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
  515. package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
  516. package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
  517. package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
  518. package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
  519. package/dist/modules/workflows/lib/component-guard.js +7 -0
  520. package/dist/modules/workflows/lib/component-guard.js.map +7 -0
  521. package/dist/modules/workflows/lib/condition-handler.js +443 -0
  522. package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
  523. package/dist/modules/workflows/lib/context-ledger.js +448 -0
  524. package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
  525. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
  526. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
  527. package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
  528. package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
  529. package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
  530. package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
  531. package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
  532. package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
  533. package/dist/modules/workflows/lib/definition-error-body.js +33 -0
  534. package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
  535. package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
  536. package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
  537. package/dist/modules/workflows/lib/definition-grant.js +90 -0
  538. package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
  539. package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
  540. package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
  541. package/dist/modules/workflows/lib/definition-payload.js +31 -0
  542. package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
  543. package/dist/modules/workflows/lib/draft-restore.js +49 -0
  544. package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
  545. package/dist/modules/workflows/lib/dry-run.js +106 -0
  546. package/dist/modules/workflows/lib/dry-run.js.map +7 -0
  547. package/dist/modules/workflows/lib/duration.js +66 -17
  548. package/dist/modules/workflows/lib/duration.js.map +2 -2
  549. package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
  550. package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
  551. package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
  552. package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
  553. package/dist/modules/workflows/lib/editor-annotations.js +195 -0
  554. package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
  555. package/dist/modules/workflows/lib/editor-commands.js +103 -0
  556. package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
  557. package/dist/modules/workflows/lib/editor-history.js +51 -0
  558. package/dist/modules/workflows/lib/editor-history.js.map +7 -0
  559. package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
  560. package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
  561. package/dist/modules/workflows/lib/endpoint-path.js +90 -0
  562. package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
  563. package/dist/modules/workflows/lib/engine-version.js +42 -0
  564. package/dist/modules/workflows/lib/engine-version.js.map +7 -0
  565. package/dist/modules/workflows/lib/error-handler.js +132 -0
  566. package/dist/modules/workflows/lib/error-handler.js.map +7 -0
  567. package/dist/modules/workflows/lib/error-routing.js +104 -0
  568. package/dist/modules/workflows/lib/error-routing.js.map +7 -0
  569. package/dist/modules/workflows/lib/event-logger.js +23 -0
  570. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  571. package/dist/modules/workflows/lib/expression-refs.js +168 -0
  572. package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
  573. package/dist/modules/workflows/lib/failure-grouping.js +62 -0
  574. package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
  575. package/dist/modules/workflows/lib/find-definition.js +1 -0
  576. package/dist/modules/workflows/lib/find-definition.js.map +2 -2
  577. package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
  578. package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
  579. package/dist/modules/workflows/lib/graph-utils.js +328 -77
  580. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  581. package/dist/modules/workflows/lib/icon-search.js +32 -0
  582. package/dist/modules/workflows/lib/icon-search.js.map +7 -0
  583. package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
  584. package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
  585. package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
  586. package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
  587. package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
  588. package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
  589. package/dist/modules/workflows/lib/ledger-drag.js +28 -0
  590. package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
  591. package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
  592. package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
  593. package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
  594. package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
  595. package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
  596. package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
  597. package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
  598. package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
  599. package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
  600. package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
  601. package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
  602. package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
  603. package/dist/modules/workflows/lib/node-config-summary.js +128 -0
  604. package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
  605. package/dist/modules/workflows/lib/node-geometry.js +53 -0
  606. package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
  607. package/dist/modules/workflows/lib/node-nudge.js +44 -0
  608. package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
  609. package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
  610. package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
  611. package/dist/modules/workflows/lib/node-placement.js +55 -0
  612. package/dist/modules/workflows/lib/node-placement.js.map +7 -0
  613. package/dist/modules/workflows/lib/node-type-icons.js +54 -13
  614. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  615. package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
  616. package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
  617. package/dist/modules/workflows/lib/outcome-routing.js +158 -0
  618. package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
  619. package/dist/modules/workflows/lib/owned-definition.js +107 -0
  620. package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
  621. package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
  622. package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
  623. package/dist/modules/workflows/lib/palette-drag.js +36 -0
  624. package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
  625. package/dist/modules/workflows/lib/palette-drop.js +45 -0
  626. package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
  627. package/dist/modules/workflows/lib/parallel-handler.js +57 -2
  628. package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
  629. package/dist/modules/workflows/lib/port-contract.js +54 -0
  630. package/dist/modules/workflows/lib/port-contract.js.map +7 -0
  631. package/dist/modules/workflows/lib/portal-task-access.js +89 -0
  632. package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
  633. package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
  634. package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
  635. package/dist/modules/workflows/lib/route-chip-events.js +23 -0
  636. package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
  637. package/dist/modules/workflows/lib/route-chips.js +91 -0
  638. package/dist/modules/workflows/lib/route-chips.js.map +7 -0
  639. package/dist/modules/workflows/lib/route-edge.js +17 -0
  640. package/dist/modules/workflows/lib/route-edge.js.map +7 -0
  641. package/dist/modules/workflows/lib/route-kinds.js +67 -0
  642. package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
  643. package/dist/modules/workflows/lib/route-priority.js +104 -0
  644. package/dist/modules/workflows/lib/route-priority.js.map +7 -0
  645. package/dist/modules/workflows/lib/run-duration.js +44 -0
  646. package/dist/modules/workflows/lib/run-duration.js.map +7 -0
  647. package/dist/modules/workflows/lib/run-event-tone.js +25 -0
  648. package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
  649. package/dist/modules/workflows/lib/run-execution.js +305 -0
  650. package/dist/modules/workflows/lib/run-execution.js.map +7 -0
  651. package/dist/modules/workflows/lib/run-gantt.js +180 -0
  652. package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
  653. package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
  654. package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
  655. package/dist/modules/workflows/lib/run-outcome.js +48 -0
  656. package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
  657. package/dist/modules/workflows/lib/sample-resolver.js +71 -0
  658. package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
  659. package/dist/modules/workflows/lib/seeds.js +1 -1
  660. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  661. package/dist/modules/workflows/lib/server-output-contract.js +65 -0
  662. package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
  663. package/dist/modules/workflows/lib/set-variable.js +47 -0
  664. package/dist/modules/workflows/lib/set-variable.js.map +7 -0
  665. package/dist/modules/workflows/lib/signal-handler.js +63 -4
  666. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  667. package/dist/modules/workflows/lib/start-fixtures.js +42 -0
  668. package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
  669. package/dist/modules/workflows/lib/status-colors.js +153 -22
  670. package/dist/modules/workflows/lib/status-colors.js.map +2 -2
  671. package/dist/modules/workflows/lib/step-handler.js +529 -53
  672. package/dist/modules/workflows/lib/step-handler.js.map +3 -3
  673. package/dist/modules/workflows/lib/step-presentation.js +147 -0
  674. package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
  675. package/dist/modules/workflows/lib/step-through.js +26 -0
  676. package/dist/modules/workflows/lib/step-through.js.map +7 -0
  677. package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
  678. package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
  679. package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
  680. package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
  681. package/dist/modules/workflows/lib/task-decision-context.js +38 -0
  682. package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
  683. package/dist/modules/workflows/lib/task-decisions.js +49 -0
  684. package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
  685. package/dist/modules/workflows/lib/task-entity-access.js +62 -0
  686. package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
  687. package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
  688. package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
  689. package/dist/modules/workflows/lib/task-entity-types.js +36 -0
  690. package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
  691. package/dist/modules/workflows/lib/task-form-registry.js +33 -0
  692. package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
  693. package/dist/modules/workflows/lib/task-form-schema.js +75 -0
  694. package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
  695. package/dist/modules/workflows/lib/task-handler.js +251 -32
  696. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  697. package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
  698. package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
  699. package/dist/modules/workflows/lib/task-list-query.js +19 -0
  700. package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
  701. package/dist/modules/workflows/lib/task-notifications.js +119 -0
  702. package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
  703. package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
  704. package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
  705. package/dist/modules/workflows/lib/task-presets.js +35 -0
  706. package/dist/modules/workflows/lib/task-presets.js.map +7 -0
  707. package/dist/modules/workflows/lib/task-quick-action.js +45 -0
  708. package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
  709. package/dist/modules/workflows/lib/task-resolution.js +120 -0
  710. package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
  711. package/dist/modules/workflows/lib/task-sla.js +357 -0
  712. package/dist/modules/workflows/lib/task-sla.js.map +7 -0
  713. package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
  714. package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
  715. package/dist/modules/workflows/lib/task-visibility.js +194 -0
  716. package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
  717. package/dist/modules/workflows/lib/timer-handler.js +3 -1
  718. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  719. package/dist/modules/workflows/lib/transition-handler.js +148 -20
  720. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  721. package/dist/modules/workflows/lib/trigger-node.js +121 -0
  722. package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
  723. package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
  724. package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
  725. package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
  726. package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
  727. package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
  728. package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
  729. package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
  730. package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
  731. package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
  732. package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
  733. package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
  734. package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
  735. package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
  736. package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
  737. package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
  738. package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
  739. package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
  740. package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
  741. package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
  742. package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
  743. package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
  744. package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
  745. package/dist/modules/workflows/lib/workflow-executor.js +658 -6
  746. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  747. package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
  748. package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
  749. package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
  750. package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
  751. package/dist/modules/workflows/lib/workflow-templates.js +69 -0
  752. package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
  753. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
  754. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
  755. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
  756. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
  757. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
  758. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
  759. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
  760. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
  761. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
  762. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
  763. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
  764. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
  765. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
  766. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
  767. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
  768. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
  769. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
  770. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
  771. package/dist/modules/workflows/notifications.js +38 -10
  772. package/dist/modules/workflows/notifications.js.map +2 -2
  773. package/dist/modules/workflows/setup.js +81 -1
  774. package/dist/modules/workflows/setup.js.map +2 -2
  775. package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
  776. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
  777. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
  778. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
  779. package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
  780. package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
  781. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
  782. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
  783. package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
  784. package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
  785. package/dist/modules/workflows/widgets/injection-table.js +26 -0
  786. package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
  787. package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
  788. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  789. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
  790. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
  791. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
  792. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
  793. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
  794. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
  795. package/generated/entities/action_log/index.ts +1 -0
  796. package/generated/entities/user/index.ts +1 -0
  797. package/generated/entities/user_task/index.ts +7 -0
  798. package/generated/entities/workflow_definition/index.ts +3 -0
  799. package/generated/entities/workflow_definition_draft/index.ts +11 -0
  800. package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
  801. package/generated/entities/workflow_instance/index.ts +2 -0
  802. package/generated/entities.ids.generated.ts +4 -1
  803. package/generated/entity-fields-registry.ts +39 -0
  804. package/jest.setup.ts +13 -0
  805. package/package.json +8 -7
  806. package/src/helpers/integration/workflowsFixtures.ts +765 -5
  807. package/src/helpers/integration/workflowsUi.ts +318 -0
  808. package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
  809. package/src/modules/audit_logs/data/entities.ts +12 -0
  810. package/src/modules/audit_logs/data/validators.ts +1 -0
  811. package/src/modules/audit_logs/lib/projections.ts +5 -1
  812. package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
  813. package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
  814. package/src/modules/audit_logs/services/actionLogService.ts +3 -0
  815. package/src/modules/auth/data/entities.ts +21 -0
  816. package/src/modules/auth/i18n/de.json +31 -0
  817. package/src/modules/auth/i18n/en.json +31 -0
  818. package/src/modules/auth/i18n/es.json +31 -0
  819. package/src/modules/auth/i18n/ko.json +31 -0
  820. package/src/modules/auth/i18n/pl.json +31 -0
  821. package/src/modules/auth/lib/executionPrincipal.ts +235 -0
  822. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  823. package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
  824. package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
  825. package/src/modules/business_rules/data/validators.ts +6 -0
  826. package/src/modules/business_rules/i18n/de.json +4 -0
  827. package/src/modules/business_rules/i18n/en.json +4 -0
  828. package/src/modules/business_rules/i18n/es.json +4 -0
  829. package/src/modules/business_rules/i18n/ko.json +4 -0
  830. package/src/modules/business_rules/i18n/pl.json +4 -0
  831. package/src/modules/business_rules/lib/rule-engine.ts +15 -1
  832. package/src/modules/catalog/commands/products.ts +12 -0
  833. package/src/modules/catalog/i18n/de.json +1 -0
  834. package/src/modules/catalog/i18n/en.json +1 -0
  835. package/src/modules/catalog/i18n/es.json +1 -0
  836. package/src/modules/catalog/i18n/ko.json +1 -0
  837. package/src/modules/catalog/i18n/pl.json +1 -0
  838. package/src/modules/catalog/workflows.ts +35 -0
  839. package/src/modules/customer_accounts/AGENTS.md +11 -0
  840. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
  841. package/src/modules/customer_accounts/cli.ts +96 -0
  842. package/src/modules/customer_accounts/i18n/de.json +5 -0
  843. package/src/modules/customer_accounts/i18n/en.json +5 -0
  844. package/src/modules/customer_accounts/i18n/es.json +5 -0
  845. package/src/modules/customer_accounts/i18n/ko.json +5 -0
  846. package/src/modules/customer_accounts/i18n/pl.json +5 -0
  847. package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
  848. package/src/modules/customer_accounts/setup.ts +15 -3
  849. package/src/modules/customers/commands/deals.ts +5 -0
  850. package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
  851. package/src/modules/customers/components/detail/utils.ts +2 -0
  852. package/src/modules/customers/events.ts +21 -3
  853. package/src/modules/customers/i18n/de.json +4 -0
  854. package/src/modules/customers/i18n/en.json +4 -0
  855. package/src/modules/customers/i18n/es.json +4 -0
  856. package/src/modules/customers/i18n/ko.json +4 -0
  857. package/src/modules/customers/i18n/pl.json +4 -0
  858. package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
  859. package/src/modules/customers/lib/todoCompatibility.ts +4 -1
  860. package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
  861. package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
  862. package/src/modules/customers/workflows.ts +57 -0
  863. package/src/modules/entities/api/records.ts +18 -62
  864. package/src/modules/entities/lib/entityClassification.ts +102 -0
  865. package/src/modules/sales/commands/documents.ts +46 -0
  866. package/src/modules/sales/events.ts +20 -2
  867. package/src/modules/sales/i18n/de.json +2 -1
  868. package/src/modules/sales/i18n/en.json +2 -1
  869. package/src/modules/sales/i18n/es.json +2 -1
  870. package/src/modules/sales/i18n/ko.json +2 -1
  871. package/src/modules/sales/i18n/pl.json +2 -1
  872. package/src/modules/sales/workflows.ts +12 -1
  873. package/src/modules/seeds/README.md +86 -0
  874. package/src/modules/seeds/cli.ts +220 -0
  875. package/src/modules/seeds/examples/sample-seed.json +26 -0
  876. package/src/modules/seeds/index.ts +11 -0
  877. package/src/modules/workflows/AGENTS.md +851 -10
  878. package/src/modules/workflows/acl.ts +96 -0
  879. package/src/modules/workflows/ai-agents.ts +80 -0
  880. package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
  881. package/src/modules/workflows/ai-tools/types.ts +117 -0
  882. package/src/modules/workflows/ai-tools.ts +20 -0
  883. package/src/modules/workflows/api/command-settings/route.ts +171 -0
  884. package/src/modules/workflows/api/commands/route.ts +109 -0
  885. package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
  886. package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
  887. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
  888. package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
  889. package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
  890. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
  891. package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
  892. package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
  893. package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
  894. package/src/modules/workflows/api/definitions/route.ts +88 -113
  895. package/src/modules/workflows/api/definitions/serialize.ts +9 -0
  896. package/src/modules/workflows/api/endpoints/route.ts +88 -0
  897. package/src/modules/workflows/api/functions/route.ts +91 -0
  898. package/src/modules/workflows/api/grantable-features/route.ts +102 -0
  899. package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
  900. package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
  901. package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
  902. package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
  903. package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
  904. package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
  905. package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
  906. package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
  907. package/src/modules/workflows/api/instances/route.ts +135 -3
  908. package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
  909. package/src/modules/workflows/api/openapi.ts +549 -2
  910. package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
  911. package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
  912. package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
  913. package/src/modules/workflows/api/rule-usage/route.ts +94 -0
  914. package/src/modules/workflows/api/task-settings/route.ts +138 -0
  915. package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
  916. package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
  917. package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
  918. package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
  919. package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
  920. package/src/modules/workflows/api/tasks/route.ts +60 -5
  921. package/src/modules/workflows/api/tasks/serialize.ts +119 -0
  922. package/src/modules/workflows/api/templates/route.ts +87 -0
  923. package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
  924. package/src/modules/workflows/api/work-inbox/route.ts +153 -0
  925. package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
  926. package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
  927. package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
  928. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  929. package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
  930. package/src/modules/workflows/backend/definitions/page.tsx +156 -76
  931. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
  932. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
  933. package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
  934. package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
  935. package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
  936. package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
  937. package/src/modules/workflows/backend/instances/page.tsx +218 -38
  938. package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
  939. package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
  940. package/src/modules/workflows/backend/tasks/page.tsx +20 -333
  941. package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
  942. package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
  943. package/src/modules/workflows/cli.ts +1 -1
  944. package/src/modules/workflows/commands/tasks.ts +146 -0
  945. package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
  946. package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
  947. package/src/modules/workflows/components/AgentSelector.tsx +200 -0
  948. package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
  949. package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
  950. package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
  951. package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
  952. package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
  953. package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
  954. package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
  955. package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
  956. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
  957. package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
  958. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
  959. package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
  960. package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
  961. package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
  962. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
  963. package/src/modules/workflows/components/StepsEditor.tsx +9 -2
  964. package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
  965. package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
  966. package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
  967. package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
  968. package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
  969. package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
  970. package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
  971. package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
  972. package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
  973. package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
  974. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
  975. package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
  976. package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
  977. package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
  978. package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
  979. package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
  980. package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
  981. package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
  982. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
  983. package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
  984. package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
  985. package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
  986. package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
  987. package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
  988. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
  989. package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
  990. package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
  991. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
  992. package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
  993. package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
  994. package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
  995. package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
  996. package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
  997. package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
  998. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
  999. package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
  1000. package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
  1001. package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
  1002. package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
  1003. package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
  1004. package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
  1005. package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
  1006. package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
  1007. package/src/modules/workflows/components/formConfig.tsx +84 -10
  1008. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
  1009. package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
  1010. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
  1011. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
  1012. package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
  1013. package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
  1014. package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
  1015. package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
  1016. package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
  1017. package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
  1018. package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
  1019. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
  1020. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
  1021. package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
  1022. package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
  1023. package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
  1024. package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
  1025. package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
  1026. package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
  1027. package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
  1028. package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
  1029. package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
  1030. package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
  1031. package/src/modules/workflows/components/nodes/index.ts +17 -0
  1032. package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
  1033. package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
  1034. package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
  1035. package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
  1036. package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
  1037. package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
  1038. package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
  1039. package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
  1040. package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
  1041. package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
  1042. package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
  1043. package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
  1044. package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
  1045. package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
  1046. package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
  1047. package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
  1048. package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
  1049. package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
  1050. package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
  1051. package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
  1052. package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
  1053. package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
  1054. package/src/modules/workflows/data/entities.ts +397 -4
  1055. package/src/modules/workflows/data/metrics-validators.ts +51 -0
  1056. package/src/modules/workflows/data/task-primitives.ts +36 -0
  1057. package/src/modules/workflows/data/types.ts +81 -2
  1058. package/src/modules/workflows/data/validators.ts +729 -60
  1059. package/src/modules/workflows/di.ts +22 -0
  1060. package/src/modules/workflows/events.ts +68 -8
  1061. package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  1062. package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  1063. package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
  1064. package/src/modules/workflows/examples/templates/order-approval.json +230 -0
  1065. package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
  1066. package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
  1067. package/src/modules/workflows/extension-points.ts +1 -1
  1068. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
  1069. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
  1070. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
  1071. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
  1072. package/src/modules/workflows/i18n/de.json +1083 -24
  1073. package/src/modules/workflows/i18n/en.json +1081 -22
  1074. package/src/modules/workflows/i18n/es.json +1083 -24
  1075. package/src/modules/workflows/i18n/ko.json +1072 -13
  1076. package/src/modules/workflows/i18n/pl.json +1082 -23
  1077. package/src/modules/workflows/lib/activity-executor.ts +855 -186
  1078. package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
  1079. package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
  1080. package/src/modules/workflows/lib/activity-registry.ts +89 -0
  1081. package/src/modules/workflows/lib/activity-types.ts +415 -0
  1082. package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
  1083. package/src/modules/workflows/lib/advanced-config.ts +41 -0
  1084. package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
  1085. package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
  1086. package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
  1087. package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
  1088. package/src/modules/workflows/lib/agent-review.ts +171 -0
  1089. package/src/modules/workflows/lib/ai-authoring.ts +402 -0
  1090. package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
  1091. package/src/modules/workflows/lib/annotation-events.ts +15 -0
  1092. package/src/modules/workflows/lib/branching-routes.ts +280 -0
  1093. package/src/modules/workflows/lib/breach-routing.ts +142 -0
  1094. package/src/modules/workflows/lib/bulk-replay.ts +185 -0
  1095. package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
  1096. package/src/modules/workflows/lib/caller-graph.ts +104 -0
  1097. package/src/modules/workflows/lib/code-view-apply.ts +178 -0
  1098. package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
  1099. package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
  1100. package/src/modules/workflows/lib/component-guard.ts +13 -0
  1101. package/src/modules/workflows/lib/condition-handler.ts +658 -0
  1102. package/src/modules/workflows/lib/context-ledger.ts +814 -0
  1103. package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
  1104. package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
  1105. package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
  1106. package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
  1107. package/src/modules/workflows/lib/definition-error-body.ts +43 -0
  1108. package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
  1109. package/src/modules/workflows/lib/definition-grant.ts +211 -0
  1110. package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
  1111. package/src/modules/workflows/lib/definition-payload.ts +81 -0
  1112. package/src/modules/workflows/lib/draft-restore.ts +72 -0
  1113. package/src/modules/workflows/lib/dry-run.ts +203 -0
  1114. package/src/modules/workflows/lib/duration.ts +138 -24
  1115. package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
  1116. package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
  1117. package/src/modules/workflows/lib/editor-annotations.ts +301 -0
  1118. package/src/modules/workflows/lib/editor-commands.ts +205 -0
  1119. package/src/modules/workflows/lib/editor-history.ts +151 -0
  1120. package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
  1121. package/src/modules/workflows/lib/endpoint-path.ts +134 -0
  1122. package/src/modules/workflows/lib/engine-version.ts +67 -0
  1123. package/src/modules/workflows/lib/error-handler.ts +192 -0
  1124. package/src/modules/workflows/lib/error-routing.ts +236 -0
  1125. package/src/modules/workflows/lib/event-logger.ts +27 -0
  1126. package/src/modules/workflows/lib/expression-refs.ts +291 -0
  1127. package/src/modules/workflows/lib/failure-grouping.ts +134 -0
  1128. package/src/modules/workflows/lib/find-definition.ts +4 -0
  1129. package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
  1130. package/src/modules/workflows/lib/graph-utils.ts +620 -110
  1131. package/src/modules/workflows/lib/icon-search.ts +65 -0
  1132. package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
  1133. package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
  1134. package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
  1135. package/src/modules/workflows/lib/ledger-drag.ts +61 -0
  1136. package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
  1137. package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
  1138. package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
  1139. package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
  1140. package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
  1141. package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
  1142. package/src/modules/workflows/lib/node-config-summary.ts +235 -0
  1143. package/src/modules/workflows/lib/node-geometry.ts +168 -0
  1144. package/src/modules/workflows/lib/node-nudge.ts +63 -0
  1145. package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
  1146. package/src/modules/workflows/lib/node-placement.ts +104 -0
  1147. package/src/modules/workflows/lib/node-type-icons.ts +71 -10
  1148. package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
  1149. package/src/modules/workflows/lib/outcome-routing.ts +346 -0
  1150. package/src/modules/workflows/lib/owned-definition.ts +188 -0
  1151. package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
  1152. package/src/modules/workflows/lib/palette-drag.ts +68 -0
  1153. package/src/modules/workflows/lib/palette-drop.ts +114 -0
  1154. package/src/modules/workflows/lib/parallel-handler.ts +79 -2
  1155. package/src/modules/workflows/lib/port-contract.ts +107 -0
  1156. package/src/modules/workflows/lib/portal-task-access.ts +220 -0
  1157. package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
  1158. package/src/modules/workflows/lib/route-chip-events.ts +45 -0
  1159. package/src/modules/workflows/lib/route-chips.ts +177 -0
  1160. package/src/modules/workflows/lib/route-edge.ts +57 -0
  1161. package/src/modules/workflows/lib/route-kinds.ts +166 -0
  1162. package/src/modules/workflows/lib/route-priority.ts +197 -0
  1163. package/src/modules/workflows/lib/run-duration.ts +70 -0
  1164. package/src/modules/workflows/lib/run-event-tone.ts +46 -0
  1165. package/src/modules/workflows/lib/run-execution.ts +598 -0
  1166. package/src/modules/workflows/lib/run-gantt.ts +311 -0
  1167. package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
  1168. package/src/modules/workflows/lib/run-outcome.ts +142 -0
  1169. package/src/modules/workflows/lib/sample-resolver.ts +113 -0
  1170. package/src/modules/workflows/lib/seeds.ts +3 -1
  1171. package/src/modules/workflows/lib/server-output-contract.ts +120 -0
  1172. package/src/modules/workflows/lib/set-variable.ts +94 -0
  1173. package/src/modules/workflows/lib/signal-handler.ts +134 -4
  1174. package/src/modules/workflows/lib/start-fixtures.ts +93 -0
  1175. package/src/modules/workflows/lib/status-colors.ts +220 -21
  1176. package/src/modules/workflows/lib/step-handler.ts +744 -68
  1177. package/src/modules/workflows/lib/step-presentation.ts +295 -0
  1178. package/src/modules/workflows/lib/step-through.ts +71 -0
  1179. package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
  1180. package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
  1181. package/src/modules/workflows/lib/task-decision-context.ts +76 -0
  1182. package/src/modules/workflows/lib/task-decisions.ts +117 -0
  1183. package/src/modules/workflows/lib/task-entity-access.ts +181 -0
  1184. package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
  1185. package/src/modules/workflows/lib/task-entity-types.ts +66 -0
  1186. package/src/modules/workflows/lib/task-form-registry.ts +123 -0
  1187. package/src/modules/workflows/lib/task-form-schema.ts +129 -0
  1188. package/src/modules/workflows/lib/task-handler.ts +492 -51
  1189. package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
  1190. package/src/modules/workflows/lib/task-list-query.ts +46 -0
  1191. package/src/modules/workflows/lib/task-notifications.ts +218 -0
  1192. package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
  1193. package/src/modules/workflows/lib/task-presets.ts +95 -0
  1194. package/src/modules/workflows/lib/task-quick-action.ts +111 -0
  1195. package/src/modules/workflows/lib/task-resolution.ts +270 -0
  1196. package/src/modules/workflows/lib/task-sla.ts +628 -0
  1197. package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
  1198. package/src/modules/workflows/lib/task-visibility.ts +627 -0
  1199. package/src/modules/workflows/lib/timer-handler.ts +8 -1
  1200. package/src/modules/workflows/lib/transition-handler.ts +228 -20
  1201. package/src/modules/workflows/lib/trigger-node.ts +272 -0
  1202. package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
  1203. package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
  1204. package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
  1205. package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
  1206. package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
  1207. package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
  1208. package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
  1209. package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
  1210. package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
  1211. package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
  1212. package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
  1213. package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
  1214. package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
  1215. package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
  1216. package/src/modules/workflows/lib/workflow-templates.ts +91 -0
  1217. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
  1218. package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
  1219. package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
  1220. package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
  1221. package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
  1222. package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
  1223. package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
  1224. package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
  1225. package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
  1226. package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
  1227. package/src/modules/workflows/notifications.ts +40 -10
  1228. package/src/modules/workflows/setup.ts +128 -0
  1229. package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
  1230. package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
  1231. package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
  1232. package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
  1233. package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
  1234. package/src/modules/workflows/widgets/injection-table.ts +52 -2
  1235. package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
  1236. package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
  1237. package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
  1238. 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/lib/event-logger.ts"],
4
- "sourcesContent": ["/**\n * Workflows Module - Event Logger Service\n *\n * Consolidates workflow event logging for audit trail and replay:\n * - Log workflow lifecycle events\n * - Log step execution events\n * - Log transition events\n * - Query event history\n *\n * Functional API (no classes) following Open Mercato conventions.\n */\n\nimport { EntityManager } from '@mikro-orm/core'\nimport { WorkflowEvent } from '../data/entities'\n\n// ============================================================================\n// Event Type Constants\n// ============================================================================\n\nexport const WorkflowEventTypes = {\n // Workflow lifecycle\n WORKFLOW_STARTED: 'WORKFLOW_STARTED',\n WORKFLOW_COMPLETED: 'WORKFLOW_COMPLETED',\n WORKFLOW_FAILED: 'WORKFLOW_FAILED',\n WORKFLOW_CANCELLED: 'WORKFLOW_CANCELLED',\n WORKFLOW_PAUSED: 'WORKFLOW_PAUSED',\n WORKFLOW_RESUMED: 'WORKFLOW_RESUMED',\n\n // Step lifecycle\n STEP_ENTERED: 'STEP_ENTERED',\n STEP_EXITED: 'STEP_EXITED',\n STEP_FAILED: 'STEP_FAILED',\n STEP_SKIPPED: 'STEP_SKIPPED',\n\n // Transition events\n TRANSITION_EXECUTED: 'TRANSITION_EXECUTED',\n TRANSITION_REJECTED: 'TRANSITION_REJECTED',\n TRANSITION_POST_CONDITION_FAILED: 'TRANSITION_POST_CONDITION_FAILED',\n TRANSITION_FAILED: 'TRANSITION_FAILED',\n\n // Activity events\n ACTIVITY_SCHEDULED: 'ACTIVITY_SCHEDULED',\n ACTIVITY_STARTED: 'ACTIVITY_STARTED',\n ACTIVITY_COMPLETED: 'ACTIVITY_COMPLETED',\n ACTIVITY_FAILED: 'ACTIVITY_FAILED',\n ACTIVITY_RETRY: 'ACTIVITY_RETRY',\n\n // User task events\n USER_TASK_CREATED: 'USER_TASK_CREATED',\n USER_TASK_ASSIGNED: 'USER_TASK_ASSIGNED',\n USER_TASK_STARTED: 'USER_TASK_STARTED',\n USER_TASK_COMPLETED: 'USER_TASK_COMPLETED',\n USER_TASK_CANCELLED: 'USER_TASK_CANCELLED',\n USER_TASK_ESCALATED: 'USER_TASK_ESCALATED',\n\n // Sub-workflow events (Phase 8)\n SUB_WORKFLOW_STARTED: 'SUB_WORKFLOW_STARTED',\n SUB_WORKFLOW_COMPLETED: 'SUB_WORKFLOW_COMPLETED',\n SUB_WORKFLOW_FAILED: 'SUB_WORKFLOW_FAILED',\n\n // Compensation events (Phase 8)\n COMPENSATION_STARTED: 'COMPENSATION_STARTED',\n COMPENSATION_COMPLETED: 'COMPENSATION_COMPLETED',\n COMPENSATION_PARTIAL: 'COMPENSATION_PARTIAL',\n COMPENSATION_FAILED: 'COMPENSATION_FAILED',\n COMPENSATION_ACTIVITY_STARTED: 'COMPENSATION_ACTIVITY_STARTED',\n COMPENSATION_ACTIVITY_COMPLETED: 'COMPENSATION_ACTIVITY_COMPLETED',\n COMPENSATION_ACTIVITY_FAILED: 'COMPENSATION_ACTIVITY_FAILED',\n\n // Signal events (Phase 9)\n SIGNAL_AWAITING: 'SIGNAL_AWAITING',\n SIGNAL_RECEIVED: 'SIGNAL_RECEIVED',\n SIGNAL_TIMEOUT: 'SIGNAL_TIMEOUT',\n\n // Timer events (Phase 9)\n TIMER_AWAITING: 'TIMER_AWAITING',\n TIMER_FIRED: 'TIMER_FIRED',\n TIMER_CANCELLED: 'TIMER_CANCELLED',\n} as const\n\nexport type WorkflowEventType = typeof WorkflowEventTypes[keyof typeof WorkflowEventTypes]\n\n// ============================================================================\n// Types and Interfaces\n// ============================================================================\n\nexport interface WorkflowEventInput {\n workflowInstanceId: string\n stepInstanceId?: string\n branchInstanceId?: string | null\n eventType: WorkflowEventType | string\n eventData: any\n userId?: string\n tenantId: string\n organizationId: string\n}\n\nexport interface QueryOptions {\n eventTypes?: Array<WorkflowEventType | string>\n stepInstanceId?: string\n fromDate?: Date\n toDate?: Date\n limit?: number\n offset?: number\n}\n\nexport interface EventStatistics {\n totalEvents: number\n eventsByType: Record<string, number>\n firstEvent?: Date\n lastEvent?: Date\n}\n\n// ============================================================================\n// Main Event Logging Functions\n// ============================================================================\n\n/**\n * Log a workflow event to the event sourcing table\n *\n * @param em - Entity manager\n * @param event - Event input data\n * @returns Created event entity\n */\nexport async function logWorkflowEvent(\n em: EntityManager,\n event: WorkflowEventInput\n): Promise<WorkflowEvent> {\n const workflowEvent = em.create(WorkflowEvent, {\n workflowInstanceId: event.workflowInstanceId,\n stepInstanceId: event.stepInstanceId || null,\n branchInstanceId: event.branchInstanceId ?? null,\n eventType: event.eventType,\n eventData: event.eventData || {},\n userId: event.userId || null,\n tenantId: event.tenantId,\n organizationId: event.organizationId,\n occurredAt: new Date(),\n })\n\n await em.persist(workflowEvent).flush()\n\n return workflowEvent\n}\n\n/**\n * Log multiple workflow events in batch\n *\n * @param em - Entity manager\n * @param events - Array of event input data\n * @returns Array of created event entities\n */\nexport async function logWorkflowEvents(\n em: EntityManager,\n events: WorkflowEventInput[]\n): Promise<WorkflowEvent[]> {\n const workflowEvents = events.map(event =>\n em.create(WorkflowEvent, {\n workflowInstanceId: event.workflowInstanceId,\n stepInstanceId: event.stepInstanceId || null,\n branchInstanceId: event.branchInstanceId ?? null,\n eventType: event.eventType,\n eventData: event.eventData || {},\n userId: event.userId || null,\n tenantId: event.tenantId,\n organizationId: event.organizationId,\n occurredAt: new Date(),\n })\n )\n\n await em.persist(workflowEvents).flush()\n\n return workflowEvents\n}\n\n// ============================================================================\n// Event Query Functions\n// ============================================================================\n\n/**\n * Get all events for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param options - Query options (filters, pagination)\n * @returns Array of workflow events\n */\nexport async function getWorkflowEvents(\n em: EntityManager,\n instanceId: string,\n options?: QueryOptions\n): Promise<WorkflowEvent[]> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n // Filter by event types\n if (options?.eventTypes && options.eventTypes.length > 0) {\n where.eventType = { $in: options.eventTypes }\n }\n\n // Filter by step instance\n if (options?.stepInstanceId) {\n where.stepInstanceId = options.stepInstanceId\n }\n\n // Filter by date range\n if (options?.fromDate || options?.toDate) {\n where.occurredAt = {}\n if (options.fromDate) {\n where.occurredAt.$gte = options.fromDate\n }\n if (options.toDate) {\n where.occurredAt.$lte = options.toDate\n }\n }\n\n const events = await em.find(\n WorkflowEvent,\n where,\n {\n orderBy: { occurredAt: 'ASC' },\n limit: options?.limit,\n offset: options?.offset,\n }\n )\n\n return events\n}\n\n/**\n * Get events for a specific step instance\n *\n * @param em - Entity manager\n * @param stepInstanceId - Step instance ID\n * @returns Array of workflow events\n */\nexport async function getStepEvents(\n em: EntityManager,\n stepInstanceId: string\n): Promise<WorkflowEvent[]> {\n const events = await em.find(\n WorkflowEvent,\n { stepInstanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n return events\n}\n\n/**\n * Get the latest event for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Optional event type filter\n * @returns Latest workflow event or null\n */\nexport async function getLatestEvent(\n em: EntityManager,\n instanceId: string,\n eventType?: WorkflowEventType | string\n): Promise<WorkflowEvent | null> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n if (eventType) {\n where.eventType = eventType\n }\n\n const event = await em.findOne(\n WorkflowEvent,\n where,\n { orderBy: { occurredAt: 'DESC' } }\n )\n\n return event\n}\n\n/**\n * Count events for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Optional event type filter\n * @returns Count of events\n */\nexport async function countEvents(\n em: EntityManager,\n instanceId: string,\n eventType?: WorkflowEventType | string\n): Promise<number> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n if (eventType) {\n where.eventType = eventType\n }\n\n return await em.count(WorkflowEvent, where)\n}\n\n/**\n * Get event statistics for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @returns Event statistics\n */\nexport async function getEventStatistics(\n em: EntityManager,\n instanceId: string\n): Promise<EventStatistics> {\n const events = await em.find(\n WorkflowEvent,\n { workflowInstanceId: instanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n const eventsByType: Record<string, number> = {}\n\n for (const event of events) {\n eventsByType[event.eventType] = (eventsByType[event.eventType] || 0) + 1\n }\n\n return {\n totalEvents: events.length,\n eventsByType,\n firstEvent: events.length > 0 ? events[0].occurredAt : undefined,\n lastEvent: events.length > 0 ? events[events.length - 1].occurredAt : undefined,\n }\n}\n\n/**\n * Check if a specific event type has occurred for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Event type to check\n * @returns True if event has occurred\n */\nexport async function hasEventOccurred(\n em: EntityManager,\n instanceId: string,\n eventType: WorkflowEventType | string\n): Promise<boolean> {\n const count = await em.count(WorkflowEvent, {\n workflowInstanceId: instanceId,\n eventType,\n })\n\n return count > 0\n}\n\n/**\n * Get event timeline for a workflow instance (simplified view)\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @returns Array of simplified event objects\n */\nexport async function getEventTimeline(\n em: EntityManager,\n instanceId: string\n): Promise<Array<{\n eventType: string\n occurredAt: Date\n stepInstanceId?: string\n userId?: string\n summary: string\n}>> {\n const events = await em.find(\n WorkflowEvent,\n { workflowInstanceId: instanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n return events.map(event => ({\n eventType: event.eventType,\n occurredAt: event.occurredAt,\n stepInstanceId: event.stepInstanceId || undefined,\n userId: event.userId || undefined,\n summary: generateEventSummary(event),\n }))\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Generate human-readable summary for an event\n */\nfunction generateEventSummary(event: WorkflowEvent): string {\n const data = event.eventData || {}\n\n switch (event.eventType) {\n case WorkflowEventTypes.WORKFLOW_STARTED:\n return `Workflow started${data.workflowId ? ` (${data.workflowId})` : ''}`\n\n case WorkflowEventTypes.WORKFLOW_COMPLETED:\n return `Workflow completed${data.result ? ` with result` : ''}`\n\n case WorkflowEventTypes.WORKFLOW_FAILED:\n return `Workflow failed${data.error ? `: ${data.error}` : ''}`\n\n case WorkflowEventTypes.STEP_ENTERED:\n return `Entered step: ${data.stepName || data.stepId || 'unknown'}`\n\n case WorkflowEventTypes.STEP_EXITED:\n return `Exited step: ${data.stepName || data.stepId || 'unknown'}${\n data.executionTimeMs ? ` (${data.executionTimeMs}ms)` : ''\n }`\n\n case WorkflowEventTypes.STEP_FAILED:\n return `Step failed: ${data.stepName || data.stepId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n case WorkflowEventTypes.TRANSITION_EXECUTED:\n return `Transition: ${data.fromStepId} \u2192 ${data.toStepId}`\n\n case WorkflowEventTypes.TRANSITION_REJECTED:\n return `Transition blocked: ${data.fromStepId} \u2192 ${data.toStepId}${\n data.reason ? ` (${data.reason})` : ''\n }`\n\n case WorkflowEventTypes.USER_TASK_CREATED:\n return `User task created: ${data.taskName || 'unnamed'}${\n data.assignedTo ? ` (assigned to ${data.assignedTo})` : ''\n }`\n\n case WorkflowEventTypes.USER_TASK_COMPLETED:\n return `User task completed: ${data.taskName || 'unnamed'}`\n\n case WorkflowEventTypes.ACTIVITY_COMPLETED:\n return `Activity completed: ${data.activityName || data.activityId || 'unknown'}`\n\n case WorkflowEventTypes.ACTIVITY_FAILED:\n return `Activity failed: ${data.activityName || data.activityId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n case WorkflowEventTypes.COMPENSATION_STARTED:\n return `Compensation started${data.reason ? `: ${data.reason}` : ''}`\n\n case WorkflowEventTypes.COMPENSATION_COMPLETED:\n return `Compensation completed: ${data.compensatedActivities || 0}/${data.totalActivities || 0} activities`\n\n case WorkflowEventTypes.COMPENSATION_PARTIAL:\n return `Partial compensation: ${data.compensatedActivities || 0}/${data.totalActivities || 0} succeeded`\n\n case WorkflowEventTypes.COMPENSATION_FAILED:\n return `Compensation failed: ${data.failedCompensations?.length || 0} activities failed`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_STARTED:\n return `Compensating: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_COMPLETED:\n return `Compensated: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_FAILED:\n return `Compensation failed: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n default:\n return event.eventType\n }\n}\n\n/**\n * Validate event type is a known type\n */\nexport function isValidEventType(eventType: string): eventType is WorkflowEventType {\n return Object.values(WorkflowEventTypes).includes(eventType as WorkflowEventType)\n}\n\n/**\n * Get all known event types\n */\nexport function getAllEventTypes(): WorkflowEventType[] {\n return Object.values(WorkflowEventTypes)\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Workflows Module - Event Logger Service\n *\n * Consolidates workflow event logging for audit trail and replay:\n * - Log workflow lifecycle events\n * - Log step execution events\n * - Log transition events\n * - Query event history\n *\n * Functional API (no classes) following Open Mercato conventions.\n */\n\nimport { EntityManager } from '@mikro-orm/core'\nimport { WorkflowEvent } from '../data/entities'\n\n// ============================================================================\n// Event Type Constants\n// ============================================================================\n\nexport const WorkflowEventTypes = {\n // Workflow lifecycle\n WORKFLOW_STARTED: 'WORKFLOW_STARTED',\n WORKFLOW_COMPLETED: 'WORKFLOW_COMPLETED',\n WORKFLOW_FAILED: 'WORKFLOW_FAILED',\n WORKFLOW_CANCELLED: 'WORKFLOW_CANCELLED',\n WORKFLOW_PAUSED: 'WORKFLOW_PAUSED',\n WORKFLOW_RESUMED: 'WORKFLOW_RESUMED',\n\n // Step lifecycle\n STEP_ENTERED: 'STEP_ENTERED',\n STEP_EXITED: 'STEP_EXITED',\n STEP_FAILED: 'STEP_FAILED',\n STEP_SKIPPED: 'STEP_SKIPPED',\n\n // Transition events\n TRANSITION_EXECUTED: 'TRANSITION_EXECUTED',\n TRANSITION_REJECTED: 'TRANSITION_REJECTED',\n TRANSITION_POST_CONDITION_FAILED: 'TRANSITION_POST_CONDITION_FAILED',\n TRANSITION_FAILED: 'TRANSITION_FAILED',\n\n // Activity events\n ACTIVITY_SCHEDULED: 'ACTIVITY_SCHEDULED',\n ACTIVITY_STARTED: 'ACTIVITY_STARTED',\n ACTIVITY_COMPLETED: 'ACTIVITY_COMPLETED',\n ACTIVITY_FAILED: 'ACTIVITY_FAILED',\n ACTIVITY_RETRY: 'ACTIVITY_RETRY',\n\n // User task events\n USER_TASK_CREATED: 'USER_TASK_CREATED',\n USER_TASK_ASSIGNED: 'USER_TASK_ASSIGNED',\n USER_TASK_STARTED: 'USER_TASK_STARTED',\n USER_TASK_COMPLETED: 'USER_TASK_COMPLETED',\n USER_TASK_CANCELLED: 'USER_TASK_CANCELLED',\n USER_TASK_ESCALATED: 'USER_TASK_ESCALATED',\n\n // Sub-workflow events (Phase 8)\n SUB_WORKFLOW_STARTED: 'SUB_WORKFLOW_STARTED',\n SUB_WORKFLOW_COMPLETED: 'SUB_WORKFLOW_COMPLETED',\n SUB_WORKFLOW_FAILED: 'SUB_WORKFLOW_FAILED',\n\n // Compensation events (Phase 8)\n COMPENSATION_STARTED: 'COMPENSATION_STARTED',\n COMPENSATION_COMPLETED: 'COMPENSATION_COMPLETED',\n COMPENSATION_PARTIAL: 'COMPENSATION_PARTIAL',\n COMPENSATION_FAILED: 'COMPENSATION_FAILED',\n COMPENSATION_ACTIVITY_STARTED: 'COMPENSATION_ACTIVITY_STARTED',\n COMPENSATION_ACTIVITY_COMPLETED: 'COMPENSATION_ACTIVITY_COMPLETED',\n COMPENSATION_ACTIVITY_FAILED: 'COMPENSATION_ACTIVITY_FAILED',\n\n // Signal events (Phase 9)\n SIGNAL_AWAITING: 'SIGNAL_AWAITING',\n SIGNAL_RECEIVED: 'SIGNAL_RECEIVED',\n SIGNAL_TIMEOUT: 'SIGNAL_TIMEOUT',\n\n // Error routing (spec 5.9)\n ERROR_ROUTED: 'ERROR_ROUTED',\n ERROR_DIRECTIVE_APPLIED: 'ERROR_DIRECTIVE_APPLIED',\n ERROR_PARKED: 'ERROR_PARKED',\n ERROR_HANDLER_SCHEDULED: 'ERROR_HANDLER_SCHEDULED',\n ERROR_HANDLER_STARTED: 'ERROR_HANDLER_STARTED',\n ERROR_HANDLER_SKIPPED: 'ERROR_HANDLER_SKIPPED',\n\n // Recovery (spec 8.4). `STEP_RERUN` carries `{ stepId, editedContextDiff, by }`\n // and is the audit record of a rerun \u2014 the terminal StepInstance of the\n // previous attempt is never touched, so the event log is where the two\n // attempts are linked.\n STEP_RERUN: 'STEP_RERUN',\n\n // Agent outcome routing (spec 7.2)\n OUTCOME_ROUTED: 'OUTCOME_ROUTED',\n OUTCOME_UNHANDLED: 'OUTCOME_UNHANDLED',\n\n // Dry run (spec 8.2). Written only by an `isDryRun` instance; the pure\n // `lib/dry-run.ts` owns the same literals as `DRY_RUN_EVENT_TYPES` and builds\n // the \"Would do\" report from them. A test pins the two lists together.\n DRY_RUN_STARTED: 'DRY_RUN_STARTED',\n ACTIVITY_SIMULATED: 'ACTIVITY_SIMULATED',\n ACTIVITY_SIMULATION_REFUSED: 'ACTIVITY_SIMULATION_REFUSED',\n USER_TASK_SIMULATED: 'USER_TASK_SIMULATED',\n BUSINESS_RULE_ACTIONS_SUPPRESSED: 'BUSINESS_RULE_ACTIONS_SUPPRESSED',\n\n // Timer events (Phase 9)\n TIMER_AWAITING: 'TIMER_AWAITING',\n TIMER_FIRED: 'TIMER_FIRED',\n TIMER_CANCELLED: 'TIMER_CANCELLED',\n} as const\n\nexport type WorkflowEventType = typeof WorkflowEventTypes[keyof typeof WorkflowEventTypes]\n\n// ============================================================================\n// Types and Interfaces\n// ============================================================================\n\nexport interface WorkflowEventInput {\n workflowInstanceId: string\n stepInstanceId?: string\n branchInstanceId?: string | null\n eventType: WorkflowEventType | string\n eventData: any\n userId?: string\n tenantId: string\n organizationId: string\n}\n\nexport interface QueryOptions {\n eventTypes?: Array<WorkflowEventType | string>\n stepInstanceId?: string\n fromDate?: Date\n toDate?: Date\n limit?: number\n offset?: number\n}\n\nexport interface EventStatistics {\n totalEvents: number\n eventsByType: Record<string, number>\n firstEvent?: Date\n lastEvent?: Date\n}\n\n// ============================================================================\n// Main Event Logging Functions\n// ============================================================================\n\n/**\n * Log a workflow event to the event sourcing table\n *\n * @param em - Entity manager\n * @param event - Event input data\n * @returns Created event entity\n */\nexport async function logWorkflowEvent(\n em: EntityManager,\n event: WorkflowEventInput\n): Promise<WorkflowEvent> {\n const workflowEvent = em.create(WorkflowEvent, {\n workflowInstanceId: event.workflowInstanceId,\n stepInstanceId: event.stepInstanceId || null,\n branchInstanceId: event.branchInstanceId ?? null,\n eventType: event.eventType,\n eventData: event.eventData || {},\n userId: event.userId || null,\n tenantId: event.tenantId,\n organizationId: event.organizationId,\n occurredAt: new Date(),\n })\n\n await em.persist(workflowEvent).flush()\n\n return workflowEvent\n}\n\n/**\n * Log multiple workflow events in batch\n *\n * @param em - Entity manager\n * @param events - Array of event input data\n * @returns Array of created event entities\n */\nexport async function logWorkflowEvents(\n em: EntityManager,\n events: WorkflowEventInput[]\n): Promise<WorkflowEvent[]> {\n const workflowEvents = events.map(event =>\n em.create(WorkflowEvent, {\n workflowInstanceId: event.workflowInstanceId,\n stepInstanceId: event.stepInstanceId || null,\n branchInstanceId: event.branchInstanceId ?? null,\n eventType: event.eventType,\n eventData: event.eventData || {},\n userId: event.userId || null,\n tenantId: event.tenantId,\n organizationId: event.organizationId,\n occurredAt: new Date(),\n })\n )\n\n await em.persist(workflowEvents).flush()\n\n return workflowEvents\n}\n\n// ============================================================================\n// Event Query Functions\n// ============================================================================\n\n/**\n * Get all events for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param options - Query options (filters, pagination)\n * @returns Array of workflow events\n */\nexport async function getWorkflowEvents(\n em: EntityManager,\n instanceId: string,\n options?: QueryOptions\n): Promise<WorkflowEvent[]> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n // Filter by event types\n if (options?.eventTypes && options.eventTypes.length > 0) {\n where.eventType = { $in: options.eventTypes }\n }\n\n // Filter by step instance\n if (options?.stepInstanceId) {\n where.stepInstanceId = options.stepInstanceId\n }\n\n // Filter by date range\n if (options?.fromDate || options?.toDate) {\n where.occurredAt = {}\n if (options.fromDate) {\n where.occurredAt.$gte = options.fromDate\n }\n if (options.toDate) {\n where.occurredAt.$lte = options.toDate\n }\n }\n\n const events = await em.find(\n WorkflowEvent,\n where,\n {\n orderBy: { occurredAt: 'ASC' },\n limit: options?.limit,\n offset: options?.offset,\n }\n )\n\n return events\n}\n\n/**\n * Get events for a specific step instance\n *\n * @param em - Entity manager\n * @param stepInstanceId - Step instance ID\n * @returns Array of workflow events\n */\nexport async function getStepEvents(\n em: EntityManager,\n stepInstanceId: string\n): Promise<WorkflowEvent[]> {\n const events = await em.find(\n WorkflowEvent,\n { stepInstanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n return events\n}\n\n/**\n * Get the latest event for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Optional event type filter\n * @returns Latest workflow event or null\n */\nexport async function getLatestEvent(\n em: EntityManager,\n instanceId: string,\n eventType?: WorkflowEventType | string\n): Promise<WorkflowEvent | null> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n if (eventType) {\n where.eventType = eventType\n }\n\n const event = await em.findOne(\n WorkflowEvent,\n where,\n { orderBy: { occurredAt: 'DESC' } }\n )\n\n return event\n}\n\n/**\n * Count events for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Optional event type filter\n * @returns Count of events\n */\nexport async function countEvents(\n em: EntityManager,\n instanceId: string,\n eventType?: WorkflowEventType | string\n): Promise<number> {\n const where: any = {\n workflowInstanceId: instanceId,\n }\n\n if (eventType) {\n where.eventType = eventType\n }\n\n return await em.count(WorkflowEvent, where)\n}\n\n/**\n * Get event statistics for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @returns Event statistics\n */\nexport async function getEventStatistics(\n em: EntityManager,\n instanceId: string\n): Promise<EventStatistics> {\n const events = await em.find(\n WorkflowEvent,\n { workflowInstanceId: instanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n const eventsByType: Record<string, number> = {}\n\n for (const event of events) {\n eventsByType[event.eventType] = (eventsByType[event.eventType] || 0) + 1\n }\n\n return {\n totalEvents: events.length,\n eventsByType,\n firstEvent: events.length > 0 ? events[0].occurredAt : undefined,\n lastEvent: events.length > 0 ? events[events.length - 1].occurredAt : undefined,\n }\n}\n\n/**\n * Check if a specific event type has occurred for a workflow instance\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @param eventType - Event type to check\n * @returns True if event has occurred\n */\nexport async function hasEventOccurred(\n em: EntityManager,\n instanceId: string,\n eventType: WorkflowEventType | string\n): Promise<boolean> {\n const count = await em.count(WorkflowEvent, {\n workflowInstanceId: instanceId,\n eventType,\n })\n\n return count > 0\n}\n\n/**\n * Get event timeline for a workflow instance (simplified view)\n *\n * @param em - Entity manager\n * @param instanceId - Workflow instance ID\n * @returns Array of simplified event objects\n */\nexport async function getEventTimeline(\n em: EntityManager,\n instanceId: string\n): Promise<Array<{\n eventType: string\n occurredAt: Date\n stepInstanceId?: string\n userId?: string\n summary: string\n}>> {\n const events = await em.find(\n WorkflowEvent,\n { workflowInstanceId: instanceId },\n { orderBy: { occurredAt: 'ASC' } }\n )\n\n return events.map(event => ({\n eventType: event.eventType,\n occurredAt: event.occurredAt,\n stepInstanceId: event.stepInstanceId || undefined,\n userId: event.userId || undefined,\n summary: generateEventSummary(event),\n }))\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Generate human-readable summary for an event\n */\nfunction generateEventSummary(event: WorkflowEvent): string {\n const data = event.eventData || {}\n\n switch (event.eventType) {\n case WorkflowEventTypes.WORKFLOW_STARTED:\n return `Workflow started${data.workflowId ? ` (${data.workflowId})` : ''}`\n\n case WorkflowEventTypes.WORKFLOW_COMPLETED:\n return `Workflow completed${data.result ? ` with result` : ''}`\n\n case WorkflowEventTypes.WORKFLOW_FAILED:\n return `Workflow failed${data.error ? `: ${data.error}` : ''}`\n\n case WorkflowEventTypes.STEP_ENTERED:\n return `Entered step: ${data.stepName || data.stepId || 'unknown'}`\n\n case WorkflowEventTypes.STEP_EXITED:\n return `Exited step: ${data.stepName || data.stepId || 'unknown'}${\n data.executionTimeMs ? ` (${data.executionTimeMs}ms)` : ''\n }`\n\n case WorkflowEventTypes.STEP_FAILED:\n return `Step failed: ${data.stepName || data.stepId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n case WorkflowEventTypes.TRANSITION_EXECUTED:\n return `Transition: ${data.fromStepId} \u2192 ${data.toStepId}`\n\n case WorkflowEventTypes.TRANSITION_REJECTED:\n return `Transition blocked: ${data.fromStepId} \u2192 ${data.toStepId}${\n data.reason ? ` (${data.reason})` : ''\n }`\n\n case WorkflowEventTypes.USER_TASK_CREATED:\n return `User task created: ${data.taskName || 'unnamed'}${\n data.assignedTo ? ` (assigned to ${data.assignedTo})` : ''\n }`\n\n case WorkflowEventTypes.USER_TASK_COMPLETED:\n return `User task completed: ${data.taskName || 'unnamed'}`\n\n case WorkflowEventTypes.ACTIVITY_COMPLETED:\n return `Activity completed: ${data.activityName || data.activityId || 'unknown'}`\n\n case WorkflowEventTypes.ACTIVITY_FAILED:\n return `Activity failed: ${data.activityName || data.activityId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n case WorkflowEventTypes.COMPENSATION_STARTED:\n return `Compensation started${data.reason ? `: ${data.reason}` : ''}`\n\n case WorkflowEventTypes.COMPENSATION_COMPLETED:\n return `Compensation completed: ${data.compensatedActivities || 0}/${data.totalActivities || 0} activities`\n\n case WorkflowEventTypes.COMPENSATION_PARTIAL:\n return `Partial compensation: ${data.compensatedActivities || 0}/${data.totalActivities || 0} succeeded`\n\n case WorkflowEventTypes.COMPENSATION_FAILED:\n return `Compensation failed: ${data.failedCompensations?.length || 0} activities failed`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_STARTED:\n return `Compensating: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_COMPLETED:\n return `Compensated: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}`\n\n case WorkflowEventTypes.COMPENSATION_ACTIVITY_FAILED:\n return `Compensation failed: ${data.compensationActivityName || data.compensationActivityId || 'unknown'}${\n data.error ? ` - ${data.error}` : ''\n }`\n\n default:\n return event.eventType\n }\n}\n\n/**\n * Validate event type is a known type\n */\nexport function isValidEventType(eventType: string): eventType is WorkflowEventType {\n return Object.values(WorkflowEventTypes).includes(eventType as WorkflowEventType)\n}\n\n/**\n * Get all known event types\n */\nexport function getAllEventTypes(): WorkflowEventType[] {\n return Object.values(WorkflowEventTypes)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,168 @@
1
+ import { parseInterpolationToken } from "./interpolation-pipeline.js";
2
+ const TEMPLATE_PATTERN = /\{\{([^}]+)\}\}/g;
3
+ const CONTEXT_PREFIX = "context.";
4
+ function isPlainObject(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+ function normalizeContextPath(token) {
8
+ const parsed = parseInterpolationToken(token);
9
+ if (!parsed.ok) return null;
10
+ const basePath = parsed.path;
11
+ if (basePath === "now") return null;
12
+ if (basePath.startsWith("workflow.")) return null;
13
+ if (basePath.startsWith("env.")) return null;
14
+ const path = basePath.startsWith(CONTEXT_PREFIX) ? basePath.slice(CONTEXT_PREFIX.length) : basePath;
15
+ return path.length > 0 ? path : null;
16
+ }
17
+ function contextPathsInTemplate(value) {
18
+ const paths = [];
19
+ for (const match of value.matchAll(TEMPLATE_PATTERN)) {
20
+ const path = normalizeContextPath(match[1]);
21
+ if (path !== null) paths.push(path);
22
+ }
23
+ return paths;
24
+ }
25
+ function pathsFromMappingValue(value) {
26
+ if (value.includes("{{")) return contextPathsInTemplate(value);
27
+ const path = normalizeContextPath(value);
28
+ return path !== null ? [path] : [];
29
+ }
30
+ function collectValueRefs(value, field, push) {
31
+ if (typeof value === "string") {
32
+ for (const path of contextPathsInTemplate(value)) push(path, field);
33
+ return;
34
+ }
35
+ if (Array.isArray(value)) {
36
+ value.forEach((item, index) => collectValueRefs(item, `${field}.${index}`, push));
37
+ return;
38
+ }
39
+ if (isPlainObject(value)) {
40
+ for (const [key, child] of Object.entries(value)) {
41
+ collectValueRefs(child, `${field}.${key}`, push);
42
+ }
43
+ }
44
+ }
45
+ function collectActivityRefs(activities, baseLocation, scope, refs) {
46
+ if (!Array.isArray(activities)) return;
47
+ activities.forEach((activity, activityIndex) => {
48
+ if (!isPlainObject(activity)) return;
49
+ collectValueRefs(activity.config, "config", (path, field) => {
50
+ refs.push({ path, location: { ...baseLocation, activityIndex, field }, scope });
51
+ });
52
+ });
53
+ }
54
+ function collectStepRefs(steps, refs) {
55
+ if (!Array.isArray(steps)) return;
56
+ steps.forEach((rawStep, stepIndex) => {
57
+ if (!isPlainObject(rawStep) || typeof rawStep.stepId !== "string" || !rawStep.stepId) return;
58
+ const scope = { kind: "step", stepId: rawStep.stepId };
59
+ collectActivityRefs(rawStep.activities, { stepIndex }, scope, refs);
60
+ const subWorkflowConfig = rawStep.subWorkflowConfig;
61
+ if (!isPlainObject(subWorkflowConfig) || !isPlainObject(subWorkflowConfig.inputMapping)) return;
62
+ for (const [targetKey, sourcePath] of Object.entries(subWorkflowConfig.inputMapping)) {
63
+ if (typeof sourcePath !== "string") continue;
64
+ const field = `subWorkflowConfig.inputMapping.${targetKey}`;
65
+ for (const path of pathsFromMappingValue(sourcePath)) {
66
+ refs.push({ path, location: { stepIndex, field }, scope });
67
+ }
68
+ }
69
+ });
70
+ }
71
+ function collectTransitionRefs(transitions, refs) {
72
+ if (!Array.isArray(transitions)) return;
73
+ transitions.forEach((rawTransition, transitionIndex) => {
74
+ if (!isPlainObject(rawTransition)) return;
75
+ const fromStepId = rawTransition.fromStepId;
76
+ const toStepId = rawTransition.toStepId;
77
+ if (typeof fromStepId !== "string" || !fromStepId) return;
78
+ if (typeof toStepId !== "string" || !toStepId) return;
79
+ const scope = { kind: "transition", fromStepId, toStepId };
80
+ collectActivityRefs(rawTransition.activities, { transitionIndex }, scope, refs);
81
+ });
82
+ }
83
+ function collectTriggerRefs(triggers, refs) {
84
+ if (!Array.isArray(triggers)) return;
85
+ triggers.forEach((rawTrigger, triggerIndex) => {
86
+ if (!isPlainObject(rawTrigger)) return;
87
+ const triggerId = typeof rawTrigger.triggerId === "string" && rawTrigger.triggerId ? rawTrigger.triggerId : String(triggerIndex);
88
+ const config = rawTrigger.config;
89
+ if (!isPlainObject(config) || !Array.isArray(config.contextMapping)) return;
90
+ config.contextMapping.forEach((mapping, mappingIndex) => {
91
+ if (!isPlainObject(mapping) || typeof mapping.sourceExpression !== "string") return;
92
+ for (const path of contextPathsInTemplate(mapping.sourceExpression)) {
93
+ refs.push({
94
+ path,
95
+ location: { triggerIndex, field: `config.contextMapping.${mappingIndex}.sourceExpression` },
96
+ scope: { kind: "trigger", triggerId }
97
+ });
98
+ }
99
+ });
100
+ });
101
+ }
102
+ function extractContextRefs(definition) {
103
+ const refs = [];
104
+ collectStepRefs(definition.steps, refs);
105
+ collectTransitionRefs(definition.transitions, refs);
106
+ collectTriggerRefs(definition.triggers, refs);
107
+ return refs;
108
+ }
109
+ function scopeStepId(scope) {
110
+ if (scope.kind === "step") return scope.stepId;
111
+ if (scope.kind === "transition") return scope.toStepId;
112
+ return null;
113
+ }
114
+ function resolvesAgainstEntries(refPath, entries) {
115
+ for (const entry of entries) {
116
+ if (entry.path === "*") return true;
117
+ if (entry.path === refPath) return true;
118
+ if (refPath.startsWith(`${entry.path}.`) && (entry.type === "object" || entry.type === "unknown")) {
119
+ return true;
120
+ }
121
+ if (entry.path.startsWith(`${refPath}.`)) return true;
122
+ }
123
+ return false;
124
+ }
125
+ function findUnresolvedRefs(refs, ledger) {
126
+ const unresolved = [];
127
+ for (const ref of refs) {
128
+ const stepId = scopeStepId(ref.scope);
129
+ if (stepId === null) continue;
130
+ const view = ledger.steps[stepId];
131
+ if (!view) continue;
132
+ if (!resolvesAgainstEntries(ref.path, view.entries)) {
133
+ unresolved.push({ ref, stepId });
134
+ }
135
+ }
136
+ return unresolved;
137
+ }
138
+ function locationToIssuePath(location) {
139
+ const path = [];
140
+ if (location.stepIndex !== void 0) path.push("steps", location.stepIndex);
141
+ else if (location.transitionIndex !== void 0) path.push("transitions", location.transitionIndex);
142
+ else if (location.triggerIndex !== void 0) path.push("triggers", location.triggerIndex);
143
+ if (location.activityIndex !== void 0) path.push("activities", location.activityIndex);
144
+ for (const segment of location.field.split(".")) {
145
+ path.push(/^\d+$/.test(segment) ? Number(segment) : segment);
146
+ }
147
+ return path;
148
+ }
149
+ function collectUnresolvedContextRefWarnings(definition, ledger) {
150
+ const unresolved = findUnresolvedRefs(extractContextRefs(definition), ledger);
151
+ const seen = /* @__PURE__ */ new Set();
152
+ const warnings = [];
153
+ for (const { ref } of unresolved) {
154
+ const issuePath = locationToIssuePath(ref.location);
155
+ const key = `${issuePath.join(".")}|${ref.path}`;
156
+ if (seen.has(key)) continue;
157
+ seen.add(key);
158
+ warnings.push({ path: issuePath, refPath: ref.path });
159
+ }
160
+ return warnings;
161
+ }
162
+ export {
163
+ collectUnresolvedContextRefWarnings,
164
+ extractContextRefs,
165
+ findUnresolvedRefs,
166
+ resolvesAgainstEntries
167
+ };
168
+ //# sourceMappingURL=expression-refs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/expression-refs.ts"],
4
+ "sourcesContent": ["/**\n * Workflows Module - context expression reference extraction and ledger check\n * (spec 2026-07-26-workflows-ux-redesign.md section 3.5).\n *\n * Pure, dependency-free (browser-safe) helpers that find every `{{context.*}}`\n * reference a workflow definition makes and check each one against the\n * per-step context ledger (`lib/context-ledger.ts`), so the editor can warn \u2014\n * never block \u2014 when an expression references context no producer provides.\n *\n * Grammar \u2014 mirrors `interpolateVariables` in `lib/activity-executor.ts`:\n * `{{ path }}` tokens inside string values; `workflow.*`, `env.*`, and `now`\n * are engine-provided and always valid, so they are skipped; every other token\n * is a context reference, with an optional leading `context.` stripped (the\n * interpolator defaults bare paths to context lookups). Tokens may carry a\n * transform pipeline tail (`{{ path | fn(args) }}`) \u2014 the shared parser in\n * `lib/interpolation-pipeline.ts` strips it so the ledger check validates the\n * base path only; unparseable tokens are skipped (warnings-only surface, so\n * false negatives beat false positives).\n *\n * Extraction surfaces, each verified against the runtime consumer:\n * - Step and transition activity `config` values (all strings, recursively) \u2014\n * interpolated by `interpolateVariables` before execution.\n * - `subWorkflowConfig.inputMapping` values \u2014 `mapInputData` in\n * `lib/step-handler.ts` treats each value as a bare parent-context dot path\n * via `getNestedValue` (no `{{}}` interpolation), so bare values are\n * extracted whole; values containing `{{` fall back to template extraction.\n * `outputMapping` values read the CHILD workflow's context, which this\n * ledger cannot see \u2014 they are deliberately not extracted.\n * - Trigger `contextMapping[].sourceExpression` \u2014 `event-trigger-service.ts`\n * resolves these against the EVENT PAYLOAD, not workflow context, so bare\n * values are payload paths and are skipped; only `{{context.*}}` templates\n * (which never interpolate there) are extracted, and their trigger scope is\n * not ledger-checkable, so `findUnresolvedRefs` skips them.\n *\n * Scope resolution in `findUnresolvedRefs`:\n * - A STEP activity's refs check against that step's incoming ledger view\n * (`ledger.steps[stepId]`) \u2014 the context persisted before the step runs.\n * - A TRANSITION activity's refs conceptually check against the SOURCE step's\n * OUTGOING view (transition activities run after the source step completes).\n * The ledger only publishes per-step INCOMING views, and the TARGET step's\n * incoming view is exactly source-outgoing plus the transition's own\n * contributions on the single-route case, only widening (set union) where\n * the target joins multiple routes \u2014 an over-approximation that can only\n * suppress warnings, never fabricate them. Transition refs therefore check\n * `ledger.steps[toStepId]`.\n *\n * Resolution rules (warnings-only, so false negatives beat false positives):\n * - A `'*'` wildcard entry (unknown flat payload spread from triggers or\n * signals) resolves every ref \u2014 absence cannot be proven under it.\n * - Exact path match resolves.\n * - Prefix match resolves: ref `customer.name` resolves when entry `customer`\n * exists with type `object`/`unknown`; ref `customer` resolves when any\n * entry under `customer.` exists (the ref names a known ancestor).\n */\n\nimport type { ContextLedger, LedgerEntry } from './context-ledger'\nimport { parseInterpolationToken } from './interpolation-pipeline'\n\nexport interface ContextRefLocation {\n stepIndex?: number\n transitionIndex?: number\n triggerIndex?: number\n activityIndex?: number\n field: string\n}\n\nexport type ContextRefScope =\n | { kind: 'step'; stepId: string }\n | { kind: 'transition'; fromStepId: string; toStepId: string }\n | { kind: 'trigger'; triggerId: string }\n\nexport interface ContextRef {\n path: string\n location: ContextRefLocation\n scope: ContextRefScope\n}\n\nexport interface UnresolvedContextRef {\n ref: ContextRef\n stepId: string\n}\n\nexport interface UnresolvedContextRefWarning {\n path: Array<string | number>\n refPath: string\n}\n\nexport interface ExpressionRefDefinition {\n steps?: unknown\n transitions?: unknown\n triggers?: unknown\n}\n\nconst TEMPLATE_PATTERN = /\\{\\{([^}]+)\\}\\}/g\nconst CONTEXT_PREFIX = 'context.'\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction normalizeContextPath(token: string): string | null {\n const parsed = parseInterpolationToken(token)\n if (!parsed.ok) return null\n const basePath = parsed.path\n if (basePath === 'now') return null\n if (basePath.startsWith('workflow.')) return null\n if (basePath.startsWith('env.')) return null\n const path = basePath.startsWith(CONTEXT_PREFIX) ? basePath.slice(CONTEXT_PREFIX.length) : basePath\n return path.length > 0 ? path : null\n}\n\nfunction contextPathsInTemplate(value: string): string[] {\n const paths: string[] = []\n for (const match of value.matchAll(TEMPLATE_PATTERN)) {\n const path = normalizeContextPath(match[1])\n if (path !== null) paths.push(path)\n }\n return paths\n}\n\nfunction pathsFromMappingValue(value: string): string[] {\n if (value.includes('{{')) return contextPathsInTemplate(value)\n const path = normalizeContextPath(value)\n return path !== null ? [path] : []\n}\n\nfunction collectValueRefs(\n value: unknown,\n field: string,\n push: (path: string, field: string) => void,\n): void {\n if (typeof value === 'string') {\n for (const path of contextPathsInTemplate(value)) push(path, field)\n return\n }\n if (Array.isArray(value)) {\n value.forEach((item, index) => collectValueRefs(item, `${field}.${index}`, push))\n return\n }\n if (isPlainObject(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectValueRefs(child, `${field}.${key}`, push)\n }\n }\n}\n\nfunction collectActivityRefs(\n activities: unknown,\n baseLocation: Pick<ContextRefLocation, 'stepIndex' | 'transitionIndex'>,\n scope: ContextRefScope,\n refs: ContextRef[],\n): void {\n if (!Array.isArray(activities)) return\n activities.forEach((activity, activityIndex) => {\n if (!isPlainObject(activity)) return\n collectValueRefs(activity.config, 'config', (path, field) => {\n refs.push({ path, location: { ...baseLocation, activityIndex, field }, scope })\n })\n })\n}\n\nfunction collectStepRefs(steps: unknown, refs: ContextRef[]): void {\n if (!Array.isArray(steps)) return\n steps.forEach((rawStep, stepIndex) => {\n if (!isPlainObject(rawStep) || typeof rawStep.stepId !== 'string' || !rawStep.stepId) return\n const scope: ContextRefScope = { kind: 'step', stepId: rawStep.stepId }\n collectActivityRefs(rawStep.activities, { stepIndex }, scope, refs)\n\n const subWorkflowConfig = rawStep.subWorkflowConfig\n if (!isPlainObject(subWorkflowConfig) || !isPlainObject(subWorkflowConfig.inputMapping)) return\n for (const [targetKey, sourcePath] of Object.entries(subWorkflowConfig.inputMapping)) {\n if (typeof sourcePath !== 'string') continue\n const field = `subWorkflowConfig.inputMapping.${targetKey}`\n for (const path of pathsFromMappingValue(sourcePath)) {\n refs.push({ path, location: { stepIndex, field }, scope })\n }\n }\n })\n}\n\nfunction collectTransitionRefs(transitions: unknown, refs: ContextRef[]): void {\n if (!Array.isArray(transitions)) return\n transitions.forEach((rawTransition, transitionIndex) => {\n if (!isPlainObject(rawTransition)) return\n const fromStepId = rawTransition.fromStepId\n const toStepId = rawTransition.toStepId\n if (typeof fromStepId !== 'string' || !fromStepId) return\n if (typeof toStepId !== 'string' || !toStepId) return\n const scope: ContextRefScope = { kind: 'transition', fromStepId, toStepId }\n collectActivityRefs(rawTransition.activities, { transitionIndex }, scope, refs)\n })\n}\n\nfunction collectTriggerRefs(triggers: unknown, refs: ContextRef[]): void {\n if (!Array.isArray(triggers)) return\n triggers.forEach((rawTrigger, triggerIndex) => {\n if (!isPlainObject(rawTrigger)) return\n const triggerId = typeof rawTrigger.triggerId === 'string' && rawTrigger.triggerId\n ? rawTrigger.triggerId\n : String(triggerIndex)\n const config = rawTrigger.config\n if (!isPlainObject(config) || !Array.isArray(config.contextMapping)) return\n config.contextMapping.forEach((mapping, mappingIndex) => {\n if (!isPlainObject(mapping) || typeof mapping.sourceExpression !== 'string') return\n for (const path of contextPathsInTemplate(mapping.sourceExpression)) {\n refs.push({\n path,\n location: { triggerIndex, field: `config.contextMapping.${mappingIndex}.sourceExpression` },\n scope: { kind: 'trigger', triggerId },\n })\n }\n })\n })\n}\n\nexport function extractContextRefs(definition: ExpressionRefDefinition): ContextRef[] {\n const refs: ContextRef[] = []\n collectStepRefs(definition.steps, refs)\n collectTransitionRefs(definition.transitions, refs)\n collectTriggerRefs(definition.triggers, refs)\n return refs\n}\n\nfunction scopeStepId(scope: ContextRefScope): string | null {\n if (scope.kind === 'step') return scope.stepId\n if (scope.kind === 'transition') return scope.toStepId\n return null\n}\n\n/**\n * The shared ledger-resolution rule. Exported so other author-time checks that\n * validate a context path (condition `field` paths, step 2.12) apply exactly the\n * same over-approximating semantics instead of re-deriving them.\n */\nexport function resolvesAgainstEntries(refPath: string, entries: LedgerEntry[]): boolean {\n for (const entry of entries) {\n if (entry.path === '*') return true\n if (entry.path === refPath) return true\n if (\n refPath.startsWith(`${entry.path}.`) &&\n (entry.type === 'object' || entry.type === 'unknown')\n ) {\n return true\n }\n if (entry.path.startsWith(`${refPath}.`)) return true\n }\n return false\n}\n\nexport function findUnresolvedRefs(refs: ContextRef[], ledger: ContextLedger): UnresolvedContextRef[] {\n const unresolved: UnresolvedContextRef[] = []\n for (const ref of refs) {\n const stepId = scopeStepId(ref.scope)\n if (stepId === null) continue\n const view = ledger.steps[stepId]\n if (!view) continue\n if (!resolvesAgainstEntries(ref.path, view.entries)) {\n unresolved.push({ ref, stepId })\n }\n }\n return unresolved\n}\n\nfunction locationToIssuePath(location: ContextRefLocation): Array<string | number> {\n const path: Array<string | number> = []\n if (location.stepIndex !== undefined) path.push('steps', location.stepIndex)\n else if (location.transitionIndex !== undefined) path.push('transitions', location.transitionIndex)\n else if (location.triggerIndex !== undefined) path.push('triggers', location.triggerIndex)\n if (location.activityIndex !== undefined) path.push('activities', location.activityIndex)\n for (const segment of location.field.split('.')) {\n path.push(/^\\d+$/.test(segment) ? Number(segment) : segment)\n }\n return path\n}\n\nexport function collectUnresolvedContextRefWarnings(\n definition: ExpressionRefDefinition,\n ledger: ContextLedger,\n): UnresolvedContextRefWarning[] {\n const unresolved = findUnresolvedRefs(extractContextRefs(definition), ledger)\n const seen = new Set<string>()\n const warnings: UnresolvedContextRefWarning[] = []\n for (const { ref } of unresolved) {\n const issuePath = locationToIssuePath(ref.location)\n const key = `${issuePath.join('.')}|${ref.path}`\n if (seen.has(key)) continue\n seen.add(key)\n warnings.push({ path: issuePath, refPath: ref.path })\n }\n return warnings\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,62 @@
1
+ const FAILURE_GROUP_LABEL_MAX = 160;
2
+ const UUID = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
3
+ const ISO_TIMESTAMP = /\b\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?Z?\b/g;
4
+ const QUOTED = /(["'`])(?:(?!\1)[^\\]|\\.)*\1/g;
5
+ const HEX_BLOB = /\b[0-9a-f]{12,}\b/gi;
6
+ const NUMBER = /\b\d+(?:\.\d+)?\b/g;
7
+ const WHITESPACE = /\s+/g;
8
+ function normalizeFailureMessage(message) {
9
+ return message.replace(UUID, "{id}").replace(ISO_TIMESTAMP, "{time}").replace(QUOTED, "{value}").replace(HEX_BLOB, "{hex}").replace(NUMBER, "{n}").replace(WHITESPACE, " ").trim();
10
+ }
11
+ const UNCLASSIFIED_KEY = "unclassified";
12
+ const UNCLASSIFIED_LABEL = "No error message recorded";
13
+ const PARTIAL_FAILURE_LABEL = "Completed with tolerated failures";
14
+ function truncate(value) {
15
+ return value.length <= FAILURE_GROUP_LABEL_MAX ? value : `${value.slice(0, FAILURE_GROUP_LABEL_MAX - 1)}\u2026`;
16
+ }
17
+ function resolveFailureMessage(instance) {
18
+ if (instance.errorMessage && instance.errorMessage.trim().length > 0) return instance.errorMessage.trim();
19
+ if (instance.attentionReason && instance.attentionReason.trim().length > 0) {
20
+ return instance.attentionReason.trim();
21
+ }
22
+ if (instance.outcome === "partial_failure") return PARTIAL_FAILURE_LABEL;
23
+ return null;
24
+ }
25
+ function groupFailures(instances) {
26
+ const groups = /* @__PURE__ */ new Map();
27
+ for (const instance of instances) {
28
+ const message = resolveFailureMessage(instance);
29
+ const key = message ? normalizeFailureMessage(message) : UNCLASSIFIED_KEY;
30
+ const existing = groups.get(key);
31
+ if (existing) {
32
+ existing.count += 1;
33
+ existing.instanceIds.push(instance.id);
34
+ if (!existing.workflowIds.includes(instance.workflowId)) {
35
+ existing.workflowIds.push(instance.workflowId);
36
+ }
37
+ continue;
38
+ }
39
+ groups.set(key, {
40
+ key,
41
+ label: truncate(message ?? UNCLASSIFIED_LABEL),
42
+ count: 1,
43
+ workflowIds: [instance.workflowId],
44
+ instanceIds: [instance.id]
45
+ });
46
+ }
47
+ return [...groups.values()].sort(
48
+ (left, right) => right.count - left.count || left.key.localeCompare(right.key)
49
+ );
50
+ }
51
+ function matchesFailureGroup(instance, groupKey) {
52
+ const message = resolveFailureMessage(instance);
53
+ return (message ? normalizeFailureMessage(message) : UNCLASSIFIED_KEY) === groupKey;
54
+ }
55
+ export {
56
+ FAILURE_GROUP_LABEL_MAX,
57
+ groupFailures,
58
+ matchesFailureGroup,
59
+ normalizeFailureMessage,
60
+ resolveFailureMessage
61
+ };
62
+ //# sourceMappingURL=failure-grouping.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/failure-grouping.ts"],
4
+ "sourcesContent": ["/**\n * Failure-queue error grouping (spec \u00A78.4) \u2014 PURE.\n *\n * > \"Failure queue + bulk replay: `Send to failure queue` directive parks\n * > instances as ATTENTION; with FAILED instances they form a triage list with\n * > error grouping; bulk retry/cancel runs through the progress module.\"\n *\n * A triage list is only useful if 400 failures collapse into the four things\n * that actually broke. Grouping on the raw message never does that: every row\n * carries its own order id, its own timestamp, its own retry count. So each\n * message is normalized into a SHAPE \u2014 identifiers, numbers, quoted values and\n * timestamps replaced by placeholders \u2014 and rows are grouped on the shape while\n * the first raw message is kept as the human label.\n *\n * The normalization is deliberately conservative. Over-normalizing merges two\n * genuinely different failures, which is worse than showing them apart: an\n * operator who sees two groups can still bulk-replay both, but one who sees a\n * merged group cannot tell that half of it will fail again.\n */\n\n/** Longest label kept for a group; the full message stays on each instance. */\nexport const FAILURE_GROUP_LABEL_MAX = 160\n\nconst UUID = /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/gi\nconst ISO_TIMESTAMP = /\\b\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z?\\b/g\nconst QUOTED = /([\"'`])(?:(?!\\1)[^\\\\]|\\\\.)*\\1/g\nconst HEX_BLOB = /\\b[0-9a-f]{12,}\\b/gi\nconst NUMBER = /\\b\\d+(?:\\.\\d+)?\\b/g\nconst WHITESPACE = /\\s+/g\n\nexport type TriageInstanceInput = {\n id: string\n workflowId: string\n status: string\n errorMessage?: string | null\n /** `metadata.attention.reason` when the instance was parked by a directive. */\n attentionReason?: string | null\n /** The run's verdict; a `partial_failure` carries no `errorMessage` of its own. */\n outcome?: string | null\n}\n\nexport type FailureGroup = {\n /** Stable key for the normalized shape \u2014 safe to use as a filter value. */\n key: string\n /** First raw message seen for this shape, truncated for display. */\n label: string\n count: number\n /** Distinct workflow ids in the group, so a cross-workflow failure is visible. */\n workflowIds: string[]\n /** Instance ids in the group, in the order they were scanned. */\n instanceIds: string[]\n}\n\n/**\n * Reduce an error message to its shape. Two messages that differ only in the\n * ids/numbers/quoted values they mention normalize to the same string.\n */\nexport function normalizeFailureMessage(message: string): string {\n return message\n .replace(UUID, '{id}')\n .replace(ISO_TIMESTAMP, '{time}')\n .replace(QUOTED, '{value}')\n .replace(HEX_BLOB, '{hex}')\n .replace(NUMBER, '{n}')\n .replace(WHITESPACE, ' ')\n .trim()\n}\n\nconst UNCLASSIFIED_KEY = 'unclassified'\nconst UNCLASSIFIED_LABEL = 'No error message recorded'\n\n/**\n * Fallback shape for a run that reached END while tolerating a failure. It has\n * no `errorMessage` \u2014 the run did not fail \u2014 and no attention marker, so\n * without this every partial failure in the tenant would collapse into the one\n * meaningless `unclassified` bucket next to genuinely unlabelled rows.\n */\nconst PARTIAL_FAILURE_LABEL = 'Completed with tolerated failures'\n\nfunction truncate(value: string): string {\n return value.length <= FAILURE_GROUP_LABEL_MAX ? value : `${value.slice(0, FAILURE_GROUP_LABEL_MAX - 1)}\u2026`\n}\n\n/**\n * The message a group is derived from. A parked instance often has no\n * `errorMessage` of its own \u2014 the directive recorded WHY it parked in\n * `metadata.attention.reason` \u2014 so that is the fallback rather than dumping\n * every parked run into one meaningless bucket.\n */\nexport function resolveFailureMessage(instance: TriageInstanceInput): string | null {\n if (instance.errorMessage && instance.errorMessage.trim().length > 0) return instance.errorMessage.trim()\n if (instance.attentionReason && instance.attentionReason.trim().length > 0) {\n return instance.attentionReason.trim()\n }\n if (instance.outcome === 'partial_failure') return PARTIAL_FAILURE_LABEL\n return null\n}\n\nexport function groupFailures(instances: readonly TriageInstanceInput[]): FailureGroup[] {\n const groups = new Map<string, FailureGroup>()\n\n for (const instance of instances) {\n const message = resolveFailureMessage(instance)\n const key = message ? normalizeFailureMessage(message) : UNCLASSIFIED_KEY\n const existing = groups.get(key)\n if (existing) {\n existing.count += 1\n existing.instanceIds.push(instance.id)\n if (!existing.workflowIds.includes(instance.workflowId)) {\n existing.workflowIds.push(instance.workflowId)\n }\n continue\n }\n groups.set(key, {\n key,\n label: truncate(message ?? UNCLASSIFIED_LABEL),\n count: 1,\n workflowIds: [instance.workflowId],\n instanceIds: [instance.id],\n })\n }\n\n // Biggest group first \u2014 that is the one worth fixing. Ties break on the key\n // so the ordering is stable across requests rather than hash-order.\n return [...groups.values()].sort(\n (left, right) => right.count - left.count || left.key.localeCompare(right.key)\n )\n}\n\n/** Does this instance belong to the given group? Used to narrow the triage list. */\nexport function matchesFailureGroup(instance: TriageInstanceInput, groupKey: string): boolean {\n const message = resolveFailureMessage(instance)\n return (message ? normalizeFailureMessage(message) : UNCLASSIFIED_KEY) === groupKey\n}\n"],
5
+ "mappings": "AAqBO,MAAM,0BAA0B;AAEvC,MAAM,OAAO;AACb,MAAM,gBAAgB;AACtB,MAAM,SAAS;AACf,MAAM,WAAW;AACjB,MAAM,SAAS;AACf,MAAM,aAAa;AA6BZ,SAAS,wBAAwB,SAAyB;AAC/D,SAAO,QACJ,QAAQ,MAAM,MAAM,EACpB,QAAQ,eAAe,QAAQ,EAC/B,QAAQ,QAAQ,SAAS,EACzB,QAAQ,UAAU,OAAO,EACzB,QAAQ,QAAQ,KAAK,EACrB,QAAQ,YAAY,GAAG,EACvB,KAAK;AACV;AAEA,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAQ3B,MAAM,wBAAwB;AAE9B,SAAS,SAAS,OAAuB;AACvC,SAAO,MAAM,UAAU,0BAA0B,QAAQ,GAAG,MAAM,MAAM,GAAG,0BAA0B,CAAC,CAAC;AACzG;AAQO,SAAS,sBAAsB,UAA8C;AAClF,MAAI,SAAS,gBAAgB,SAAS,aAAa,KAAK,EAAE,SAAS,EAAG,QAAO,SAAS,aAAa,KAAK;AACxG,MAAI,SAAS,mBAAmB,SAAS,gBAAgB,KAAK,EAAE,SAAS,GAAG;AAC1E,WAAO,SAAS,gBAAgB,KAAK;AAAA,EACvC;AACA,MAAI,SAAS,YAAY,kBAAmB,QAAO;AACnD,SAAO;AACT;AAEO,SAAS,cAAc,WAA2D;AACvF,QAAM,SAAS,oBAAI,IAA0B;AAE7C,aAAW,YAAY,WAAW;AAChC,UAAM,UAAU,sBAAsB,QAAQ;AAC9C,UAAM,MAAM,UAAU,wBAAwB,OAAO,IAAI;AACzD,UAAM,WAAW,OAAO,IAAI,GAAG;AAC/B,QAAI,UAAU;AACZ,eAAS,SAAS;AAClB,eAAS,YAAY,KAAK,SAAS,EAAE;AACrC,UAAI,CAAC,SAAS,YAAY,SAAS,SAAS,UAAU,GAAG;AACvD,iBAAS,YAAY,KAAK,SAAS,UAAU;AAAA,MAC/C;AACA;AAAA,IACF;AACA,WAAO,IAAI,KAAK;AAAA,MACd;AAAA,MACA,OAAO,SAAS,WAAW,kBAAkB;AAAA,MAC7C,OAAO;AAAA,MACP,aAAa,CAAC,SAAS,UAAU;AAAA,MACjC,aAAa,CAAC,SAAS,EAAE;AAAA,IAC3B,CAAC;AAAA,EACH;AAIA,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE;AAAA,IAC1B,CAAC,MAAM,UAAU,MAAM,QAAQ,KAAK,SAAS,KAAK,IAAI,cAAc,MAAM,GAAG;AAAA,EAC/E;AACF;AAGO,SAAS,oBAAoB,UAA+B,UAA2B;AAC5F,QAAM,UAAU,sBAAsB,QAAQ;AAC9C,UAAQ,UAAU,wBAAwB,OAAO,IAAI,sBAAsB;AAC7E;",
6
+ "names": []
7
+ }
@@ -24,6 +24,7 @@ async function findWorkflowDefinition(em, options) {
24
24
  }
25
25
  if (version === void 0) {
26
26
  where.enabled = true;
27
+ where.lifecycle = "published";
27
28
  const dbDef = await em.findOne(WorkflowDefinition, where, {
28
29
  orderBy: { version: "DESC" }
29
30
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/lib/find-definition.ts"],
4
- "sourcesContent": ["/**\n * Unified Workflow Definition Lookup\n *\n * Finds workflow definitions from the database first, falling back to the\n * in-memory code workflow registry. This enables code-based definitions to\n * be used seamlessly by the executor and validators.\n */\n\nimport { createHash } from 'node:crypto'\nimport { EntityManager } from '@mikro-orm/core'\nimport { WorkflowDefinition, type WorkflowDefinitionData } from '../data/entities'\nimport { getCodeWorkflow } from './code-registry'\n\n/**\n * Generate a deterministic UUID for a code workflow definition.\n * Uses SHA-256 truncated to UUID v4 format so the same workflowId always\n * produces the same UUID across restarts and horizontal replicas.\n */\nexport function codeWorkflowUuid(workflowId: string): string {\n const hash = createHash('sha256').update(`code-workflow:${workflowId}`).digest('hex')\n // Format as UUID v4 (set version nibble to 4, variant bits to 10xx)\n return [\n hash.slice(0, 8),\n hash.slice(8, 12),\n `4${hash.slice(13, 16)}`,\n `${(parseInt(hash[16], 16) & 0x3 | 0x8).toString(16)}${hash.slice(17, 20)}`,\n hash.slice(20, 32),\n ].join('-')\n}\n\n/**\n * Find a workflow definition by workflowId, checking the database first\n * and falling back to the code registry.\n *\n * When a DB row exists with `codeWorkflowId` set, it means the user has\n * customized the code definition \u2014 the DB version takes precedence.\n *\n * When no DB row exists but a code definition is registered, a virtual\n * WorkflowDefinition-like object is constructed with a deterministic UUID.\n */\nexport async function findWorkflowDefinition(\n em: EntityManager,\n options: {\n workflowId: string\n version?: number\n tenantId: string\n organizationId: string\n },\n): Promise<WorkflowDefinition | null> {\n const { workflowId, version, tenantId, organizationId } = options\n\n // 1. Try database first\n const where: Record<string, unknown> = {\n workflowId,\n tenantId,\n organizationId,\n deletedAt: null,\n }\n\n if (version !== undefined) {\n where.version = version\n }\n\n if (version === undefined) {\n where.enabled = true\n const dbDef = await em.findOne(WorkflowDefinition, where, {\n orderBy: { version: 'DESC' },\n })\n if (dbDef) return dbDef\n } else {\n const dbDef = await em.findOne(WorkflowDefinition, where)\n if (dbDef) return dbDef\n }\n\n // 2. Fall back to code registry (version filter not applicable to code defs)\n const codeDef = getCodeWorkflow(workflowId)\n if (!codeDef) return null\n\n // When no version was requested, mirror the DB branch's `enabled = true` filter\n // so disabled code workflows aren't silently executable.\n if (version === undefined && !codeDef.enabled) return null\n\n return buildVirtualCodeDefinition(codeDef, tenantId, organizationId)\n}\n\nfunction buildVirtualCodeDefinition(\n codeDef: NonNullable<ReturnType<typeof getCodeWorkflow>>,\n tenantId: string,\n organizationId: string,\n): WorkflowDefinition {\n // Construct a virtual WorkflowDefinition object (not persisted)\n const virtual = new WorkflowDefinition()\n virtual.id = codeWorkflowUuid(codeDef.workflowId)\n virtual.workflowId = codeDef.workflowId\n virtual.workflowName = codeDef.workflowName\n virtual.description = codeDef.description ?? null\n virtual.version = codeDef.version\n virtual.definition = codeDef.definition as WorkflowDefinitionData\n virtual.metadata = codeDef.metadata ?? null\n virtual.enabled = codeDef.enabled\n virtual.codeWorkflowId = codeDef.workflowId\n virtual.tenantId = tenantId\n virtual.organizationId = organizationId\n virtual.createdAt = new Date(0) // code defs have no creation date\n virtual.updatedAt = new Date(0)\n\n return virtual\n}\n\n/**\n * Resolve a virtual code definition for an already-started instance whose\n * `definitionId` does not exist in the database.\n *\n * Instances started from a virtual code definition persist the deterministic\n * `codeWorkflowUuid(workflowId)` as their `definitionId`. Runtime handlers\n * (step/transition/signal/timer/task) load definitions by that id, so without\n * this fallback an unpersisted code workflow starts but can never advance.\n *\n * The UUID equality gate ensures the fallback never substitutes the code\n * definition for a hard-deleted persisted row: those rows have their own\n * random UUIDs that can never match the deterministic code UUID.\n */\nexport function resolveCodeDefinitionForInstance(instance: {\n definitionId: string\n workflowId: string\n tenantId: string\n organizationId: string\n}): WorkflowDefinition | null {\n const codeDef = getCodeWorkflow(instance.workflowId)\n if (!codeDef) return null\n if (codeWorkflowUuid(instance.workflowId) !== instance.definitionId) return null\n return buildVirtualCodeDefinition(codeDef, instance.tenantId, instance.organizationId)\n}\n\n/**\n * Find the definition backing a workflow instance: database row by id first,\n * falling back to the in-memory code registry for instances started from an\n * unpersisted code definition.\n */\nexport async function findDefinitionForInstance(\n em: EntityManager,\n instance: {\n definitionId: string\n workflowId: string\n tenantId: string\n organizationId: string\n },\n): Promise<WorkflowDefinition | null> {\n const dbDef = await em.findOne(WorkflowDefinition, { id: instance.definitionId })\n if (dbDef) return dbDef\n return resolveCodeDefinitionForInstance(instance)\n}\n"],
5
- "mappings": "AAQA,SAAS,kBAAkB;AAE3B,SAAS,0BAAuD;AAChE,SAAS,uBAAuB;AAOzB,SAAS,iBAAiB,YAA4B;AAC3D,QAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,iBAAiB,UAAU,EAAE,EAAE,OAAO,KAAK;AAEpF,SAAO;AAAA,IACL,KAAK,MAAM,GAAG,CAAC;AAAA,IACf,KAAK,MAAM,GAAG,EAAE;AAAA,IAChB,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,IACtB,IAAI,SAAS,KAAK,EAAE,GAAG,EAAE,IAAI,IAAM,GAAK,SAAS,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,IACzE,KAAK,MAAM,IAAI,EAAE;AAAA,EACnB,EAAE,KAAK,GAAG;AACZ;AAYA,eAAsB,uBACpB,IACA,SAMoC;AACpC,QAAM,EAAE,YAAY,SAAS,UAAU,eAAe,IAAI;AAG1D,QAAM,QAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,UAAU;AAAA,EAClB;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,UAAU;AAChB,UAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,OAAO;AAAA,MACxD,SAAS,EAAE,SAAS,OAAO;AAAA,IAC7B,CAAC;AACD,QAAI,MAAO,QAAO;AAAA,EACpB,OAAO;AACL,UAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,KAAK;AACxD,QAAI,MAAO,QAAO;AAAA,EACpB;AAGA,QAAM,UAAU,gBAAgB,UAAU;AAC1C,MAAI,CAAC,QAAS,QAAO;AAIrB,MAAI,YAAY,UAAa,CAAC,QAAQ,QAAS,QAAO;AAEtD,SAAO,2BAA2B,SAAS,UAAU,cAAc;AACrE;AAEA,SAAS,2BACP,SACA,UACA,gBACoB;AAEpB,QAAM,UAAU,IAAI,mBAAmB;AACvC,UAAQ,KAAK,iBAAiB,QAAQ,UAAU;AAChD,UAAQ,aAAa,QAAQ;AAC7B,UAAQ,eAAe,QAAQ;AAC/B,UAAQ,cAAc,QAAQ,eAAe;AAC7C,UAAQ,UAAU,QAAQ;AAC1B,UAAQ,aAAa,QAAQ;AAC7B,UAAQ,WAAW,QAAQ,YAAY;AACvC,UAAQ,UAAU,QAAQ;AAC1B,UAAQ,iBAAiB,QAAQ;AACjC,UAAQ,WAAW;AACnB,UAAQ,iBAAiB;AACzB,UAAQ,YAAY,oBAAI,KAAK,CAAC;AAC9B,UAAQ,YAAY,oBAAI,KAAK,CAAC;AAE9B,SAAO;AACT;AAeO,SAAS,iCAAiC,UAKnB;AAC5B,QAAM,UAAU,gBAAgB,SAAS,UAAU;AACnD,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,iBAAiB,SAAS,UAAU,MAAM,SAAS,aAAc,QAAO;AAC5E,SAAO,2BAA2B,SAAS,SAAS,UAAU,SAAS,cAAc;AACvF;AAOA,eAAsB,0BACpB,IACA,UAMoC;AACpC,QAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,EAAE,IAAI,SAAS,aAAa,CAAC;AAChF,MAAI,MAAO,QAAO;AAClB,SAAO,iCAAiC,QAAQ;AAClD;",
4
+ "sourcesContent": ["/**\n * Unified Workflow Definition Lookup\n *\n * Finds workflow definitions from the database first, falling back to the\n * in-memory code workflow registry. This enables code-based definitions to\n * be used seamlessly by the executor and validators.\n */\n\nimport { createHash } from 'node:crypto'\nimport { EntityManager } from '@mikro-orm/core'\nimport { WorkflowDefinition, type WorkflowDefinitionData } from '../data/entities'\nimport { getCodeWorkflow } from './code-registry'\n\n/**\n * Generate a deterministic UUID for a code workflow definition.\n * Uses SHA-256 truncated to UUID v4 format so the same workflowId always\n * produces the same UUID across restarts and horizontal replicas.\n */\nexport function codeWorkflowUuid(workflowId: string): string {\n const hash = createHash('sha256').update(`code-workflow:${workflowId}`).digest('hex')\n // Format as UUID v4 (set version nibble to 4, variant bits to 10xx)\n return [\n hash.slice(0, 8),\n hash.slice(8, 12),\n `4${hash.slice(13, 16)}`,\n `${(parseInt(hash[16], 16) & 0x3 | 0x8).toString(16)}${hash.slice(17, 20)}`,\n hash.slice(20, 32),\n ].join('-')\n}\n\n/**\n * Find a workflow definition by workflowId, checking the database first\n * and falling back to the code registry.\n *\n * When a DB row exists with `codeWorkflowId` set, it means the user has\n * customized the code definition \u2014 the DB version takes precedence.\n *\n * When no DB row exists but a code definition is registered, a virtual\n * WorkflowDefinition-like object is constructed with a deterministic UUID.\n */\nexport async function findWorkflowDefinition(\n em: EntityManager,\n options: {\n workflowId: string\n version?: number\n tenantId: string\n organizationId: string\n },\n): Promise<WorkflowDefinition | null> {\n const { workflowId, version, tenantId, organizationId } = options\n\n // 1. Try database first\n const where: Record<string, unknown> = {\n workflowId,\n tenantId,\n organizationId,\n deletedAt: null,\n }\n\n if (version !== undefined) {\n where.version = version\n }\n\n if (version === undefined) {\n // Unpinned resolution: latest PUBLISHED version (was \"latest enabled\").\n // Backfill defaulted existing rows to lifecycle='published', so behaviour is\n // identical for current data; only matters once drafts/archived rows exist.\n where.enabled = true\n where.lifecycle = 'published'\n const dbDef = await em.findOne(WorkflowDefinition, where, {\n orderBy: { version: 'DESC' },\n })\n if (dbDef) return dbDef\n } else {\n const dbDef = await em.findOne(WorkflowDefinition, where)\n if (dbDef) return dbDef\n }\n\n // 2. Fall back to code registry (version filter not applicable to code defs)\n const codeDef = getCodeWorkflow(workflowId)\n if (!codeDef) return null\n\n // When no version was requested, mirror the DB branch's `enabled = true` filter\n // so disabled code workflows aren't silently executable.\n if (version === undefined && !codeDef.enabled) return null\n\n return buildVirtualCodeDefinition(codeDef, tenantId, organizationId)\n}\n\nfunction buildVirtualCodeDefinition(\n codeDef: NonNullable<ReturnType<typeof getCodeWorkflow>>,\n tenantId: string,\n organizationId: string,\n): WorkflowDefinition {\n // Construct a virtual WorkflowDefinition object (not persisted)\n const virtual = new WorkflowDefinition()\n virtual.id = codeWorkflowUuid(codeDef.workflowId)\n virtual.workflowId = codeDef.workflowId\n virtual.workflowName = codeDef.workflowName\n virtual.description = codeDef.description ?? null\n virtual.version = codeDef.version\n virtual.definition = codeDef.definition as WorkflowDefinitionData\n virtual.metadata = codeDef.metadata ?? null\n virtual.enabled = codeDef.enabled\n virtual.codeWorkflowId = codeDef.workflowId\n virtual.tenantId = tenantId\n virtual.organizationId = organizationId\n virtual.createdAt = new Date(0) // code defs have no creation date\n virtual.updatedAt = new Date(0)\n\n return virtual\n}\n\n/**\n * Resolve a virtual code definition for an already-started instance whose\n * `definitionId` does not exist in the database.\n *\n * Instances started from a virtual code definition persist the deterministic\n * `codeWorkflowUuid(workflowId)` as their `definitionId`. Runtime handlers\n * (step/transition/signal/timer/task) load definitions by that id, so without\n * this fallback an unpersisted code workflow starts but can never advance.\n *\n * The UUID equality gate ensures the fallback never substitutes the code\n * definition for a hard-deleted persisted row: those rows have their own\n * random UUIDs that can never match the deterministic code UUID.\n */\nexport function resolveCodeDefinitionForInstance(instance: {\n definitionId: string\n workflowId: string\n tenantId: string\n organizationId: string\n}): WorkflowDefinition | null {\n const codeDef = getCodeWorkflow(instance.workflowId)\n if (!codeDef) return null\n if (codeWorkflowUuid(instance.workflowId) !== instance.definitionId) return null\n return buildVirtualCodeDefinition(codeDef, instance.tenantId, instance.organizationId)\n}\n\n/**\n * Find the definition backing a workflow instance: database row by id first,\n * falling back to the in-memory code registry for instances started from an\n * unpersisted code definition.\n */\nexport async function findDefinitionForInstance(\n em: EntityManager,\n instance: {\n definitionId: string\n workflowId: string\n tenantId: string\n organizationId: string\n },\n): Promise<WorkflowDefinition | null> {\n const dbDef = await em.findOne(WorkflowDefinition, { id: instance.definitionId })\n if (dbDef) return dbDef\n return resolveCodeDefinitionForInstance(instance)\n}\n"],
5
+ "mappings": "AAQA,SAAS,kBAAkB;AAE3B,SAAS,0BAAuD;AAChE,SAAS,uBAAuB;AAOzB,SAAS,iBAAiB,YAA4B;AAC3D,QAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,iBAAiB,UAAU,EAAE,EAAE,OAAO,KAAK;AAEpF,SAAO;AAAA,IACL,KAAK,MAAM,GAAG,CAAC;AAAA,IACf,KAAK,MAAM,GAAG,EAAE;AAAA,IAChB,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,IACtB,IAAI,SAAS,KAAK,EAAE,GAAG,EAAE,IAAI,IAAM,GAAK,SAAS,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAAA,IACzE,KAAK,MAAM,IAAI,EAAE;AAAA,EACnB,EAAE,KAAK,GAAG;AACZ;AAYA,eAAsB,uBACpB,IACA,SAMoC;AACpC,QAAM,EAAE,YAAY,SAAS,UAAU,eAAe,IAAI;AAG1D,QAAM,QAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,MAAI,YAAY,QAAW;AACzB,UAAM,UAAU;AAAA,EAClB;AAEA,MAAI,YAAY,QAAW;AAIzB,UAAM,UAAU;AAChB,UAAM,YAAY;AAClB,UAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,OAAO;AAAA,MACxD,SAAS,EAAE,SAAS,OAAO;AAAA,IAC7B,CAAC;AACD,QAAI,MAAO,QAAO;AAAA,EACpB,OAAO;AACL,UAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,KAAK;AACxD,QAAI,MAAO,QAAO;AAAA,EACpB;AAGA,QAAM,UAAU,gBAAgB,UAAU;AAC1C,MAAI,CAAC,QAAS,QAAO;AAIrB,MAAI,YAAY,UAAa,CAAC,QAAQ,QAAS,QAAO;AAEtD,SAAO,2BAA2B,SAAS,UAAU,cAAc;AACrE;AAEA,SAAS,2BACP,SACA,UACA,gBACoB;AAEpB,QAAM,UAAU,IAAI,mBAAmB;AACvC,UAAQ,KAAK,iBAAiB,QAAQ,UAAU;AAChD,UAAQ,aAAa,QAAQ;AAC7B,UAAQ,eAAe,QAAQ;AAC/B,UAAQ,cAAc,QAAQ,eAAe;AAC7C,UAAQ,UAAU,QAAQ;AAC1B,UAAQ,aAAa,QAAQ;AAC7B,UAAQ,WAAW,QAAQ,YAAY;AACvC,UAAQ,UAAU,QAAQ;AAC1B,UAAQ,iBAAiB,QAAQ;AACjC,UAAQ,WAAW;AACnB,UAAQ,iBAAiB;AACzB,UAAQ,YAAY,oBAAI,KAAK,CAAC;AAC9B,UAAQ,YAAY,oBAAI,KAAK,CAAC;AAE9B,SAAO;AACT;AAeO,SAAS,iCAAiC,UAKnB;AAC5B,QAAM,UAAU,gBAAgB,SAAS,UAAU;AACnD,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,iBAAiB,SAAS,UAAU,MAAM,SAAS,aAAc,QAAO;AAC5E,SAAO,2BAA2B,SAAS,SAAS,UAAU,SAAS,cAAc;AACvF;AAOA,eAAsB,0BACpB,IACA,UAMoC;AACpC,QAAM,QAAQ,MAAM,GAAG,QAAQ,oBAAoB,EAAE,IAAI,SAAS,aAAa,CAAC;AAChF,MAAI,MAAO,QAAO;AAClB,SAAO,iCAAiC,QAAQ;AAClD;",
6
6
  "names": []
7
7
  }