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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1241) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/AGENTS.md +4 -3
  3. package/agentic/standalone-guide.md +1 -1
  4. package/build.mjs +16 -0
  5. package/dist/bootstrap.js +7 -3
  6. package/dist/bootstrap.js.map +2 -2
  7. package/dist/generated/entities/action_log/index.js +2 -0
  8. package/dist/generated/entities/action_log/index.js.map +2 -2
  9. package/dist/generated/entities/user/index.js +2 -0
  10. package/dist/generated/entities/user/index.js.map +2 -2
  11. package/dist/generated/entities/user_task/index.js +14 -0
  12. package/dist/generated/entities/user_task/index.js.map +2 -2
  13. package/dist/generated/entities/workflow_definition/index.js +6 -0
  14. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  15. package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
  16. package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
  17. package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
  18. package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
  19. package/dist/generated/entities/workflow_instance/index.js +4 -0
  20. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  21. package/dist/generated/entities.ids.generated.js +4 -1
  22. package/dist/generated/entities.ids.generated.js.map +2 -2
  23. package/dist/generated/entity-fields-registry.js +39 -0
  24. package/dist/generated/entity-fields-registry.js.map +2 -2
  25. package/dist/helpers/integration/workflowsFixtures.js +477 -2
  26. package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
  27. package/dist/helpers/integration/workflowsUi.js +148 -0
  28. package/dist/helpers/integration/workflowsUi.js.map +7 -0
  29. package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
  30. package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
  31. package/dist/modules/audit_logs/data/entities.js +5 -0
  32. package/dist/modules/audit_logs/data/entities.js.map +2 -2
  33. package/dist/modules/audit_logs/data/validators.js +1 -0
  34. package/dist/modules/audit_logs/data/validators.js.map +2 -2
  35. package/dist/modules/audit_logs/lib/projections.js +2 -1
  36. package/dist/modules/audit_logs/lib/projections.js.map +2 -2
  37. package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
  38. package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
  39. package/dist/modules/audit_logs/services/actionLogService.js +3 -0
  40. package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
  41. package/dist/modules/auth/data/entities.js +6 -0
  42. package/dist/modules/auth/data/entities.js.map +2 -2
  43. package/dist/modules/auth/lib/executionPrincipal.js +140 -0
  44. package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
  45. package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
  46. package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
  47. package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
  48. package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
  49. package/dist/modules/business_rules/data/validators.js +6 -0
  50. package/dist/modules/business_rules/data/validators.js.map +2 -2
  51. package/dist/modules/business_rules/lib/rule-engine.js +5 -3
  52. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  53. package/dist/modules/catalog/commands/products.js +5 -0
  54. package/dist/modules/catalog/commands/products.js.map +2 -2
  55. package/dist/modules/catalog/workflows.js +19 -0
  56. package/dist/modules/catalog/workflows.js.map +7 -0
  57. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
  58. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  59. package/dist/modules/customer_accounts/cli.js +80 -0
  60. package/dist/modules/customer_accounts/cli.js.map +7 -0
  61. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
  62. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
  63. package/dist/modules/customer_accounts/setup.js +4 -2
  64. package/dist/modules/customer_accounts/setup.js.map +2 -2
  65. package/dist/modules/customers/commands/deals.js +4 -0
  66. package/dist/modules/customers/commands/deals.js.map +2 -2
  67. package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
  68. package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
  69. package/dist/modules/customers/components/detail/utils.js +2 -0
  70. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  71. package/dist/modules/customers/events.js +13 -2
  72. package/dist/modules/customers/events.js.map +2 -2
  73. package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
  74. package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
  75. package/dist/modules/customers/lib/todoCompatibility.js +1 -1
  76. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  77. package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
  78. package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
  79. package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
  80. package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
  81. package/dist/modules/customers/workflows.js +29 -0
  82. package/dist/modules/customers/workflows.js.map +7 -0
  83. package/dist/modules/entities/api/records.js +13 -33
  84. package/dist/modules/entities/api/records.js.map +3 -3
  85. package/dist/modules/entities/lib/entityClassification.js +60 -0
  86. package/dist/modules/entities/lib/entityClassification.js.map +7 -0
  87. package/dist/modules/sales/commands/documents.js +31 -0
  88. package/dist/modules/sales/commands/documents.js.map +2 -2
  89. package/dist/modules/sales/events.js +12 -1
  90. package/dist/modules/sales/events.js.map +2 -2
  91. package/dist/modules/sales/workflows.js +12 -1
  92. package/dist/modules/sales/workflows.js.map +2 -2
  93. package/dist/modules/seeds/cli.js +199 -0
  94. package/dist/modules/seeds/cli.js.map +7 -0
  95. package/dist/modules/seeds/examples/sample-seed.json +26 -0
  96. package/dist/modules/seeds/index.js +12 -0
  97. package/dist/modules/seeds/index.js.map +7 -0
  98. package/dist/modules/workflows/acl.js +96 -0
  99. package/dist/modules/workflows/acl.js.map +2 -2
  100. package/dist/modules/workflows/ai-agents.js +50 -0
  101. package/dist/modules/workflows/ai-agents.js.map +7 -0
  102. package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
  103. package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
  104. package/dist/modules/workflows/ai-tools/types.js +43 -0
  105. package/dist/modules/workflows/ai-tools/types.js.map +7 -0
  106. package/dist/modules/workflows/ai-tools.js +10 -0
  107. package/dist/modules/workflows/ai-tools.js.map +7 -0
  108. package/dist/modules/workflows/api/command-settings/route.js +137 -0
  109. package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
  110. package/dist/modules/workflows/api/commands/route.js +72 -0
  111. package/dist/modules/workflows/api/commands/route.js.map +7 -0
  112. package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
  113. package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
  114. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
  115. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
  116. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
  117. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
  118. package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
  119. package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
  120. package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
  121. package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
  122. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
  123. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
  124. package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
  125. package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
  126. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
  127. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
  128. package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
  129. package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
  130. package/dist/modules/workflows/api/definitions/route.js +61 -113
  131. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  132. package/dist/modules/workflows/api/definitions/serialize.js +9 -0
  133. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  134. package/dist/modules/workflows/api/endpoints/route.js +69 -0
  135. package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
  136. package/dist/modules/workflows/api/functions/route.js +73 -0
  137. package/dist/modules/workflows/api/functions/route.js.map +7 -0
  138. package/dist/modules/workflows/api/grantable-features/route.js +75 -0
  139. package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
  140. package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
  141. package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
  142. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
  143. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
  144. package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
  145. package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
  146. package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
  147. package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
  148. package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
  149. package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
  150. package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
  151. package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
  152. package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
  153. package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
  154. package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
  155. package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
  156. package/dist/modules/workflows/api/instances/route.js +94 -3
  157. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  158. package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
  159. package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
  160. package/dist/modules/workflows/api/openapi.js +415 -4
  161. package/dist/modules/workflows/api/openapi.js.map +2 -2
  162. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
  163. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
  164. package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
  165. package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
  166. package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
  167. package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
  168. package/dist/modules/workflows/api/rule-usage/route.js +80 -0
  169. package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
  170. package/dist/modules/workflows/api/task-settings/route.js +107 -0
  171. package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
  172. package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
  173. package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
  174. package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
  175. package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
  176. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
  177. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
  178. package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
  179. package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
  180. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
  181. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
  182. package/dist/modules/workflows/api/tasks/route.js +37 -6
  183. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  184. package/dist/modules/workflows/api/tasks/serialize.js +83 -0
  185. package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
  186. package/dist/modules/workflows/api/templates/route.js +69 -0
  187. package/dist/modules/workflows/api/templates/route.js.map +7 -0
  188. package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
  189. package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
  190. package/dist/modules/workflows/api/work-inbox/route.js +119 -0
  191. package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
  192. package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
  193. package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
  194. package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
  195. package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
  196. package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
  197. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
  198. package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
  199. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  200. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  201. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  202. package/dist/modules/workflows/backend/definitions/page.js +131 -51
  203. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  204. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
  205. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
  206. package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
  207. package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
  208. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
  209. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
  210. package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
  211. package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
  212. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
  213. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
  214. package/dist/modules/workflows/backend/instances/page.js +159 -22
  215. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  216. package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
  217. package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
  218. package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
  219. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
  220. package/dist/modules/workflows/backend/tasks/page.js +8 -250
  221. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  222. package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
  223. package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
  224. package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
  225. package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
  226. package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
  227. package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
  228. package/dist/modules/workflows/cli.js +1 -1
  229. package/dist/modules/workflows/cli.js.map +2 -2
  230. package/dist/modules/workflows/commands/tasks.js +81 -0
  231. package/dist/modules/workflows/commands/tasks.js.map +7 -0
  232. package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
  233. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  234. package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
  235. package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
  236. package/dist/modules/workflows/components/AgentSelector.js +115 -0
  237. package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
  238. package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
  239. package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
  240. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
  241. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
  242. package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
  243. package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
  244. package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
  245. package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
  246. package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
  247. package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
  248. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
  249. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
  250. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
  251. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
  252. package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
  253. package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
  254. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
  255. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
  256. package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
  257. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  258. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
  259. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
  260. package/dist/modules/workflows/components/InputDataPanel.js +128 -0
  261. package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
  262. package/dist/modules/workflows/components/InspectorPanel.js +161 -0
  263. package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
  264. package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
  265. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  266. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
  267. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
  268. package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
  269. package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
  270. package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
  271. package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
  272. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  273. package/dist/modules/workflows/components/TriggersDialog.js +53 -0
  274. package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
  275. package/dist/modules/workflows/components/TriggersEditor.js +331 -0
  276. package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
  277. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
  278. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
  279. package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
  280. package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
  281. package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
  282. package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
  283. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
  284. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
  285. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
  286. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
  287. package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
  288. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  289. package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
  290. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
  291. package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
  292. package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
  293. package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
  294. package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
  295. package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
  296. package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
  297. package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
  298. package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
  299. package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
  300. package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
  301. package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
  302. package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
  303. package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
  304. package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
  305. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
  306. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
  307. package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
  308. package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
  309. package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
  310. package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
  311. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
  312. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
  313. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
  314. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
  315. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
  316. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
  317. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
  318. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  319. package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
  320. package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
  321. package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
  322. package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
  323. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
  324. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
  325. package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
  326. package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
  327. package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
  328. package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
  329. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
  330. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
  331. package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
  332. package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
  333. package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
  334. package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
  335. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
  336. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
  337. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
  338. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  339. package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
  340. package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
  341. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
  342. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
  343. package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
  344. package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
  345. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
  346. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
  347. package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
  348. package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
  349. package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
  350. package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
  351. package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
  352. package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
  353. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
  354. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
  355. package/dist/modules/workflows/components/formConfig.js +39 -10
  356. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  357. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  358. package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
  359. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
  360. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  361. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
  362. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
  363. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
  364. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
  365. package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
  366. package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
  367. package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
  368. package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
  369. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
  370. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
  371. package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
  372. package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
  373. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
  374. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
  375. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
  376. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
  377. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
  378. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
  379. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
  380. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
  381. package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
  382. package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
  383. package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
  384. package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
  385. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
  386. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
  387. package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
  388. package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
  389. package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
  390. package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
  391. package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
  392. package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
  393. package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
  394. package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
  395. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
  396. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
  397. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
  398. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
  399. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
  400. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
  401. package/dist/modules/workflows/components/nodes/index.js +14 -0
  402. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  403. package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
  404. package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
  405. package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
  406. package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
  407. package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
  408. package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
  409. package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
  410. package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
  411. package/dist/modules/workflows/components/run/RunGantt.js +130 -0
  412. package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
  413. package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
  414. package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
  415. package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
  416. package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
  417. package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
  418. package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
  419. package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
  420. package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
  421. package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
  422. package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
  423. package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
  424. package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
  425. package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
  426. package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
  427. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
  428. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
  429. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
  430. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
  431. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
  432. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
  433. package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
  434. package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
  435. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
  436. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
  437. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
  438. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
  439. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
  440. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
  441. package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
  442. package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
  443. package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
  444. package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
  445. package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
  446. package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
  447. package/dist/modules/workflows/data/entities.js +144 -4
  448. package/dist/modules/workflows/data/entities.js.map +2 -2
  449. package/dist/modules/workflows/data/metrics-validators.js +35 -0
  450. package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
  451. package/dist/modules/workflows/data/task-primitives.js +14 -0
  452. package/dist/modules/workflows/data/task-primitives.js.map +7 -0
  453. package/dist/modules/workflows/data/validators.js +504 -61
  454. package/dist/modules/workflows/data/validators.js.map +3 -3
  455. package/dist/modules/workflows/di.js +16 -1
  456. package/dist/modules/workflows/di.js.map +2 -2
  457. package/dist/modules/workflows/events.js +66 -8
  458. package/dist/modules/workflows/events.js.map +2 -2
  459. package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  460. package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  461. package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
  462. package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
  463. package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
  464. package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
  465. package/dist/modules/workflows/extension-points.js +1 -1
  466. package/dist/modules/workflows/extension-points.js.map +2 -2
  467. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
  468. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
  469. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
  470. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
  471. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
  472. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
  473. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
  474. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
  475. package/dist/modules/workflows/lib/activity-executor.js +505 -137
  476. package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
  477. package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
  478. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  479. package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
  480. package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
  481. package/dist/modules/workflows/lib/activity-registry.js +27 -0
  482. package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
  483. package/dist/modules/workflows/lib/activity-types.js +291 -0
  484. package/dist/modules/workflows/lib/activity-types.js.map +7 -0
  485. package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
  486. package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
  487. package/dist/modules/workflows/lib/advanced-config.js +31 -0
  488. package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
  489. package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
  490. package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
  491. package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
  492. package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
  493. package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
  494. package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
  495. package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
  496. package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
  497. package/dist/modules/workflows/lib/agent-review.js +66 -0
  498. package/dist/modules/workflows/lib/agent-review.js.map +7 -0
  499. package/dist/modules/workflows/lib/ai-authoring.js +155 -0
  500. package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
  501. package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
  502. package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
  503. package/dist/modules/workflows/lib/annotation-events.js +10 -0
  504. package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
  505. package/dist/modules/workflows/lib/branching-routes.js +182 -0
  506. package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
  507. package/dist/modules/workflows/lib/breach-routing.js +50 -0
  508. package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
  509. package/dist/modules/workflows/lib/bulk-replay.js +101 -0
  510. package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
  511. package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
  512. package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
  513. package/dist/modules/workflows/lib/caller-graph.js +53 -0
  514. package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
  515. package/dist/modules/workflows/lib/code-view-apply.js +86 -0
  516. package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
  517. package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
  518. package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
  519. package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
  520. package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
  521. package/dist/modules/workflows/lib/component-guard.js +7 -0
  522. package/dist/modules/workflows/lib/component-guard.js.map +7 -0
  523. package/dist/modules/workflows/lib/condition-handler.js +443 -0
  524. package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
  525. package/dist/modules/workflows/lib/context-ledger.js +448 -0
  526. package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
  527. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
  528. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
  529. package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
  530. package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
  531. package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
  532. package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
  533. package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
  534. package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
  535. package/dist/modules/workflows/lib/definition-error-body.js +33 -0
  536. package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
  537. package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
  538. package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
  539. package/dist/modules/workflows/lib/definition-grant.js +90 -0
  540. package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
  541. package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
  542. package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
  543. package/dist/modules/workflows/lib/definition-payload.js +31 -0
  544. package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
  545. package/dist/modules/workflows/lib/draft-restore.js +49 -0
  546. package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
  547. package/dist/modules/workflows/lib/dry-run.js +106 -0
  548. package/dist/modules/workflows/lib/dry-run.js.map +7 -0
  549. package/dist/modules/workflows/lib/duration.js +66 -17
  550. package/dist/modules/workflows/lib/duration.js.map +2 -2
  551. package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
  552. package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
  553. package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
  554. package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
  555. package/dist/modules/workflows/lib/editor-annotations.js +195 -0
  556. package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
  557. package/dist/modules/workflows/lib/editor-commands.js +103 -0
  558. package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
  559. package/dist/modules/workflows/lib/editor-history.js +51 -0
  560. package/dist/modules/workflows/lib/editor-history.js.map +7 -0
  561. package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
  562. package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
  563. package/dist/modules/workflows/lib/endpoint-path.js +90 -0
  564. package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
  565. package/dist/modules/workflows/lib/engine-version.js +42 -0
  566. package/dist/modules/workflows/lib/engine-version.js.map +7 -0
  567. package/dist/modules/workflows/lib/error-handler.js +132 -0
  568. package/dist/modules/workflows/lib/error-handler.js.map +7 -0
  569. package/dist/modules/workflows/lib/error-routing.js +104 -0
  570. package/dist/modules/workflows/lib/error-routing.js.map +7 -0
  571. package/dist/modules/workflows/lib/event-logger.js +23 -0
  572. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  573. package/dist/modules/workflows/lib/expression-refs.js +168 -0
  574. package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
  575. package/dist/modules/workflows/lib/failure-grouping.js +62 -0
  576. package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
  577. package/dist/modules/workflows/lib/find-definition.js +1 -0
  578. package/dist/modules/workflows/lib/find-definition.js.map +2 -2
  579. package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
  580. package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
  581. package/dist/modules/workflows/lib/graph-utils.js +328 -77
  582. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  583. package/dist/modules/workflows/lib/icon-search.js +32 -0
  584. package/dist/modules/workflows/lib/icon-search.js.map +7 -0
  585. package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
  586. package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
  587. package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
  588. package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
  589. package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
  590. package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
  591. package/dist/modules/workflows/lib/ledger-drag.js +28 -0
  592. package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
  593. package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
  594. package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
  595. package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
  596. package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
  597. package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
  598. package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
  599. package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
  600. package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
  601. package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
  602. package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
  603. package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
  604. package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
  605. package/dist/modules/workflows/lib/node-config-summary.js +128 -0
  606. package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
  607. package/dist/modules/workflows/lib/node-geometry.js +53 -0
  608. package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
  609. package/dist/modules/workflows/lib/node-nudge.js +44 -0
  610. package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
  611. package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
  612. package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
  613. package/dist/modules/workflows/lib/node-placement.js +55 -0
  614. package/dist/modules/workflows/lib/node-placement.js.map +7 -0
  615. package/dist/modules/workflows/lib/node-type-icons.js +54 -13
  616. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  617. package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
  618. package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
  619. package/dist/modules/workflows/lib/outcome-routing.js +158 -0
  620. package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
  621. package/dist/modules/workflows/lib/owned-definition.js +107 -0
  622. package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
  623. package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
  624. package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
  625. package/dist/modules/workflows/lib/palette-drag.js +36 -0
  626. package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
  627. package/dist/modules/workflows/lib/palette-drop.js +45 -0
  628. package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
  629. package/dist/modules/workflows/lib/parallel-handler.js +57 -2
  630. package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
  631. package/dist/modules/workflows/lib/port-contract.js +54 -0
  632. package/dist/modules/workflows/lib/port-contract.js.map +7 -0
  633. package/dist/modules/workflows/lib/portal-task-access.js +89 -0
  634. package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
  635. package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
  636. package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
  637. package/dist/modules/workflows/lib/route-chip-events.js +23 -0
  638. package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
  639. package/dist/modules/workflows/lib/route-chips.js +91 -0
  640. package/dist/modules/workflows/lib/route-chips.js.map +7 -0
  641. package/dist/modules/workflows/lib/route-edge.js +17 -0
  642. package/dist/modules/workflows/lib/route-edge.js.map +7 -0
  643. package/dist/modules/workflows/lib/route-kinds.js +67 -0
  644. package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
  645. package/dist/modules/workflows/lib/route-priority.js +104 -0
  646. package/dist/modules/workflows/lib/route-priority.js.map +7 -0
  647. package/dist/modules/workflows/lib/run-duration.js +44 -0
  648. package/dist/modules/workflows/lib/run-duration.js.map +7 -0
  649. package/dist/modules/workflows/lib/run-event-tone.js +25 -0
  650. package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
  651. package/dist/modules/workflows/lib/run-execution.js +305 -0
  652. package/dist/modules/workflows/lib/run-execution.js.map +7 -0
  653. package/dist/modules/workflows/lib/run-gantt.js +180 -0
  654. package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
  655. package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
  656. package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
  657. package/dist/modules/workflows/lib/run-outcome.js +48 -0
  658. package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
  659. package/dist/modules/workflows/lib/sample-resolver.js +71 -0
  660. package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
  661. package/dist/modules/workflows/lib/seeds.js +1 -1
  662. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  663. package/dist/modules/workflows/lib/server-output-contract.js +65 -0
  664. package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
  665. package/dist/modules/workflows/lib/set-variable.js +47 -0
  666. package/dist/modules/workflows/lib/set-variable.js.map +7 -0
  667. package/dist/modules/workflows/lib/signal-handler.js +63 -4
  668. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  669. package/dist/modules/workflows/lib/start-fixtures.js +42 -0
  670. package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
  671. package/dist/modules/workflows/lib/status-colors.js +153 -22
  672. package/dist/modules/workflows/lib/status-colors.js.map +2 -2
  673. package/dist/modules/workflows/lib/step-handler.js +529 -53
  674. package/dist/modules/workflows/lib/step-handler.js.map +3 -3
  675. package/dist/modules/workflows/lib/step-presentation.js +147 -0
  676. package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
  677. package/dist/modules/workflows/lib/step-through.js +26 -0
  678. package/dist/modules/workflows/lib/step-through.js.map +7 -0
  679. package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
  680. package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
  681. package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
  682. package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
  683. package/dist/modules/workflows/lib/task-decision-context.js +38 -0
  684. package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
  685. package/dist/modules/workflows/lib/task-decisions.js +49 -0
  686. package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
  687. package/dist/modules/workflows/lib/task-entity-access.js +62 -0
  688. package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
  689. package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
  690. package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
  691. package/dist/modules/workflows/lib/task-entity-types.js +36 -0
  692. package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
  693. package/dist/modules/workflows/lib/task-form-registry.js +33 -0
  694. package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
  695. package/dist/modules/workflows/lib/task-form-schema.js +75 -0
  696. package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
  697. package/dist/modules/workflows/lib/task-handler.js +251 -32
  698. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  699. package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
  700. package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
  701. package/dist/modules/workflows/lib/task-list-query.js +19 -0
  702. package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
  703. package/dist/modules/workflows/lib/task-notifications.js +119 -0
  704. package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
  705. package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
  706. package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
  707. package/dist/modules/workflows/lib/task-presets.js +35 -0
  708. package/dist/modules/workflows/lib/task-presets.js.map +7 -0
  709. package/dist/modules/workflows/lib/task-quick-action.js +45 -0
  710. package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
  711. package/dist/modules/workflows/lib/task-resolution.js +120 -0
  712. package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
  713. package/dist/modules/workflows/lib/task-sla.js +357 -0
  714. package/dist/modules/workflows/lib/task-sla.js.map +7 -0
  715. package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
  716. package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
  717. package/dist/modules/workflows/lib/task-visibility.js +194 -0
  718. package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
  719. package/dist/modules/workflows/lib/timer-handler.js +3 -1
  720. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  721. package/dist/modules/workflows/lib/transition-handler.js +148 -20
  722. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  723. package/dist/modules/workflows/lib/trigger-node.js +121 -0
  724. package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
  725. package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
  726. package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
  727. package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
  728. package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
  729. package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
  730. package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
  731. package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
  732. package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
  733. package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
  734. package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
  735. package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
  736. package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
  737. package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
  738. package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
  739. package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
  740. package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
  741. package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
  742. package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
  743. package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
  744. package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
  745. package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
  746. package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
  747. package/dist/modules/workflows/lib/workflow-executor.js +658 -6
  748. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  749. package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
  750. package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
  751. package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
  752. package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
  753. package/dist/modules/workflows/lib/workflow-templates.js +69 -0
  754. package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
  755. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
  756. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
  757. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
  758. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
  759. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
  760. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
  761. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
  762. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
  763. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
  764. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
  765. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
  766. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
  767. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
  768. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
  769. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
  770. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
  771. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
  772. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
  773. package/dist/modules/workflows/notifications.js +38 -10
  774. package/dist/modules/workflows/notifications.js.map +2 -2
  775. package/dist/modules/workflows/setup.js +81 -1
  776. package/dist/modules/workflows/setup.js.map +2 -2
  777. package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
  778. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
  779. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
  780. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
  781. package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
  782. package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
  783. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
  784. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
  785. package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
  786. package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
  787. package/dist/modules/workflows/widgets/injection-table.js +26 -0
  788. package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
  789. package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
  790. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  791. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
  792. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
  793. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
  794. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
  795. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
  796. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
  797. package/generated/entities/action_log/index.ts +1 -0
  798. package/generated/entities/user/index.ts +1 -0
  799. package/generated/entities/user_task/index.ts +7 -0
  800. package/generated/entities/workflow_definition/index.ts +3 -0
  801. package/generated/entities/workflow_definition_draft/index.ts +11 -0
  802. package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
  803. package/generated/entities/workflow_instance/index.ts +2 -0
  804. package/generated/entities.ids.generated.ts +4 -1
  805. package/generated/entity-fields-registry.ts +39 -0
  806. package/jest.setup.ts +13 -0
  807. package/package.json +8 -7
  808. package/src/bootstrap.ts +13 -3
  809. package/src/helpers/integration/workflowsFixtures.ts +765 -5
  810. package/src/helpers/integration/workflowsUi.ts +318 -0
  811. package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
  812. package/src/modules/audit_logs/data/entities.ts +12 -0
  813. package/src/modules/audit_logs/data/validators.ts +1 -0
  814. package/src/modules/audit_logs/lib/projections.ts +5 -1
  815. package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
  816. package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
  817. package/src/modules/audit_logs/services/actionLogService.ts +3 -0
  818. package/src/modules/auth/data/entities.ts +21 -0
  819. package/src/modules/auth/i18n/de.json +31 -0
  820. package/src/modules/auth/i18n/en.json +31 -0
  821. package/src/modules/auth/i18n/es.json +31 -0
  822. package/src/modules/auth/i18n/ko.json +31 -0
  823. package/src/modules/auth/i18n/pl.json +31 -0
  824. package/src/modules/auth/lib/executionPrincipal.ts +235 -0
  825. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  826. package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
  827. package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
  828. package/src/modules/business_rules/data/validators.ts +6 -0
  829. package/src/modules/business_rules/i18n/de.json +4 -0
  830. package/src/modules/business_rules/i18n/en.json +4 -0
  831. package/src/modules/business_rules/i18n/es.json +4 -0
  832. package/src/modules/business_rules/i18n/ko.json +4 -0
  833. package/src/modules/business_rules/i18n/pl.json +4 -0
  834. package/src/modules/business_rules/lib/rule-engine.ts +15 -1
  835. package/src/modules/catalog/commands/products.ts +12 -0
  836. package/src/modules/catalog/i18n/de.json +1 -0
  837. package/src/modules/catalog/i18n/en.json +1 -0
  838. package/src/modules/catalog/i18n/es.json +1 -0
  839. package/src/modules/catalog/i18n/ko.json +1 -0
  840. package/src/modules/catalog/i18n/pl.json +1 -0
  841. package/src/modules/catalog/workflows.ts +35 -0
  842. package/src/modules/customer_accounts/AGENTS.md +11 -0
  843. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
  844. package/src/modules/customer_accounts/cli.ts +96 -0
  845. package/src/modules/customer_accounts/i18n/de.json +5 -0
  846. package/src/modules/customer_accounts/i18n/en.json +5 -0
  847. package/src/modules/customer_accounts/i18n/es.json +5 -0
  848. package/src/modules/customer_accounts/i18n/ko.json +5 -0
  849. package/src/modules/customer_accounts/i18n/pl.json +5 -0
  850. package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
  851. package/src/modules/customer_accounts/setup.ts +15 -3
  852. package/src/modules/customers/commands/deals.ts +5 -0
  853. package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
  854. package/src/modules/customers/components/detail/utils.ts +2 -0
  855. package/src/modules/customers/events.ts +21 -3
  856. package/src/modules/customers/i18n/de.json +4 -0
  857. package/src/modules/customers/i18n/en.json +4 -0
  858. package/src/modules/customers/i18n/es.json +4 -0
  859. package/src/modules/customers/i18n/ko.json +4 -0
  860. package/src/modules/customers/i18n/pl.json +4 -0
  861. package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
  862. package/src/modules/customers/lib/todoCompatibility.ts +4 -1
  863. package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
  864. package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
  865. package/src/modules/customers/workflows.ts +57 -0
  866. package/src/modules/entities/api/records.ts +18 -62
  867. package/src/modules/entities/lib/entityClassification.ts +102 -0
  868. package/src/modules/sales/commands/documents.ts +46 -0
  869. package/src/modules/sales/events.ts +20 -2
  870. package/src/modules/sales/i18n/de.json +2 -1
  871. package/src/modules/sales/i18n/en.json +2 -1
  872. package/src/modules/sales/i18n/es.json +2 -1
  873. package/src/modules/sales/i18n/ko.json +2 -1
  874. package/src/modules/sales/i18n/pl.json +2 -1
  875. package/src/modules/sales/workflows.ts +12 -1
  876. package/src/modules/seeds/README.md +86 -0
  877. package/src/modules/seeds/cli.ts +220 -0
  878. package/src/modules/seeds/examples/sample-seed.json +26 -0
  879. package/src/modules/seeds/index.ts +11 -0
  880. package/src/modules/workflows/AGENTS.md +851 -10
  881. package/src/modules/workflows/acl.ts +96 -0
  882. package/src/modules/workflows/ai-agents.ts +80 -0
  883. package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
  884. package/src/modules/workflows/ai-tools/types.ts +117 -0
  885. package/src/modules/workflows/ai-tools.ts +20 -0
  886. package/src/modules/workflows/api/command-settings/route.ts +171 -0
  887. package/src/modules/workflows/api/commands/route.ts +109 -0
  888. package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
  889. package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
  890. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
  891. package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
  892. package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
  893. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
  894. package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
  895. package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
  896. package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
  897. package/src/modules/workflows/api/definitions/route.ts +88 -113
  898. package/src/modules/workflows/api/definitions/serialize.ts +9 -0
  899. package/src/modules/workflows/api/endpoints/route.ts +88 -0
  900. package/src/modules/workflows/api/functions/route.ts +91 -0
  901. package/src/modules/workflows/api/grantable-features/route.ts +102 -0
  902. package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
  903. package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
  904. package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
  905. package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
  906. package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
  907. package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
  908. package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
  909. package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
  910. package/src/modules/workflows/api/instances/route.ts +135 -3
  911. package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
  912. package/src/modules/workflows/api/openapi.ts +549 -2
  913. package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
  914. package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
  915. package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
  916. package/src/modules/workflows/api/rule-usage/route.ts +94 -0
  917. package/src/modules/workflows/api/task-settings/route.ts +138 -0
  918. package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
  919. package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
  920. package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
  921. package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
  922. package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
  923. package/src/modules/workflows/api/tasks/route.ts +60 -5
  924. package/src/modules/workflows/api/tasks/serialize.ts +119 -0
  925. package/src/modules/workflows/api/templates/route.ts +87 -0
  926. package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
  927. package/src/modules/workflows/api/work-inbox/route.ts +153 -0
  928. package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
  929. package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
  930. package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
  931. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  932. package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
  933. package/src/modules/workflows/backend/definitions/page.tsx +156 -76
  934. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
  935. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
  936. package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
  937. package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
  938. package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
  939. package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
  940. package/src/modules/workflows/backend/instances/page.tsx +218 -38
  941. package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
  942. package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
  943. package/src/modules/workflows/backend/tasks/page.tsx +20 -333
  944. package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
  945. package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
  946. package/src/modules/workflows/cli.ts +1 -1
  947. package/src/modules/workflows/commands/tasks.ts +146 -0
  948. package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
  949. package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
  950. package/src/modules/workflows/components/AgentSelector.tsx +200 -0
  951. package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
  952. package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
  953. package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
  954. package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
  955. package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
  956. package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
  957. package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
  958. package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
  959. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
  960. package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
  961. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
  962. package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
  963. package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
  964. package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
  965. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
  966. package/src/modules/workflows/components/StepsEditor.tsx +9 -2
  967. package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
  968. package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
  969. package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
  970. package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
  971. package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
  972. package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
  973. package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
  974. package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
  975. package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
  976. package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
  977. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
  978. package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
  979. package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
  980. package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
  981. package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
  982. package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
  983. package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
  984. package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
  985. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
  986. package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
  987. package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
  988. package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
  989. package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
  990. package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
  991. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
  992. package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
  993. package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
  994. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
  995. package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
  996. package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
  997. package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
  998. package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
  999. package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
  1000. package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
  1001. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
  1002. package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
  1003. package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
  1004. package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
  1005. package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
  1006. package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
  1007. package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
  1008. package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
  1009. package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
  1010. package/src/modules/workflows/components/formConfig.tsx +84 -10
  1011. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
  1012. package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
  1013. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
  1014. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
  1015. package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
  1016. package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
  1017. package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
  1018. package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
  1019. package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
  1020. package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
  1021. package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
  1022. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
  1023. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
  1024. package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
  1025. package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
  1026. package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
  1027. package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
  1028. package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
  1029. package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
  1030. package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
  1031. package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
  1032. package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
  1033. package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
  1034. package/src/modules/workflows/components/nodes/index.ts +17 -0
  1035. package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
  1036. package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
  1037. package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
  1038. package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
  1039. package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
  1040. package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
  1041. package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
  1042. package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
  1043. package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
  1044. package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
  1045. package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
  1046. package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
  1047. package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
  1048. package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
  1049. package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
  1050. package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
  1051. package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
  1052. package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
  1053. package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
  1054. package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
  1055. package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
  1056. package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
  1057. package/src/modules/workflows/data/entities.ts +397 -4
  1058. package/src/modules/workflows/data/metrics-validators.ts +51 -0
  1059. package/src/modules/workflows/data/task-primitives.ts +36 -0
  1060. package/src/modules/workflows/data/types.ts +81 -2
  1061. package/src/modules/workflows/data/validators.ts +729 -60
  1062. package/src/modules/workflows/di.ts +22 -0
  1063. package/src/modules/workflows/events.ts +68 -8
  1064. package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  1065. package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  1066. package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
  1067. package/src/modules/workflows/examples/templates/order-approval.json +230 -0
  1068. package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
  1069. package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
  1070. package/src/modules/workflows/extension-points.ts +1 -1
  1071. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
  1072. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
  1073. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
  1074. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
  1075. package/src/modules/workflows/i18n/de.json +1083 -24
  1076. package/src/modules/workflows/i18n/en.json +1081 -22
  1077. package/src/modules/workflows/i18n/es.json +1083 -24
  1078. package/src/modules/workflows/i18n/ko.json +1072 -13
  1079. package/src/modules/workflows/i18n/pl.json +1082 -23
  1080. package/src/modules/workflows/lib/activity-executor.ts +855 -186
  1081. package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
  1082. package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
  1083. package/src/modules/workflows/lib/activity-registry.ts +89 -0
  1084. package/src/modules/workflows/lib/activity-types.ts +415 -0
  1085. package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
  1086. package/src/modules/workflows/lib/advanced-config.ts +41 -0
  1087. package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
  1088. package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
  1089. package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
  1090. package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
  1091. package/src/modules/workflows/lib/agent-review.ts +171 -0
  1092. package/src/modules/workflows/lib/ai-authoring.ts +402 -0
  1093. package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
  1094. package/src/modules/workflows/lib/annotation-events.ts +15 -0
  1095. package/src/modules/workflows/lib/branching-routes.ts +280 -0
  1096. package/src/modules/workflows/lib/breach-routing.ts +142 -0
  1097. package/src/modules/workflows/lib/bulk-replay.ts +185 -0
  1098. package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
  1099. package/src/modules/workflows/lib/caller-graph.ts +104 -0
  1100. package/src/modules/workflows/lib/code-view-apply.ts +178 -0
  1101. package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
  1102. package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
  1103. package/src/modules/workflows/lib/component-guard.ts +13 -0
  1104. package/src/modules/workflows/lib/condition-handler.ts +658 -0
  1105. package/src/modules/workflows/lib/context-ledger.ts +814 -0
  1106. package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
  1107. package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
  1108. package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
  1109. package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
  1110. package/src/modules/workflows/lib/definition-error-body.ts +43 -0
  1111. package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
  1112. package/src/modules/workflows/lib/definition-grant.ts +211 -0
  1113. package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
  1114. package/src/modules/workflows/lib/definition-payload.ts +81 -0
  1115. package/src/modules/workflows/lib/draft-restore.ts +72 -0
  1116. package/src/modules/workflows/lib/dry-run.ts +203 -0
  1117. package/src/modules/workflows/lib/duration.ts +138 -24
  1118. package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
  1119. package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
  1120. package/src/modules/workflows/lib/editor-annotations.ts +301 -0
  1121. package/src/modules/workflows/lib/editor-commands.ts +205 -0
  1122. package/src/modules/workflows/lib/editor-history.ts +151 -0
  1123. package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
  1124. package/src/modules/workflows/lib/endpoint-path.ts +134 -0
  1125. package/src/modules/workflows/lib/engine-version.ts +67 -0
  1126. package/src/modules/workflows/lib/error-handler.ts +192 -0
  1127. package/src/modules/workflows/lib/error-routing.ts +236 -0
  1128. package/src/modules/workflows/lib/event-logger.ts +27 -0
  1129. package/src/modules/workflows/lib/expression-refs.ts +291 -0
  1130. package/src/modules/workflows/lib/failure-grouping.ts +134 -0
  1131. package/src/modules/workflows/lib/find-definition.ts +4 -0
  1132. package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
  1133. package/src/modules/workflows/lib/graph-utils.ts +620 -110
  1134. package/src/modules/workflows/lib/icon-search.ts +65 -0
  1135. package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
  1136. package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
  1137. package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
  1138. package/src/modules/workflows/lib/ledger-drag.ts +61 -0
  1139. package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
  1140. package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
  1141. package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
  1142. package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
  1143. package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
  1144. package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
  1145. package/src/modules/workflows/lib/node-config-summary.ts +235 -0
  1146. package/src/modules/workflows/lib/node-geometry.ts +168 -0
  1147. package/src/modules/workflows/lib/node-nudge.ts +63 -0
  1148. package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
  1149. package/src/modules/workflows/lib/node-placement.ts +104 -0
  1150. package/src/modules/workflows/lib/node-type-icons.ts +71 -10
  1151. package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
  1152. package/src/modules/workflows/lib/outcome-routing.ts +346 -0
  1153. package/src/modules/workflows/lib/owned-definition.ts +188 -0
  1154. package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
  1155. package/src/modules/workflows/lib/palette-drag.ts +68 -0
  1156. package/src/modules/workflows/lib/palette-drop.ts +114 -0
  1157. package/src/modules/workflows/lib/parallel-handler.ts +79 -2
  1158. package/src/modules/workflows/lib/port-contract.ts +107 -0
  1159. package/src/modules/workflows/lib/portal-task-access.ts +220 -0
  1160. package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
  1161. package/src/modules/workflows/lib/route-chip-events.ts +45 -0
  1162. package/src/modules/workflows/lib/route-chips.ts +177 -0
  1163. package/src/modules/workflows/lib/route-edge.ts +57 -0
  1164. package/src/modules/workflows/lib/route-kinds.ts +166 -0
  1165. package/src/modules/workflows/lib/route-priority.ts +197 -0
  1166. package/src/modules/workflows/lib/run-duration.ts +70 -0
  1167. package/src/modules/workflows/lib/run-event-tone.ts +46 -0
  1168. package/src/modules/workflows/lib/run-execution.ts +598 -0
  1169. package/src/modules/workflows/lib/run-gantt.ts +311 -0
  1170. package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
  1171. package/src/modules/workflows/lib/run-outcome.ts +142 -0
  1172. package/src/modules/workflows/lib/sample-resolver.ts +113 -0
  1173. package/src/modules/workflows/lib/seeds.ts +3 -1
  1174. package/src/modules/workflows/lib/server-output-contract.ts +120 -0
  1175. package/src/modules/workflows/lib/set-variable.ts +94 -0
  1176. package/src/modules/workflows/lib/signal-handler.ts +134 -4
  1177. package/src/modules/workflows/lib/start-fixtures.ts +93 -0
  1178. package/src/modules/workflows/lib/status-colors.ts +220 -21
  1179. package/src/modules/workflows/lib/step-handler.ts +744 -68
  1180. package/src/modules/workflows/lib/step-presentation.ts +295 -0
  1181. package/src/modules/workflows/lib/step-through.ts +71 -0
  1182. package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
  1183. package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
  1184. package/src/modules/workflows/lib/task-decision-context.ts +76 -0
  1185. package/src/modules/workflows/lib/task-decisions.ts +117 -0
  1186. package/src/modules/workflows/lib/task-entity-access.ts +181 -0
  1187. package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
  1188. package/src/modules/workflows/lib/task-entity-types.ts +66 -0
  1189. package/src/modules/workflows/lib/task-form-registry.ts +123 -0
  1190. package/src/modules/workflows/lib/task-form-schema.ts +129 -0
  1191. package/src/modules/workflows/lib/task-handler.ts +492 -51
  1192. package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
  1193. package/src/modules/workflows/lib/task-list-query.ts +46 -0
  1194. package/src/modules/workflows/lib/task-notifications.ts +218 -0
  1195. package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
  1196. package/src/modules/workflows/lib/task-presets.ts +95 -0
  1197. package/src/modules/workflows/lib/task-quick-action.ts +111 -0
  1198. package/src/modules/workflows/lib/task-resolution.ts +270 -0
  1199. package/src/modules/workflows/lib/task-sla.ts +628 -0
  1200. package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
  1201. package/src/modules/workflows/lib/task-visibility.ts +627 -0
  1202. package/src/modules/workflows/lib/timer-handler.ts +8 -1
  1203. package/src/modules/workflows/lib/transition-handler.ts +228 -20
  1204. package/src/modules/workflows/lib/trigger-node.ts +272 -0
  1205. package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
  1206. package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
  1207. package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
  1208. package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
  1209. package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
  1210. package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
  1211. package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
  1212. package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
  1213. package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
  1214. package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
  1215. package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
  1216. package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
  1217. package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
  1218. package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
  1219. package/src/modules/workflows/lib/workflow-templates.ts +91 -0
  1220. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
  1221. package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
  1222. package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
  1223. package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
  1224. package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
  1225. package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
  1226. package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
  1227. package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
  1228. package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
  1229. package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
  1230. package/src/modules/workflows/notifications.ts +40 -10
  1231. package/src/modules/workflows/setup.ts +128 -0
  1232. package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
  1233. package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
  1234. package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
  1235. package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
  1236. package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
  1237. package/src/modules/workflows/widgets/injection-table.ts +52 -2
  1238. package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
  1239. package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
  1240. package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
  1241. package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
@@ -1,5 +1,27 @@
1
1
  import type { Node, Edge } from '@xyflow/react'
2
+ import dagre from '@dagrejs/dagre'
2
3
  import type { WorkflowDefinition } from '../data/entities'
4
+ import type { WorkflowIoContract } from '../data/validators'
5
+ import { isCompensationGhostEdge } from './compensation-ghosts'
6
+ import { isDataMappingEdge } from './data-edge-mapping'
7
+ import { isAnnotationNode } from './editor-annotations'
8
+ import { isTriggerEdge, isTriggerNode } from './trigger-node'
9
+ import { buildWorkflowRouteEdge } from './route-edge'
10
+ import {
11
+ findRouteKindDescriptor,
12
+ resolveEdgeRouteKind,
13
+ type RouteKindTransitionLike,
14
+ } from './route-kinds'
15
+ import {
16
+ NODE_DESCRIPTION_HEIGHT,
17
+ NODE_HEIGHT,
18
+ NODE_OUTCOME_FOOTER_CHROME_HEIGHT,
19
+ NODE_OUTCOME_ROW_HEIGHT,
20
+ NODE_MAX_WIDTH,
21
+ NODE_MIN_WIDTH,
22
+ TERMINAL_NODE_HEIGHT,
23
+ TERMINAL_NODE_MIN_WIDTH,
24
+ } from './node-geometry'
3
25
 
4
26
  /**
5
27
  * Graph Utilities for Visual Workflow Editor
@@ -11,19 +33,72 @@ export interface GraphToDefinitionOptions {
11
33
  includePositions?: boolean
12
34
  }
13
35
 
36
+ /**
37
+ * Task inspector keys (spec §6.1) that round-trip verbatim between the node and
38
+ * the definition's `userTaskConfig`.
39
+ *
40
+ * They are listed rather than spread so an editor-only key on `node.data` can
41
+ * never leak into a persisted definition, and so the set is one obvious place
42
+ * to extend. The engine reads them through `userTaskConfig`; the inspector
43
+ * reads them off `node.data`, which is why both directions copy.
44
+ */
45
+ const USER_TASK_INSPECTOR_KEYS = [
46
+ 'instructions',
47
+ 'entityBindings',
48
+ 'priority',
49
+ 'deadline',
50
+ 'reminders',
51
+ 'onBreach',
52
+ 'decisions',
53
+ 'editablePrefilled',
54
+ // The §7.1 portal discriminator. Listing it here is what makes it survive a
55
+ // Studio save at all: before, a definition carrying `assigneeKind: 'customer'`
56
+ // (authorable only through the Code view) was rebuilt from the fixed keys
57
+ // above and the portal addressing was silently downgraded to backoffice.
58
+ 'assigneeKind',
59
+ ] as const
60
+
14
61
  export interface DefinitionToGraphOptions {
15
62
  autoLayout?: boolean
16
63
  layoutSpacing?: { vertical: number; horizontal: number }
64
+ /**
65
+ * Declared IO port contracts of referenced sub-workflows, keyed by
66
+ * `subWorkflowId`. When provided, a SUB_WORKFLOW node renders the child's
67
+ * IN/OUT ports. Absent → the node renders without ports (backward compatible).
68
+ */
69
+ childContracts?: Map<string, WorkflowIoContract>
70
+ }
71
+
72
+ export interface LayoutWithDagreOptions {
73
+ /** Flow direction. Default `'LR'` (left→right). */
74
+ direction?: 'LR' | 'TB'
75
+ nodeWidth?: number
76
+ nodeHeight?: number
17
77
  }
18
78
 
19
79
  /**
20
80
  * Convert ReactFlow graph (nodes + edges) to workflow definition JSON
21
81
  */
22
82
  export function graphToDefinition(
23
- nodes: Node[],
83
+ allNodes: Node[],
24
84
  edges: Edge[],
25
85
  options: GraphToDefinitionOptions = {}
26
86
  ): WorkflowDefinition['definition'] {
87
+ // Sticky notes and groups are editor annotations (spec 4.5): they live only in
88
+ // `metadata.editor.annotations` and MUST NOT reach `steps` or `transitions`,
89
+ // so a definition carrying them serializes byte-identically to one that does
90
+ // not and the engine can never see them.
91
+ // The canvas trigger pill (fidelity gap #5) is filtered on the same terms:
92
+ // it is a render-time overlay derived from `definition.triggers` and has no
93
+ // step form at all, so a definition declaring triggers must serialize
94
+ // byte-identically to one that does not. It can only reach here through a
95
+ // caller mistake — it never enters the editor's node state — which is exactly
96
+ // why the guarantee is enforced rather than assumed.
97
+ const nodes = allNodes.filter((node) => !isAnnotationNode(node) && !isTriggerNode(node))
98
+ const annotationIds = new Set(
99
+ allNodes.filter((node) => isAnnotationNode(node) || isTriggerNode(node)).map((node) => node.id),
100
+ )
101
+
27
102
  // Extract steps from nodes
28
103
  const steps = nodes.map((node) => {
29
104
  const step: any = {
@@ -78,6 +153,11 @@ export function graphToDefinition(
78
153
  if ((node.data as any).escalationRules || (node.data as any).userTaskConfig?.escalationRules) {
79
154
  step.userTaskConfig.escalationRules = (node.data as any).escalationRules || (node.data as any).userTaskConfig.escalationRules
80
155
  }
156
+
157
+ for (const key of USER_TASK_INSPECTOR_KEYS) {
158
+ const authored = (node.data as any)[key] ?? (node.data as any).userTaskConfig?.[key]
159
+ if (authored !== undefined) step.userTaskConfig[key] = authored
160
+ }
81
161
  }
82
162
 
83
163
  // Wait for signal configuration
@@ -90,11 +170,47 @@ export function graphToDefinition(
90
170
  step.activities = node.data.activities
91
171
  }
92
172
 
173
+ // Invoke-agent step → AUTOMATED step carrying the INVOKE_AGENT activity plus
174
+ // a signalConfig so the engine can park-and-resume the human path. The
175
+ // stepType is already AUTOMATED via mapNodeTypeToStepType.
176
+ if (node.type === 'invokeAgent') {
177
+ if (node.data.activities) {
178
+ step.activities = node.data.activities
179
+ }
180
+ if (node.data.signalConfig) {
181
+ step.signalConfig = node.data.signalConfig
182
+ }
183
+ }
184
+
93
185
  // Pre-conditions (for START steps)
94
186
  if (node.type === 'start' && (node.data as any).preConditions && (node.data as any).preConditions.length > 0) {
95
187
  step.preConditions = (node.data as any).preConditions
96
188
  }
97
189
 
190
+ // Error directive (spec 5.9). Absent stays absent so definitions that never
191
+ // opened the picker save byte-identically.
192
+ if ((node.data as any).errorDirective) {
193
+ step.errorDirective = (node.data as any).errorDirective
194
+ }
195
+
196
+ // Editor-owned step metadata. `unmappedConfig` is config a step-type
197
+ // conversion could not map onto the new type (spec 4.5) — it is carried
198
+ // through save/load verbatim so nothing an author configured is ever lost.
199
+ const stepMetadata: Record<string, unknown> = {
200
+ ...((node.data as any).stepMetadata && typeof (node.data as any).stepMetadata === 'object'
201
+ ? (node.data as any).stepMetadata as Record<string, unknown>
202
+ : {}),
203
+ }
204
+ const unmappedConfig = (node.data as any).unmappedConfig
205
+ if (unmappedConfig && typeof unmappedConfig === 'object' && Object.keys(unmappedConfig).length > 0) {
206
+ stepMetadata.unmappedConfig = unmappedConfig
207
+ } else {
208
+ delete stepMetadata.unmappedConfig
209
+ }
210
+ if (Object.keys(stepMetadata).length > 0) {
211
+ step.metadata = stepMetadata
212
+ }
213
+
98
214
  // Store position for visual editor
99
215
  if (options.includePositions && node.position) {
100
216
  step._editorPosition = {
@@ -106,8 +222,17 @@ export function graphToDefinition(
106
222
  return step
107
223
  })
108
224
 
109
- // Extract transitions from edges
110
- const transitions = edges.map((edge) => {
225
+ // Extract transitions from edges. Drag-authored data-mapping edges are NOT
226
+ // transitions — their binding lives in the target step's config.inputMapping —
227
+ // and compensation ghosts (spec 4.4) are a rendering of existing routes, not
228
+ // routes of their own, so both are excluded here.
229
+ const transitions = edges
230
+ .filter((edge) => !isDataMappingEdge(edge)
231
+ && !isCompensationGhostEdge(edge)
232
+ && !isTriggerEdge(edge)
233
+ && !annotationIds.has(edge.source)
234
+ && !annotationIds.has(edge.target))
235
+ .map((edge) => {
111
236
  const edgeData = edge.data as any
112
237
  const transition: any = {
113
238
  transitionId: edge.id,
@@ -126,6 +251,15 @@ export function graphToDefinition(
126
251
  transition.priority = edgeData.priority
127
252
  }
128
253
 
254
+ // Route kind marker (spec 5.9 error routes, and every kind registered
255
+ // beside them in lib/route-kinds.ts). Only non-normal kinds are persisted;
256
+ // normal routes stay exactly as they were serialized before.
257
+ const routeKind = resolveEdgeRouteKind(edgeData?.kind, edge.sourceHandle)
258
+ if (routeKind) {
259
+ transition.kind = routeKind.kind
260
+ Object.assign(transition, routeKind.discriminatorFields(edge))
261
+ }
262
+
129
263
  // Add continueOnActivityFailure if present (default false)
130
264
  if (edgeData?.continueOnActivityFailure !== undefined) {
131
265
  transition.continueOnActivityFailure = edgeData.continueOnActivityFailure
@@ -140,6 +274,12 @@ export function graphToDefinition(
140
274
  transition.postConditions = edgeData.postConditions
141
275
  }
142
276
 
277
+ // Inline condition expression (business_rules language). Branching routes
278
+ // authored on IF_ELSE / SWITCH nodes are plain conditioned transitions.
279
+ if (edgeData?.condition !== undefined && edgeData.condition !== null) {
280
+ transition.condition = edgeData.condition
281
+ }
282
+
143
283
  // Add activities if present in edge data
144
284
  if (edgeData?.activities && edgeData.activities.length > 0) {
145
285
  transition.activities = edgeData.activities.map((activity: any) => ({
@@ -152,10 +292,17 @@ export function graphToDefinition(
152
292
  ...(activity.timeout && { timeout: activity.timeout }),
153
293
  ...(activity.retryPolicy && { retryPolicy: activity.retryPolicy }),
154
294
  ...(activity.compensate !== undefined && { compensate: activity.compensate }),
295
+ // Saga compensation (`compensation.activityId`) is what the canvas'
296
+ // compensation ghosts render and what `lib/compensation-handler.ts`
297
+ // executes on failure — it MUST survive the editor round trip.
298
+ ...(activity.compensation && { compensation: activity.compensation }),
155
299
  }))
156
- } else {
300
+ } else if (!transition.kind) {
157
301
  // Check if source node is automated and has activity data
158
- // If so, place the activity in this transition
302
+ // If so, place the activity in this transition. A non-normal route never
303
+ // inherits the source step's activity — it is the recovery path, and
304
+ // re-running the activity that just failed (or that the run never got
305
+ // past) is exactly wrong.
159
306
  const sourceNode = nodes.find(n => n.id === edge.source)
160
307
  if (sourceNode && sourceNode.type === 'automated' && sourceNode.data) {
161
308
  if (sourceNode.data.activityType || sourceNode.data.activityId) {
@@ -205,28 +352,52 @@ export function definitionToGraph(
205
352
  definition: WorkflowDefinition['definition'],
206
353
  options: DefinitionToGraphOptions = {}
207
354
  ): { nodes: Node[]; edges: Edge[] } {
208
- const { autoLayout = true, layoutSpacing = { vertical: 200, horizontal: 300 } } = options
355
+ const { autoLayout = true, layoutSpacing = { vertical: 200, horizontal: 300 }, childContracts } = options
209
356
 
210
357
  // Build step map for quick lookup
211
358
  const stepMap = new Map(definition.steps.map(step => [step.stepId, step]))
212
359
 
213
- // Calculate smart layout positions if autoLayout is enabled
214
- const positions = autoLayout
215
- ? calculateSmartLayout(definition.steps, definition.transitions, layoutSpacing)
360
+ // Collect author-arranged positions persisted in the definition. A stored
361
+ // position always wins over an auto-computed one, so a saved graph re-opens
362
+ // exactly as the author left it.
363
+ const storedPositions = new Map<string, { x: number; y: number }>()
364
+ for (const step of definition.steps) {
365
+ const stored = (step as any)._editorPosition
366
+ if (stored && typeof stored.x === 'number' && typeof stored.y === 'number') {
367
+ storedPositions.set(step.stepId, { x: stored.x, y: stored.y })
368
+ }
369
+ }
370
+
371
+ // Auto-arrange only the steps that lack a stored position (e.g. freshly added
372
+ // nodes, or legacy/code graphs with no stored coordinates at all). When the
373
+ // caller explicitly disables autoLayout, skip dagre entirely.
374
+ const needsDagre = autoLayout && definition.steps.some((step) => !storedPositions.has(step.stepId))
375
+ const dagrePositions = needsDagre
376
+ ? layoutWithDagre(definition.steps, definition.transitions, {
377
+ direction: 'LR',
378
+ nodeWidth: NODE_MIN_WIDTH,
379
+ nodeHeight: NODE_HEIGHT,
380
+ })
216
381
  : null
217
382
 
218
383
  // Convert steps to nodes
219
384
  const nodes: Node[] = definition.steps.map((step, index) => {
220
- // Determine position
221
- let position = positions?.get(step.stepId) || { x: 250, y: 50 + index * layoutSpacing.vertical }
222
-
223
- // Use stored position if available and not auto-layouting
224
- if (!autoLayout && (step as any)._editorPosition) {
225
- position = (step as any)._editorPosition
226
- }
227
-
228
- // Map step type to node type
229
- const nodeType = mapStepTypeToNodeType(step.stepType)
385
+ // Determine position: stored (author-arranged) → dagre (auto) → fallback.
386
+ const position = storedPositions.get(step.stepId)
387
+ || dagrePositions?.get(step.stepId)
388
+ || { x: 250, y: 50 + index * layoutSpacing.vertical }
389
+
390
+ // Map step type to node type. An AUTOMATED step whose activities contain a
391
+ // single INVOKE_AGENT marker is the compiled form of an invoke-agent node —
392
+ // round-trip it back to that node type so the dedicated editor/UI is used.
393
+ const invokeAgentActivity = (step.stepType === 'AUTOMATED'
394
+ ? ((step as any).activities as any[] | undefined)?.find(
395
+ (activity) => activity?.activityType === 'INVOKE_AGENT',
396
+ )
397
+ : undefined)
398
+ const nodeType = invokeAgentActivity
399
+ ? 'invokeAgent'
400
+ : mapStepTypeToNodeType(step.stepType)
230
401
 
231
402
  // Build node data
232
403
  const nodeData: any = {
@@ -250,6 +421,17 @@ export function definitionToGraph(
250
421
  nodeData.config = (step as any).config
251
422
  }
252
423
 
424
+ // Editor-owned step metadata round-trips as-is; the quarantined config a
425
+ // step-type conversion produced is lifted out so the inspector can show it.
426
+ const stepMetadata = (step as any).metadata
427
+ if (stepMetadata && typeof stepMetadata === 'object') {
428
+ nodeData.stepMetadata = stepMetadata
429
+ const unmappedConfig = (stepMetadata as Record<string, unknown>).unmappedConfig
430
+ if (unmappedConfig && typeof unmappedConfig === 'object') {
431
+ nodeData.unmappedConfig = unmappedConfig
432
+ }
433
+ }
434
+
253
435
  // Add user task data
254
436
  if (step.stepType === 'USER_TASK' && step.userTaskConfig) {
255
437
  nodeData.assignedTo = step.userTaskConfig.assignedTo
@@ -277,6 +459,11 @@ export function definitionToGraph(
277
459
  if (step.userTaskConfig.escalationRules) {
278
460
  nodeData.escalationRules = step.userTaskConfig.escalationRules
279
461
  }
462
+
463
+ for (const key of USER_TASK_INSPECTOR_KEYS) {
464
+ const persisted = (step.userTaskConfig as Record<string, unknown>)[key]
465
+ if (persisted !== undefined) nodeData[key] = persisted
466
+ }
280
467
  }
281
468
 
282
469
  // Add wait for signal data
@@ -284,16 +471,48 @@ export function definitionToGraph(
284
471
  nodeData.signalConfig = (step as any).signalConfig
285
472
  }
286
473
 
474
+ // Add sub-workflow port contract so the node renders the child's IN/OUT
475
+ // ports without opening it. Resolved from the supplied childContracts map.
476
+ if (step.stepType === 'SUB_WORKFLOW') {
477
+ const subWorkflowId = (step as any).config?.subWorkflowId
478
+ const contract = subWorkflowId ? childContracts?.get(subWorkflowId) : undefined
479
+ if (contract?.inputs?.length) nodeData.inputs = contract.inputs
480
+ if (contract?.outputs?.length) nodeData.outputs = contract.outputs
481
+ // Display-only mirror of config.subWorkflowId/version, so the node renders
482
+ // "Invokes: <id>" without re-reading config. The runtime + editor dialog
483
+ // keep config.subWorkflowId/version as the source of truth.
484
+ if ((step as any).config) {
485
+ nodeData.subWorkflowId = (step as any).config.subWorkflowId
486
+ if ((step as any).config.version != null) {
487
+ nodeData.version = (step as any).config.version
488
+ }
489
+ }
490
+ }
491
+
287
492
  // Add step activities data (for AUTOMATED steps)
288
493
  if (step.stepType === 'AUTOMATED' && (step as any).activities) {
289
494
  nodeData.activities = (step as any).activities
290
495
  }
291
496
 
497
+ // Add invoke-agent data (compiled AUTOMATED step). Carry the signalConfig and
498
+ // a display-only agentId so the node renders without re-parsing activities.
499
+ if (invokeAgentActivity) {
500
+ if ((step as any).signalConfig) {
501
+ nodeData.signalConfig = (step as any).signalConfig
502
+ }
503
+ nodeData.agentId = invokeAgentActivity.config?.agentId
504
+ }
505
+
292
506
  // Add pre-conditions data (for START steps)
293
507
  if (step.stepType === 'START' && (step as any).preConditions) {
294
508
  nodeData.preConditions = (step as any).preConditions
295
509
  }
296
510
 
511
+ // Error directive (spec 5.9)
512
+ if ((step as any).errorDirective) {
513
+ nodeData.errorDirective = (step as any).errorDirective
514
+ }
515
+
297
516
  // Set badge based on type
298
517
  nodeData.badge = getBadgeForNodeType(nodeType)
299
518
 
@@ -308,15 +527,42 @@ export function definitionToGraph(
308
527
  }
309
528
  })
310
529
 
530
+ const decisionTransitionIdsByStep = new Map<string, Set<string>>()
531
+ for (const step of definition.steps) {
532
+ if (step.stepType !== 'USER_TASK') continue
533
+ const transitionIds = (step.userTaskConfig?.decisions ?? [])
534
+ .map((decision: { transitionId?: unknown }) => decision.transitionId)
535
+ .filter(
536
+ (transitionId: unknown): transitionId is string =>
537
+ typeof transitionId === 'string',
538
+ )
539
+ if (transitionIds.length > 0) {
540
+ decisionTransitionIdsByStep.set(step.stepId, new Set(transitionIds))
541
+ }
542
+ }
543
+
311
544
  // Convert transitions to edges
312
545
  const edges: Edge[] = definition.transitions.map((transition) => {
313
- return {
546
+ const routeTransition: RouteKindTransitionLike = transition
547
+ const routeKind = findRouteKindDescriptor(routeTransition.kind)
548
+ const decisionSourceHandle = decisionTransitionIdsByStep
549
+ .get(transition.fromStepId)
550
+ ?.has(transition.transitionId)
551
+ ? transition.transitionId
552
+ : undefined
553
+ return buildWorkflowRouteEdge({
314
554
  id: transition.transitionId,
315
555
  source: transition.fromStepId,
316
556
  target: transition.toStepId,
317
- type: 'workflowTransition',
557
+ // A kinded route re-attaches to its own output handle so the canvas
558
+ // renders it leaving the same port the author drew it from.
559
+ sourceHandle: routeKind
560
+ ? routeKind.resolveSourceHandle(routeTransition)
561
+ : decisionSourceHandle,
318
562
  data: {
319
563
  trigger: transition.trigger,
564
+ ...(routeKind ? { kind: routeKind.kind } : {}),
565
+ ...(routeTransition.outcomeKind ? { outcomeKind: routeTransition.outcomeKind } : {}),
320
566
  transitionName: (transition as any).transitionName,
321
567
  priority: (transition as any).priority !== undefined ? (transition as any).priority : 0,
322
568
  continueOnActivityFailure: (transition as any).continueOnActivityFailure !== undefined
@@ -324,126 +570,338 @@ export function definitionToGraph(
324
570
  : false,
325
571
  preConditions: transition.preConditions || [],
326
572
  postConditions: transition.postConditions || [],
573
+ condition: (transition as any).condition,
327
574
  activities: transition.activities || [],
328
575
  label: (transition as any).transitionName || (transition as any).label, // Backward compat
329
576
  state: (transition as any).state || 'pending', // Default edge state
330
577
  },
331
- }
578
+ })
332
579
  })
333
580
 
334
581
  return { nodes, edges }
335
582
  }
336
583
 
337
584
  /**
338
- * Calculate smart layout positions for workflow nodes
339
- * Uses a layered/hierarchical layout algorithm that:
340
- * 1. Assigns levels (ranks) to nodes based on graph topology
341
- * 2. Spreads sibling nodes horizontally at the same level
342
- * 3. Centers merge points below their incoming nodes
585
+ * Compute overlap-free, node-size-aware layout positions using `@dagrejs/dagre`.
586
+ *
587
+ * Builds a layered graph (default `rankdir: 'LR'` → left→right flow), runs dagre
588
+ * to rank nodes and minimize edge crossings, then converts dagre's center-origin
589
+ * coordinates to React Flow's top-left origin. Returns a `Map` of `stepId` →
590
+ * top-left `{ x, y }`, the same shape the previous custom layout produced.
591
+ *
592
+ * Only control-flow transitions are passed here — drag-authored data mappings
593
+ * are not transitions (they live in the target step's `config.inputMapping`).
343
594
  */
344
- function calculateSmartLayout(
345
- steps: any[],
346
- transitions: any[],
347
- spacing: { vertical: number; horizontal: number }
348
- ): Map<string, { x: number; y: number }> {
349
- const positions = new Map<string, { x: number; y: number }>()
595
+ /**
596
+ * Approximate a node card's rendered footprint when its true measured size is
597
+ * not yet known (initial open, before React Flow measures the DOM). Cards are
598
+ * `w-fit` between `NODE_MIN_WIDTH` and `NODE_MAX_WIDTH` (see lib/node-geometry); their
599
+ * width is driven mostly by the two-line `line-clamp-2` description, which pushes
600
+ * almost any described node to the max width. So a node WITH a description is
601
+ * estimated at the cap (and taller for the extra line); a bare-title node sizes
602
+ * to its title. Underestimating here is what makes ranks overlap, so this errs
603
+ * toward the real (larger) footprint. The Auto-arrange path uses exact measured
604
+ * sizes instead and does not rely on this.
605
+ */
606
+ function estimateNodeSize(
607
+ label: unknown,
608
+ hasDescription: boolean,
609
+ isTerminal: boolean,
610
+ outcomeRowCount = 0,
611
+ ): { width: number; height: number } {
612
+ const text = typeof label === 'string' ? label.trim() : ''
613
+ const titleWidth = Math.round(text.length * 7) + 64
614
+ // Terminals are auto-width pills carrying only an icon and a name: no
615
+ // description row, no minimum card width.
616
+ if (isTerminal) {
617
+ return {
618
+ width: Math.min(Math.max(TERMINAL_NODE_MIN_WIDTH, titleWidth), NODE_MAX_WIDTH),
619
+ height: TERMINAL_NODE_HEIGHT,
620
+ }
621
+ }
622
+ const width = hasDescription
623
+ ? NODE_MAX_WIDTH
624
+ : Math.min(Math.max(NODE_MIN_WIDTH, titleWidth), NODE_MAX_WIDTH)
625
+ const bodyHeight = hasDescription ? NODE_HEIGHT + NODE_DESCRIPTION_HEIGHT : NODE_HEIGHT
626
+ const footerHeight =
627
+ outcomeRowCount > 0
628
+ ? NODE_OUTCOME_FOOTER_CHROME_HEIGHT + outcomeRowCount * NODE_OUTCOME_ROW_HEIGHT
629
+ : 0
630
+ return { width, height: bodyHeight + footerHeight }
631
+ }
350
632
 
351
- if (steps.length === 0) return positions
633
+ /**
634
+ * START / END, in either vocabulary: `definitionToGraph` lays out definition
635
+ * steps (which carry `stepType`), `applyAutoLayout` lays out React Flow nodes
636
+ * (which carry the editor `nodeType`).
637
+ */
638
+ interface NodeFootprintLike {
639
+ width?: unknown
640
+ height?: unknown
641
+ description?: unknown
642
+ stepName?: unknown
643
+ label?: unknown
644
+ stepType?: unknown
645
+ nodeType?: unknown
646
+ stepId?: unknown
647
+ userTaskConfig?: { decisions?: unknown }
648
+ decisions?: unknown
649
+ activities?: unknown
650
+ }
352
651
 
353
- // Build adjacency lists
354
- const outgoing = new Map<string, string[]>() // node -> children
355
- const incoming = new Map<string, string[]>() // node -> parents
652
+ interface OutcomeLayoutTransitionLike {
653
+ fromStepId?: unknown
654
+ kind?: unknown
655
+ outcomeKind?: unknown
656
+ }
356
657
 
357
- for (const step of steps) {
358
- outgoing.set(step.stepId, [])
359
- incoming.set(step.stepId, [])
658
+ function isTerminalStep(step: NodeFootprintLike): boolean {
659
+ return step.stepType === 'START'
660
+ || step.stepType === 'END'
661
+ || step.nodeType === 'start'
662
+ || step.nodeType === 'end'
663
+ }
664
+
665
+ /**
666
+ * Footprint dagre reserves for a node: its exact measured size when React Flow
667
+ * has already laid it out (the Auto-arrange path passes `node.measured`),
668
+ * otherwise the description-aware estimate above. Exported so a layout test can
669
+ * assert that the boxes dagre reserved actually do not overlap.
670
+ */
671
+ export function nodeFootprint(
672
+ step: NodeFootprintLike,
673
+ outcomeRowCount = 0,
674
+ ): { width: number; height: number } {
675
+ if (typeof step.width === 'number' && typeof step.height === 'number') {
676
+ return { width: step.width, height: step.height }
360
677
  }
678
+ const description = step.description
679
+ const hasDescription = typeof description === 'string' && description.trim().length > 0
680
+ return estimateNodeSize(
681
+ step.stepName ?? step.label,
682
+ hasDescription,
683
+ isTerminalStep(step),
684
+ outcomeRowCount,
685
+ )
686
+ }
361
687
 
362
- for (const t of transitions) {
363
- const children = outgoing.get(t.fromStepId) || []
364
- children.push(t.toStepId)
365
- outgoing.set(t.fromStepId, children)
688
+ /**
689
+ * How many outcome rows a step's footer renders (fidelity gap #4). An agent step
690
+ * shows its WIRED outcomes plus `approved`; a user task shows one row per
691
+ * authored decision. Both are derived here rather than measured, because dagre
692
+ * runs before React Flow has laid a single card out.
693
+ *
694
+ * A footer that renders at all also carries the step's DEFAULT route as its last
695
+ * row, which is why a non-empty count gets one more: under-estimating here is
696
+ * exactly what makes dagre pack ranks into each other.
697
+ */
698
+ function countOutcomeRows(
699
+ step: NodeFootprintLike,
700
+ transitions: OutcomeLayoutTransitionLike[],
701
+ ): number {
702
+ const rows = countAuthoredOutcomeRows(step, transitions)
703
+ return rows > 0 ? rows + 1 : 0
704
+ }
366
705
 
367
- const parents = incoming.get(t.toStepId) || []
368
- parents.push(t.fromStepId)
369
- incoming.set(t.toStepId, parents)
706
+ function countAuthoredOutcomeRows(
707
+ step: NodeFootprintLike,
708
+ transitions: OutcomeLayoutTransitionLike[],
709
+ ): number {
710
+ const decisions = step?.userTaskConfig?.decisions ?? step?.decisions
711
+ if (Array.isArray(decisions)) {
712
+ return decisions.filter(
713
+ (decision) =>
714
+ typeof decision === 'object'
715
+ && decision !== null
716
+ && typeof (decision as { transitionId?: unknown }).transitionId === 'string',
717
+ ).length
370
718
  }
371
-
372
- // Find start node(s) - nodes with no incoming edges
373
- const startNodes = steps.filter(s => (incoming.get(s.stepId) || []).length === 0)
374
- if (startNodes.length === 0) {
375
- // Fallback: use first step as start
376
- startNodes.push(steps[0])
719
+ if (!isInvokeAgentStep(step)) return 0
720
+ const wired = new Set<string>()
721
+ for (const transition of transitions) {
722
+ if (transition?.fromStepId !== step.stepId) continue
723
+ if (transition?.kind !== 'outcome') continue
724
+ if (typeof transition.outcomeKind === 'string') wired.add(transition.outcomeKind)
377
725
  }
726
+ wired.add('approved')
727
+ return wired.size
728
+ }
378
729
 
379
- // Assign levels using BFS (longest path from start)
380
- const levels = new Map<string, number>()
381
- const queue: Array<{ id: string; level: number }> = []
730
+ function isInvokeAgentStep(step: NodeFootprintLike): boolean {
731
+ if (step?.nodeType === 'invokeAgent') return true
732
+ const activities = step?.activities
733
+ return Array.isArray(activities)
734
+ && activities.some(
735
+ (activity) =>
736
+ typeof activity === 'object'
737
+ && activity !== null
738
+ && (activity as { activityType?: unknown }).activityType === 'INVOKE_AGENT',
739
+ )
740
+ }
382
741
 
383
- for (const start of startNodes) {
384
- queue.push({ id: start.stepId, level: 0 })
385
- }
742
+ function layoutWithDagre(
743
+ steps: any[],
744
+ transitions: any[],
745
+ options: LayoutWithDagreOptions = {}
746
+ ): Map<string, { x: number; y: number }> {
747
+ const positions = new Map<string, { x: number; y: number }>()
386
748
 
387
- while (queue.length > 0) {
388
- const { id, level } = queue.shift()!
389
- const currentLevel = levels.get(id)
749
+ if (steps.length === 0) return positions
750
+
751
+ const rankdir = options.direction ?? 'LR'
390
752
 
391
- // Only propagate when this path improves the node's level (longest path).
392
- // Without this guard a cyclic graph (renegotiation/revision loops) keeps
393
- // re-enqueuing children forever and freezes the browser (script timeout).
394
- if (currentLevel !== undefined && level <= currentLevel) continue
395
- levels.set(id, level)
753
+ const graph = new dagre.graphlib.Graph()
754
+ graph.setDefaultEdgeLabel(() => ({}))
755
+ graph.setGraph({ rankdir, nodesep: 60, ranksep: 80 })
396
756
 
397
- // Safety cap: in a DAG a node's level is bounded by the node count; a
398
- // higher value means we are walking a cycle, so stop descending.
399
- if (level > steps.length) continue
757
+ // Reserve each node's real footprint (measured when available, else a
758
+ // description-aware estimate). `ranksep`/`nodesep` then become the actual
759
+ // visible gap between cards, so the spacing is neither cramped nor blown apart.
760
+ for (const step of steps) {
761
+ graph.setNode(step.stepId, nodeFootprint(step, countOutcomeRows(step, transitions)))
762
+ }
400
763
 
401
- const children = outgoing.get(id) || []
402
- for (const child of children) {
403
- queue.push({ id: child, level: level + 1 })
764
+ // Transition labels are hover-only (WorkflowTransitionEdge), so they occupy no
765
+ // persistent canvas space — the layout no longer reserves a label pill between
766
+ // ranks, keeping nodes tight against `ranksep` instead of pushing them apart by
767
+ // the (previously up to 220px wide) label footprint.
768
+ for (const transition of transitions) {
769
+ if (graph.hasNode(transition.fromStepId) && graph.hasNode(transition.toStepId)) {
770
+ graph.setEdge(transition.fromStepId, transition.toStepId, {})
404
771
  }
405
772
  }
406
773
 
407
- // Group nodes by level
408
- const nodesByLevel = new Map<number, string[]>()
409
- for (const [nodeId, level] of levels) {
410
- const nodesAtLevel = nodesByLevel.get(level) || []
411
- nodesAtLevel.push(nodeId)
412
- nodesByLevel.set(level, nodesAtLevel)
774
+ dagre.layout(graph)
775
+
776
+ for (const step of steps) {
777
+ const node = graph.node(step.stepId)
778
+ if (!node || typeof node.x !== 'number' || typeof node.y !== 'number') continue
779
+ // dagre returns the node center; React Flow positions use the top-left corner.
780
+ // Offset by this node's own footprint (set above), not a shared constant.
781
+ positions.set(step.stepId, {
782
+ x: node.x - node.width / 2,
783
+ y: node.y - node.height / 2,
784
+ })
413
785
  }
414
786
 
415
- // Calculate positions
416
- const centerX = 400 // Center line for the graph
417
- const startY = 50
787
+ return positions
788
+ }
418
789
 
419
- for (const [level, nodeIds] of nodesByLevel) {
420
- const count = nodeIds.length
421
- const y = startY + level * spacing.vertical
790
+ /** Gap between the main flow and the return lane a loop node is dropped into. */
791
+ export const RETURN_LANE_GAP = 64
422
792
 
423
- if (count === 1) {
424
- // Single node at this level - center it
425
- positions.set(nodeIds[0], { x: centerX, y })
426
- } else {
427
- // Multiple nodes at this level - spread them horizontally
428
- const totalWidth = (count - 1) * spacing.horizontal
429
- const startX = centerX - totalWidth / 2
430
-
431
- // Sort nodes by their parent's position for consistent ordering
432
- nodeIds.sort((a, b) => {
433
- const parentsA = incoming.get(a) || []
434
- const parentsB = incoming.get(b) || []
435
- const parentPosA = parentsA.length > 0 ? (positions.get(parentsA[0])?.x || 0) : 0
436
- const parentPosB = parentsB.length > 0 ? (positions.get(parentsB[0])?.x || 0) : 0
437
- return parentPosA - parentPosB
438
- })
793
+ /**
794
+ * Drop dedicated return nodes into a lane BELOW the main flow (issue: loop route
795
+ * lines cross-cutting the cards).
796
+ *
797
+ * dagre lays out LR and ranks a loop node (e.g. a retry `WAIT_FOR_TIMER`) to the
798
+ * RIGHT of the step it routes back to, so its back-edge curves across the row and
799
+ * reads as spaghetti. This post-pass finds a node whose ONLY outgoing edge is a
800
+ * back-edge (its target sits left of it) — i.e. a node that exists purely to
801
+ * route back — and lowers it beneath every card its return arc spans, keeping its
802
+ * x. The forward edge then drops down to it and the return edge rises back up as
803
+ * one clean arc under the row.
804
+ *
805
+ * Guards keep it conservative: only single-out-edge return nodes move, so a
806
+ * genuine business loop through a multi-branch step is left to dagre. PURE.
807
+ */
808
+ export function liftReturnNodesBelow(
809
+ positions: Map<string, { x: number; y: number }>,
810
+ sizeById: Map<string, { width: number; height: number }>,
811
+ transitions: { fromStepId: string; toStepId: string }[],
812
+ gap: number = RETURN_LANE_GAP,
813
+ ): Map<string, { x: number; y: number }> {
814
+ const outDegree = new Map<string, number>()
815
+ for (const transition of transitions) {
816
+ outDegree.set(transition.fromStepId, (outDegree.get(transition.fromStepId) ?? 0) + 1)
817
+ }
439
818
 
440
- nodeIds.forEach((nodeId, idx) => {
441
- positions.set(nodeId, { x: startX + idx * spacing.horizontal, y })
442
- })
819
+ const widthOf = (id: string) => sizeById.get(id)?.width ?? NODE_MIN_WIDTH
820
+ const heightOf = (id: string) => sizeById.get(id)?.height ?? NODE_HEIGHT
821
+
822
+ const result = new Map(positions)
823
+ for (const transition of transitions) {
824
+ const from = result.get(transition.fromStepId)
825
+ const to = result.get(transition.toStepId)
826
+ if (!from || !to) continue
827
+ // A back-edge in an LR layout: the target sits left of the source.
828
+ if (to.x >= from.x) continue
829
+ // Only a DEDICATED return node moves — one whose sole job is to route back.
830
+ if ((outDegree.get(transition.fromStepId) ?? 0) !== 1) continue
831
+
832
+ const spanLeft = to.x
833
+ const spanRight = from.x + widthOf(transition.fromStepId)
834
+ let laneTop = Number.NEGATIVE_INFINITY
835
+ for (const [id, pos] of result) {
836
+ if (id === transition.fromStepId) continue
837
+ const nodeRight = pos.x + widthOf(id)
838
+ if (nodeRight < spanLeft || pos.x > spanRight) continue // no horizontal overlap
839
+ laneTop = Math.max(laneTop, pos.y + heightOf(id))
443
840
  }
841
+ if (laneTop === Number.NEGATIVE_INFINITY) continue
842
+ result.set(transition.fromStepId, { x: from.x, y: Math.round(laneTop + gap) })
444
843
  }
844
+ return result
845
+ }
445
846
 
446
- return positions
847
+ /**
848
+ * Re-run the dagre layered layout (`rankdir: 'LR'`) directly over React Flow
849
+ * nodes + edges and return a NEW node array with refreshed `position` values.
850
+ *
851
+ * This is the single intentional full re-layout entry point (the "Auto-arrange"
852
+ * toolbar action): it deliberately IGNORES any stored `_editorPosition` and
853
+ * re-tidies the whole graph. Every other node field (`data`, `type`, handle
854
+ * config, …) is preserved — only `position` is replaced. Data-mapping edges are
855
+ * excluded from the rank graph since they are not control-flow transitions.
856
+ */
857
+ export function applyAutoLayout(nodes: Node[], edges: Edge[]): Node[] {
858
+ // Use each node's exact measured footprint so dagre reserves the real on-screen
859
+ // size; React Flow has already measured the cards by the time the user clicks
860
+ // Auto-arrange. Fall back to the estimate only for any not-yet-measured node.
861
+ // Annotations are not ranked: dagre only knows about the control-flow graph,
862
+ // so a note or group placed deliberately beside a step keeps the position its
863
+ // author gave it while Tidy re-lays the steps around it.
864
+ // The trigger pill is excluded for the same reason a note is, only harder: it
865
+ // has no rank at all. It is positioned relative to the START terminal it
866
+ // annotates, so ranking it would move it out from under its own anchor.
867
+ const steps = nodes
868
+ .filter((node) => !isAnnotationNode(node) && !isTriggerNode(node))
869
+ .map((node) => ({
870
+ stepId: node.id,
871
+ stepName: (node.data as any)?.label,
872
+ nodeType: node.type,
873
+ description: (node.data as any)?.description,
874
+ width: node.measured?.width,
875
+ height: node.measured?.height,
876
+ }))
877
+ const transitions = edges
878
+ .filter((edge) => !isDataMappingEdge(edge))
879
+ .map((edge) => ({
880
+ fromStepId: edge.source,
881
+ toStepId: edge.target,
882
+ }))
883
+
884
+ const positions = layoutWithDagre(steps, transitions, {
885
+ direction: 'LR',
886
+ nodeWidth: NODE_MIN_WIDTH,
887
+ nodeHeight: NODE_HEIGHT,
888
+ })
889
+
890
+ // Post-pass: lower dedicated return nodes (retry timers, loop-back waits) into
891
+ // a lane below the row so their return arc reads cleanly instead of cutting
892
+ // across the cards.
893
+ const sizeById = new Map<string, { width: number; height: number }>(
894
+ steps.map((step) => [
895
+ step.stepId as string,
896
+ { width: step.width ?? NODE_MIN_WIDTH, height: step.height ?? NODE_HEIGHT },
897
+ ]),
898
+ )
899
+ const laidOut = liftReturnNodesBelow(positions, sizeById, transitions)
900
+
901
+ return nodes.map((node) => {
902
+ const next = laidOut.get(node.id)
903
+ return next ? { ...node, position: { x: next.x, y: next.y } } : node
904
+ })
447
905
  }
448
906
 
449
907
  /**
@@ -455,9 +913,17 @@ function mapNodeTypeToStepType(nodeType: string): string {
455
913
  end: 'END',
456
914
  userTask: 'USER_TASK',
457
915
  automated: 'AUTOMATED',
916
+ subWorkflow: 'SUB_WORKFLOW',
458
917
  decision: 'DECISION',
459
918
  waitForSignal: 'WAIT_FOR_SIGNAL',
460
919
  waitForTimer: 'WAIT_FOR_TIMER',
920
+ waitForCondition: 'WAIT_FOR_CONDITION',
921
+ parallelFork: 'PARALLEL_FORK',
922
+ parallelJoin: 'PARALLEL_JOIN',
923
+ // The invoke-agent node is a specialization of an AUTOMATED step.
924
+ invokeAgent: 'AUTOMATED',
925
+ ifElse: 'IF_ELSE',
926
+ switch: 'SWITCH',
461
927
  }
462
928
  return mapping[nodeType] || 'AUTOMATED'
463
929
  }
@@ -471,9 +937,15 @@ function mapStepTypeToNodeType(stepType: string): string {
471
937
  END: 'end',
472
938
  USER_TASK: 'userTask',
473
939
  AUTOMATED: 'automated',
940
+ SUB_WORKFLOW: 'subWorkflow',
474
941
  DECISION: 'decision',
475
942
  WAIT_FOR_SIGNAL: 'waitForSignal',
476
943
  WAIT_FOR_TIMER: 'waitForTimer',
944
+ WAIT_FOR_CONDITION: 'waitForCondition',
945
+ PARALLEL_FORK: 'parallelFork',
946
+ PARALLEL_JOIN: 'parallelJoin',
947
+ IF_ELSE: 'ifElse',
948
+ SWITCH: 'switch',
477
949
  }
478
950
  return mapping[stepType] || 'automated'
479
951
  }
@@ -481,15 +953,22 @@ function mapStepTypeToNodeType(stepType: string): string {
481
953
  /**
482
954
  * Get badge text for node type
483
955
  */
484
- function getBadgeForNodeType(nodeType: string): string {
956
+ export function getBadgeForNodeType(nodeType: string): string {
485
957
  const badges: Record<string, string> = {
486
958
  start: 'Start',
487
959
  end: 'End',
488
960
  userTask: 'User Task',
489
961
  automated: 'Automated',
490
962
  decision: 'Decision',
963
+ subWorkflow: 'Sub-Workflow',
491
964
  waitForSignal: 'Wait for Signal',
492
965
  waitForTimer: 'Wait for Timer',
966
+ waitForCondition: 'Wait for Condition',
967
+ parallelFork: 'Parallel Fork',
968
+ parallelJoin: 'Parallel Join',
969
+ invokeAgent: 'Invoke Agent',
970
+ ifElse: 'If / Else',
971
+ switch: 'Switch',
493
972
  }
494
973
  return badges[nodeType] || 'Task'
495
974
  }
@@ -504,9 +983,16 @@ export interface ValidationError {
504
983
  edgeId?: string
505
984
  }
506
985
 
507
- export function validateWorkflowGraph(nodes: Node[], edges: Edge[]): ValidationError[] {
986
+ export function validateWorkflowGraph(allNodes: Node[], edges: Edge[]): ValidationError[] {
508
987
  const errors: ValidationError[] = []
509
988
 
989
+ // Annotations are documentation, not steps: a sticky note has no routes by
990
+ // design and must never be reported as a disconnected node. The trigger pill
991
+ // is skipped for a stronger reason: it is not a step, so counting it would
992
+ // corrupt the exactly-one-START / at-least-one-END invariants this function
993
+ // exists to enforce.
994
+ const nodes = allNodes.filter((node) => !isAnnotationNode(node) && !isTriggerNode(node))
995
+
510
996
  // Check for at least one start node
511
997
  const startNodes = nodes.filter((n) => n.type === 'start')
512
998
  if (startNodes.length === 0) {
@@ -657,14 +1143,38 @@ export function generateStepId(prefix: string = 'step'): string {
657
1143
  return sanitizeId(id)
658
1144
  }
659
1145
 
1146
+ /** Prefix marking a durable, opaque transition id. */
1147
+ export const DURABLE_TRANSITION_ID_PREFIX = 't_'
1148
+
1149
+ const LEGACY_TRANSITION_ID_PATTERN = /^e_/
1150
+
660
1151
  /**
661
- * Generate unique transition ID
1152
+ * Generate a durable, opaque transition ID.
1153
+ *
1154
+ * Endpoint-derived ids (`e_<from>_<to>`) tie a route's identity to the pair of
1155
+ * steps it happens to connect today, so re-pointing an edge would silently
1156
+ * change the id that mid-flight state resolves against
1157
+ * (`instance.pendingTransition`, `WorkflowBranchInstance.branchKey`). Opaque ids
1158
+ * keep route identity stable across reattachment and let two routes share the
1159
+ * same endpoints (a normal route and an error route, for example).
1160
+ *
1161
+ * Legacy endpoint-derived ids stay fully valid: stored definitions, seeded
1162
+ * examples and gallery templates keep their ids on load and save, and the
1163
+ * engine treats every transition id as an opaque string.
1164
+ *
1165
+ * The endpoint parameters are accepted for signature compatibility with callers
1166
+ * written against the endpoint-derived form; they no longer affect the result.
662
1167
  */
663
- export function generateTransitionId(fromStepId: string, toStepId: string): string {
664
- const id = `e_${fromStepId}_${toStepId}`
1168
+ export function generateTransitionId(_fromStepId?: string, _toStepId?: string): string {
1169
+ const id = `${DURABLE_TRANSITION_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 11)}`
665
1170
  return sanitizeId(id)
666
1171
  }
667
1172
 
1173
+ /** True when the id uses the legacy endpoint-derived (`e_<from>_<to>`) shape. */
1174
+ export function isLegacyTransitionId(transitionId: string): boolean {
1175
+ return LEGACY_TRANSITION_ID_PATTERN.test(transitionId)
1176
+ }
1177
+
668
1178
  /**
669
1179
  * Append a new edge to the list, skipping duplicate connections.
670
1180
  *