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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1238) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/AGENTS.md +4 -3
  3. package/agentic/standalone-guide.md +1 -1
  4. package/build.mjs +16 -0
  5. package/dist/generated/entities/action_log/index.js +2 -0
  6. package/dist/generated/entities/action_log/index.js.map +2 -2
  7. package/dist/generated/entities/user/index.js +2 -0
  8. package/dist/generated/entities/user/index.js.map +2 -2
  9. package/dist/generated/entities/user_task/index.js +14 -0
  10. package/dist/generated/entities/user_task/index.js.map +2 -2
  11. package/dist/generated/entities/workflow_definition/index.js +6 -0
  12. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  13. package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
  14. package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
  15. package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
  16. package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
  17. package/dist/generated/entities/workflow_instance/index.js +4 -0
  18. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  19. package/dist/generated/entities.ids.generated.js +4 -1
  20. package/dist/generated/entities.ids.generated.js.map +2 -2
  21. package/dist/generated/entity-fields-registry.js +39 -0
  22. package/dist/generated/entity-fields-registry.js.map +2 -2
  23. package/dist/helpers/integration/workflowsFixtures.js +477 -2
  24. package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
  25. package/dist/helpers/integration/workflowsUi.js +148 -0
  26. package/dist/helpers/integration/workflowsUi.js.map +7 -0
  27. package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
  28. package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
  29. package/dist/modules/audit_logs/data/entities.js +5 -0
  30. package/dist/modules/audit_logs/data/entities.js.map +2 -2
  31. package/dist/modules/audit_logs/data/validators.js +1 -0
  32. package/dist/modules/audit_logs/data/validators.js.map +2 -2
  33. package/dist/modules/audit_logs/lib/projections.js +2 -1
  34. package/dist/modules/audit_logs/lib/projections.js.map +2 -2
  35. package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
  36. package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
  37. package/dist/modules/audit_logs/services/actionLogService.js +3 -0
  38. package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
  39. package/dist/modules/auth/data/entities.js +6 -0
  40. package/dist/modules/auth/data/entities.js.map +2 -2
  41. package/dist/modules/auth/lib/executionPrincipal.js +140 -0
  42. package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
  43. package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
  44. package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
  45. package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
  46. package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
  47. package/dist/modules/business_rules/data/validators.js +6 -0
  48. package/dist/modules/business_rules/data/validators.js.map +2 -2
  49. package/dist/modules/business_rules/lib/rule-engine.js +5 -3
  50. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  51. package/dist/modules/catalog/commands/products.js +5 -0
  52. package/dist/modules/catalog/commands/products.js.map +2 -2
  53. package/dist/modules/catalog/workflows.js +19 -0
  54. package/dist/modules/catalog/workflows.js.map +7 -0
  55. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
  56. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  57. package/dist/modules/customer_accounts/cli.js +80 -0
  58. package/dist/modules/customer_accounts/cli.js.map +7 -0
  59. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
  60. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
  61. package/dist/modules/customer_accounts/setup.js +4 -2
  62. package/dist/modules/customer_accounts/setup.js.map +2 -2
  63. package/dist/modules/customers/commands/deals.js +4 -0
  64. package/dist/modules/customers/commands/deals.js.map +2 -2
  65. package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
  66. package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
  67. package/dist/modules/customers/components/detail/utils.js +2 -0
  68. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  69. package/dist/modules/customers/events.js +13 -2
  70. package/dist/modules/customers/events.js.map +2 -2
  71. package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
  72. package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
  73. package/dist/modules/customers/lib/todoCompatibility.js +1 -1
  74. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  75. package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
  76. package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
  77. package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
  78. package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
  79. package/dist/modules/customers/workflows.js +29 -0
  80. package/dist/modules/customers/workflows.js.map +7 -0
  81. package/dist/modules/entities/api/records.js +13 -33
  82. package/dist/modules/entities/api/records.js.map +3 -3
  83. package/dist/modules/entities/lib/entityClassification.js +60 -0
  84. package/dist/modules/entities/lib/entityClassification.js.map +7 -0
  85. package/dist/modules/sales/commands/documents.js +31 -0
  86. package/dist/modules/sales/commands/documents.js.map +2 -2
  87. package/dist/modules/sales/events.js +12 -1
  88. package/dist/modules/sales/events.js.map +2 -2
  89. package/dist/modules/sales/workflows.js +12 -1
  90. package/dist/modules/sales/workflows.js.map +2 -2
  91. package/dist/modules/seeds/cli.js +199 -0
  92. package/dist/modules/seeds/cli.js.map +7 -0
  93. package/dist/modules/seeds/examples/sample-seed.json +26 -0
  94. package/dist/modules/seeds/index.js +12 -0
  95. package/dist/modules/seeds/index.js.map +7 -0
  96. package/dist/modules/workflows/acl.js +96 -0
  97. package/dist/modules/workflows/acl.js.map +2 -2
  98. package/dist/modules/workflows/ai-agents.js +50 -0
  99. package/dist/modules/workflows/ai-agents.js.map +7 -0
  100. package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
  101. package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
  102. package/dist/modules/workflows/ai-tools/types.js +43 -0
  103. package/dist/modules/workflows/ai-tools/types.js.map +7 -0
  104. package/dist/modules/workflows/ai-tools.js +10 -0
  105. package/dist/modules/workflows/ai-tools.js.map +7 -0
  106. package/dist/modules/workflows/api/command-settings/route.js +137 -0
  107. package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
  108. package/dist/modules/workflows/api/commands/route.js +72 -0
  109. package/dist/modules/workflows/api/commands/route.js.map +7 -0
  110. package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
  111. package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
  112. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
  113. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
  114. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
  115. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
  116. package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
  117. package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
  118. package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
  119. package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
  120. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
  121. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
  122. package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
  123. package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
  124. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
  125. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
  126. package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
  127. package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
  128. package/dist/modules/workflows/api/definitions/route.js +61 -113
  129. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  130. package/dist/modules/workflows/api/definitions/serialize.js +9 -0
  131. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  132. package/dist/modules/workflows/api/endpoints/route.js +69 -0
  133. package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
  134. package/dist/modules/workflows/api/functions/route.js +73 -0
  135. package/dist/modules/workflows/api/functions/route.js.map +7 -0
  136. package/dist/modules/workflows/api/grantable-features/route.js +75 -0
  137. package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
  138. package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
  139. package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
  140. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
  141. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
  142. package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
  143. package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
  144. package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
  145. package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
  146. package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
  147. package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
  148. package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
  149. package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
  150. package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
  151. package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
  152. package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
  153. package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
  154. package/dist/modules/workflows/api/instances/route.js +94 -3
  155. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  156. package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
  157. package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
  158. package/dist/modules/workflows/api/openapi.js +415 -4
  159. package/dist/modules/workflows/api/openapi.js.map +2 -2
  160. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
  161. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
  162. package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
  163. package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
  164. package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
  165. package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
  166. package/dist/modules/workflows/api/rule-usage/route.js +80 -0
  167. package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
  168. package/dist/modules/workflows/api/task-settings/route.js +107 -0
  169. package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
  170. package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
  171. package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
  172. package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
  173. package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
  174. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
  175. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
  176. package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
  177. package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
  178. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
  179. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
  180. package/dist/modules/workflows/api/tasks/route.js +37 -6
  181. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  182. package/dist/modules/workflows/api/tasks/serialize.js +83 -0
  183. package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
  184. package/dist/modules/workflows/api/templates/route.js +69 -0
  185. package/dist/modules/workflows/api/templates/route.js.map +7 -0
  186. package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
  187. package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
  188. package/dist/modules/workflows/api/work-inbox/route.js +119 -0
  189. package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
  190. package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
  191. package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
  192. package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
  193. package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
  194. package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
  195. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
  196. package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
  197. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  198. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  199. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  200. package/dist/modules/workflows/backend/definitions/page.js +131 -51
  201. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  202. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
  203. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
  204. package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
  205. package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
  206. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
  207. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
  208. package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
  209. package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
  210. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
  211. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
  212. package/dist/modules/workflows/backend/instances/page.js +159 -22
  213. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  214. package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
  215. package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
  216. package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
  217. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
  218. package/dist/modules/workflows/backend/tasks/page.js +8 -250
  219. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  220. package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
  221. package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
  222. package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
  223. package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
  224. package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
  225. package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
  226. package/dist/modules/workflows/cli.js +1 -1
  227. package/dist/modules/workflows/cli.js.map +2 -2
  228. package/dist/modules/workflows/commands/tasks.js +81 -0
  229. package/dist/modules/workflows/commands/tasks.js.map +7 -0
  230. package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
  231. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  232. package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
  233. package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
  234. package/dist/modules/workflows/components/AgentSelector.js +115 -0
  235. package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
  236. package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
  237. package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
  238. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
  239. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
  240. package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
  241. package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
  242. package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
  243. package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
  244. package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
  245. package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
  246. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
  247. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
  248. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
  249. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
  250. package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
  251. package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
  252. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
  253. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
  254. package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
  255. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  256. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
  257. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
  258. package/dist/modules/workflows/components/InputDataPanel.js +128 -0
  259. package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
  260. package/dist/modules/workflows/components/InspectorPanel.js +161 -0
  261. package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
  262. package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
  263. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  264. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
  265. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
  266. package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
  267. package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
  268. package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
  269. package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
  270. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  271. package/dist/modules/workflows/components/TriggersDialog.js +53 -0
  272. package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
  273. package/dist/modules/workflows/components/TriggersEditor.js +331 -0
  274. package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
  275. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
  276. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
  277. package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
  278. package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
  279. package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
  280. package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
  281. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
  282. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
  283. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
  284. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
  285. package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
  286. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  287. package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
  288. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
  289. package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
  290. package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
  291. package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
  292. package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
  293. package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
  294. package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
  295. package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
  296. package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
  297. package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
  298. package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
  299. package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
  300. package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
  301. package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
  302. package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
  303. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
  304. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
  305. package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
  306. package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
  307. package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
  308. package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
  309. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
  310. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
  311. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
  312. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
  313. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
  314. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
  315. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
  316. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  317. package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
  318. package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
  319. package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
  320. package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
  321. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
  322. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
  323. package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
  324. package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
  325. package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
  326. package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
  327. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
  328. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
  329. package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
  330. package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
  331. package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
  332. package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
  333. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
  334. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
  335. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
  336. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  337. package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
  338. package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
  339. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
  340. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
  341. package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
  342. package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
  343. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
  344. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
  345. package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
  346. package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
  347. package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
  348. package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
  349. package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
  350. package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
  351. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
  352. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
  353. package/dist/modules/workflows/components/formConfig.js +39 -10
  354. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  355. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  356. package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
  357. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
  358. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  359. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
  360. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
  361. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
  362. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
  363. package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
  364. package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
  365. package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
  366. package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
  367. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
  368. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
  369. package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
  370. package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
  371. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
  372. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
  373. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
  374. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
  375. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
  376. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
  377. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
  378. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
  379. package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
  380. package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
  381. package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
  382. package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
  383. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
  384. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
  385. package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
  386. package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
  387. package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
  388. package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
  389. package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
  390. package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
  391. package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
  392. package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
  393. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
  394. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
  395. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
  396. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
  397. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
  398. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
  399. package/dist/modules/workflows/components/nodes/index.js +14 -0
  400. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  401. package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
  402. package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
  403. package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
  404. package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
  405. package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
  406. package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
  407. package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
  408. package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
  409. package/dist/modules/workflows/components/run/RunGantt.js +130 -0
  410. package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
  411. package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
  412. package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
  413. package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
  414. package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
  415. package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
  416. package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
  417. package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
  418. package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
  419. package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
  420. package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
  421. package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
  422. package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
  423. package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
  424. package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
  425. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
  426. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
  427. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
  428. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
  429. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
  430. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
  431. package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
  432. package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
  433. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
  434. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
  435. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
  436. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
  437. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
  438. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
  439. package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
  440. package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
  441. package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
  442. package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
  443. package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
  444. package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
  445. package/dist/modules/workflows/data/entities.js +144 -4
  446. package/dist/modules/workflows/data/entities.js.map +2 -2
  447. package/dist/modules/workflows/data/metrics-validators.js +35 -0
  448. package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
  449. package/dist/modules/workflows/data/task-primitives.js +14 -0
  450. package/dist/modules/workflows/data/task-primitives.js.map +7 -0
  451. package/dist/modules/workflows/data/validators.js +504 -61
  452. package/dist/modules/workflows/data/validators.js.map +3 -3
  453. package/dist/modules/workflows/di.js +16 -1
  454. package/dist/modules/workflows/di.js.map +2 -2
  455. package/dist/modules/workflows/events.js +66 -8
  456. package/dist/modules/workflows/events.js.map +2 -2
  457. package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  458. package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  459. package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
  460. package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
  461. package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
  462. package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
  463. package/dist/modules/workflows/extension-points.js +1 -1
  464. package/dist/modules/workflows/extension-points.js.map +2 -2
  465. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
  466. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
  467. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
  468. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
  469. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
  470. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
  471. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
  472. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
  473. package/dist/modules/workflows/lib/activity-executor.js +505 -137
  474. package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
  475. package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
  476. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  477. package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
  478. package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
  479. package/dist/modules/workflows/lib/activity-registry.js +27 -0
  480. package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
  481. package/dist/modules/workflows/lib/activity-types.js +291 -0
  482. package/dist/modules/workflows/lib/activity-types.js.map +7 -0
  483. package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
  484. package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
  485. package/dist/modules/workflows/lib/advanced-config.js +31 -0
  486. package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
  487. package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
  488. package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
  489. package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
  490. package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
  491. package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
  492. package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
  493. package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
  494. package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
  495. package/dist/modules/workflows/lib/agent-review.js +66 -0
  496. package/dist/modules/workflows/lib/agent-review.js.map +7 -0
  497. package/dist/modules/workflows/lib/ai-authoring.js +155 -0
  498. package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
  499. package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
  500. package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
  501. package/dist/modules/workflows/lib/annotation-events.js +10 -0
  502. package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
  503. package/dist/modules/workflows/lib/branching-routes.js +182 -0
  504. package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
  505. package/dist/modules/workflows/lib/breach-routing.js +50 -0
  506. package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
  507. package/dist/modules/workflows/lib/bulk-replay.js +101 -0
  508. package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
  509. package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
  510. package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
  511. package/dist/modules/workflows/lib/caller-graph.js +53 -0
  512. package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
  513. package/dist/modules/workflows/lib/code-view-apply.js +86 -0
  514. package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
  515. package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
  516. package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
  517. package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
  518. package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
  519. package/dist/modules/workflows/lib/component-guard.js +7 -0
  520. package/dist/modules/workflows/lib/component-guard.js.map +7 -0
  521. package/dist/modules/workflows/lib/condition-handler.js +443 -0
  522. package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
  523. package/dist/modules/workflows/lib/context-ledger.js +448 -0
  524. package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
  525. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
  526. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
  527. package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
  528. package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
  529. package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
  530. package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
  531. package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
  532. package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
  533. package/dist/modules/workflows/lib/definition-error-body.js +33 -0
  534. package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
  535. package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
  536. package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
  537. package/dist/modules/workflows/lib/definition-grant.js +90 -0
  538. package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
  539. package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
  540. package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
  541. package/dist/modules/workflows/lib/definition-payload.js +31 -0
  542. package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
  543. package/dist/modules/workflows/lib/draft-restore.js +49 -0
  544. package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
  545. package/dist/modules/workflows/lib/dry-run.js +106 -0
  546. package/dist/modules/workflows/lib/dry-run.js.map +7 -0
  547. package/dist/modules/workflows/lib/duration.js +66 -17
  548. package/dist/modules/workflows/lib/duration.js.map +2 -2
  549. package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
  550. package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
  551. package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
  552. package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
  553. package/dist/modules/workflows/lib/editor-annotations.js +195 -0
  554. package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
  555. package/dist/modules/workflows/lib/editor-commands.js +103 -0
  556. package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
  557. package/dist/modules/workflows/lib/editor-history.js +51 -0
  558. package/dist/modules/workflows/lib/editor-history.js.map +7 -0
  559. package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
  560. package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
  561. package/dist/modules/workflows/lib/endpoint-path.js +90 -0
  562. package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
  563. package/dist/modules/workflows/lib/engine-version.js +42 -0
  564. package/dist/modules/workflows/lib/engine-version.js.map +7 -0
  565. package/dist/modules/workflows/lib/error-handler.js +132 -0
  566. package/dist/modules/workflows/lib/error-handler.js.map +7 -0
  567. package/dist/modules/workflows/lib/error-routing.js +104 -0
  568. package/dist/modules/workflows/lib/error-routing.js.map +7 -0
  569. package/dist/modules/workflows/lib/event-logger.js +23 -0
  570. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  571. package/dist/modules/workflows/lib/expression-refs.js +168 -0
  572. package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
  573. package/dist/modules/workflows/lib/failure-grouping.js +62 -0
  574. package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
  575. package/dist/modules/workflows/lib/find-definition.js +1 -0
  576. package/dist/modules/workflows/lib/find-definition.js.map +2 -2
  577. package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
  578. package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
  579. package/dist/modules/workflows/lib/graph-utils.js +328 -77
  580. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  581. package/dist/modules/workflows/lib/icon-search.js +32 -0
  582. package/dist/modules/workflows/lib/icon-search.js.map +7 -0
  583. package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
  584. package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
  585. package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
  586. package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
  587. package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
  588. package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
  589. package/dist/modules/workflows/lib/ledger-drag.js +28 -0
  590. package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
  591. package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
  592. package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
  593. package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
  594. package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
  595. package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
  596. package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
  597. package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
  598. package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
  599. package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
  600. package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
  601. package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
  602. package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
  603. package/dist/modules/workflows/lib/node-config-summary.js +128 -0
  604. package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
  605. package/dist/modules/workflows/lib/node-geometry.js +53 -0
  606. package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
  607. package/dist/modules/workflows/lib/node-nudge.js +44 -0
  608. package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
  609. package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
  610. package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
  611. package/dist/modules/workflows/lib/node-placement.js +55 -0
  612. package/dist/modules/workflows/lib/node-placement.js.map +7 -0
  613. package/dist/modules/workflows/lib/node-type-icons.js +54 -13
  614. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  615. package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
  616. package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
  617. package/dist/modules/workflows/lib/outcome-routing.js +158 -0
  618. package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
  619. package/dist/modules/workflows/lib/owned-definition.js +107 -0
  620. package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
  621. package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
  622. package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
  623. package/dist/modules/workflows/lib/palette-drag.js +36 -0
  624. package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
  625. package/dist/modules/workflows/lib/palette-drop.js +45 -0
  626. package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
  627. package/dist/modules/workflows/lib/parallel-handler.js +57 -2
  628. package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
  629. package/dist/modules/workflows/lib/port-contract.js +54 -0
  630. package/dist/modules/workflows/lib/port-contract.js.map +7 -0
  631. package/dist/modules/workflows/lib/portal-task-access.js +89 -0
  632. package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
  633. package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
  634. package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
  635. package/dist/modules/workflows/lib/route-chip-events.js +23 -0
  636. package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
  637. package/dist/modules/workflows/lib/route-chips.js +91 -0
  638. package/dist/modules/workflows/lib/route-chips.js.map +7 -0
  639. package/dist/modules/workflows/lib/route-edge.js +17 -0
  640. package/dist/modules/workflows/lib/route-edge.js.map +7 -0
  641. package/dist/modules/workflows/lib/route-kinds.js +67 -0
  642. package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
  643. package/dist/modules/workflows/lib/route-priority.js +104 -0
  644. package/dist/modules/workflows/lib/route-priority.js.map +7 -0
  645. package/dist/modules/workflows/lib/run-duration.js +44 -0
  646. package/dist/modules/workflows/lib/run-duration.js.map +7 -0
  647. package/dist/modules/workflows/lib/run-event-tone.js +25 -0
  648. package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
  649. package/dist/modules/workflows/lib/run-execution.js +305 -0
  650. package/dist/modules/workflows/lib/run-execution.js.map +7 -0
  651. package/dist/modules/workflows/lib/run-gantt.js +180 -0
  652. package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
  653. package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
  654. package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
  655. package/dist/modules/workflows/lib/run-outcome.js +48 -0
  656. package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
  657. package/dist/modules/workflows/lib/sample-resolver.js +71 -0
  658. package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
  659. package/dist/modules/workflows/lib/seeds.js +1 -1
  660. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  661. package/dist/modules/workflows/lib/server-output-contract.js +65 -0
  662. package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
  663. package/dist/modules/workflows/lib/set-variable.js +47 -0
  664. package/dist/modules/workflows/lib/set-variable.js.map +7 -0
  665. package/dist/modules/workflows/lib/signal-handler.js +63 -4
  666. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  667. package/dist/modules/workflows/lib/start-fixtures.js +42 -0
  668. package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
  669. package/dist/modules/workflows/lib/status-colors.js +153 -22
  670. package/dist/modules/workflows/lib/status-colors.js.map +2 -2
  671. package/dist/modules/workflows/lib/step-handler.js +529 -53
  672. package/dist/modules/workflows/lib/step-handler.js.map +3 -3
  673. package/dist/modules/workflows/lib/step-presentation.js +147 -0
  674. package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
  675. package/dist/modules/workflows/lib/step-through.js +26 -0
  676. package/dist/modules/workflows/lib/step-through.js.map +7 -0
  677. package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
  678. package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
  679. package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
  680. package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
  681. package/dist/modules/workflows/lib/task-decision-context.js +38 -0
  682. package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
  683. package/dist/modules/workflows/lib/task-decisions.js +49 -0
  684. package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
  685. package/dist/modules/workflows/lib/task-entity-access.js +62 -0
  686. package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
  687. package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
  688. package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
  689. package/dist/modules/workflows/lib/task-entity-types.js +36 -0
  690. package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
  691. package/dist/modules/workflows/lib/task-form-registry.js +33 -0
  692. package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
  693. package/dist/modules/workflows/lib/task-form-schema.js +75 -0
  694. package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
  695. package/dist/modules/workflows/lib/task-handler.js +251 -32
  696. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  697. package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
  698. package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
  699. package/dist/modules/workflows/lib/task-list-query.js +19 -0
  700. package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
  701. package/dist/modules/workflows/lib/task-notifications.js +119 -0
  702. package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
  703. package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
  704. package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
  705. package/dist/modules/workflows/lib/task-presets.js +35 -0
  706. package/dist/modules/workflows/lib/task-presets.js.map +7 -0
  707. package/dist/modules/workflows/lib/task-quick-action.js +45 -0
  708. package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
  709. package/dist/modules/workflows/lib/task-resolution.js +120 -0
  710. package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
  711. package/dist/modules/workflows/lib/task-sla.js +357 -0
  712. package/dist/modules/workflows/lib/task-sla.js.map +7 -0
  713. package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
  714. package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
  715. package/dist/modules/workflows/lib/task-visibility.js +194 -0
  716. package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
  717. package/dist/modules/workflows/lib/timer-handler.js +3 -1
  718. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  719. package/dist/modules/workflows/lib/transition-handler.js +148 -20
  720. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  721. package/dist/modules/workflows/lib/trigger-node.js +121 -0
  722. package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
  723. package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
  724. package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
  725. package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
  726. package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
  727. package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
  728. package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
  729. package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
  730. package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
  731. package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
  732. package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
  733. package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
  734. package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
  735. package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
  736. package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
  737. package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
  738. package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
  739. package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
  740. package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
  741. package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
  742. package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
  743. package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
  744. package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
  745. package/dist/modules/workflows/lib/workflow-executor.js +658 -6
  746. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  747. package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
  748. package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
  749. package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
  750. package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
  751. package/dist/modules/workflows/lib/workflow-templates.js +69 -0
  752. package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
  753. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
  754. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
  755. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
  756. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
  757. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
  758. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
  759. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
  760. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
  761. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
  762. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
  763. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
  764. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
  765. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
  766. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
  767. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
  768. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
  769. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
  770. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
  771. package/dist/modules/workflows/notifications.js +38 -10
  772. package/dist/modules/workflows/notifications.js.map +2 -2
  773. package/dist/modules/workflows/setup.js +81 -1
  774. package/dist/modules/workflows/setup.js.map +2 -2
  775. package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
  776. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
  777. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
  778. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
  779. package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
  780. package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
  781. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
  782. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
  783. package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
  784. package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
  785. package/dist/modules/workflows/widgets/injection-table.js +26 -0
  786. package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
  787. package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
  788. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  789. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
  790. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
  791. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
  792. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
  793. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
  794. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
  795. package/generated/entities/action_log/index.ts +1 -0
  796. package/generated/entities/user/index.ts +1 -0
  797. package/generated/entities/user_task/index.ts +7 -0
  798. package/generated/entities/workflow_definition/index.ts +3 -0
  799. package/generated/entities/workflow_definition_draft/index.ts +11 -0
  800. package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
  801. package/generated/entities/workflow_instance/index.ts +2 -0
  802. package/generated/entities.ids.generated.ts +4 -1
  803. package/generated/entity-fields-registry.ts +39 -0
  804. package/jest.setup.ts +13 -0
  805. package/package.json +8 -7
  806. package/src/helpers/integration/workflowsFixtures.ts +765 -5
  807. package/src/helpers/integration/workflowsUi.ts +318 -0
  808. package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
  809. package/src/modules/audit_logs/data/entities.ts +12 -0
  810. package/src/modules/audit_logs/data/validators.ts +1 -0
  811. package/src/modules/audit_logs/lib/projections.ts +5 -1
  812. package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
  813. package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
  814. package/src/modules/audit_logs/services/actionLogService.ts +3 -0
  815. package/src/modules/auth/data/entities.ts +21 -0
  816. package/src/modules/auth/i18n/de.json +31 -0
  817. package/src/modules/auth/i18n/en.json +31 -0
  818. package/src/modules/auth/i18n/es.json +31 -0
  819. package/src/modules/auth/i18n/ko.json +31 -0
  820. package/src/modules/auth/i18n/pl.json +31 -0
  821. package/src/modules/auth/lib/executionPrincipal.ts +235 -0
  822. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  823. package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
  824. package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
  825. package/src/modules/business_rules/data/validators.ts +6 -0
  826. package/src/modules/business_rules/i18n/de.json +4 -0
  827. package/src/modules/business_rules/i18n/en.json +4 -0
  828. package/src/modules/business_rules/i18n/es.json +4 -0
  829. package/src/modules/business_rules/i18n/ko.json +4 -0
  830. package/src/modules/business_rules/i18n/pl.json +4 -0
  831. package/src/modules/business_rules/lib/rule-engine.ts +15 -1
  832. package/src/modules/catalog/commands/products.ts +12 -0
  833. package/src/modules/catalog/i18n/de.json +1 -0
  834. package/src/modules/catalog/i18n/en.json +1 -0
  835. package/src/modules/catalog/i18n/es.json +1 -0
  836. package/src/modules/catalog/i18n/ko.json +1 -0
  837. package/src/modules/catalog/i18n/pl.json +1 -0
  838. package/src/modules/catalog/workflows.ts +35 -0
  839. package/src/modules/customer_accounts/AGENTS.md +11 -0
  840. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
  841. package/src/modules/customer_accounts/cli.ts +96 -0
  842. package/src/modules/customer_accounts/i18n/de.json +5 -0
  843. package/src/modules/customer_accounts/i18n/en.json +5 -0
  844. package/src/modules/customer_accounts/i18n/es.json +5 -0
  845. package/src/modules/customer_accounts/i18n/ko.json +5 -0
  846. package/src/modules/customer_accounts/i18n/pl.json +5 -0
  847. package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
  848. package/src/modules/customer_accounts/setup.ts +15 -3
  849. package/src/modules/customers/commands/deals.ts +5 -0
  850. package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
  851. package/src/modules/customers/components/detail/utils.ts +2 -0
  852. package/src/modules/customers/events.ts +21 -3
  853. package/src/modules/customers/i18n/de.json +4 -0
  854. package/src/modules/customers/i18n/en.json +4 -0
  855. package/src/modules/customers/i18n/es.json +4 -0
  856. package/src/modules/customers/i18n/ko.json +4 -0
  857. package/src/modules/customers/i18n/pl.json +4 -0
  858. package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
  859. package/src/modules/customers/lib/todoCompatibility.ts +4 -1
  860. package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
  861. package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
  862. package/src/modules/customers/workflows.ts +57 -0
  863. package/src/modules/entities/api/records.ts +18 -62
  864. package/src/modules/entities/lib/entityClassification.ts +102 -0
  865. package/src/modules/sales/commands/documents.ts +46 -0
  866. package/src/modules/sales/events.ts +20 -2
  867. package/src/modules/sales/i18n/de.json +2 -1
  868. package/src/modules/sales/i18n/en.json +2 -1
  869. package/src/modules/sales/i18n/es.json +2 -1
  870. package/src/modules/sales/i18n/ko.json +2 -1
  871. package/src/modules/sales/i18n/pl.json +2 -1
  872. package/src/modules/sales/workflows.ts +12 -1
  873. package/src/modules/seeds/README.md +86 -0
  874. package/src/modules/seeds/cli.ts +220 -0
  875. package/src/modules/seeds/examples/sample-seed.json +26 -0
  876. package/src/modules/seeds/index.ts +11 -0
  877. package/src/modules/workflows/AGENTS.md +851 -10
  878. package/src/modules/workflows/acl.ts +96 -0
  879. package/src/modules/workflows/ai-agents.ts +80 -0
  880. package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
  881. package/src/modules/workflows/ai-tools/types.ts +117 -0
  882. package/src/modules/workflows/ai-tools.ts +20 -0
  883. package/src/modules/workflows/api/command-settings/route.ts +171 -0
  884. package/src/modules/workflows/api/commands/route.ts +109 -0
  885. package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
  886. package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
  887. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
  888. package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
  889. package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
  890. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
  891. package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
  892. package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
  893. package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
  894. package/src/modules/workflows/api/definitions/route.ts +88 -113
  895. package/src/modules/workflows/api/definitions/serialize.ts +9 -0
  896. package/src/modules/workflows/api/endpoints/route.ts +88 -0
  897. package/src/modules/workflows/api/functions/route.ts +91 -0
  898. package/src/modules/workflows/api/grantable-features/route.ts +102 -0
  899. package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
  900. package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
  901. package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
  902. package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
  903. package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
  904. package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
  905. package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
  906. package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
  907. package/src/modules/workflows/api/instances/route.ts +135 -3
  908. package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
  909. package/src/modules/workflows/api/openapi.ts +549 -2
  910. package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
  911. package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
  912. package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
  913. package/src/modules/workflows/api/rule-usage/route.ts +94 -0
  914. package/src/modules/workflows/api/task-settings/route.ts +138 -0
  915. package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
  916. package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
  917. package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
  918. package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
  919. package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
  920. package/src/modules/workflows/api/tasks/route.ts +60 -5
  921. package/src/modules/workflows/api/tasks/serialize.ts +119 -0
  922. package/src/modules/workflows/api/templates/route.ts +87 -0
  923. package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
  924. package/src/modules/workflows/api/work-inbox/route.ts +153 -0
  925. package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
  926. package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
  927. package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
  928. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  929. package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
  930. package/src/modules/workflows/backend/definitions/page.tsx +156 -76
  931. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
  932. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
  933. package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
  934. package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
  935. package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
  936. package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
  937. package/src/modules/workflows/backend/instances/page.tsx +218 -38
  938. package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
  939. package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
  940. package/src/modules/workflows/backend/tasks/page.tsx +20 -333
  941. package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
  942. package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
  943. package/src/modules/workflows/cli.ts +1 -1
  944. package/src/modules/workflows/commands/tasks.ts +146 -0
  945. package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
  946. package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
  947. package/src/modules/workflows/components/AgentSelector.tsx +200 -0
  948. package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
  949. package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
  950. package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
  951. package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
  952. package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
  953. package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
  954. package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
  955. package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
  956. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
  957. package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
  958. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
  959. package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
  960. package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
  961. package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
  962. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
  963. package/src/modules/workflows/components/StepsEditor.tsx +9 -2
  964. package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
  965. package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
  966. package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
  967. package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
  968. package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
  969. package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
  970. package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
  971. package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
  972. package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
  973. package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
  974. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
  975. package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
  976. package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
  977. package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
  978. package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
  979. package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
  980. package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
  981. package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
  982. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
  983. package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
  984. package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
  985. package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
  986. package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
  987. package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
  988. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
  989. package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
  990. package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
  991. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
  992. package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
  993. package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
  994. package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
  995. package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
  996. package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
  997. package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
  998. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
  999. package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
  1000. package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
  1001. package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
  1002. package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
  1003. package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
  1004. package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
  1005. package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
  1006. package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
  1007. package/src/modules/workflows/components/formConfig.tsx +84 -10
  1008. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
  1009. package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
  1010. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
  1011. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
  1012. package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
  1013. package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
  1014. package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
  1015. package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
  1016. package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
  1017. package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
  1018. package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
  1019. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
  1020. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
  1021. package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
  1022. package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
  1023. package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
  1024. package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
  1025. package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
  1026. package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
  1027. package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
  1028. package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
  1029. package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
  1030. package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
  1031. package/src/modules/workflows/components/nodes/index.ts +17 -0
  1032. package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
  1033. package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
  1034. package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
  1035. package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
  1036. package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
  1037. package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
  1038. package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
  1039. package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
  1040. package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
  1041. package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
  1042. package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
  1043. package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
  1044. package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
  1045. package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
  1046. package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
  1047. package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
  1048. package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
  1049. package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
  1050. package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
  1051. package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
  1052. package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
  1053. package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
  1054. package/src/modules/workflows/data/entities.ts +397 -4
  1055. package/src/modules/workflows/data/metrics-validators.ts +51 -0
  1056. package/src/modules/workflows/data/task-primitives.ts +36 -0
  1057. package/src/modules/workflows/data/types.ts +81 -2
  1058. package/src/modules/workflows/data/validators.ts +729 -60
  1059. package/src/modules/workflows/di.ts +22 -0
  1060. package/src/modules/workflows/events.ts +68 -8
  1061. package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  1062. package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  1063. package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
  1064. package/src/modules/workflows/examples/templates/order-approval.json +230 -0
  1065. package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
  1066. package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
  1067. package/src/modules/workflows/extension-points.ts +1 -1
  1068. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
  1069. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
  1070. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
  1071. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
  1072. package/src/modules/workflows/i18n/de.json +1083 -24
  1073. package/src/modules/workflows/i18n/en.json +1081 -22
  1074. package/src/modules/workflows/i18n/es.json +1083 -24
  1075. package/src/modules/workflows/i18n/ko.json +1072 -13
  1076. package/src/modules/workflows/i18n/pl.json +1082 -23
  1077. package/src/modules/workflows/lib/activity-executor.ts +855 -186
  1078. package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
  1079. package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
  1080. package/src/modules/workflows/lib/activity-registry.ts +89 -0
  1081. package/src/modules/workflows/lib/activity-types.ts +415 -0
  1082. package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
  1083. package/src/modules/workflows/lib/advanced-config.ts +41 -0
  1084. package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
  1085. package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
  1086. package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
  1087. package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
  1088. package/src/modules/workflows/lib/agent-review.ts +171 -0
  1089. package/src/modules/workflows/lib/ai-authoring.ts +402 -0
  1090. package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
  1091. package/src/modules/workflows/lib/annotation-events.ts +15 -0
  1092. package/src/modules/workflows/lib/branching-routes.ts +280 -0
  1093. package/src/modules/workflows/lib/breach-routing.ts +142 -0
  1094. package/src/modules/workflows/lib/bulk-replay.ts +185 -0
  1095. package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
  1096. package/src/modules/workflows/lib/caller-graph.ts +104 -0
  1097. package/src/modules/workflows/lib/code-view-apply.ts +178 -0
  1098. package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
  1099. package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
  1100. package/src/modules/workflows/lib/component-guard.ts +13 -0
  1101. package/src/modules/workflows/lib/condition-handler.ts +658 -0
  1102. package/src/modules/workflows/lib/context-ledger.ts +814 -0
  1103. package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
  1104. package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
  1105. package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
  1106. package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
  1107. package/src/modules/workflows/lib/definition-error-body.ts +43 -0
  1108. package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
  1109. package/src/modules/workflows/lib/definition-grant.ts +211 -0
  1110. package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
  1111. package/src/modules/workflows/lib/definition-payload.ts +81 -0
  1112. package/src/modules/workflows/lib/draft-restore.ts +72 -0
  1113. package/src/modules/workflows/lib/dry-run.ts +203 -0
  1114. package/src/modules/workflows/lib/duration.ts +138 -24
  1115. package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
  1116. package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
  1117. package/src/modules/workflows/lib/editor-annotations.ts +301 -0
  1118. package/src/modules/workflows/lib/editor-commands.ts +205 -0
  1119. package/src/modules/workflows/lib/editor-history.ts +151 -0
  1120. package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
  1121. package/src/modules/workflows/lib/endpoint-path.ts +134 -0
  1122. package/src/modules/workflows/lib/engine-version.ts +67 -0
  1123. package/src/modules/workflows/lib/error-handler.ts +192 -0
  1124. package/src/modules/workflows/lib/error-routing.ts +236 -0
  1125. package/src/modules/workflows/lib/event-logger.ts +27 -0
  1126. package/src/modules/workflows/lib/expression-refs.ts +291 -0
  1127. package/src/modules/workflows/lib/failure-grouping.ts +134 -0
  1128. package/src/modules/workflows/lib/find-definition.ts +4 -0
  1129. package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
  1130. package/src/modules/workflows/lib/graph-utils.ts +620 -110
  1131. package/src/modules/workflows/lib/icon-search.ts +65 -0
  1132. package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
  1133. package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
  1134. package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
  1135. package/src/modules/workflows/lib/ledger-drag.ts +61 -0
  1136. package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
  1137. package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
  1138. package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
  1139. package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
  1140. package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
  1141. package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
  1142. package/src/modules/workflows/lib/node-config-summary.ts +235 -0
  1143. package/src/modules/workflows/lib/node-geometry.ts +168 -0
  1144. package/src/modules/workflows/lib/node-nudge.ts +63 -0
  1145. package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
  1146. package/src/modules/workflows/lib/node-placement.ts +104 -0
  1147. package/src/modules/workflows/lib/node-type-icons.ts +71 -10
  1148. package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
  1149. package/src/modules/workflows/lib/outcome-routing.ts +346 -0
  1150. package/src/modules/workflows/lib/owned-definition.ts +188 -0
  1151. package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
  1152. package/src/modules/workflows/lib/palette-drag.ts +68 -0
  1153. package/src/modules/workflows/lib/palette-drop.ts +114 -0
  1154. package/src/modules/workflows/lib/parallel-handler.ts +79 -2
  1155. package/src/modules/workflows/lib/port-contract.ts +107 -0
  1156. package/src/modules/workflows/lib/portal-task-access.ts +220 -0
  1157. package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
  1158. package/src/modules/workflows/lib/route-chip-events.ts +45 -0
  1159. package/src/modules/workflows/lib/route-chips.ts +177 -0
  1160. package/src/modules/workflows/lib/route-edge.ts +57 -0
  1161. package/src/modules/workflows/lib/route-kinds.ts +166 -0
  1162. package/src/modules/workflows/lib/route-priority.ts +197 -0
  1163. package/src/modules/workflows/lib/run-duration.ts +70 -0
  1164. package/src/modules/workflows/lib/run-event-tone.ts +46 -0
  1165. package/src/modules/workflows/lib/run-execution.ts +598 -0
  1166. package/src/modules/workflows/lib/run-gantt.ts +311 -0
  1167. package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
  1168. package/src/modules/workflows/lib/run-outcome.ts +142 -0
  1169. package/src/modules/workflows/lib/sample-resolver.ts +113 -0
  1170. package/src/modules/workflows/lib/seeds.ts +3 -1
  1171. package/src/modules/workflows/lib/server-output-contract.ts +120 -0
  1172. package/src/modules/workflows/lib/set-variable.ts +94 -0
  1173. package/src/modules/workflows/lib/signal-handler.ts +134 -4
  1174. package/src/modules/workflows/lib/start-fixtures.ts +93 -0
  1175. package/src/modules/workflows/lib/status-colors.ts +220 -21
  1176. package/src/modules/workflows/lib/step-handler.ts +744 -68
  1177. package/src/modules/workflows/lib/step-presentation.ts +295 -0
  1178. package/src/modules/workflows/lib/step-through.ts +71 -0
  1179. package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
  1180. package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
  1181. package/src/modules/workflows/lib/task-decision-context.ts +76 -0
  1182. package/src/modules/workflows/lib/task-decisions.ts +117 -0
  1183. package/src/modules/workflows/lib/task-entity-access.ts +181 -0
  1184. package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
  1185. package/src/modules/workflows/lib/task-entity-types.ts +66 -0
  1186. package/src/modules/workflows/lib/task-form-registry.ts +123 -0
  1187. package/src/modules/workflows/lib/task-form-schema.ts +129 -0
  1188. package/src/modules/workflows/lib/task-handler.ts +492 -51
  1189. package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
  1190. package/src/modules/workflows/lib/task-list-query.ts +46 -0
  1191. package/src/modules/workflows/lib/task-notifications.ts +218 -0
  1192. package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
  1193. package/src/modules/workflows/lib/task-presets.ts +95 -0
  1194. package/src/modules/workflows/lib/task-quick-action.ts +111 -0
  1195. package/src/modules/workflows/lib/task-resolution.ts +270 -0
  1196. package/src/modules/workflows/lib/task-sla.ts +628 -0
  1197. package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
  1198. package/src/modules/workflows/lib/task-visibility.ts +627 -0
  1199. package/src/modules/workflows/lib/timer-handler.ts +8 -1
  1200. package/src/modules/workflows/lib/transition-handler.ts +228 -20
  1201. package/src/modules/workflows/lib/trigger-node.ts +272 -0
  1202. package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
  1203. package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
  1204. package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
  1205. package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
  1206. package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
  1207. package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
  1208. package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
  1209. package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
  1210. package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
  1211. package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
  1212. package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
  1213. package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
  1214. package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
  1215. package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
  1216. package/src/modules/workflows/lib/workflow-templates.ts +91 -0
  1217. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
  1218. package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
  1219. package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
  1220. package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
  1221. package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
  1222. package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
  1223. package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
  1224. package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
  1225. package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
  1226. package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
  1227. package/src/modules/workflows/notifications.ts +40 -10
  1228. package/src/modules/workflows/setup.ts +128 -0
  1229. package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
  1230. package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
  1231. package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
  1232. package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
  1233. package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
  1234. package/src/modules/workflows/widgets/injection-table.ts +52 -2
  1235. package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
  1236. package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
  1237. package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
  1238. package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
@@ -2,20 +2,57 @@
2
2
 
3
3
  import type { Node } from '@xyflow/react'
4
4
  import { useState, useEffect, useCallback, useMemo } from 'react'
5
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@open-mercato/ui/primitives/dialog'
6
- import { Badge } from '@open-mercato/ui/primitives/badge'
7
5
  import { Alert, AlertDescription } from '@open-mercato/ui/primitives/alert'
8
6
  import { Button } from '@open-mercato/ui/primitives/button'
9
7
  import { Trash2 } from 'lucide-react'
10
8
  import { CrudForm, type CrudFormGroup, type CrudField, type CrudCustomFieldRenderProps } from '@open-mercato/ui/backend/CrudForm'
9
+ import { useT } from '@open-mercato/shared/lib/i18n/context'
11
10
  import { JsonBuilder } from '@open-mercato/ui/backend/JsonBuilder'
11
+ import { DurationInput } from '@open-mercato/ui/backend/inputs/DurationInput'
12
+ import { flash } from '@open-mercato/ui/backend/FlashMessages'
12
13
  import { FormFieldArrayEditor } from './fields/FormFieldArrayEditor'
13
- import { ActivityArrayEditor } from './fields/ActivityArrayEditor'
14
+ import { ActivityArrayEditor, type ActivityTestContext } from './fields/ActivityArrayEditor'
15
+ import { useActivityTypeOptions } from './fields/useActivityTypeOptions'
14
16
  import { MappingArrayEditor } from './fields/MappingArrayEditor'
15
17
  import { WorkflowSelectorField } from './fields/WorkflowSelectorField'
18
+ import { RolesMultiSelect } from './fields/RolesMultiSelect'
16
19
  import { StartPreConditionsEditor } from './fields/StartPreConditionsEditor'
20
+ import { AgentInvokeConfigField } from './fields/AgentInvokeConfigField'
21
+ import { IfElseRoutesField, SwitchRoutesField } from './fields/BranchingRoutesEditor'
22
+ import { RouteOrderEditor } from './fields/RouteOrderEditor'
23
+ import { TemplateTextControl } from './fields/TemplateTextControl'
24
+ import { TaskEntityBindingsField } from './fields/TaskEntityBindingsField'
25
+ import { TaskAssignmentField } from './fields/TaskAssignmentField'
26
+ import { TaskOnBreachField, TaskRemindersField } from './fields/TaskDeadlineFields'
27
+ import { AgentReviewOnBreachField } from './fields/AgentReviewOnBreachField'
28
+ import { TaskDecisionsField, TaskEditablePrefilledField } from './fields/TaskDecisionsField'
29
+ import { TASK_PRIORITY_VALUES } from '../lib/task-inspector-config'
30
+ import { AGENT_REVIEW_ASSIGNMENT_MODES } from '../lib/agent-review-inspector'
31
+ import type { RouteOrderEntry } from '../lib/route-priority'
32
+ import { ConditionBuilder } from '@open-mercato/core/modules/business_rules/components/ConditionBuilder'
33
+ import type { GroupCondition } from '@open-mercato/core/modules/business_rules/components/utils/conditionValidation'
34
+ import { InputDataPanel } from './InputDataPanel'
35
+ import { InspectorPanel, type InspectorPanelVariant } from './InspectorPanel'
36
+ import {
37
+ Select,
38
+ SelectContent,
39
+ SelectItem,
40
+ SelectTrigger,
41
+ SelectValue,
42
+ } from '@open-mercato/ui/primitives/select'
17
43
  import { nodeToFormValues, formValuesToNodeUpdates, isJsonSchemaFormat, type NodeFormValues } from '../lib/nodeFormTransforms'
44
+ import {
45
+ isConvertibleStepType,
46
+ listStepTypeConversionOptions,
47
+ listStepTypeConversionTargets,
48
+ readUnmappedStepConfig,
49
+ type ConvertibleStepType,
50
+ } from '../lib/step-type-conversion'
18
51
  import { sanitizeId } from '../lib/graph-utils'
52
+ import { isBranchingNodeType } from '../lib/branching-routes'
53
+ import type { BranchingRouteDraft, SwitchRoutesValue } from '../lib/branching-routes'
54
+ import type { LedgerEntry } from '../lib/context-ledger'
55
+ import type { PinnedSampleEnvelope } from '../lib/sample-resolver'
19
56
 
20
57
  /**
21
58
  * JsonConfigEditor - Custom field wrapper for JsonBuilder
@@ -30,12 +67,171 @@ function JsonConfigEditor({ value, setValue, disabled }: CrudCustomFieldRenderPr
30
67
  )
31
68
  }
32
69
 
70
+ /**
71
+ * DurationCrudField - Custom field wrapper for DurationInput
72
+ */
73
+ export function DurationCrudField({ id, value, setValue, disabled }: CrudCustomFieldRenderProps) {
74
+ return (
75
+ <DurationInput
76
+ id={id}
77
+ value={typeof value === 'string' ? value : ''}
78
+ onChange={setValue}
79
+ disabled={disabled}
80
+ />
81
+ )
82
+ }
83
+
84
+ /**
85
+ * RolesCrudField - Custom field wrapper for RolesMultiSelect
86
+ */
87
+ export function RolesCrudField({ id, value, setValue, disabled }: CrudCustomFieldRenderProps) {
88
+ const roles = useMemo(
89
+ () => (Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === 'string') : []),
90
+ [value],
91
+ )
92
+ return (
93
+ <RolesMultiSelect
94
+ id={id}
95
+ value={roles}
96
+ onChange={setValue}
97
+ disabled={disabled}
98
+ />
99
+ )
100
+ }
101
+
102
+ /**
103
+ * StepTypeConversionControl — "Change type…" (spec 4.5, #4237).
104
+ *
105
+ * Conversion is an action on the step, not a form value: it rewrites the node
106
+ * type and its data wholesale, so it runs through its own callback (with a
107
+ * confirmation on the page) instead of the CrudForm submit.
108
+ *
109
+ * The select still READS as the step's type: it opens on whatever the step is
110
+ * today (issue #5988 — it used to open blank on every visit, so it never said
111
+ * what the step was, not even right after a conversion), and picking a
112
+ * different entry is what arms "Change type…".
113
+ */
114
+ function StepTypeConversionControl({
115
+ nodeType,
116
+ onConvert,
117
+ }: {
118
+ nodeType: string | undefined
119
+ onConvert: (targetType: ConvertibleStepType) => void
120
+ }) {
121
+ const t = useT()
122
+ const currentType = isConvertibleStepType(nodeType) ? nodeType : null
123
+ const options = useMemo(() => listStepTypeConversionOptions(nodeType), [nodeType])
124
+ const [targetType, setTargetType] = useState<string>(currentType ?? '')
125
+
126
+ // A conversion replaces the node type under an already-mounted control, so
127
+ // the selection follows the step rather than stranding the previous choice.
128
+ useEffect(() => {
129
+ setTargetType(currentType ?? '')
130
+ }, [currentType])
131
+
132
+ if (options.length === 0) return null
133
+
134
+ const canConvert = targetType.length > 0 && targetType !== currentType
135
+
136
+ return (
137
+ <div className="space-y-2">
138
+ <p className="text-sm text-muted-foreground">
139
+ {t(
140
+ 'workflows.stepConversion.description',
141
+ 'Keeps this step’s id, name, position and wiring. Configuration the new type cannot execute is parked under Unmapped configuration instead of being deleted.',
142
+ )}
143
+ </p>
144
+ <div className="flex items-center gap-2">
145
+ <Select value={targetType} onValueChange={setTargetType}>
146
+ <SelectTrigger className="w-64" aria-label={t('workflows.steps.stepType')}>
147
+ <SelectValue placeholder={t('workflows.stepConversion.targetPlaceholder', 'Select a step type')} />
148
+ </SelectTrigger>
149
+ <SelectContent>
150
+ {options.map((candidate) => (
151
+ <SelectItem key={candidate} value={candidate}>
152
+ {t(`workflows.nodeTypes.${candidate}`)}
153
+ </SelectItem>
154
+ ))}
155
+ </SelectContent>
156
+ </Select>
157
+ <Button
158
+ type="button"
159
+ variant="outline"
160
+ disabled={!canConvert}
161
+ onClick={() => {
162
+ if (canConvert) onConvert(targetType as ConvertibleStepType)
163
+ }}
164
+ >
165
+ {t('workflows.stepConversion.action', 'Change type…')}
166
+ </Button>
167
+ </div>
168
+ </div>
169
+ )
170
+ }
171
+
172
+ /**
173
+ * UnmappedConfigDrawer — the quarantine made visible (spec 4.5). Read-only: the
174
+ * values are stored verbatim in the step metadata and are recovered by
175
+ * converting back, never edited in place.
176
+ */
177
+ function UnmappedConfigDrawer({ value }: { value: Record<string, unknown> }) {
178
+ const t = useT()
179
+ return (
180
+ <details className="rounded-md border border-border bg-muted/30 p-3">
181
+ <summary className="cursor-pointer text-sm font-medium">
182
+ {t('workflows.stepConversion.unmapped.title', 'Unmapped configuration')}
183
+ </summary>
184
+ <p className="mt-2 text-xs text-muted-foreground">
185
+ {t(
186
+ 'workflows.stepConversion.unmapped.description',
187
+ 'Kept from an earlier type change. It is stored with the step but is not executed; change the step back to recover it.',
188
+ )}
189
+ </p>
190
+ <pre className="mt-2 max-h-64 overflow-auto rounded bg-background p-2 font-mono text-xs">
191
+ {JSON.stringify(value, null, 2)}
192
+ </pre>
193
+ </details>
194
+ )
195
+ }
196
+
33
197
  export interface NodeEditDialogCrudFormProps {
34
198
  node: Node | null
35
199
  isOpen: boolean
36
200
  onClose: () => void
37
201
  onSave: (nodeId: string, updates: Partial<Node['data']>) => void
38
202
  onDelete?: (nodeId: string) => void
203
+ ledgerEntries?: LedgerEntry[]
204
+ definitionId?: string | null
205
+ samples?: Record<string, PinnedSampleEnvelope>
206
+ onPinSample?: (stepId: string, data: unknown) => void
207
+ onUnpinSample?: (stepId: string) => void
208
+ /**
209
+ * Outgoing routes of a branching step (IF_ELSE / SWITCH). The inspector edits
210
+ * transitions rather than step data, so the value round-trips through a
211
+ * dedicated callback instead of the node-update payload.
212
+ */
213
+ branchingRoutes?: SwitchRoutesValue
214
+ onSaveBranchingRoutes?: (nodeId: string, value: SwitchRoutesValue) => void
215
+ /**
216
+ * Outgoing routes of a NON-branching step, in evaluation order. Reordering the
217
+ * list derives the transition priorities (spec 4.4) — branching steps order
218
+ * their routes through their own case list instead.
219
+ */
220
+ routeOrder?: RouteOrderEntry[]
221
+ onSaveRouteOrder?: (nodeId: string, entries: RouteOrderEntry[]) => void
222
+ /**
223
+ * In-place step type conversion (spec 4.5). The page confirms the change and
224
+ * rewrites the node, because conversion replaces the node type and its data
225
+ * rather than producing a form value.
226
+ */
227
+ onConvertType?: (nodeId: string, targetType: ConvertibleStepType) => void
228
+ /**
229
+ * How the inspector is presented. Defaults to `overlay` so a caller that has
230
+ * not opted in keeps the modal shape it had.
231
+ */
232
+ variant?: InspectorPanelVariant
233
+ /** Widen the overlay Drawer to the metadata-drawer width — the step form is dense. */
234
+ wide?: boolean
39
235
  }
40
236
 
41
237
  /**
@@ -54,20 +250,40 @@ export interface NodeEditDialogCrudFormProps {
54
250
  * - automated: Activity type + activities array
55
251
  * - subWorkflow: Workflow selector + input/output mappings
56
252
  * - waitForSignal: Signal name + timeout
253
+ * - waitForTimer: Duration XOR wait-until timer configuration
254
+ * - waitForCondition: ConditionBuilder predicate + mandatory timeout policy
57
255
  * - decision: Basic fields only
58
256
  */
59
- export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete }: NodeEditDialogCrudFormProps) {
257
+ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete, ledgerEntries, definitionId, samples, onPinSample, onUnpinSample, branchingRoutes, onSaveBranchingRoutes, routeOrder, onSaveRouteOrder, onConvertType, variant = 'overlay', wide }: NodeEditDialogCrudFormProps) {
258
+ const t = useT()
259
+ const activityTypeOptions = useActivityTypeOptions()
60
260
  const [initialValues, setInitialValues] = useState<Partial<NodeFormValues>>({})
61
261
  const [showJsonSchemaWarning, setShowJsonSchemaWarning] = useState(false)
62
262
 
263
+ const activityTestContext = useMemo<ActivityTestContext | undefined>(() => {
264
+ if (!node || !onPinSample || !onUnpinSample) return undefined
265
+ const stepId = node.id
266
+ return {
267
+ definitionId: definitionId ?? null,
268
+ stepId,
269
+ pinnedSample: samples?.[stepId],
270
+ onPinSample: (data: unknown) => onPinSample(stepId, data),
271
+ onUnpinSample: () => onUnpinSample(stepId),
272
+ }
273
+ }, [node, definitionId, samples, onPinSample, onUnpinSample])
274
+
63
275
  // Load node data when dialog opens
64
276
  useEffect(() => {
65
277
  if (node && isOpen) {
66
278
  const values = nodeToFormValues(node)
67
- setInitialValues(values)
279
+ setInitialValues(
280
+ isBranchingNodeType(node.type)
281
+ ? { ...values, branchingRoutes: branchingRoutes ?? { field: '', routes: [] } }
282
+ : { ...values, routeOrder: routeOrder ?? [] },
283
+ )
68
284
  setShowJsonSchemaWarning(isJsonSchemaFormat(node))
69
285
  }
70
- }, [node, isOpen])
286
+ }, [node, isOpen, branchingRoutes, routeOrder])
71
287
 
72
288
  const handleSubmit = useCallback(async (values: Record<string, unknown>) => {
73
289
  if (!node) return
@@ -75,36 +291,33 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
75
291
  // Validate and sanitize step ID
76
292
  const sanitizedId = sanitizeId(node.id)
77
293
  if (sanitizedId !== node.id) {
78
- if (typeof window !== 'undefined') {
79
- window.alert(
80
- `⚠️ Step ID was sanitized from "${node.id}" to "${sanitizedId}" to match schema requirements (lowercase letters, numbers, hyphens, and underscores only).`
81
- )
82
- }
294
+ flash(t('workflows.nodeEditor.stepIdSanitized', { from: node.id, to: sanitizedId }), 'warning')
83
295
  }
84
296
 
85
297
  try {
86
298
  const updates = formValuesToNodeUpdates(values as unknown as NodeFormValues, node)
87
299
  onSave(node.id, updates)
300
+ if (isBranchingNodeType(node.type) && onSaveBranchingRoutes) {
301
+ const routesValue = values.branchingRoutes as SwitchRoutesValue | undefined
302
+ onSaveBranchingRoutes(node.id, routesValue ?? { field: '', routes: [] })
303
+ } else if (onSaveRouteOrder) {
304
+ const entries = values.routeOrder as RouteOrderEntry[] | undefined
305
+ if (Array.isArray(entries) && entries.length > 0) onSaveRouteOrder(node.id, entries)
306
+ }
88
307
  onClose()
89
308
  } catch (error) {
90
- // Error will be displayed in form (e.g., invalid JSON)
91
- throw error
309
+ const message = error instanceof Error ? error.message : String(error)
310
+ throw new Error(t(message))
92
311
  }
93
- }, [node, onSave, onClose])
312
+ }, [node, onSave, onSaveBranchingRoutes, onSaveRouteOrder, onClose, t])
94
313
 
95
314
  const handleDelete = useCallback(() => {
96
315
  if (!node || !onDelete) return
97
316
  onDelete(node.id)
98
317
  }, [node, onDelete])
99
318
 
100
- const handleKeyDown = useCallback((e: React.KeyboardEvent) => {
101
- if (e.key === 'Escape') {
102
- onClose()
103
- }
104
- }, [onClose])
105
-
106
319
  // Dynamic groups based on node type
107
- const groups: CrudFormGroup[] = useMemo(() => {
320
+ const typeGroups: CrudFormGroup[] = useMemo(() => {
108
321
  if (!node) return []
109
322
 
110
323
  // End nodes are non-editable
@@ -117,7 +330,7 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
117
330
  component: () => (
118
331
  <Alert status="information">
119
332
  <AlertDescription>
120
- End nodes cannot be edited. They mark the completion of the workflow.
333
+ {t('workflows.nodeEditor.endStepsNotEditable')}
121
334
  </AlertDescription>
122
335
  </Alert>
123
336
  ),
@@ -135,16 +348,16 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
135
348
  component: () => (
136
349
  <Alert status="information" className="mb-4">
137
350
  <AlertDescription>
138
- Start nodes mark the beginning of the workflow. You can define pre-conditions that must pass before the workflow can be started.
351
+ {t('workflows.nodeEditor.startStepsInfo')}
139
352
  </AlertDescription>
140
353
  </Alert>
141
354
  ),
142
355
  },
143
356
  {
144
357
  id: 'preConditions',
145
- title: 'Pre-Conditions',
358
+ title: t('workflows.transitions.preConditions'),
146
359
  column: 1,
147
- description: 'Business rules that must pass before the workflow can start',
360
+ description: t('workflows.fieldEditors.preConditions.description'),
148
361
  fields: ['preConditions'],
149
362
  },
150
363
  ]
@@ -153,36 +366,92 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
153
366
  const baseGroups: CrudFormGroup[] = [
154
367
  {
155
368
  id: 'basic',
156
- title: 'Basic Information',
369
+ title: t('workflows.form.groups.basic'),
157
370
  column: 1,
158
371
  fields: ['stepName', 'description', 'timeout'],
159
372
  },
160
373
  ]
161
374
 
162
- // UserTask specific groups
375
+ // Route ordering (spec 4.4) only makes sense once a step has a choice to
376
+ // make. Branching steps order their routes through their own case list.
377
+ if (!isBranchingNodeType(node.type) && (routeOrder?.length ?? 0) > 1) {
378
+ baseGroups.push({
379
+ id: 'routeOrder',
380
+ title: t('workflows.routeOrder.groupTitle'),
381
+ column: 1,
382
+ description: t('workflows.routeOrder.groupDescription'),
383
+ fields: ['routeOrder'],
384
+ })
385
+ }
386
+
387
+ const advancedGroup: CrudFormGroup = {
388
+ id: 'advanced',
389
+ title: t('workflows.form.advancedConfiguration'),
390
+ column: 1,
391
+ description: t('workflows.form.descriptions.advancedConfig'),
392
+ fields: ['advancedConfig'],
393
+ }
394
+
395
+ // Error handling (spec section 5.9): what this step does when it fails and
396
+ // no error route is wired from its error handle.
397
+ const errorHandlingGroup: CrudFormGroup = {
398
+ id: 'errorHandling',
399
+ title: t('workflows.nodeEditor.groups.errorHandling', 'Error Handling'),
400
+ column: 1,
401
+ description: t(
402
+ 'workflows.nodeEditor.groups.errorHandlingDescription',
403
+ 'Applies when this step fails and no error route is wired from its error output handle.',
404
+ ),
405
+ fields: ['errorDirectiveMode', 'errorDirectiveFallbackValue'],
406
+ }
407
+
408
+ // UserTask: the five task-inspector sections of spec §6.1, in order —
409
+ // What / About what / Who / When / Decisions — followed by the step
410
+ // mechanics every node type shares. Each section is container-agnostic: it
411
+ // declares no width and assumes no modal chrome, so re-hosting the
412
+ // inspector in a docked rail is a re-parent rather than a rewrite.
163
413
  if (node.type === 'userTask') {
164
414
  return [
165
- ...baseGroups,
166
415
  {
167
- id: 'userTask',
168
- title: 'User Task Configuration',
416
+ id: 'taskWhat',
417
+ title: t('workflows.tasks.inspector.what.title'),
418
+ column: 1,
419
+ fields: ['stepName', 'taskInstructions'],
420
+ },
421
+ {
422
+ id: 'taskAbout',
423
+ title: t('workflows.tasks.inspector.bindings.title'),
424
+ column: 1,
425
+ fields: ['taskEntityBindings'],
426
+ },
427
+ {
428
+ id: 'taskWho',
429
+ title: t('workflows.tasks.inspector.who.title'),
430
+ column: 1,
431
+ fields: ['assignmentMode'],
432
+ },
433
+ {
434
+ id: 'taskWhen',
435
+ title: t('workflows.tasks.inspector.when.title'),
169
436
  column: 1,
170
- fields: ['assignedTo', 'assignedToRoles', 'formKey'],
437
+ fields: ['taskPriority', 'slaDuration', 'taskReminders', 'taskOnBreach'],
171
438
  },
172
439
  {
173
- id: 'formFields',
174
- title: 'Form Fields',
440
+ id: 'taskDecisions',
441
+ title: t('workflows.tasks.inspector.decisions.title'),
175
442
  column: 1,
176
- description: 'Define the form structure for this user task',
177
- fields: ['formFields'],
443
+ description: t('workflows.form.descriptions.formFields'),
444
+ fields: ['taskDecisions', 'formFields', 'taskEditablePrefilled', 'formKey'],
178
445
  },
179
446
  {
180
- id: 'advanced',
181
- title: 'Advanced Configuration',
447
+ id: 'basic',
448
+ title: t('workflows.form.groups.basic'),
182
449
  column: 1,
183
- description: 'Additional JSON configuration (userTaskConfig, retryPolicy, etc.)',
184
- fields: ['advancedConfig'],
450
+ fields: ['description', 'timeout'],
185
451
  },
452
+ ...baseGroups.slice(1),
453
+ errorHandlingGroup,
454
+ advancedGroup,
186
455
  ]
187
456
  }
188
457
 
@@ -192,24 +461,19 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
192
461
  ...baseGroups,
193
462
  {
194
463
  id: 'automated',
195
- title: 'Automated Task Configuration',
464
+ title: t('workflows.nodeEditor.groups.automated'),
196
465
  column: 1,
197
466
  fields: ['activityType', 'activityId'],
198
467
  },
199
468
  {
200
469
  id: 'stepActivities',
201
- title: 'Step Activities',
470
+ title: t('workflows.nodeEditor.groups.stepActivities'),
202
471
  column: 1,
203
- description: 'Activities executed as part of this automated step',
472
+ description: t('workflows.nodeEditor.groups.stepActivitiesDescription'),
204
473
  fields: ['stepActivities'],
205
474
  },
206
- {
207
- id: 'advanced',
208
- title: 'Advanced Configuration',
209
- column: 1,
210
- description: 'Additional JSON configuration (retryPolicy, etc.)',
211
- fields: ['advancedConfig'],
212
- },
475
+ errorHandlingGroup,
476
+ advancedGroup,
213
477
  ]
214
478
  }
215
479
 
@@ -219,24 +483,19 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
219
483
  ...baseGroups,
220
484
  {
221
485
  id: 'subWorkflow',
222
- title: 'Sub-Workflow Configuration',
486
+ title: t('workflows.form.subWorkflowConfig'),
223
487
  column: 1,
224
488
  fields: ['subWorkflowId', 'subWorkflowVersion'],
225
489
  },
226
490
  {
227
491
  id: 'mappings',
228
- title: 'Data Mappings',
492
+ title: t('workflows.nodeEditor.groups.mappings'),
229
493
  column: 1,
230
- description: 'Map data between parent and sub-workflow',
494
+ description: t('workflows.nodeEditor.groups.mappingsDescription'),
231
495
  fields: ['inputMappings', 'outputMappings'],
232
496
  },
233
- {
234
- id: 'advanced',
235
- title: 'Advanced Configuration',
236
- column: 1,
237
- description: 'Additional JSON configuration',
238
- fields: ['advancedConfig'],
239
- },
497
+ errorHandlingGroup,
498
+ advancedGroup,
240
499
  ]
241
500
  }
242
501
 
@@ -246,84 +505,356 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
246
505
  ...baseGroups,
247
506
  {
248
507
  id: 'signal',
249
- title: 'Signal Configuration',
508
+ title: t('workflows.form.signalConfig'),
250
509
  column: 1,
251
510
  fields: ['signalName', 'signalTimeout'],
252
511
  },
512
+ advancedGroup,
513
+ ]
514
+ }
515
+
516
+ // WaitForTimer specific groups
517
+ if (node.type === 'waitForTimer') {
518
+ return [
519
+ {
520
+ id: 'basic',
521
+ title: t('workflows.form.groups.basic'),
522
+ column: 1,
523
+ fields: ['stepName', 'description'],
524
+ },
253
525
  {
254
- id: 'advanced',
255
- title: 'Advanced Configuration',
526
+ id: 'timer',
527
+ title: t('workflows.nodeEditor.groups.timer'),
256
528
  column: 1,
257
- description: 'Additional JSON configuration',
258
- fields: ['advancedConfig'],
529
+ description: t('workflows.nodeEditor.groups.timerDescription'),
530
+ fields: ['timerDuration', 'timerUntil'],
259
531
  },
532
+ advancedGroup,
533
+ ]
534
+ }
535
+
536
+ // WaitForCondition specific groups
537
+ if (node.type === 'waitForCondition') {
538
+ return [
539
+ {
540
+ id: 'basic',
541
+ title: t('workflows.form.groups.basic'),
542
+ column: 1,
543
+ fields: ['stepName', 'description'],
544
+ },
545
+ {
546
+ id: 'waitCondition',
547
+ title: t('workflows.nodeEditor.groups.waitCondition', 'Wait Condition'),
548
+ column: 1,
549
+ description: t(
550
+ 'workflows.nodeEditor.groups.waitConditionDescription',
551
+ 'The workflow pauses here until this condition over the run context becomes true. It is re-checked whenever the context is written and on a periodic poll.',
552
+ ),
553
+ fields: ['waitCondition'],
554
+ },
555
+ {
556
+ id: 'waitConditionTimeout',
557
+ title: t('workflows.nodeEditor.groups.waitConditionTimeout', 'Timeout Policy'),
558
+ column: 1,
559
+ description: t(
560
+ 'workflows.nodeEditor.groups.waitConditionTimeoutDescription',
561
+ 'A timeout is required so a condition that never becomes true cannot hang the run forever.',
562
+ ),
563
+ fields: ['waitConditionTimeout', 'waitConditionOnTimeout', 'waitConditionPollIntervalMs'],
564
+ },
565
+ advancedGroup,
566
+ ]
567
+ }
568
+
569
+ // InvokeAgent specific groups
570
+ if (node.type === 'invokeAgent') {
571
+ return [
572
+ ...baseGroups,
573
+ {
574
+ id: 'invokeAgent',
575
+ title: t('workflows.form.invokeAgent.sectionTitle'),
576
+ column: 1,
577
+ description: t('workflows.form.invokeAgent.sectionDescription'),
578
+ fields: ['agentConfig'],
579
+ },
580
+ // Review (spec §7.5): who dispositions the proposal this step raises,
581
+ // and by when. The same Who/When vocabulary the Task inspector authors
582
+ // (§6.1.3 / §6.1.4) — because the thing being authored IS a task.
583
+ {
584
+ id: 'agentReviewWho',
585
+ title: t('workflows.form.invokeAgent.review.whoTitle'),
586
+ column: 1,
587
+ description: t('workflows.form.invokeAgent.review.whoDescription'),
588
+ fields: ['reviewAssignmentMode'],
589
+ },
590
+ {
591
+ id: 'agentReviewWhen',
592
+ title: t('workflows.form.invokeAgent.review.whenTitle'),
593
+ column: 1,
594
+ description: t('workflows.form.invokeAgent.review.whenDescription'),
595
+ fields: ['reviewPriority', 'reviewDeadline', 'reviewReminders', 'reviewOnBreach'],
596
+ },
597
+ errorHandlingGroup,
598
+ advancedGroup,
599
+ ]
600
+ }
601
+
602
+ // Branching steps: the routes inspector edits the outgoing transitions
603
+ if (isBranchingNodeType(node.type)) {
604
+ return [
605
+ ...baseGroups,
606
+ {
607
+ id: 'branchingRoutes',
608
+ title: t('workflows.branching.groupTitle', 'Routes'),
609
+ column: 1,
610
+ description: t(
611
+ 'workflows.branching.groupDescription',
612
+ 'Routing happens on the outgoing transitions: each case is evaluated by priority, and the otherwise route runs when none matches.',
613
+ ),
614
+ fields: ['branchingRoutes'],
615
+ },
616
+ errorHandlingGroup,
617
+ advancedGroup,
260
618
  ]
261
619
  }
262
620
 
263
621
  // Decision and other types: just basic fields + advanced
264
622
  return [
265
623
  ...baseGroups,
266
- {
267
- id: 'advanced',
268
- title: 'Advanced Configuration',
269
- column: 1,
270
- description: 'Additional JSON configuration',
271
- fields: ['advancedConfig'],
272
- },
624
+ advancedGroup,
273
625
  ]
274
- }, [node])
626
+ }, [node, t])
627
+
628
+ // Quarantined config from an earlier type change, and the conversion control
629
+ // itself (spec 4.5). Both hang off every editable step type, after whatever
630
+ // that type's own inspector renders.
631
+ const unmappedConfig = useMemo(() => readUnmappedStepConfig(node?.data), [node])
632
+
633
+ const groups: CrudFormGroup[] = useMemo(() => {
634
+ if (!node) return []
635
+ const extras: CrudFormGroup[] = []
636
+ if (unmappedConfig) {
637
+ extras.push({
638
+ id: 'unmappedConfig',
639
+ column: 1,
640
+ bare: true,
641
+ component: () => <UnmappedConfigDrawer value={unmappedConfig} />,
642
+ })
643
+ }
644
+ if (onConvertType && listStepTypeConversionTargets(node.type).length > 0) {
645
+ extras.push({
646
+ id: 'changeType',
647
+ title: t('workflows.stepConversion.groupTitle', 'Change step type'),
648
+ column: 1,
649
+ bare: false,
650
+ component: () => (
651
+ <StepTypeConversionControl
652
+ nodeType={node.type}
653
+ onConvert={(targetType) => onConvertType(node.id, targetType)}
654
+ />
655
+ ),
656
+ })
657
+ }
658
+ return [...typeGroups, ...extras]
659
+ }, [node, typeGroups, unmappedConfig, onConvertType, t])
275
660
 
276
661
  // Define all possible form fields (only relevant ones are used based on groups)
277
662
  const fields: CrudField[] = useMemo(() => [
278
- // Basic fields
279
- {
280
- id: 'stepName',
281
- label: 'Step Name',
282
- type: 'text',
283
- placeholder: 'Enter step name',
284
- required: true,
285
- description: 'Display name for this step',
286
- },
663
+ // Basic fields. A user task's title is the sentence the assignee reads, so
664
+ // it is pill-capable there (spec §6.1 "What") and a plain text input
665
+ // everywhere else.
666
+ node?.type === 'userTask'
667
+ ? {
668
+ id: 'stepName',
669
+ label: t('workflows.tasks.inspector.what.taskTitle'),
670
+ type: 'custom',
671
+ required: true,
672
+ component: (props) => (
673
+ <TemplateTextControl
674
+ id={props.id}
675
+ value={typeof props.value === 'string' ? props.value : ''}
676
+ onValueChange={props.setValue}
677
+ ledgerEntries={ledgerEntries}
678
+ placeholder={t('workflows.form.placeholders.stepName')}
679
+ disabled={props.disabled}
680
+ aria-label={t('workflows.tasks.inspector.what.taskTitle')}
681
+ />
682
+ ),
683
+ }
684
+ : {
685
+ id: 'stepName',
686
+ label: t('workflows.form.stepName'),
687
+ type: 'text',
688
+ placeholder: t('workflows.form.placeholders.stepName'),
689
+ required: true,
690
+ description: t('workflows.form.descriptions.stepName'),
691
+ },
287
692
  {
288
693
  id: 'description',
289
- label: 'Description',
694
+ label: t('workflows.form.description'),
290
695
  type: 'textarea',
291
- placeholder: 'Enter step description',
292
- description: 'Optional description of what this step does',
696
+ placeholder: t('workflows.form.placeholders.description'),
697
+ description: t('workflows.form.descriptions.description'),
293
698
  },
294
699
  {
295
700
  id: 'timeout',
296
- label: 'Timeout',
297
- type: 'text',
298
- placeholder: 'PT30S or 30000',
299
- description: 'ISO 8601 duration (e.g., PT30S) or milliseconds',
701
+ label: t('workflows.form.timeout'),
702
+ type: 'custom',
703
+ description: t('workflows.form.descriptions.timeout'),
704
+ component: (props) => <DurationCrudField {...props} />,
300
705
  },
301
706
 
302
707
  // UserTask fields
303
708
  {
304
709
  id: 'assignedTo',
305
- label: 'Assigned To',
710
+ label: t('workflows.form.assignedTo'),
306
711
  type: 'text',
307
- placeholder: 'user@example.com or userId',
308
- description: 'User email or ID to assign this task to',
712
+ placeholder: t('workflows.form.placeholders.userId'),
713
+ description: t('workflows.form.descriptions.assignedTo'),
309
714
  },
310
715
  {
311
716
  id: 'assignedToRoles',
312
- label: 'Assigned To Roles',
313
- type: 'text',
314
- placeholder: 'admin, manager',
315
- description: 'Comma-separated list of roles that can claim this task',
717
+ label: t('workflows.form.assignedToRoles'),
718
+ type: 'custom',
719
+ description: t('workflows.form.descriptions.assignedToRoles'),
720
+ component: (props) => <RolesCrudField {...props} />,
316
721
  },
317
722
  {
318
723
  id: 'formKey',
319
- label: 'Form Key',
724
+ label: t('workflows.form.formKey'),
320
725
  type: 'text',
321
- placeholder: 'approval_form',
322
- description: 'Optional form key for external form rendering',
726
+ placeholder: t('workflows.form.placeholders.formKey'),
727
+ description: t('workflows.form.descriptions.formKey'),
728
+ },
729
+ {
730
+ id: 'slaDuration',
731
+ label: t('workflows.tasks.inspector.when.deadline'),
732
+ type: 'custom',
733
+ description: t('workflows.nodeEditor.slaDurationDescription'),
734
+ component: (props) => <DurationCrudField {...props} />,
735
+ },
736
+
737
+ // Task inspector sections (spec §6.1)
738
+ {
739
+ id: 'taskInstructions',
740
+ label: t('workflows.tasks.inspector.what.instructions'),
741
+ type: 'custom',
742
+ component: (props) => (
743
+ <TemplateTextControl
744
+ id={props.id}
745
+ value={typeof props.value === 'string' ? props.value : ''}
746
+ onValueChange={props.setValue}
747
+ ledgerEntries={ledgerEntries}
748
+ placeholder={t('workflows.tasks.inspector.what.instructionsPlaceholder')}
749
+ disabled={props.disabled}
750
+ multiline
751
+ aria-label={t('workflows.tasks.inspector.what.instructions')}
752
+ />
753
+ ),
754
+ },
755
+ {
756
+ id: 'taskEntityBindings',
757
+ label: t('workflows.tasks.inspector.bindings.label'),
758
+ type: 'custom',
759
+ component: (props) => <TaskEntityBindingsField {...props} ledgerEntries={ledgerEntries} />,
760
+ },
761
+ {
762
+ id: 'assignmentMode',
763
+ label: t('workflows.tasks.inspector.who.label'),
764
+ type: 'custom',
765
+ component: (props) => (
766
+ <TaskAssignmentField
767
+ {...props}
768
+ ledgerEntries={ledgerEntries}
769
+ portalAudience={{ assigneeKind: 'taskAssigneeKind', entityBindings: 'taskEntityBindings' }}
770
+ />
771
+ ),
772
+ },
773
+ {
774
+ id: 'taskPriority',
775
+ label: t('workflows.tasks.inspector.when.priority'),
776
+ type: 'select',
777
+ options: TASK_PRIORITY_VALUES.map((priority) => ({
778
+ value: priority,
779
+ label: t(`workflows.tasks.inspector.when.priorities.${priority}`),
780
+ })),
781
+ },
782
+ {
783
+ id: 'taskReminders',
784
+ label: t('workflows.tasks.inspector.when.reminders'),
785
+ type: 'custom',
786
+ component: (props) => <TaskRemindersField {...props} />,
787
+ },
788
+ {
789
+ id: 'taskOnBreach',
790
+ label: t('workflows.tasks.inspector.when.onBreach'),
791
+ type: 'custom',
792
+ component: (props) => <TaskOnBreachField {...props} routeOrder={routeOrder} />,
793
+ },
794
+ // Invoke Agent — Review (spec §7.5). The assignment tabs and the reminder
795
+ // control are the SAME components the Task inspector renders, pointed at
796
+ // this section's own field ids; only the breach action set differs, because
797
+ // a disposition deadline escalates and never decides.
798
+ {
799
+ id: 'reviewAssignmentMode',
800
+ label: t('workflows.tasks.inspector.who.label'),
801
+ type: 'custom',
802
+ component: (props) => (
803
+ <TaskAssignmentField
804
+ {...props}
805
+ ledgerEntries={ledgerEntries}
806
+ modes={AGENT_REVIEW_ASSIGNMENT_MODES}
807
+ fieldIds={{
808
+ assignedTo: 'reviewAssignedTo',
809
+ assignedToRoles: 'reviewAssignedToRoles',
810
+ assignmentRule: 'reviewAssignmentRule',
811
+ }}
812
+ />
813
+ ),
814
+ },
815
+ {
816
+ id: 'reviewPriority',
817
+ label: t('workflows.tasks.inspector.when.priority'),
818
+ type: 'select',
819
+ options: TASK_PRIORITY_VALUES.map((priority) => ({
820
+ value: priority,
821
+ label: t(`workflows.tasks.inspector.when.priorities.${priority}`),
822
+ })),
823
+ },
824
+ {
825
+ id: 'reviewDeadline',
826
+ label: t('workflows.tasks.inspector.when.deadline'),
827
+ type: 'custom',
828
+ description: t('workflows.form.invokeAgent.review.deadlineDescription'),
829
+ component: (props) => <DurationCrudField {...props} />,
830
+ },
831
+ {
832
+ id: 'reviewReminders',
833
+ label: t('workflows.tasks.inspector.when.reminders'),
834
+ type: 'custom',
835
+ component: (props) => <TaskRemindersField {...props} />,
836
+ },
837
+ {
838
+ id: 'reviewOnBreach',
839
+ label: t('workflows.tasks.inspector.when.onBreach'),
840
+ type: 'custom',
841
+ component: (props) => <AgentReviewOnBreachField {...props} />,
842
+ },
843
+ {
844
+ id: 'taskDecisions',
845
+ label: t('workflows.tasks.inspector.decisions.label'),
846
+ type: 'custom',
847
+ component: (props) => <TaskDecisionsField {...props} routeOrder={routeOrder} />,
848
+ },
849
+ {
850
+ id: 'taskEditablePrefilled',
851
+ label: t('workflows.tasks.inspector.decisions.editablePrefilled'),
852
+ type: 'custom',
853
+ component: (props) => <TaskEditablePrefilledField {...props} />,
323
854
  },
324
855
  {
325
856
  id: 'formFields',
326
- label: 'Form Fields',
857
+ label: t('workflows.nodeEditor.groups.formFields'),
327
858
  type: 'custom',
328
859
  component: (props) => (
329
860
  <FormFieldArrayEditor
@@ -337,70 +868,64 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
337
868
  // Automated fields
338
869
  {
339
870
  id: 'activityType',
340
- label: 'Activity Type',
871
+ label: t('workflows.form.activityType'),
341
872
  type: 'select',
342
- options: [
343
- { value: 'SEND_EMAIL', label: 'Send Email' },
344
- { value: 'CALL_API', label: 'Call API' },
345
- { value: 'UPDATE_ENTITY', label: 'Update Entity' },
346
- { value: 'EMIT_EVENT', label: 'Emit Event' },
347
- { value: 'CALL_WEBHOOK', label: 'Call Webhook' },
348
- { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },
349
- { value: 'WAIT', label: 'Wait' },
350
- ],
351
- description: 'Type of activity to execute',
873
+ options: activityTypeOptions,
874
+ description: t('workflows.nodeEditor.activityTypeDescription'),
352
875
  },
353
876
  {
354
877
  id: 'activityId',
355
- label: 'Activity ID',
878
+ label: t('workflows.form.activityId'),
356
879
  type: 'text',
357
- placeholder: 'send_welcome_email',
358
- description: 'Unique identifier for this activity',
880
+ placeholder: t('workflows.form.placeholders.activityId'),
881
+ description: t('workflows.nodeEditor.activityIdDescription'),
359
882
  },
360
883
  {
361
884
  id: 'stepActivities',
362
- label: 'Step Activities',
885
+ label: t('workflows.nodeEditor.groups.stepActivities'),
363
886
  type: 'custom',
364
- component: (props) => <ActivityArrayEditor {...props} value={props.value as any} />,
887
+ component: (props) => <ActivityArrayEditor {...props} value={props.value as any} ledgerEntries={ledgerEntries} testContext={activityTestContext} />,
365
888
  },
366
889
 
367
890
  // SubWorkflow fields
368
891
  {
369
892
  id: 'subWorkflowId',
370
- label: 'Sub-Workflow',
893
+ label: t('workflows.form.workflowToInvoke'),
371
894
  type: 'custom',
372
895
  component: (props) => <WorkflowSelectorField {...props} value={props.value as any} />,
373
896
  },
374
897
  {
375
898
  id: 'subWorkflowVersion',
376
- label: 'Version',
899
+ label: t('workflows.form.version'),
377
900
  type: 'number',
378
- placeholder: '1',
379
- description: 'Specific version of the sub-workflow to invoke',
901
+ placeholder: t('workflows.form.placeholders.version'),
902
+ description: t('workflows.form.descriptions.subWorkflowVersion'),
380
903
  },
381
904
  {
382
905
  id: 'inputMappings',
383
- label: 'Input Mappings',
906
+ label: t('workflows.nodeEditor.inputMappings'),
384
907
  type: 'custom',
385
908
  component: (props) => (
386
909
  <MappingArrayEditor
387
910
  {...props}
388
911
  value={props.value as any}
389
- label="Input Mappings"
390
- description="Map parent workflow data to sub-workflow input"
912
+ label={t('workflows.nodeEditor.inputMappings')}
913
+ description={t('workflows.form.descriptions.inputMapping')}
914
+ variablePicker
915
+ ledgerEntries={ledgerEntries}
391
916
  />
392
917
  ),
393
918
  },
394
919
  {
395
920
  id: 'outputMappings',
396
- label: 'Output Mappings',
921
+ label: t('workflows.nodeEditor.outputMappings'),
397
922
  type: 'custom',
398
923
  component: (props) => (
399
924
  <MappingArrayEditor
400
925
  {...props}
401
926
  value={props.value as any}
402
- label="Output Mappings"
403
- description="Map sub-workflow output back to parent workflow"
927
+ label={t('workflows.nodeEditor.outputMappings')}
928
+ description={t('workflows.form.descriptions.outputMapping')}
404
929
  />
405
930
  ),
406
931
  },
@@ -408,103 +933,248 @@ export function NodeEditDialogCrudForm({ node, isOpen, onClose, onSave, onDelete
408
933
  // WaitForSignal fields
409
934
  {
410
935
  id: 'signalName',
411
- label: 'Signal Name',
936
+ label: t('workflows.form.signalName'),
412
937
  type: 'text',
413
- placeholder: 'approval_received',
414
- description: 'Name of the signal to wait for',
938
+ placeholder: t('workflows.form.placeholders.signalName'),
939
+ description: t('workflows.form.descriptions.signalName'),
415
940
  },
416
941
  {
417
942
  id: 'signalTimeout',
418
- label: 'Signal Timeout',
419
- type: 'text',
420
- placeholder: 'PT5M',
421
- description: 'How long to wait for the signal (ISO 8601 duration)',
943
+ label: t('workflows.nodeEditor.signalTimeout'),
944
+ type: 'custom',
945
+ description: t('workflows.form.descriptions.signalTimeout'),
946
+ component: (props) => <DurationCrudField {...props} />,
947
+ },
948
+
949
+ // WaitForTimer fields
950
+ {
951
+ id: 'timerDuration',
952
+ label: t('workflows.activities.waitDuration'),
953
+ type: 'custom',
954
+ description: t('workflows.nodeEditor.timerDurationDescription'),
955
+ component: (props) => <DurationCrudField {...props} />,
956
+ },
957
+ {
958
+ id: 'timerUntil',
959
+ label: t('workflows.activities.waitUntil'),
960
+ type: 'datetime',
961
+ minDate: new Date(),
962
+ description: t('workflows.nodeEditor.timerUntilDescription'),
963
+ },
964
+
965
+ // Error directive fields (spec section 5.9)
966
+ {
967
+ id: 'errorDirectiveMode',
968
+ label: t('workflows.form.errorDirective.mode', 'On failure'),
969
+ type: 'select',
970
+ options: [
971
+ { value: 'fail', label: t('workflows.form.errorDirective.modeFail', 'Fail the instance (default)') },
972
+ {
973
+ value: 'continueWithFallback',
974
+ label: t('workflows.form.errorDirective.modeContinue', 'Continue with a fallback value'),
975
+ },
976
+ {
977
+ value: 'failureQueue',
978
+ label: t('workflows.form.errorDirective.modeQueue', 'Send to the failure queue'),
979
+ },
980
+ ],
981
+ description: t(
982
+ 'workflows.form.descriptions.errorDirectiveMode',
983
+ 'Fail the instance, continue with a fallback value written to the run context under this step id, or park the run for triage.',
984
+ ),
985
+ },
986
+ {
987
+ id: 'errorDirectiveFallbackValue',
988
+ label: t('workflows.form.errorDirective.fallbackValue', 'Fallback value (JSON)'),
989
+ type: 'textarea',
990
+ placeholder: '{ "ok": false }',
991
+ description: t(
992
+ 'workflows.form.descriptions.errorDirectiveFallbackValue',
993
+ 'JSON value used when the directive is "Continue with a fallback value". Typed against this step output contract; leave empty to continue without writing anything.',
994
+ ),
995
+ },
996
+
997
+ // WaitForCondition fields
998
+ {
999
+ id: 'waitCondition',
1000
+ label: '',
1001
+ type: 'custom',
1002
+ component: (props) => (
1003
+ <ConditionBuilder
1004
+ value={(props.value as GroupCondition | null) ?? null}
1005
+ onChangeAction={(next: GroupCondition) => props.setValue(next)}
1006
+ entityType="workflow:wait_condition"
1007
+ />
1008
+ ),
1009
+ },
1010
+ {
1011
+ id: 'waitConditionTimeout',
1012
+ label: t('workflows.form.waitCondition.timeout', 'Timeout'),
1013
+ type: 'custom',
1014
+ description: t('workflows.form.descriptions.waitConditionTimeout', 'How long to wait before the timeout policy applies. Required.'),
1015
+ component: (props) => <DurationCrudField {...props} />,
1016
+ },
1017
+ {
1018
+ id: 'waitConditionOnTimeout',
1019
+ label: t('workflows.form.waitCondition.onTimeout', 'On timeout'),
1020
+ type: 'select',
1021
+ options: [
1022
+ { value: 'FAIL', label: t('workflows.form.waitCondition.onTimeoutFail', 'Fail the step') },
1023
+ { value: 'CONTINUE', label: t('workflows.form.waitCondition.onTimeoutContinue', 'Continue with timedOut') },
1024
+ ],
1025
+ description: t(
1026
+ 'workflows.form.descriptions.waitConditionOnTimeout',
1027
+ 'Fail the step, or continue with "timedOut" set so an outgoing route can branch on it.',
1028
+ ),
1029
+ },
1030
+ {
1031
+ id: 'waitConditionPollIntervalMs',
1032
+ label: t('workflows.form.waitCondition.pollIntervalMs', 'Poll interval (ms)'),
1033
+ type: 'number',
1034
+ placeholder: '30000',
1035
+ description: t(
1036
+ 'workflows.form.descriptions.waitConditionPollIntervalMs',
1037
+ 'Optional backstop poll interval between 5000 and 3600000 ms, and never longer than the timeout. Defaults to 30000.',
1038
+ ),
1039
+ },
1040
+
1041
+ // InvokeAgent configuration
1042
+ {
1043
+ id: 'agentConfig',
1044
+ label: '',
1045
+ type: 'custom',
1046
+ component: (props) => (
1047
+ <AgentInvokeConfigField {...props} value={props.value as any} ledgerEntries={ledgerEntries} />
1048
+ ),
1049
+ },
1050
+ {
1051
+ id: 'routeOrder',
1052
+ label: '',
1053
+ type: 'custom',
1054
+ component: (props) => (
1055
+ <RouteOrderEditor
1056
+ id={props.id}
1057
+ value={props.value as RouteOrderEntry[] | undefined}
1058
+ setValue={props.setValue}
1059
+ disabled={props.disabled}
1060
+ />
1061
+ ),
1062
+ },
1063
+ {
1064
+ id: 'branchingRoutes',
1065
+ label: '',
1066
+ type: 'custom',
1067
+ component: (props) => {
1068
+ const routesValue = (props.value as SwitchRoutesValue | undefined) ?? { field: '', routes: [] }
1069
+ if (node?.type === 'switch') {
1070
+ return (
1071
+ <SwitchRoutesField
1072
+ id={props.id}
1073
+ value={routesValue}
1074
+ setValue={props.setValue}
1075
+ disabled={props.disabled}
1076
+ ledgerEntries={ledgerEntries}
1077
+ />
1078
+ )
1079
+ }
1080
+ return (
1081
+ <IfElseRoutesField
1082
+ id={props.id}
1083
+ value={routesValue.routes}
1084
+ setValue={(routes: BranchingRouteDraft[]) => props.setValue({ ...routesValue, routes })}
1085
+ disabled={props.disabled}
1086
+ />
1087
+ )
1088
+ },
422
1089
  },
423
1090
 
424
1091
  // Advanced configuration
425
1092
  {
426
1093
  id: 'advancedConfig',
427
- label: 'Advanced Configuration (JSON)',
1094
+ label: t('workflows.form.advancedConfiguration'),
428
1095
  type: 'custom',
429
- description: 'Additional JSON configuration merged with the step data',
1096
+ description: t('workflows.form.descriptions.advancedConfig'),
430
1097
  component: (props) => <JsonConfigEditor {...props} />,
431
1098
  },
432
1099
 
433
1100
  // Start node pre-conditions
434
1101
  {
435
1102
  id: 'preConditions',
436
- label: 'Pre-Conditions',
1103
+ label: t('workflows.transitions.preConditions'),
437
1104
  type: 'custom',
438
- description: 'Business rules that must pass before the workflow can start',
1105
+ description: t('workflows.fieldEditors.preConditions.description'),
439
1106
  component: (props) => <StartPreConditionsEditor {...props} value={props.value as any} />,
440
1107
  },
441
- ], [showJsonSchemaWarning])
1108
+ ], [activityTypeOptions, showJsonSchemaWarning, ledgerEntries, activityTestContext, node?.type, routeOrder, t])
442
1109
 
443
1110
  if (!isOpen || !node) return null
444
1111
 
445
- const nodeType = node.type || 'unknown'
446
- const nodeTypeLabel = nodeType.charAt(0).toUpperCase() + nodeType.slice(1).replace(/([A-Z])/g, ' $1')
1112
+ const nodeTypeLabel = t(`workflows.nodeTypes.${node.type || 'automated'}`)
447
1113
 
448
1114
  const canDelete = !!onDelete
449
1115
 
450
1116
  return (
451
- <Dialog open={isOpen} onOpenChange={onClose}>
452
- <DialogContent
453
- className="sm:max-w-7xl max-h-[90vh] overflow-hidden flex flex-col !p-0 [&_.grid]:!grid-cols-1"
454
- onKeyDown={handleKeyDown}
455
- >
456
- <DialogHeader className="flex-shrink-0 p-6 pb-4 border-b border-border/70">
457
- <div className="flex items-center gap-2 mb-2">
458
- <DialogTitle>Edit Step</DialogTitle>
459
- <Badge variant="secondary" className="text-xs">
460
- {nodeTypeLabel}
461
- </Badge>
462
- </div>
463
- <div className="space-y-1">
464
- <DialogDescription>
465
- Configure step properties and behavior
466
- </DialogDescription>
467
- <div className="flex items-center gap-2 text-xs text-muted-foreground">
468
- <span className="font-medium">ID:</span>
469
- <code className="px-1.5 py-0.5 rounded bg-muted font-mono">{node.id}</code>
470
- </div>
471
- </div>
472
- </DialogHeader>
473
-
474
- <div className="flex-1 overflow-y-auto min-h-0 px-6">
475
- {/* JSON Schema Conversion Warning */}
476
- {showJsonSchemaWarning && (
477
- <Alert status="information" className="mb-4">
478
- <AlertDescription className="text-xs">
479
- This form uses JSON Schema format. Fields have been converted for visual editing.
480
- When you save, it will be converted to the simplified format. To preserve the original JSON Schema,
481
- edit it in the &#34;Advanced Configuration (JSON)&#34; section.
482
- </AlertDescription>
483
- </Alert>
484
- )}
1117
+ <InspectorPanel
1118
+ open={isOpen}
1119
+ onClose={onClose}
1120
+ variant={variant}
1121
+ wide={wide}
1122
+ title={t('workflows.nodeEditor.title')}
1123
+ typeLabel={nodeTypeLabel}
1124
+ description={t('workflows.nodeEditor.description')}
1125
+ recordId={node.id}
1126
+ >
1127
+ {/* JSON Schema Conversion Warning */}
1128
+ {showJsonSchemaWarning && (
1129
+ <Alert variant="info" className="mb-4">
1130
+ <AlertDescription className="text-xs">
1131
+ {t('workflows.nodeEditor.jsonSchemaFormat')}
1132
+ </AlertDescription>
1133
+ </Alert>
1134
+ )}
485
1135
 
1136
+ {/* Wide drawer: the ledger is a sticky right column so a field can be
1137
+ dragged onto any parameter no matter how far the form is scrolled. The
1138
+ narrow docked rail keeps the old stacked-and-folded layout (a side
1139
+ column would leave no room for the form). */}
1140
+ <div className={wide ? 'flex gap-6' : undefined}>
1141
+ <div className={wide ? 'min-w-0 flex-1' : undefined}>
1142
+ {/* Remount when the inspected step changes. CrudForm preserves fields
1143
+ the author already edited across `initialValues` changes, which
1144
+ would leak an unsaved edit from the previous step onto this one —
1145
+ the key forces a fresh mount. */}
486
1146
  <CrudForm
1147
+ key={node.id}
1148
+ density="compact"
487
1149
  fields={fields}
488
1150
  groups={groups}
489
1151
  initialValues={initialValues}
490
1152
  onSubmit={handleSubmit}
491
1153
  embedded={true}
492
- submitLabel="Save Step"
1154
+ submitLabel={t('workflows.form.saveStep')}
493
1155
  extraActions={
494
1156
  canDelete ? (
495
1157
  <Button
496
1158
  type="button"
497
- variant="destructive"
1159
+ variant="destructive-outline"
498
1160
  onClick={handleDelete}
499
1161
  >
500
1162
  <Trash2 className="size-4 mr-2" />
501
- Delete Step
1163
+ {t('workflows.form.deleteStep')}
502
1164
  </Button>
503
1165
  ) : undefined
504
1166
  }
505
1167
  />
506
1168
  </div>
507
- </DialogContent>
508
- </Dialog>
1169
+ <div className={wide ? 'sticky top-0 w-96 shrink-0 self-start' : 'mt-4'}>
1170
+ <InputDataPanel
1171
+ entries={ledgerEntries}
1172
+ stepId={node.id}
1173
+ samples={samples}
1174
+ defaultCollapsed={!wide}
1175
+ />
1176
+ </div>
1177
+ </div>
1178
+ </InspectorPanel>
509
1179
  )
510
1180
  }