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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1241) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/AGENTS.md +4 -3
  3. package/agentic/standalone-guide.md +1 -1
  4. package/build.mjs +16 -0
  5. package/dist/bootstrap.js +7 -3
  6. package/dist/bootstrap.js.map +2 -2
  7. package/dist/generated/entities/action_log/index.js +2 -0
  8. package/dist/generated/entities/action_log/index.js.map +2 -2
  9. package/dist/generated/entities/user/index.js +2 -0
  10. package/dist/generated/entities/user/index.js.map +2 -2
  11. package/dist/generated/entities/user_task/index.js +14 -0
  12. package/dist/generated/entities/user_task/index.js.map +2 -2
  13. package/dist/generated/entities/workflow_definition/index.js +6 -0
  14. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  15. package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
  16. package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
  17. package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
  18. package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
  19. package/dist/generated/entities/workflow_instance/index.js +4 -0
  20. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  21. package/dist/generated/entities.ids.generated.js +4 -1
  22. package/dist/generated/entities.ids.generated.js.map +2 -2
  23. package/dist/generated/entity-fields-registry.js +39 -0
  24. package/dist/generated/entity-fields-registry.js.map +2 -2
  25. package/dist/helpers/integration/workflowsFixtures.js +477 -2
  26. package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
  27. package/dist/helpers/integration/workflowsUi.js +148 -0
  28. package/dist/helpers/integration/workflowsUi.js.map +7 -0
  29. package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
  30. package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
  31. package/dist/modules/audit_logs/data/entities.js +5 -0
  32. package/dist/modules/audit_logs/data/entities.js.map +2 -2
  33. package/dist/modules/audit_logs/data/validators.js +1 -0
  34. package/dist/modules/audit_logs/data/validators.js.map +2 -2
  35. package/dist/modules/audit_logs/lib/projections.js +2 -1
  36. package/dist/modules/audit_logs/lib/projections.js.map +2 -2
  37. package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
  38. package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
  39. package/dist/modules/audit_logs/services/actionLogService.js +3 -0
  40. package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
  41. package/dist/modules/auth/data/entities.js +6 -0
  42. package/dist/modules/auth/data/entities.js.map +2 -2
  43. package/dist/modules/auth/lib/executionPrincipal.js +140 -0
  44. package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
  45. package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
  46. package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
  47. package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
  48. package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
  49. package/dist/modules/business_rules/data/validators.js +6 -0
  50. package/dist/modules/business_rules/data/validators.js.map +2 -2
  51. package/dist/modules/business_rules/lib/rule-engine.js +5 -3
  52. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  53. package/dist/modules/catalog/commands/products.js +5 -0
  54. package/dist/modules/catalog/commands/products.js.map +2 -2
  55. package/dist/modules/catalog/workflows.js +19 -0
  56. package/dist/modules/catalog/workflows.js.map +7 -0
  57. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
  58. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  59. package/dist/modules/customer_accounts/cli.js +80 -0
  60. package/dist/modules/customer_accounts/cli.js.map +7 -0
  61. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
  62. package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
  63. package/dist/modules/customer_accounts/setup.js +4 -2
  64. package/dist/modules/customer_accounts/setup.js.map +2 -2
  65. package/dist/modules/customers/commands/deals.js +4 -0
  66. package/dist/modules/customers/commands/deals.js.map +2 -2
  67. package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
  68. package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
  69. package/dist/modules/customers/components/detail/utils.js +2 -0
  70. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  71. package/dist/modules/customers/events.js +13 -2
  72. package/dist/modules/customers/events.js.map +2 -2
  73. package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
  74. package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
  75. package/dist/modules/customers/lib/todoCompatibility.js +1 -1
  76. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  77. package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
  78. package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
  79. package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
  80. package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
  81. package/dist/modules/customers/workflows.js +29 -0
  82. package/dist/modules/customers/workflows.js.map +7 -0
  83. package/dist/modules/entities/api/records.js +13 -33
  84. package/dist/modules/entities/api/records.js.map +3 -3
  85. package/dist/modules/entities/lib/entityClassification.js +60 -0
  86. package/dist/modules/entities/lib/entityClassification.js.map +7 -0
  87. package/dist/modules/sales/commands/documents.js +31 -0
  88. package/dist/modules/sales/commands/documents.js.map +2 -2
  89. package/dist/modules/sales/events.js +12 -1
  90. package/dist/modules/sales/events.js.map +2 -2
  91. package/dist/modules/sales/workflows.js +12 -1
  92. package/dist/modules/sales/workflows.js.map +2 -2
  93. package/dist/modules/seeds/cli.js +199 -0
  94. package/dist/modules/seeds/cli.js.map +7 -0
  95. package/dist/modules/seeds/examples/sample-seed.json +26 -0
  96. package/dist/modules/seeds/index.js +12 -0
  97. package/dist/modules/seeds/index.js.map +7 -0
  98. package/dist/modules/workflows/acl.js +96 -0
  99. package/dist/modules/workflows/acl.js.map +2 -2
  100. package/dist/modules/workflows/ai-agents.js +50 -0
  101. package/dist/modules/workflows/ai-agents.js.map +7 -0
  102. package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
  103. package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
  104. package/dist/modules/workflows/ai-tools/types.js +43 -0
  105. package/dist/modules/workflows/ai-tools/types.js.map +7 -0
  106. package/dist/modules/workflows/ai-tools.js +10 -0
  107. package/dist/modules/workflows/ai-tools.js.map +7 -0
  108. package/dist/modules/workflows/api/command-settings/route.js +137 -0
  109. package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
  110. package/dist/modules/workflows/api/commands/route.js +72 -0
  111. package/dist/modules/workflows/api/commands/route.js.map +7 -0
  112. package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
  113. package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
  114. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
  115. package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
  116. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
  117. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
  118. package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
  119. package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
  120. package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
  121. package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
  122. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
  123. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
  124. package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
  125. package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
  126. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
  127. package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
  128. package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
  129. package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
  130. package/dist/modules/workflows/api/definitions/route.js +61 -113
  131. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  132. package/dist/modules/workflows/api/definitions/serialize.js +9 -0
  133. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  134. package/dist/modules/workflows/api/endpoints/route.js +69 -0
  135. package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
  136. package/dist/modules/workflows/api/functions/route.js +73 -0
  137. package/dist/modules/workflows/api/functions/route.js.map +7 -0
  138. package/dist/modules/workflows/api/grantable-features/route.js +75 -0
  139. package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
  140. package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
  141. package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
  142. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
  143. package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
  144. package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
  145. package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
  146. package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
  147. package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
  148. package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
  149. package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
  150. package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
  151. package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
  152. package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
  153. package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
  154. package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
  155. package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
  156. package/dist/modules/workflows/api/instances/route.js +94 -3
  157. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  158. package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
  159. package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
  160. package/dist/modules/workflows/api/openapi.js +415 -4
  161. package/dist/modules/workflows/api/openapi.js.map +2 -2
  162. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
  163. package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
  164. package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
  165. package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
  166. package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
  167. package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
  168. package/dist/modules/workflows/api/rule-usage/route.js +80 -0
  169. package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
  170. package/dist/modules/workflows/api/task-settings/route.js +107 -0
  171. package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
  172. package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
  173. package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
  174. package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
  175. package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
  176. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
  177. package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
  178. package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
  179. package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
  180. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
  181. package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
  182. package/dist/modules/workflows/api/tasks/route.js +37 -6
  183. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  184. package/dist/modules/workflows/api/tasks/serialize.js +83 -0
  185. package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
  186. package/dist/modules/workflows/api/templates/route.js +69 -0
  187. package/dist/modules/workflows/api/templates/route.js.map +7 -0
  188. package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
  189. package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
  190. package/dist/modules/workflows/api/work-inbox/route.js +119 -0
  191. package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
  192. package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
  193. package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
  194. package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
  195. package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
  196. package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
  197. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
  198. package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
  199. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  200. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  201. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  202. package/dist/modules/workflows/backend/definitions/page.js +131 -51
  203. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  204. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
  205. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
  206. package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
  207. package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
  208. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
  209. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
  210. package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
  211. package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
  212. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
  213. package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
  214. package/dist/modules/workflows/backend/instances/page.js +159 -22
  215. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  216. package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
  217. package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
  218. package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
  219. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
  220. package/dist/modules/workflows/backend/tasks/page.js +8 -250
  221. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  222. package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
  223. package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
  224. package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
  225. package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
  226. package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
  227. package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
  228. package/dist/modules/workflows/cli.js +1 -1
  229. package/dist/modules/workflows/cli.js.map +2 -2
  230. package/dist/modules/workflows/commands/tasks.js +81 -0
  231. package/dist/modules/workflows/commands/tasks.js.map +7 -0
  232. package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
  233. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  234. package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
  235. package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
  236. package/dist/modules/workflows/components/AgentSelector.js +115 -0
  237. package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
  238. package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
  239. package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
  240. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
  241. package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
  242. package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
  243. package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
  244. package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
  245. package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
  246. package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
  247. package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
  248. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
  249. package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
  250. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
  251. package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
  252. package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
  253. package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
  254. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
  255. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
  256. package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
  257. package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
  258. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
  259. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
  260. package/dist/modules/workflows/components/InputDataPanel.js +128 -0
  261. package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
  262. package/dist/modules/workflows/components/InspectorPanel.js +161 -0
  263. package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
  264. package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
  265. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  266. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
  267. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
  268. package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
  269. package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
  270. package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
  271. package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
  272. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  273. package/dist/modules/workflows/components/TriggersDialog.js +53 -0
  274. package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
  275. package/dist/modules/workflows/components/TriggersEditor.js +331 -0
  276. package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
  277. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
  278. package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
  279. package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
  280. package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
  281. package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
  282. package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
  283. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
  284. package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
  285. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
  286. package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
  287. package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
  288. package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
  289. package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
  290. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
  291. package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
  292. package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
  293. package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
  294. package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
  295. package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
  296. package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
  297. package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
  298. package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
  299. package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
  300. package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
  301. package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
  302. package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
  303. package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
  304. package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
  305. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
  306. package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
  307. package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
  308. package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
  309. package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
  310. package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
  311. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
  312. package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
  313. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
  314. package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
  315. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
  316. package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
  317. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
  318. package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
  319. package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
  320. package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
  321. package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
  322. package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
  323. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
  324. package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
  325. package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
  326. package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
  327. package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
  328. package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
  329. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
  330. package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
  331. package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
  332. package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
  333. package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
  334. package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
  335. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
  336. package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
  337. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
  338. package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
  339. package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
  340. package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
  341. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
  342. package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
  343. package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
  344. package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
  345. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
  346. package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
  347. package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
  348. package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
  349. package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
  350. package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
  351. package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
  352. package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
  353. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
  354. package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
  355. package/dist/modules/workflows/components/formConfig.js +39 -10
  356. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  357. package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
  358. package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
  359. package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
  360. package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
  361. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
  362. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
  363. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
  364. package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
  365. package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
  366. package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
  367. package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
  368. package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
  369. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
  370. package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
  371. package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
  372. package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
  373. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
  374. package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
  375. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
  376. package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
  377. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
  378. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
  379. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
  380. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
  381. package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
  382. package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
  383. package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
  384. package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
  385. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
  386. package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
  387. package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
  388. package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
  389. package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
  390. package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
  391. package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
  392. package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
  393. package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
  394. package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
  395. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
  396. package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
  397. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
  398. package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
  399. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
  400. package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
  401. package/dist/modules/workflows/components/nodes/index.js +14 -0
  402. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  403. package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
  404. package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
  405. package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
  406. package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
  407. package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
  408. package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
  409. package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
  410. package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
  411. package/dist/modules/workflows/components/run/RunGantt.js +130 -0
  412. package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
  413. package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
  414. package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
  415. package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
  416. package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
  417. package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
  418. package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
  419. package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
  420. package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
  421. package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
  422. package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
  423. package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
  424. package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
  425. package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
  426. package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
  427. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
  428. package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
  429. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
  430. package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
  431. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
  432. package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
  433. package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
  434. package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
  435. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
  436. package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
  437. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
  438. package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
  439. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
  440. package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
  441. package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
  442. package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
  443. package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
  444. package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
  445. package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
  446. package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
  447. package/dist/modules/workflows/data/entities.js +144 -4
  448. package/dist/modules/workflows/data/entities.js.map +2 -2
  449. package/dist/modules/workflows/data/metrics-validators.js +35 -0
  450. package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
  451. package/dist/modules/workflows/data/task-primitives.js +14 -0
  452. package/dist/modules/workflows/data/task-primitives.js.map +7 -0
  453. package/dist/modules/workflows/data/validators.js +504 -61
  454. package/dist/modules/workflows/data/validators.js.map +3 -3
  455. package/dist/modules/workflows/di.js +16 -1
  456. package/dist/modules/workflows/di.js.map +2 -2
  457. package/dist/modules/workflows/events.js +66 -8
  458. package/dist/modules/workflows/events.js.map +2 -2
  459. package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  460. package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  461. package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
  462. package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
  463. package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
  464. package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
  465. package/dist/modules/workflows/extension-points.js +1 -1
  466. package/dist/modules/workflows/extension-points.js.map +2 -2
  467. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
  468. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
  469. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
  470. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
  471. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
  472. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
  473. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
  474. package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
  475. package/dist/modules/workflows/lib/activity-executor.js +505 -137
  476. package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
  477. package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
  478. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  479. package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
  480. package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
  481. package/dist/modules/workflows/lib/activity-registry.js +27 -0
  482. package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
  483. package/dist/modules/workflows/lib/activity-types.js +291 -0
  484. package/dist/modules/workflows/lib/activity-types.js.map +7 -0
  485. package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
  486. package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
  487. package/dist/modules/workflows/lib/advanced-config.js +31 -0
  488. package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
  489. package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
  490. package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
  491. package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
  492. package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
  493. package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
  494. package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
  495. package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
  496. package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
  497. package/dist/modules/workflows/lib/agent-review.js +66 -0
  498. package/dist/modules/workflows/lib/agent-review.js.map +7 -0
  499. package/dist/modules/workflows/lib/ai-authoring.js +155 -0
  500. package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
  501. package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
  502. package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
  503. package/dist/modules/workflows/lib/annotation-events.js +10 -0
  504. package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
  505. package/dist/modules/workflows/lib/branching-routes.js +182 -0
  506. package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
  507. package/dist/modules/workflows/lib/breach-routing.js +50 -0
  508. package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
  509. package/dist/modules/workflows/lib/bulk-replay.js +101 -0
  510. package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
  511. package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
  512. package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
  513. package/dist/modules/workflows/lib/caller-graph.js +53 -0
  514. package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
  515. package/dist/modules/workflows/lib/code-view-apply.js +86 -0
  516. package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
  517. package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
  518. package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
  519. package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
  520. package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
  521. package/dist/modules/workflows/lib/component-guard.js +7 -0
  522. package/dist/modules/workflows/lib/component-guard.js.map +7 -0
  523. package/dist/modules/workflows/lib/condition-handler.js +443 -0
  524. package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
  525. package/dist/modules/workflows/lib/context-ledger.js +448 -0
  526. package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
  527. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
  528. package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
  529. package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
  530. package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
  531. package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
  532. package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
  533. package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
  534. package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
  535. package/dist/modules/workflows/lib/definition-error-body.js +33 -0
  536. package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
  537. package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
  538. package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
  539. package/dist/modules/workflows/lib/definition-grant.js +90 -0
  540. package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
  541. package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
  542. package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
  543. package/dist/modules/workflows/lib/definition-payload.js +31 -0
  544. package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
  545. package/dist/modules/workflows/lib/draft-restore.js +49 -0
  546. package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
  547. package/dist/modules/workflows/lib/dry-run.js +106 -0
  548. package/dist/modules/workflows/lib/dry-run.js.map +7 -0
  549. package/dist/modules/workflows/lib/duration.js +66 -17
  550. package/dist/modules/workflows/lib/duration.js.map +2 -2
  551. package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
  552. package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
  553. package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
  554. package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
  555. package/dist/modules/workflows/lib/editor-annotations.js +195 -0
  556. package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
  557. package/dist/modules/workflows/lib/editor-commands.js +103 -0
  558. package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
  559. package/dist/modules/workflows/lib/editor-history.js +51 -0
  560. package/dist/modules/workflows/lib/editor-history.js.map +7 -0
  561. package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
  562. package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
  563. package/dist/modules/workflows/lib/endpoint-path.js +90 -0
  564. package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
  565. package/dist/modules/workflows/lib/engine-version.js +42 -0
  566. package/dist/modules/workflows/lib/engine-version.js.map +7 -0
  567. package/dist/modules/workflows/lib/error-handler.js +132 -0
  568. package/dist/modules/workflows/lib/error-handler.js.map +7 -0
  569. package/dist/modules/workflows/lib/error-routing.js +104 -0
  570. package/dist/modules/workflows/lib/error-routing.js.map +7 -0
  571. package/dist/modules/workflows/lib/event-logger.js +23 -0
  572. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  573. package/dist/modules/workflows/lib/expression-refs.js +168 -0
  574. package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
  575. package/dist/modules/workflows/lib/failure-grouping.js +62 -0
  576. package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
  577. package/dist/modules/workflows/lib/find-definition.js +1 -0
  578. package/dist/modules/workflows/lib/find-definition.js.map +2 -2
  579. package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
  580. package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
  581. package/dist/modules/workflows/lib/graph-utils.js +328 -77
  582. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  583. package/dist/modules/workflows/lib/icon-search.js +32 -0
  584. package/dist/modules/workflows/lib/icon-search.js.map +7 -0
  585. package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
  586. package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
  587. package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
  588. package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
  589. package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
  590. package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
  591. package/dist/modules/workflows/lib/ledger-drag.js +28 -0
  592. package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
  593. package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
  594. package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
  595. package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
  596. package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
  597. package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
  598. package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
  599. package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
  600. package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
  601. package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
  602. package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
  603. package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
  604. package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
  605. package/dist/modules/workflows/lib/node-config-summary.js +128 -0
  606. package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
  607. package/dist/modules/workflows/lib/node-geometry.js +53 -0
  608. package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
  609. package/dist/modules/workflows/lib/node-nudge.js +44 -0
  610. package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
  611. package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
  612. package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
  613. package/dist/modules/workflows/lib/node-placement.js +55 -0
  614. package/dist/modules/workflows/lib/node-placement.js.map +7 -0
  615. package/dist/modules/workflows/lib/node-type-icons.js +54 -13
  616. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  617. package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
  618. package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
  619. package/dist/modules/workflows/lib/outcome-routing.js +158 -0
  620. package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
  621. package/dist/modules/workflows/lib/owned-definition.js +107 -0
  622. package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
  623. package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
  624. package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
  625. package/dist/modules/workflows/lib/palette-drag.js +36 -0
  626. package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
  627. package/dist/modules/workflows/lib/palette-drop.js +45 -0
  628. package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
  629. package/dist/modules/workflows/lib/parallel-handler.js +57 -2
  630. package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
  631. package/dist/modules/workflows/lib/port-contract.js +54 -0
  632. package/dist/modules/workflows/lib/port-contract.js.map +7 -0
  633. package/dist/modules/workflows/lib/portal-task-access.js +89 -0
  634. package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
  635. package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
  636. package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
  637. package/dist/modules/workflows/lib/route-chip-events.js +23 -0
  638. package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
  639. package/dist/modules/workflows/lib/route-chips.js +91 -0
  640. package/dist/modules/workflows/lib/route-chips.js.map +7 -0
  641. package/dist/modules/workflows/lib/route-edge.js +17 -0
  642. package/dist/modules/workflows/lib/route-edge.js.map +7 -0
  643. package/dist/modules/workflows/lib/route-kinds.js +67 -0
  644. package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
  645. package/dist/modules/workflows/lib/route-priority.js +104 -0
  646. package/dist/modules/workflows/lib/route-priority.js.map +7 -0
  647. package/dist/modules/workflows/lib/run-duration.js +44 -0
  648. package/dist/modules/workflows/lib/run-duration.js.map +7 -0
  649. package/dist/modules/workflows/lib/run-event-tone.js +25 -0
  650. package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
  651. package/dist/modules/workflows/lib/run-execution.js +305 -0
  652. package/dist/modules/workflows/lib/run-execution.js.map +7 -0
  653. package/dist/modules/workflows/lib/run-gantt.js +180 -0
  654. package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
  655. package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
  656. package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
  657. package/dist/modules/workflows/lib/run-outcome.js +48 -0
  658. package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
  659. package/dist/modules/workflows/lib/sample-resolver.js +71 -0
  660. package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
  661. package/dist/modules/workflows/lib/seeds.js +1 -1
  662. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  663. package/dist/modules/workflows/lib/server-output-contract.js +65 -0
  664. package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
  665. package/dist/modules/workflows/lib/set-variable.js +47 -0
  666. package/dist/modules/workflows/lib/set-variable.js.map +7 -0
  667. package/dist/modules/workflows/lib/signal-handler.js +63 -4
  668. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  669. package/dist/modules/workflows/lib/start-fixtures.js +42 -0
  670. package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
  671. package/dist/modules/workflows/lib/status-colors.js +153 -22
  672. package/dist/modules/workflows/lib/status-colors.js.map +2 -2
  673. package/dist/modules/workflows/lib/step-handler.js +529 -53
  674. package/dist/modules/workflows/lib/step-handler.js.map +3 -3
  675. package/dist/modules/workflows/lib/step-presentation.js +147 -0
  676. package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
  677. package/dist/modules/workflows/lib/step-through.js +26 -0
  678. package/dist/modules/workflows/lib/step-through.js.map +7 -0
  679. package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
  680. package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
  681. package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
  682. package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
  683. package/dist/modules/workflows/lib/task-decision-context.js +38 -0
  684. package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
  685. package/dist/modules/workflows/lib/task-decisions.js +49 -0
  686. package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
  687. package/dist/modules/workflows/lib/task-entity-access.js +62 -0
  688. package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
  689. package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
  690. package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
  691. package/dist/modules/workflows/lib/task-entity-types.js +36 -0
  692. package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
  693. package/dist/modules/workflows/lib/task-form-registry.js +33 -0
  694. package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
  695. package/dist/modules/workflows/lib/task-form-schema.js +75 -0
  696. package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
  697. package/dist/modules/workflows/lib/task-handler.js +251 -32
  698. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  699. package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
  700. package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
  701. package/dist/modules/workflows/lib/task-list-query.js +19 -0
  702. package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
  703. package/dist/modules/workflows/lib/task-notifications.js +119 -0
  704. package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
  705. package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
  706. package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
  707. package/dist/modules/workflows/lib/task-presets.js +35 -0
  708. package/dist/modules/workflows/lib/task-presets.js.map +7 -0
  709. package/dist/modules/workflows/lib/task-quick-action.js +45 -0
  710. package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
  711. package/dist/modules/workflows/lib/task-resolution.js +120 -0
  712. package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
  713. package/dist/modules/workflows/lib/task-sla.js +357 -0
  714. package/dist/modules/workflows/lib/task-sla.js.map +7 -0
  715. package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
  716. package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
  717. package/dist/modules/workflows/lib/task-visibility.js +194 -0
  718. package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
  719. package/dist/modules/workflows/lib/timer-handler.js +3 -1
  720. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  721. package/dist/modules/workflows/lib/transition-handler.js +148 -20
  722. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  723. package/dist/modules/workflows/lib/trigger-node.js +121 -0
  724. package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
  725. package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
  726. package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
  727. package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
  728. package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
  729. package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
  730. package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
  731. package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
  732. package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
  733. package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
  734. package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
  735. package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
  736. package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
  737. package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
  738. package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
  739. package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
  740. package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
  741. package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
  742. package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
  743. package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
  744. package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
  745. package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
  746. package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
  747. package/dist/modules/workflows/lib/workflow-executor.js +658 -6
  748. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  749. package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
  750. package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
  751. package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
  752. package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
  753. package/dist/modules/workflows/lib/workflow-templates.js +69 -0
  754. package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
  755. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
  756. package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
  757. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
  758. package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
  759. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
  760. package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
  761. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
  762. package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
  763. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
  764. package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
  765. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
  766. package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
  767. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
  768. package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
  769. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
  770. package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
  771. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
  772. package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
  773. package/dist/modules/workflows/notifications.js +38 -10
  774. package/dist/modules/workflows/notifications.js.map +2 -2
  775. package/dist/modules/workflows/setup.js +81 -1
  776. package/dist/modules/workflows/setup.js.map +2 -2
  777. package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
  778. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
  779. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
  780. package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
  781. package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
  782. package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
  783. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
  784. package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
  785. package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
  786. package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
  787. package/dist/modules/workflows/widgets/injection-table.js +26 -0
  788. package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
  789. package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
  790. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  791. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
  792. package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
  793. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
  794. package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
  795. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
  796. package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
  797. package/generated/entities/action_log/index.ts +1 -0
  798. package/generated/entities/user/index.ts +1 -0
  799. package/generated/entities/user_task/index.ts +7 -0
  800. package/generated/entities/workflow_definition/index.ts +3 -0
  801. package/generated/entities/workflow_definition_draft/index.ts +11 -0
  802. package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
  803. package/generated/entities/workflow_instance/index.ts +2 -0
  804. package/generated/entities.ids.generated.ts +4 -1
  805. package/generated/entity-fields-registry.ts +39 -0
  806. package/jest.setup.ts +13 -0
  807. package/package.json +8 -7
  808. package/src/bootstrap.ts +13 -3
  809. package/src/helpers/integration/workflowsFixtures.ts +765 -5
  810. package/src/helpers/integration/workflowsUi.ts +318 -0
  811. package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
  812. package/src/modules/audit_logs/data/entities.ts +12 -0
  813. package/src/modules/audit_logs/data/validators.ts +1 -0
  814. package/src/modules/audit_logs/lib/projections.ts +5 -1
  815. package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
  816. package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
  817. package/src/modules/audit_logs/services/actionLogService.ts +3 -0
  818. package/src/modules/auth/data/entities.ts +21 -0
  819. package/src/modules/auth/i18n/de.json +31 -0
  820. package/src/modules/auth/i18n/en.json +31 -0
  821. package/src/modules/auth/i18n/es.json +31 -0
  822. package/src/modules/auth/i18n/ko.json +31 -0
  823. package/src/modules/auth/i18n/pl.json +31 -0
  824. package/src/modules/auth/lib/executionPrincipal.ts +235 -0
  825. package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
  826. package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
  827. package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
  828. package/src/modules/business_rules/data/validators.ts +6 -0
  829. package/src/modules/business_rules/i18n/de.json +4 -0
  830. package/src/modules/business_rules/i18n/en.json +4 -0
  831. package/src/modules/business_rules/i18n/es.json +4 -0
  832. package/src/modules/business_rules/i18n/ko.json +4 -0
  833. package/src/modules/business_rules/i18n/pl.json +4 -0
  834. package/src/modules/business_rules/lib/rule-engine.ts +15 -1
  835. package/src/modules/catalog/commands/products.ts +12 -0
  836. package/src/modules/catalog/i18n/de.json +1 -0
  837. package/src/modules/catalog/i18n/en.json +1 -0
  838. package/src/modules/catalog/i18n/es.json +1 -0
  839. package/src/modules/catalog/i18n/ko.json +1 -0
  840. package/src/modules/catalog/i18n/pl.json +1 -0
  841. package/src/modules/catalog/workflows.ts +35 -0
  842. package/src/modules/customer_accounts/AGENTS.md +11 -0
  843. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
  844. package/src/modules/customer_accounts/cli.ts +96 -0
  845. package/src/modules/customer_accounts/i18n/de.json +5 -0
  846. package/src/modules/customer_accounts/i18n/en.json +5 -0
  847. package/src/modules/customer_accounts/i18n/es.json +5 -0
  848. package/src/modules/customer_accounts/i18n/ko.json +5 -0
  849. package/src/modules/customer_accounts/i18n/pl.json +5 -0
  850. package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
  851. package/src/modules/customer_accounts/setup.ts +15 -3
  852. package/src/modules/customers/commands/deals.ts +5 -0
  853. package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
  854. package/src/modules/customers/components/detail/utils.ts +2 -0
  855. package/src/modules/customers/events.ts +21 -3
  856. package/src/modules/customers/i18n/de.json +4 -0
  857. package/src/modules/customers/i18n/en.json +4 -0
  858. package/src/modules/customers/i18n/es.json +4 -0
  859. package/src/modules/customers/i18n/ko.json +4 -0
  860. package/src/modules/customers/i18n/pl.json +4 -0
  861. package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
  862. package/src/modules/customers/lib/todoCompatibility.ts +4 -1
  863. package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
  864. package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
  865. package/src/modules/customers/workflows.ts +57 -0
  866. package/src/modules/entities/api/records.ts +18 -62
  867. package/src/modules/entities/lib/entityClassification.ts +102 -0
  868. package/src/modules/sales/commands/documents.ts +46 -0
  869. package/src/modules/sales/events.ts +20 -2
  870. package/src/modules/sales/i18n/de.json +2 -1
  871. package/src/modules/sales/i18n/en.json +2 -1
  872. package/src/modules/sales/i18n/es.json +2 -1
  873. package/src/modules/sales/i18n/ko.json +2 -1
  874. package/src/modules/sales/i18n/pl.json +2 -1
  875. package/src/modules/sales/workflows.ts +12 -1
  876. package/src/modules/seeds/README.md +86 -0
  877. package/src/modules/seeds/cli.ts +220 -0
  878. package/src/modules/seeds/examples/sample-seed.json +26 -0
  879. package/src/modules/seeds/index.ts +11 -0
  880. package/src/modules/workflows/AGENTS.md +851 -10
  881. package/src/modules/workflows/acl.ts +96 -0
  882. package/src/modules/workflows/ai-agents.ts +80 -0
  883. package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
  884. package/src/modules/workflows/ai-tools/types.ts +117 -0
  885. package/src/modules/workflows/ai-tools.ts +20 -0
  886. package/src/modules/workflows/api/command-settings/route.ts +171 -0
  887. package/src/modules/workflows/api/commands/route.ts +109 -0
  888. package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
  889. package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
  890. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
  891. package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
  892. package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
  893. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
  894. package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
  895. package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
  896. package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
  897. package/src/modules/workflows/api/definitions/route.ts +88 -113
  898. package/src/modules/workflows/api/definitions/serialize.ts +9 -0
  899. package/src/modules/workflows/api/endpoints/route.ts +88 -0
  900. package/src/modules/workflows/api/functions/route.ts +91 -0
  901. package/src/modules/workflows/api/grantable-features/route.ts +102 -0
  902. package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
  903. package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
  904. package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
  905. package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
  906. package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
  907. package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
  908. package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
  909. package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
  910. package/src/modules/workflows/api/instances/route.ts +135 -3
  911. package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
  912. package/src/modules/workflows/api/openapi.ts +549 -2
  913. package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
  914. package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
  915. package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
  916. package/src/modules/workflows/api/rule-usage/route.ts +94 -0
  917. package/src/modules/workflows/api/task-settings/route.ts +138 -0
  918. package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
  919. package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
  920. package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
  921. package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
  922. package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
  923. package/src/modules/workflows/api/tasks/route.ts +60 -5
  924. package/src/modules/workflows/api/tasks/serialize.ts +119 -0
  925. package/src/modules/workflows/api/templates/route.ts +87 -0
  926. package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
  927. package/src/modules/workflows/api/work-inbox/route.ts +153 -0
  928. package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
  929. package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
  930. package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
  931. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  932. package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
  933. package/src/modules/workflows/backend/definitions/page.tsx +156 -76
  934. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
  935. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
  936. package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
  937. package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
  938. package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
  939. package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
  940. package/src/modules/workflows/backend/instances/page.tsx +218 -38
  941. package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
  942. package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
  943. package/src/modules/workflows/backend/tasks/page.tsx +20 -333
  944. package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
  945. package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
  946. package/src/modules/workflows/cli.ts +1 -1
  947. package/src/modules/workflows/commands/tasks.ts +146 -0
  948. package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
  949. package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
  950. package/src/modules/workflows/components/AgentSelector.tsx +200 -0
  951. package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
  952. package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
  953. package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
  954. package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
  955. package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
  956. package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
  957. package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
  958. package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
  959. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
  960. package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
  961. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
  962. package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
  963. package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
  964. package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
  965. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
  966. package/src/modules/workflows/components/StepsEditor.tsx +9 -2
  967. package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
  968. package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
  969. package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
  970. package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
  971. package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
  972. package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
  973. package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
  974. package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
  975. package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
  976. package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
  977. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
  978. package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
  979. package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
  980. package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
  981. package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
  982. package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
  983. package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
  984. package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
  985. package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
  986. package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
  987. package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
  988. package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
  989. package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
  990. package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
  991. package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
  992. package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
  993. package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
  994. package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
  995. package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
  996. package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
  997. package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
  998. package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
  999. package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
  1000. package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
  1001. package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
  1002. package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
  1003. package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
  1004. package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
  1005. package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
  1006. package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
  1007. package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
  1008. package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
  1009. package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
  1010. package/src/modules/workflows/components/formConfig.tsx +84 -10
  1011. package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
  1012. package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
  1013. package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
  1014. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
  1015. package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
  1016. package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
  1017. package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
  1018. package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
  1019. package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
  1020. package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
  1021. package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
  1022. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
  1023. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
  1024. package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
  1025. package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
  1026. package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
  1027. package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
  1028. package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
  1029. package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
  1030. package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
  1031. package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
  1032. package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
  1033. package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
  1034. package/src/modules/workflows/components/nodes/index.ts +17 -0
  1035. package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
  1036. package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
  1037. package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
  1038. package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
  1039. package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
  1040. package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
  1041. package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
  1042. package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
  1043. package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
  1044. package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
  1045. package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
  1046. package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
  1047. package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
  1048. package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
  1049. package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
  1050. package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
  1051. package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
  1052. package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
  1053. package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
  1054. package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
  1055. package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
  1056. package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
  1057. package/src/modules/workflows/data/entities.ts +397 -4
  1058. package/src/modules/workflows/data/metrics-validators.ts +51 -0
  1059. package/src/modules/workflows/data/task-primitives.ts +36 -0
  1060. package/src/modules/workflows/data/types.ts +81 -2
  1061. package/src/modules/workflows/data/validators.ts +729 -60
  1062. package/src/modules/workflows/di.ts +22 -0
  1063. package/src/modules/workflows/events.ts +68 -8
  1064. package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
  1065. package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
  1066. package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
  1067. package/src/modules/workflows/examples/templates/order-approval.json +230 -0
  1068. package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
  1069. package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
  1070. package/src/modules/workflows/extension-points.ts +1 -1
  1071. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
  1072. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
  1073. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
  1074. package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
  1075. package/src/modules/workflows/i18n/de.json +1083 -24
  1076. package/src/modules/workflows/i18n/en.json +1081 -22
  1077. package/src/modules/workflows/i18n/es.json +1083 -24
  1078. package/src/modules/workflows/i18n/ko.json +1072 -13
  1079. package/src/modules/workflows/i18n/pl.json +1082 -23
  1080. package/src/modules/workflows/lib/activity-executor.ts +855 -186
  1081. package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
  1082. package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
  1083. package/src/modules/workflows/lib/activity-registry.ts +89 -0
  1084. package/src/modules/workflows/lib/activity-types.ts +415 -0
  1085. package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
  1086. package/src/modules/workflows/lib/advanced-config.ts +41 -0
  1087. package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
  1088. package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
  1089. package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
  1090. package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
  1091. package/src/modules/workflows/lib/agent-review.ts +171 -0
  1092. package/src/modules/workflows/lib/ai-authoring.ts +402 -0
  1093. package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
  1094. package/src/modules/workflows/lib/annotation-events.ts +15 -0
  1095. package/src/modules/workflows/lib/branching-routes.ts +280 -0
  1096. package/src/modules/workflows/lib/breach-routing.ts +142 -0
  1097. package/src/modules/workflows/lib/bulk-replay.ts +185 -0
  1098. package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
  1099. package/src/modules/workflows/lib/caller-graph.ts +104 -0
  1100. package/src/modules/workflows/lib/code-view-apply.ts +178 -0
  1101. package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
  1102. package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
  1103. package/src/modules/workflows/lib/component-guard.ts +13 -0
  1104. package/src/modules/workflows/lib/condition-handler.ts +658 -0
  1105. package/src/modules/workflows/lib/context-ledger.ts +814 -0
  1106. package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
  1107. package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
  1108. package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
  1109. package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
  1110. package/src/modules/workflows/lib/definition-error-body.ts +43 -0
  1111. package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
  1112. package/src/modules/workflows/lib/definition-grant.ts +211 -0
  1113. package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
  1114. package/src/modules/workflows/lib/definition-payload.ts +81 -0
  1115. package/src/modules/workflows/lib/draft-restore.ts +72 -0
  1116. package/src/modules/workflows/lib/dry-run.ts +203 -0
  1117. package/src/modules/workflows/lib/duration.ts +138 -24
  1118. package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
  1119. package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
  1120. package/src/modules/workflows/lib/editor-annotations.ts +301 -0
  1121. package/src/modules/workflows/lib/editor-commands.ts +205 -0
  1122. package/src/modules/workflows/lib/editor-history.ts +151 -0
  1123. package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
  1124. package/src/modules/workflows/lib/endpoint-path.ts +134 -0
  1125. package/src/modules/workflows/lib/engine-version.ts +67 -0
  1126. package/src/modules/workflows/lib/error-handler.ts +192 -0
  1127. package/src/modules/workflows/lib/error-routing.ts +236 -0
  1128. package/src/modules/workflows/lib/event-logger.ts +27 -0
  1129. package/src/modules/workflows/lib/expression-refs.ts +291 -0
  1130. package/src/modules/workflows/lib/failure-grouping.ts +134 -0
  1131. package/src/modules/workflows/lib/find-definition.ts +4 -0
  1132. package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
  1133. package/src/modules/workflows/lib/graph-utils.ts +620 -110
  1134. package/src/modules/workflows/lib/icon-search.ts +65 -0
  1135. package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
  1136. package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
  1137. package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
  1138. package/src/modules/workflows/lib/ledger-drag.ts +61 -0
  1139. package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
  1140. package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
  1141. package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
  1142. package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
  1143. package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
  1144. package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
  1145. package/src/modules/workflows/lib/node-config-summary.ts +235 -0
  1146. package/src/modules/workflows/lib/node-geometry.ts +168 -0
  1147. package/src/modules/workflows/lib/node-nudge.ts +63 -0
  1148. package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
  1149. package/src/modules/workflows/lib/node-placement.ts +104 -0
  1150. package/src/modules/workflows/lib/node-type-icons.ts +71 -10
  1151. package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
  1152. package/src/modules/workflows/lib/outcome-routing.ts +346 -0
  1153. package/src/modules/workflows/lib/owned-definition.ts +188 -0
  1154. package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
  1155. package/src/modules/workflows/lib/palette-drag.ts +68 -0
  1156. package/src/modules/workflows/lib/palette-drop.ts +114 -0
  1157. package/src/modules/workflows/lib/parallel-handler.ts +79 -2
  1158. package/src/modules/workflows/lib/port-contract.ts +107 -0
  1159. package/src/modules/workflows/lib/portal-task-access.ts +220 -0
  1160. package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
  1161. package/src/modules/workflows/lib/route-chip-events.ts +45 -0
  1162. package/src/modules/workflows/lib/route-chips.ts +177 -0
  1163. package/src/modules/workflows/lib/route-edge.ts +57 -0
  1164. package/src/modules/workflows/lib/route-kinds.ts +166 -0
  1165. package/src/modules/workflows/lib/route-priority.ts +197 -0
  1166. package/src/modules/workflows/lib/run-duration.ts +70 -0
  1167. package/src/modules/workflows/lib/run-event-tone.ts +46 -0
  1168. package/src/modules/workflows/lib/run-execution.ts +598 -0
  1169. package/src/modules/workflows/lib/run-gantt.ts +311 -0
  1170. package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
  1171. package/src/modules/workflows/lib/run-outcome.ts +142 -0
  1172. package/src/modules/workflows/lib/sample-resolver.ts +113 -0
  1173. package/src/modules/workflows/lib/seeds.ts +3 -1
  1174. package/src/modules/workflows/lib/server-output-contract.ts +120 -0
  1175. package/src/modules/workflows/lib/set-variable.ts +94 -0
  1176. package/src/modules/workflows/lib/signal-handler.ts +134 -4
  1177. package/src/modules/workflows/lib/start-fixtures.ts +93 -0
  1178. package/src/modules/workflows/lib/status-colors.ts +220 -21
  1179. package/src/modules/workflows/lib/step-handler.ts +744 -68
  1180. package/src/modules/workflows/lib/step-presentation.ts +295 -0
  1181. package/src/modules/workflows/lib/step-through.ts +71 -0
  1182. package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
  1183. package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
  1184. package/src/modules/workflows/lib/task-decision-context.ts +76 -0
  1185. package/src/modules/workflows/lib/task-decisions.ts +117 -0
  1186. package/src/modules/workflows/lib/task-entity-access.ts +181 -0
  1187. package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
  1188. package/src/modules/workflows/lib/task-entity-types.ts +66 -0
  1189. package/src/modules/workflows/lib/task-form-registry.ts +123 -0
  1190. package/src/modules/workflows/lib/task-form-schema.ts +129 -0
  1191. package/src/modules/workflows/lib/task-handler.ts +492 -51
  1192. package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
  1193. package/src/modules/workflows/lib/task-list-query.ts +46 -0
  1194. package/src/modules/workflows/lib/task-notifications.ts +218 -0
  1195. package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
  1196. package/src/modules/workflows/lib/task-presets.ts +95 -0
  1197. package/src/modules/workflows/lib/task-quick-action.ts +111 -0
  1198. package/src/modules/workflows/lib/task-resolution.ts +270 -0
  1199. package/src/modules/workflows/lib/task-sla.ts +628 -0
  1200. package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
  1201. package/src/modules/workflows/lib/task-visibility.ts +627 -0
  1202. package/src/modules/workflows/lib/timer-handler.ts +8 -1
  1203. package/src/modules/workflows/lib/transition-handler.ts +228 -20
  1204. package/src/modules/workflows/lib/trigger-node.ts +272 -0
  1205. package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
  1206. package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
  1207. package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
  1208. package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
  1209. package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
  1210. package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
  1211. package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
  1212. package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
  1213. package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
  1214. package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
  1215. package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
  1216. package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
  1217. package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
  1218. package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
  1219. package/src/modules/workflows/lib/workflow-templates.ts +91 -0
  1220. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
  1221. package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
  1222. package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
  1223. package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
  1224. package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
  1225. package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
  1226. package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
  1227. package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
  1228. package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
  1229. package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
  1230. package/src/modules/workflows/notifications.ts +40 -10
  1231. package/src/modules/workflows/setup.ts +128 -0
  1232. package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
  1233. package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
  1234. package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
  1235. package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
  1236. package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
  1237. package/src/modules/workflows/widgets/injection-table.ts +52 -2
  1238. package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
  1239. package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
  1240. package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
  1241. package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
@@ -1,47 +1,76 @@
1
1
  import { z } from 'zod'
2
+ import { conditionExpressionSchema } from '@open-mercato/core/modules/business_rules/data/validators'
3
+ import { validateConditionExpressionForApi } from '@open-mercato/core/modules/business_rules/lib/payload-validation'
2
4
  import { parseDuration } from '../lib/duration'
5
+ import { excludeNonNormalTransitions } from '../lib/route-kinds'
6
+ import { WORKFLOW_RUN_OUTCOMES } from '../lib/run-outcome'
7
+ import {
8
+ WORKFLOW_START_FIXTURES_MAX_CHARS,
9
+ WORKFLOW_START_FIXTURES_MAX_COUNT,
10
+ WORKFLOW_START_FIXTURE_NAME_MAX,
11
+ } from '../lib/start-fixtures'
12
+ import '../lib/activity-registry-bootstrap'
13
+ import { activityTypeIds } from '../lib/activity-registry'
14
+ import {
15
+ DURATION_ERROR,
16
+ UNTIL_ERROR,
17
+ UNTIL_PAST_ERROR,
18
+ invokeAgentConfigSchema,
19
+ isFutureIsoDateString,
20
+ isValidDurationString,
21
+ isValidIsoDateString,
22
+ } from './activity-config-schemas'
23
+ import {
24
+ taskDeadlineSchema,
25
+ taskPrioritySchema,
26
+ taskReminderSchema,
27
+ } from './task-primitives'
3
28
 
4
29
  /**
5
30
  * Workflows Module - Zod Validators
6
31
  *
7
32
  * Comprehensive validation schemas for workflow engine entities.
33
+ *
34
+ * Per-type activity config schemas live in activity-config-schemas.ts (the
35
+ * registry bootstrap depends on them, and this module depends on the
36
+ * bootstrap for the registry-driven activityTypeSchema) and are re-exported
37
+ * here to keep the historical import surface stable.
8
38
  */
9
39
 
10
- const uuid = z.uuid()
11
-
12
- // Variable interpolation tokens (e.g., {{context.timeout}}) are resolved at
13
- // run time, so we must skip strict syntax checks on them at save time.
14
- const containsTemplate = (value: string) => value.includes('{{')
15
-
16
- export function isValidDurationString(value: unknown): boolean {
17
- if (typeof value !== 'string' || value.length === 0) return false
18
- if (containsTemplate(value)) return true
19
- try {
20
- const ms = parseDuration(value)
21
- return Number.isFinite(ms) && ms > 0
22
- } catch {
23
- return false
24
- }
25
- }
26
-
27
- export function isValidIsoDateString(value: unknown): boolean {
28
- if (typeof value !== 'string' || value.length === 0) return false
29
- if (containsTemplate(value)) return true
30
- const d = new Date(value)
31
- return !Number.isNaN(d.getTime())
32
- }
33
-
34
- export function isFutureIsoDateString(value: unknown): boolean {
35
- if (typeof value !== 'string' || value.length === 0) return false
36
- if (containsTemplate(value)) return true
37
- const d = new Date(value)
38
- if (Number.isNaN(d.getTime())) return false
39
- return d.getTime() > Date.now()
40
- }
40
+ export {
41
+ isValidDurationString,
42
+ isValidIsoDateString,
43
+ isFutureIsoDateString,
44
+ callApiConfigSchema,
45
+ callWebhookConfigSchema,
46
+ sendEmailConfigSchema,
47
+ emitEventConfigSchema,
48
+ updateEntityConfigSchema,
49
+ executeFunctionConfigSchema,
50
+ invokeAgentConfigSchema,
51
+ setVariableAssignmentSchema,
52
+ setVariableConfigSchema,
53
+ waitConfigSchema,
54
+ } from './activity-config-schemas'
55
+ export type {
56
+ CallWebhookConfig,
57
+ SendEmailConfig,
58
+ EmitEventConfig,
59
+ UpdateEntityConfig,
60
+ ExecuteFunctionConfig,
61
+ InvokeAgentConfig,
62
+ SetVariableConfig,
63
+ WaitConfig,
64
+ } from './activity-config-schemas'
65
+
66
+ export {
67
+ taskPrioritySchema,
68
+ taskDeadlineSchema,
69
+ taskReminderSchema,
70
+ } from './task-primitives'
71
+ export type { TaskPriority, TaskDeadline, TaskReminder } from './task-primitives'
41
72
 
42
- const DURATION_ERROR = 'Invalid duration. Use ISO 8601 (e.g., PT5M, PT1H, P1D) or simple format (5m, 1h, 3d)'
43
- const UNTIL_ERROR = 'Invalid "until". Provide an ISO 8601 datetime string'
44
- const UNTIL_PAST_ERROR = '"until" must be a future datetime'
73
+ const uuid = z.uuid()
45
74
 
46
75
  // ============================================================================
47
76
  // Enum Schemas - Workflow Types and Statuses
@@ -57,6 +86,9 @@ export const workflowStepTypeSchema = z.enum([
57
86
  'SUB_WORKFLOW',
58
87
  'WAIT_FOR_SIGNAL',
59
88
  'WAIT_FOR_TIMER',
89
+ 'WAIT_FOR_CONDITION',
90
+ 'IF_ELSE',
91
+ 'SWITCH',
60
92
  ])
61
93
  export type WorkflowStepType = z.infer<typeof workflowStepTypeSchema>
62
94
 
@@ -73,6 +105,15 @@ export const workflowInstanceStatusSchema = z.enum([
73
105
  ])
74
106
  export type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>
75
107
 
108
+ /**
109
+ * Terminal run VERDICT (`WorkflowInstance.outcome`), additive alongside the
110
+ * lifecycle `status`. The tuple lives in the pure `lib/run-outcome.ts` so the
111
+ * engine, the schema and the read routes cannot drift apart.
112
+ */
113
+ export const workflowRunOutcomeSchema = z.enum(
114
+ WORKFLOW_RUN_OUTCOMES as unknown as [string, ...string[]],
115
+ )
116
+
76
117
  export const workflowBranchInstanceStatusSchema = z.enum([
77
118
  'ACTIVE',
78
119
  'PAUSED',
@@ -105,15 +146,16 @@ export type UserTaskStatus = z.infer<typeof userTaskStatusSchema>
105
146
  export const transitionTriggerSchema = z.enum(['auto', 'manual', 'signal', 'timer'])
106
147
  export type TransitionTrigger = z.infer<typeof transitionTriggerSchema>
107
148
 
108
- export const activityTypeSchema = z.enum([
109
- 'SEND_EMAIL',
110
- 'CALL_API',
111
- 'UPDATE_ENTITY',
112
- 'EMIT_EVENT',
113
- 'CALL_WEBHOOK',
114
- 'EXECUTE_FUNCTION',
115
- 'WAIT',
116
- ])
149
+ /**
150
+ * Registry-driven: the accepted activity types are whatever the Activity
151
+ * Registry has registered by the time this module loads (the bootstrap import
152
+ * above guarantees the built-ins, INVOKE_AGENT included). Registration order
153
+ * matters — the enum is frozen at this module's first import, so extension
154
+ * modules MUST call `registerActivityType` before anything imports these
155
+ * validators, or their types will be rejected by every schema built from this
156
+ * enum.
157
+ */
158
+ export const activityTypeSchema = z.enum(activityTypeIds())
117
159
  export type ActivityType = z.infer<typeof activityTypeSchema>
118
160
 
119
161
  export const escalationTriggerSchema = z.enum(['sla_breach', 'no_progress', 'custom'])
@@ -122,20 +164,106 @@ export type EscalationTrigger = z.infer<typeof escalationTriggerSchema>
122
164
  export const escalationActionSchema = z.enum(['reassign', 'notify', 'escalate'])
123
165
  export type EscalationAction = z.infer<typeof escalationActionSchema>
124
166
 
167
+ // ============================================================================
168
+ // Task inspector vocabulary (spec §6.1)
169
+ // ============================================================================
170
+
171
+ /**
172
+ * Author-supplied copy that reaches an end user (task instructions, entity
173
+ * binding labels, decision-button labels).
174
+ *
175
+ * The redesign's §6.5 wants the platform localized-string shape
176
+ * (`{ [locale]: string }`) with a bare string treated as the tenant default
177
+ * locale. No such platform type exists, and promoting one to
178
+ * `packages/shared` would mint a new STABLE type surface, so this shape stays
179
+ * LOCAL to workflows until that call is made.
180
+ *
181
+ * Both members are structural, which keeps every existing single-string value
182
+ * valid forever and lets `interpolateVariables` walk either form unchanged (it
183
+ * already recurses into plain objects).
184
+ */
185
+ export const taskLocalizedStringSchema = z.union([
186
+ z.string(),
187
+ z.record(z.string(), z.string()),
188
+ ])
189
+ export type TaskLocalizedString = z.infer<typeof taskLocalizedStringSchema>
190
+
191
+ /**
192
+ * A record the task is about. `idPath` is a context path (the ledger emits
193
+ * `{{context.*}}` pills over the same vocabulary) resolved at task-creation
194
+ * time; `entityType` is the platform entity id (`customers:person`).
195
+ */
196
+ export const taskEntityBindingSchema = z.object({
197
+ entityType: z.string().min(1),
198
+ idPath: z.string().min(1),
199
+ label: taskLocalizedStringSchema.optional(),
200
+ })
201
+ export type TaskEntityBinding = z.infer<typeof taskEntityBindingSchema>
202
+
203
+ /**
204
+ * What happens when the deadline passes: notify, reassign, or follow the
205
+ * SLA-breach route out of the step.
206
+ */
207
+ export const taskOnBreachSchema = z.object({
208
+ action: z.enum(['notify', 'reassign', 'route']),
209
+ reassignTo: z.string().optional(),
210
+ transitionId: z.string().optional(),
211
+ })
212
+ export type TaskOnBreach = z.infer<typeof taskOnBreachSchema>
213
+
214
+ /**
215
+ * A decision button, mapped 1:1 to an outgoing route.
216
+ *
217
+ * `transitionId` binds to the transition's DURABLE id, never its index: route
218
+ * order changes with every edit, and both id forms the engine accepts stay
219
+ * valid forever (`t_…` minted by `generateTransitionId()`, plus the legacy
220
+ * `e_<from>_<to>` ids stored definitions still carry), so the shape is an
221
+ * opaque non-empty string rather than a pattern.
222
+ */
223
+ export const taskDecisionSchema = z.object({
224
+ id: z.string().min(1),
225
+ label: taskLocalizedStringSchema,
226
+ transitionId: z.string().min(1),
227
+ style: z.enum(['primary', 'secondary', 'destructive']).optional(),
228
+ })
229
+ export type TaskDecision = z.infer<typeof taskDecisionSchema>
230
+
125
231
  // ============================================================================
126
232
  // Complex Object Schemas - Workflow Definition Components
127
233
  // ============================================================================
128
234
 
235
+ /**
236
+ * The `user_tasks.assignee_kind` vocabulary, declared here because the AUTHORED
237
+ * config is what decides it and the ORM column merely stores the answer.
238
+ */
239
+ export const userTaskAssigneeKindSchema = z.enum(['user', 'customer'])
240
+ export type UserTaskAssigneeKind = z.infer<typeof userTaskAssigneeKindSchema>
241
+
129
242
  // User task configuration
130
243
  export const userTaskConfigSchema = z.object({
131
244
  // Support both custom fields array format and JSON Schema format
132
245
  formSchema: z.union([
133
- // Custom format with fields array
246
+ // Custom format with fields array.
247
+ //
248
+ // `label` is OPTIONAL because every consumer already treats it that way:
249
+ // `lib/task-form-schema.ts` — the single pure mapper behind both form
250
+ // validation and rendering — declares `label?: string` and resolves
251
+ // `title: field.label ?? field.name`, and the editor's own list renders
252
+ // `field.label || field.name`. Requiring it here made the contract
253
+ // stricter than the code reading it, which rejected definitions the
254
+ // engine would have run: the AI draft schema (`lib/ai-authoring.ts`)
255
+ // and the `create_definition` MCP tool both emit an optional label, so
256
+ // a generated definition could 400 on a field the runtime renders fine.
257
+ //
258
+ // This is a WIDENING change — payloads rejected before are accepted now,
259
+ // and nothing previously accepted changes — so it needs no deprecation
260
+ // window. A missing label is an authoring-quality issue, and this module
261
+ // surfaces those through the Problems panel rather than a hard 400.
134
262
  z.object({
135
263
  fields: z.array(z.object({
136
264
  name: z.string().min(1),
137
265
  type: z.string().min(1),
138
- label: z.string().min(1),
266
+ label: z.string().min(1).optional(),
139
267
  required: z.boolean().optional(),
140
268
  options: z.array(z.any()).optional(),
141
269
  }))
@@ -151,6 +279,31 @@ export const userTaskConfigSchema = z.object({
151
279
  z.string(),
152
280
  z.array(z.string()),
153
281
  ]).optional(),
282
+ // Role queue the task is offered to when no individual assignee is set. The
283
+ // editor has always written this key (`lib/graph-utils.ts`) and the engine has
284
+ // always read it (`lib/step-handler.ts`), but it was undeclared here — zod
285
+ // strips unknown keys and the definition PUT persists the PARSED value, so
286
+ // authored role assignment was silently discarded on every save.
287
+ assignedToRoles: z.array(z.string()).optional(),
288
+ /**
289
+ * Which principal namespace `assignedTo` names (design §7.1).
290
+ *
291
+ * `'customer'` addresses the task to a PORTAL principal — the resolved id is a
292
+ * `CustomerUser.id`, the row is written with `assignee_kind = 'customer'`, and
293
+ * only `/api/workflows/portal/tasks*` can see or complete it. It is honoured
294
+ * only when an individual assignee resolves, and it forces `assignedToRoles`
295
+ * to null: portal roles are a different namespace and a portal principal
296
+ * cannot claim from a backoffice queue.
297
+ *
298
+ * Absent means `'user'`, which is what every definition authored before this
299
+ * key existed has always meant.
300
+ */
301
+ assigneeKind: userTaskAssigneeKindSchema.optional(),
302
+ // Renderer key for an externally registered task form. Same round-trip as
303
+ // `assignedToRoles`: written by the editor, previously stripped on save.
304
+ formKey: z.string().optional(),
305
+ // Actions offered on the task surface (editor default: complete + cancel).
306
+ allowedActions: z.array(z.string()).optional(),
154
307
  assignmentRule: z.string().optional(), // Business rule ID
155
308
  slaDuration: z.string().optional(), // ISO 8601 duration
156
309
  escalationRules: z.array(z.object({
@@ -159,7 +312,27 @@ export const userTaskConfigSchema = z.object({
159
312
  escalateTo: z.string().optional(),
160
313
  notifyUsers: z.array(z.string()).optional(),
161
314
  })).optional(),
315
+ // --------------------------------------------------------------------------
316
+ // Task inspector vocabulary (spec §6.1). Every key below is OPTIONAL and
317
+ // additive: a config declaring none of them parses to exactly what it parsed
318
+ // to before, and the engine reads it exactly as it did before. A regression
319
+ // test in `lib/__tests__/user-task-config.test.ts` pins that byte-for-byte.
320
+ // --------------------------------------------------------------------------
321
+ // "What": rich instructions shown to the assignee, variable pills included.
322
+ instructions: taskLocalizedStringSchema.optional(),
323
+ // "About what": the records this task is about.
324
+ entityBindings: z.array(taskEntityBindingSchema).optional(),
325
+ // "When": priority, deadline, reminders, and what happens on breach.
326
+ priority: taskPrioritySchema.optional(),
327
+ deadline: taskDeadlineSchema.optional(),
328
+ reminders: z.array(taskReminderSchema).optional(),
329
+ onBreach: taskOnBreachSchema.optional(),
330
+ // "Decisions": buttons bound 1:1 to outgoing routes, plus the subset of form
331
+ // fields the assignee may edit before deciding.
332
+ decisions: z.array(taskDecisionSchema).optional(),
333
+ editablePrefilled: z.array(z.string()).optional(),
162
334
  })
335
+ export type UserTaskConfig = z.infer<typeof userTaskConfigSchema>
163
336
 
164
337
  // Sub-workflow configuration (Phase 8)
165
338
  export const subWorkflowConfigSchema = z.object({
@@ -170,23 +343,33 @@ export const subWorkflowConfigSchema = z.object({
170
343
  timeoutMs: z.number().int().positive().optional(),
171
344
  })
172
345
 
173
- // CALL_API activity configuration
174
- export const callApiConfigSchema = z.object({
175
- endpoint: z.string().min(1, 'API endpoint is required'),
176
- method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']).default('GET'),
177
- headers: z.record(z.string(), z.string()).optional(),
178
- body: z.any().optional(),
179
- validateTenantMatch: z.boolean().default(true).optional(),
180
- timeout: z.number().int().positive().optional(),
346
+ // Sub-workflow IO contract ("ports"). Business-user-facing typed declaration of
347
+ // the inputs a workflow accepts and the outputs it returns. The five port types
348
+ // are the simple labels surfaced in the Schema Builder; mapped values are
349
+ // coerced and validated against them at the SUB_WORKFLOW boundary by
350
+ // lib/port-contract.ts. Declared on the child definition (definition.io).
351
+ export const portFieldTypeSchema = z.enum(['text', 'number', 'boolean', 'select', 'date'])
352
+
353
+ export const portFieldSchema = z.object({
354
+ name: z
355
+ .string()
356
+ .min(1)
357
+ .max(100)
358
+ .regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'Port name must start with a letter and contain only letters, numbers, and underscores'),
359
+ type: portFieldTypeSchema,
360
+ label: z.string().min(1).max(255),
361
+ required: z.boolean().optional().default(false),
362
+ options: z.array(z.string()).optional(),
181
363
  })
182
364
 
183
- export const callWebhookConfigSchema = z.object({
184
- url: z.string().min(1, 'Webhook URL is required'),
185
- method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).default('POST'),
186
- headers: z.record(z.string(), z.string()).optional(),
187
- body: z.any().optional(),
365
+ export const workflowIoContractSchema = z.object({
366
+ inputs: z.array(portFieldSchema).optional(),
367
+ outputs: z.array(portFieldSchema).optional(),
188
368
  })
189
- export type CallWebhookConfig = z.infer<typeof callWebhookConfigSchema>
369
+
370
+ export type PortFieldType = z.infer<typeof portFieldTypeSchema>
371
+ export type PortField = z.infer<typeof portFieldSchema>
372
+ export type WorkflowIoContract = z.infer<typeof workflowIoContractSchema>
190
373
 
191
374
  // Retry policy
192
375
  export const retryPolicySchema = z.object({
@@ -267,6 +450,19 @@ export const activityDefinitionSchema = z.object({
267
450
  }
268
451
  }
269
452
 
453
+ if (activity.activityType === 'INVOKE_AGENT') {
454
+ const parsed = invokeAgentConfigSchema.safeParse(activity.config || {})
455
+ if (!parsed.success) {
456
+ for (const issue of parsed.error.issues) {
457
+ ctx.addIssue({
458
+ code: 'custom',
459
+ path: ['config', ...issue.path],
460
+ message: issue.message,
461
+ })
462
+ }
463
+ }
464
+ return
465
+ }
270
466
  if (activity.activityType !== 'WAIT') return
271
467
  const config = activity.config || {}
272
468
  const hasDuration = config.duration != null && config.duration !== ''
@@ -323,6 +519,134 @@ export const startPreConditionSchema = z.object({
323
519
 
324
520
  export type StartPreCondition = z.infer<typeof startPreConditionSchema>
325
521
 
522
+ // WAIT_FOR_CONDITION save-time bounds. Mirrors lib/condition-handler.ts, which
523
+ // clamps at runtime; the validator fails closed instead so a definition that
524
+ // would degenerate into a plain timer never saves.
525
+ export const CONDITION_POLL_INTERVAL_MIN_MS = 5000
526
+ export const CONDITION_POLL_INTERVAL_MAX_MS = 3600000
527
+
528
+ const CONDITION_REQUIRED_ERROR = 'WAIT_FOR_CONDITION step requires a "condition" expression'
529
+ const CONDITION_TIMEOUT_REQUIRED_ERROR = 'WAIT_FOR_CONDITION step requires a "timeout" duration'
530
+ const CONDITION_ON_TIMEOUT_ERROR = 'WAIT_FOR_CONDITION "onTimeout" must be "FAIL" or "CONTINUE"'
531
+ const CONDITION_POLL_INTERVAL_RANGE_ERROR = `WAIT_FOR_CONDITION "pollIntervalMs" must be an integer between ${CONDITION_POLL_INTERVAL_MIN_MS} and ${CONDITION_POLL_INTERVAL_MAX_MS}`
532
+ const CONDITION_POLL_INTERVAL_EXCEEDS_TIMEOUT_ERROR =
533
+ 'WAIT_FOR_CONDITION "pollIntervalMs" must not exceed "timeout" — the first poll would land after the deadline'
534
+
535
+ /**
536
+ * Fail-closed save-time validation for a WAIT_FOR_CONDITION step's config.
537
+ * The predicate is checked with the business_rules API validator rather than a
538
+ * hand-rolled shape check, so it inherits that module's safety bounds
539
+ * (nesting depth, rules per group, field-path length, regex linearity).
540
+ */
541
+ function refineWaitForConditionStep(config: Record<string, unknown>, ctx: z.RefinementCtx): void {
542
+ const condition = config.condition
543
+ if (condition == null) {
544
+ ctx.addIssue({ code: 'custom', path: ['config', 'condition'], message: CONDITION_REQUIRED_ERROR })
545
+ } else {
546
+ const conditionResult = validateConditionExpressionForApi(condition)
547
+ if (!conditionResult.valid) {
548
+ ctx.addIssue({
549
+ code: 'custom',
550
+ path: ['config', 'condition'],
551
+ message: conditionResult.error ?? CONDITION_REQUIRED_ERROR,
552
+ })
553
+ }
554
+ }
555
+
556
+ const timeout = config.timeout
557
+ const hasTimeout = typeof timeout === 'string' && timeout.length > 0
558
+ if (!hasTimeout) {
559
+ ctx.addIssue({ code: 'custom', path: ['config', 'timeout'], message: CONDITION_TIMEOUT_REQUIRED_ERROR })
560
+ } else if (!isValidDurationString(timeout)) {
561
+ ctx.addIssue({ code: 'custom', path: ['config', 'timeout'], message: DURATION_ERROR })
562
+ }
563
+
564
+ if (config.onTimeout != null && config.onTimeout !== 'FAIL' && config.onTimeout !== 'CONTINUE') {
565
+ ctx.addIssue({ code: 'custom', path: ['config', 'onTimeout'], message: CONDITION_ON_TIMEOUT_ERROR })
566
+ }
567
+
568
+ if (config.pollIntervalMs == null) return
569
+
570
+ const pollIntervalMs = config.pollIntervalMs
571
+ if (
572
+ typeof pollIntervalMs !== 'number'
573
+ || !Number.isInteger(pollIntervalMs)
574
+ || pollIntervalMs < CONDITION_POLL_INTERVAL_MIN_MS
575
+ || pollIntervalMs > CONDITION_POLL_INTERVAL_MAX_MS
576
+ ) {
577
+ ctx.addIssue({
578
+ code: 'custom',
579
+ path: ['config', 'pollIntervalMs'],
580
+ message: CONDITION_POLL_INTERVAL_RANGE_ERROR,
581
+ })
582
+ return
583
+ }
584
+
585
+ if (hasTimeout && isValidDurationString(timeout)) {
586
+ const timeoutMs = parseDuration(timeout)
587
+ if (pollIntervalMs > timeoutMs) {
588
+ ctx.addIssue({
589
+ code: 'custom',
590
+ path: ['config', 'pollIntervalMs'],
591
+ message: CONDITION_POLL_INTERVAL_EXCEEDS_TIMEOUT_ERROR,
592
+ })
593
+ }
594
+ }
595
+ }
596
+
597
+ /**
598
+ * Named error directive applied when a failing step has no wired error route
599
+ * (spec 5.9). Absent means `fail`, which is the pre-existing behavior, so no
600
+ * stored definition changes meaning. `fallbackValue` is authored against the
601
+ * step's output contract and lands in the run context under the step id.
602
+ */
603
+ export const stepErrorDirectiveSchema = z.object({
604
+ mode: z.enum(['fail', 'continueWithFallback', 'failureQueue']),
605
+ fallbackValue: z.unknown().optional(),
606
+ })
607
+
608
+ export type StepErrorDirective = z.infer<typeof stepErrorDirectiveSchema>
609
+
610
+ /**
611
+ * Transition discriminator. `error` routes are reachable ONLY from a step
612
+ * failure, `slaBreach` routes ONLY from a user task's deadline passing, and
613
+ * `outcome` routes ONLY from an agent step resolving a disposition (spec 7.2) —
614
+ * normal routing filters all of them out — so adding one never changes the happy
615
+ * path. Absent means `normal`.
616
+ */
617
+ export const transitionKindSchema = z.enum(['normal', 'error', 'slaBreach', 'outcome'])
618
+
619
+ export type WorkflowTransitionKind = z.infer<typeof transitionKindSchema>
620
+
621
+ /**
622
+ * Definition-level catch-all error handler (spec 5.9). Exactly one form:
623
+ * `workflowId` designates a handler sub-workflow started with
624
+ * `{ failedStepId, error, contextSnapshot }`; `stepId` designates a handler step
625
+ * the run jumps to before failing. Engine construct — never an event trigger.
626
+ */
627
+ export const workflowErrorHandlerSchema = z.object({
628
+ workflowId: z.string().min(1).max(100).optional(),
629
+ version: z.number().int().positive().optional(),
630
+ stepId: z.string().min(1).max(100).optional(),
631
+ }).superRefine((handler, ctx) => {
632
+ const forms = [handler.workflowId, handler.stepId].filter((value) => value != null && value !== '')
633
+ if (forms.length !== 1) {
634
+ ctx.addIssue({
635
+ code: 'custom',
636
+ message: 'errorHandler must declare exactly one of "workflowId" or "stepId"',
637
+ })
638
+ }
639
+ if (handler.version != null && !handler.workflowId) {
640
+ ctx.addIssue({
641
+ code: 'custom',
642
+ path: ['version'],
643
+ message: 'errorHandler.version only applies to the workflowId form',
644
+ })
645
+ }
646
+ })
647
+
648
+ export type WorkflowErrorHandlerConfig = z.infer<typeof workflowErrorHandlerSchema>
649
+
326
650
  // Step definition
327
651
  export const workflowStepSchema = z.object({
328
652
  stepId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Step ID must contain only lowercase letters, numbers, hyphens, and underscores'),
@@ -341,7 +665,36 @@ export const workflowStepSchema = z.object({
341
665
  retryPolicy: retryPolicySchema.optional(),
342
666
  // Pre-conditions for START step (business rules to validate before workflow can be started)
343
667
  preConditions: z.array(startPreConditionSchema).optional(),
668
+ // What happens when this step fails and no error route is wired (spec 5.9).
669
+ errorDirective: stepErrorDirectiveSchema.optional(),
670
+ /**
671
+ * The BUSINESS milestone this step announces when it completes.
672
+ *
673
+ * An annotation rather than a step type, deliberately: a milestone is not a
674
+ * step, and modelling it as one would make "the stage reached after the join"
675
+ * unexpressible without a no-op node between the join and whatever follows it.
676
+ * Any step can carry one — an AUTOMATED step, a PARALLEL_JOIN, a USER_TASK —
677
+ * and the engine emits `workflows.instance.milestone_reached` on completion.
678
+ *
679
+ * The key belongs to a vocabulary the consuming module declares; this module
680
+ * only bounds its shape. A key nobody declares is a warning THERE, never an
681
+ * error here — the engine emits what the author wrote.
682
+ */
683
+ milestone: z.string().min(1).max(100).regex(/^[a-z0-9_]+$/, 'Milestone key must contain only lowercase letters, digits and underscores').optional(),
684
+ // Visual-editor node coordinate persisted in the jsonb definition so a saved
685
+ // graph re-opens exactly as the author arranged it. Additive/optional — legacy
686
+ // and code-authored definitions omit it and auto-arrange on load.
687
+ _editorPosition: z.object({ x: z.number(), y: z.number() }).optional(),
688
+ // Editor-owned, never executed. Holds `unmappedConfig`: config a step-type
689
+ // conversion could not map onto the new type (spec 4.5). The engine ignores
690
+ // this object entirely; it exists so a conversion never destroys authored
691
+ // configuration and a conversion back can recover it.
692
+ metadata: z.record(z.string(), z.any()).optional(),
344
693
  }).superRefine((step, ctx) => {
694
+ if (step.stepType === 'WAIT_FOR_CONDITION') {
695
+ refineWaitForConditionStep(step.config || {}, ctx)
696
+ return
697
+ }
345
698
  if (step.stepType !== 'WAIT_FOR_TIMER') return
346
699
  const config = step.config || {}
347
700
  const hasDuration = config.duration != null && config.duration !== ''
@@ -401,8 +754,21 @@ export const workflowTransitionSchema = z.object({
401
754
  trigger: transitionTriggerSchema,
402
755
  preConditions: z.array(transitionConditionSchema).optional(),
403
756
  postConditions: z.array(transitionConditionSchema).optional(),
757
+ // Inline condition in the business_rules ConditionExpression language — the
758
+ // one condition language platform-wide. `findValidTransitions` has always
759
+ // evaluated `transition.condition`; declaring it here makes author-time
760
+ // routing (IF_ELSE / SWITCH cases) survive a save round-trip.
761
+ condition: conditionExpressionSchema,
404
762
  activities: z.array(activityDefinitionSchema).optional(), // Activities to execute during transition
405
763
  continueOnActivityFailure: z.boolean().default(false).optional(), // If true, transition continues even when activities fail
764
+ // Error route marker (spec 5.9). Normal routing never selects an `error`
765
+ // route; the engine follows it only when the source step fails.
766
+ kind: transitionKindSchema.optional(),
767
+ // Which of spec 7.2's five fixed disposition kinds an `outcome` route carries.
768
+ // Additive and optional: a definition declaring no outcome routes never
769
+ // carries it, and an unknown value is surfaced as a Problems-panel issue
770
+ // rather than rejected, so an older definition never fails to load.
771
+ outcomeKind: z.string().min(1).max(50).optional(),
406
772
  priority: z.number().int().min(0).max(9999).default(0),
407
773
  })
408
774
 
@@ -475,6 +841,7 @@ interface ForkJoinTransitionLike {
475
841
  fromStepId: string
476
842
  toStepId: string
477
843
  trigger: string
844
+ kind?: string
478
845
  }
479
846
 
480
847
  interface ForkJoinDefinitionLike {
@@ -499,7 +866,9 @@ interface ForkJoinDefinitionLike {
499
866
  export function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {
500
867
  const issues: ForkJoinValidationIssue[] = []
501
868
  const steps = definition.steps ?? []
502
- const transitions = definition.transitions ?? []
869
+ // Error routes leave the happy-path graph on purpose (spec 5.9): a branch step
870
+ // may route its failure outside the fork region without breaking convergence.
871
+ const transitions = excludeNonNormalTransitions(definition.transitions ?? [])
503
872
 
504
873
  const stepById = new Map<string, ForkJoinStepLike>()
505
874
  for (const step of steps) stepById.set(step.stepId, step)
@@ -642,11 +1011,36 @@ export function validateParallelForkJoin(definition: ForkJoinDefinitionLike): Fo
642
1011
  return issues
643
1012
  }
644
1013
 
1014
+ // Declared context schema (spec §3.1) — the typed-input contract for a
1015
+ // definition. Field vocabulary mirrors userTaskConfigSchema's formSchema
1016
+ // fields so form-driven and context-driven inputs share one shape language.
1017
+ export const contextSchemaFieldSchema = z.object({
1018
+ name: z.string().min(1),
1019
+ type: z.enum(['text', 'number', 'boolean', 'select', 'date']),
1020
+ label: z.string().optional(),
1021
+ required: z.boolean().optional(),
1022
+ options: z.array(z.string()).optional(),
1023
+ })
1024
+
1025
+ export type WorkflowContextSchemaField = z.infer<typeof contextSchemaFieldSchema>
1026
+
1027
+ export const contextSchemaSchema = z.object({
1028
+ input: z.object({
1029
+ fields: z.array(contextSchemaFieldSchema),
1030
+ }).optional(),
1031
+ })
1032
+
1033
+ export type WorkflowContextSchema = z.infer<typeof contextSchemaSchema>
1034
+
645
1035
  // Workflow definition data (JSONB structure)
646
1036
  export const workflowDefinitionDataSchema = z.object({
647
1037
  steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),
648
1038
  transitions: z.array(workflowTransitionSchema).min(1, 'Workflow must have at least one transition'),
649
1039
  triggers: z.array(workflowDefinitionTriggerSchema).optional(), // Event triggers for automatic workflow start
1040
+ contextSchema: contextSchemaSchema.optional(), // Declared typed-input contract (spec §3.1) — canonical input contract
1041
+ io: workflowIoContractSchema.optional(), // Sub-workflow input/output port contract; io.input is a read-through alias of contextSchema.input for the ledger
1042
+ interpolation: z.enum(['strict', 'lenient']).optional(), // Interpolation mode (spec §3.6): absent = lenient; the POST create route defaults NEW definitions to 'strict' — never default here, it would flip existing lenient definitions on their next full-body update
1043
+ errorHandler: workflowErrorHandlerSchema.optional(), // Catch-all error handler (spec §5.9)
650
1044
  queries: z.array(z.any()).optional(), // For Phase 7
651
1045
  signals: z.array(z.any()).optional(), // For Phase 9
652
1046
  timers: z.array(z.any()).optional(), // For Phase 9
@@ -658,13 +1052,123 @@ export const workflowDefinitionDataSchema = z.object({
658
1052
  message: `[${issue.code}] ${issue.message}`,
659
1053
  })
660
1054
  }
1055
+
1056
+ // A waiting step with no way out strands the run once its predicate holds,
1057
+ // so the graph-level rule the other waiting step types carry applies here too.
1058
+ definition.steps.forEach((step, index) => {
1059
+ if (step.stepType !== 'WAIT_FOR_CONDITION') return
1060
+ const hasOutgoing = definition.transitions.some(
1061
+ (transition) => transition.fromStepId === step.stepId,
1062
+ )
1063
+ if (hasOutgoing) return
1064
+ ctx.addIssue({
1065
+ code: 'custom',
1066
+ path: ['steps', index],
1067
+ message: `WAIT_FOR_CONDITION step "${step.stepId}" requires at least one outgoing transition`,
1068
+ })
1069
+ })
1070
+ })
1071
+
1072
+ // Pinned per-step sample envelope (spec §3.6). Samples are stored verbatim
1073
+ // with no redaction layer in Phase 2a — the editor surfaces an explicit
1074
+ // warning where pinning happens instead.
1075
+ export const sampleEnvelopeSchema = z.object({
1076
+ pinnedAt: z.string().datetime({ offset: true }),
1077
+ source: z.enum(['manual', 'test']),
1078
+ data: z.unknown(),
661
1079
  })
662
1080
 
1081
+ export type WorkflowSampleEnvelopeInput = z.infer<typeof sampleEnvelopeSchema>
1082
+
1083
+ export const WORKFLOW_EDITOR_SAMPLES_MAX_CHARS = 65536
1084
+
1085
+ export const WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS = 65536
1086
+
1087
+ // Named START contexts (spec section 8.1). The caps live in the pure
1088
+ // `lib/start-fixtures.ts` so the editor and the schema cannot disagree.
1089
+ export const startFixtureSchema = z.object({
1090
+ name: z.string().min(1).max(WORKFLOW_START_FIXTURE_NAME_MAX),
1091
+ savedAt: z.string().datetime({ offset: true }),
1092
+ context: z.record(z.string(), z.any()),
1093
+ })
1094
+
1095
+ export type WorkflowStartFixtureInput = z.infer<typeof startFixtureSchema>
1096
+
1097
+ // Editor annotations (spec §4.5): markdown sticky notes and named groups. They
1098
+ // are documentation only — never execution semantics — which is why they live
1099
+ // here in metadata and never in `definition.steps`.
1100
+ const annotationPointSchema = z.object({ x: z.number(), y: z.number() })
1101
+ const annotationSizeSchema = z.object({ width: z.number().positive(), height: z.number().positive() })
1102
+
1103
+ export const editorNoteSchema = z.object({
1104
+ id: z.string().min(1).max(100),
1105
+ markdown: z.string().max(10000),
1106
+ position: annotationPointSchema,
1107
+ size: annotationSizeSchema,
1108
+ })
1109
+
1110
+ export const editorGroupSchema = z.object({
1111
+ id: z.string().min(1).max(100),
1112
+ name: z.string().max(200),
1113
+ rect: z.object({ x: z.number(), y: z.number(), width: z.number().positive(), height: z.number().positive() }),
1114
+ collapsed: z.boolean().optional(),
1115
+ })
1116
+
1117
+ export const editorAnnotationsSchema = z.object({
1118
+ notes: z.array(editorNoteSchema).optional(),
1119
+ groups: z.array(editorGroupSchema).optional(),
1120
+ })
1121
+
1122
+ export type WorkflowEditorNoteInput = z.infer<typeof editorNoteSchema>
1123
+ export type WorkflowEditorGroupInput = z.infer<typeof editorGroupSchema>
1124
+
663
1125
  // Workflow metadata
664
1126
  export const workflowMetadataSchema = z.object({
665
1127
  tags: z.array(z.string().max(50)).optional(),
666
1128
  category: z.string().max(100).optional(),
667
1129
  icon: z.string().max(100).optional(),
1130
+ // Forward-compatibility guard (spec section 5.8): engines below this version
1131
+ // refuse to instantiate the definition instead of misexecuting it.
1132
+ minEngineVersion: z.number().int().min(1).optional(),
1133
+ editor: z.object({
1134
+ samples: z.record(z.string(), sampleEnvelopeSchema).optional(),
1135
+ annotations: editorAnnotationsSchema.optional(),
1136
+ // Named START contexts (spec section 8.1). A different thing from a pinned
1137
+ // per-step sample, which is why it gets its own key and its own cap.
1138
+ fixtures: z.record(z.string(), startFixtureSchema).optional(),
1139
+ }).passthrough().optional(),
1140
+ }).superRefine((metadata, ctx) => {
1141
+ const samples = metadata.editor?.samples
1142
+ if (samples && JSON.stringify(samples).length > WORKFLOW_EDITOR_SAMPLES_MAX_CHARS) {
1143
+ ctx.addIssue({
1144
+ code: 'custom',
1145
+ path: ['editor', 'samples'],
1146
+ message: `Pinned samples exceed the ${WORKFLOW_EDITOR_SAMPLES_MAX_CHARS}-character limit; unpin or shrink samples before saving`,
1147
+ })
1148
+ }
1149
+ const annotations = metadata.editor?.annotations
1150
+ if (annotations && JSON.stringify(annotations).length > WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS) {
1151
+ ctx.addIssue({
1152
+ code: 'custom',
1153
+ path: ['editor', 'annotations'],
1154
+ message: `Notes and groups exceed the ${WORKFLOW_EDITOR_ANNOTATIONS_MAX_CHARS}-character limit; shorten or remove some before saving`,
1155
+ })
1156
+ }
1157
+ const fixtures = metadata.editor?.fixtures
1158
+ if (fixtures && JSON.stringify(fixtures).length > WORKFLOW_START_FIXTURES_MAX_CHARS) {
1159
+ ctx.addIssue({
1160
+ code: 'custom',
1161
+ path: ['editor', 'fixtures'],
1162
+ message: `Start fixtures exceed the ${WORKFLOW_START_FIXTURES_MAX_CHARS}-character limit; delete or shrink fixtures before saving`,
1163
+ })
1164
+ }
1165
+ if (fixtures && Object.keys(fixtures).length > WORKFLOW_START_FIXTURES_MAX_COUNT) {
1166
+ ctx.addIssue({
1167
+ code: 'custom',
1168
+ path: ['editor', 'fixtures'],
1169
+ message: `A definition may keep at most ${WORKFLOW_START_FIXTURES_MAX_COUNT} start fixtures`,
1170
+ })
1171
+ }
668
1172
  })
669
1173
 
670
1174
  // Date preprocessing helper
@@ -678,6 +1182,29 @@ const dateOrNull = z.preprocess((value) => {
678
1182
  // WorkflowDefinition Schemas
679
1183
  // ============================================================================
680
1184
 
1185
+ // Definition classification + lifecycle
1186
+ export const workflowKindSchema = z.enum(['workflow', 'component'])
1187
+ export const workflowLifecycleSchema = z.enum(['draft', 'published', 'archived'])
1188
+
1189
+ export type WorkflowKind = z.infer<typeof workflowKindSchema>
1190
+ export type WorkflowLifecycle = z.infer<typeof workflowLifecycleSchema>
1191
+
1192
+ // A reusable component is invoked only as a SUB_WORKFLOW and never auto-starts,
1193
+ // so it MUST NOT declare event triggers.
1194
+ const componentHasNoTriggers = (
1195
+ data: { kind?: string | null; definition?: { triggers?: unknown[] } | null },
1196
+ ctx: z.RefinementCtx,
1197
+ ) => {
1198
+ const triggers = data.definition && (data.definition as { triggers?: unknown[] }).triggers
1199
+ if (data.kind === 'component' && Array.isArray(triggers) && triggers.length > 0) {
1200
+ ctx.addIssue({
1201
+ code: 'custom',
1202
+ path: ['definition', 'triggers'],
1203
+ message: 'A component workflow cannot declare event triggers',
1204
+ })
1205
+ }
1206
+ }
1207
+
681
1208
  // Full schema for database entities (includes tenant fields)
682
1209
  export const createWorkflowDefinitionSchema = z.object({
683
1210
  workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
@@ -687,6 +1214,8 @@ export const createWorkflowDefinitionSchema = z.object({
687
1214
  definition: workflowDefinitionDataSchema,
688
1215
  metadata: workflowMetadataSchema.optional().nullable(),
689
1216
  enabled: z.boolean().default(true),
1217
+ kind: workflowKindSchema.default('workflow'),
1218
+ lifecycle: workflowLifecycleSchema.default('published'),
690
1219
  effectiveFrom: dateOrNull.optional(),
691
1220
  effectiveTo: dateOrNull.optional(),
692
1221
  tenantId: uuid,
@@ -696,6 +1225,20 @@ export const createWorkflowDefinitionSchema = z.object({
696
1225
 
697
1226
  export type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinitionSchema>
698
1227
 
1228
+ /**
1229
+ * The definition's own execution grant (see `lib/definition-grant.ts`).
1230
+ *
1231
+ * Absent leaves the stored value untouched; `null` or `[]` clears it back to
1232
+ * "borrow the starting user's identity". Feature ids only — the subset check
1233
+ * against the saving user's own grants happens in the route, because it needs
1234
+ * the live RBAC service.
1235
+ */
1236
+ export const workflowGrantedFeaturesSchema = z
1237
+ .array(z.string().min(1).max(255))
1238
+ .max(200)
1239
+ .optional()
1240
+ .nullable()
1241
+
699
1242
  // API input schema (omits tenant fields - injected from auth context)
700
1243
  export const createWorkflowDefinitionInputSchema = z.object({
701
1244
  workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
@@ -705,10 +1248,18 @@ export const createWorkflowDefinitionInputSchema = z.object({
705
1248
  definition: workflowDefinitionDataSchema,
706
1249
  metadata: workflowMetadataSchema.optional().nullable(),
707
1250
  enabled: z.boolean().default(true).optional(),
1251
+ kind: workflowKindSchema.optional(),
1252
+ lifecycle: workflowLifecycleSchema.optional(),
1253
+ grantedFeatures: workflowGrantedFeaturesSchema,
708
1254
  })
709
1255
 
710
1256
  export type CreateWorkflowDefinitionApiInput = z.infer<typeof createWorkflowDefinitionInputSchema>
711
1257
 
1258
+ // Validation variant that also enforces the component-has-no-triggers rule.
1259
+ // Kept separate so the base object stays `.pick()`/`.extend()`-able for OpenAPI.
1260
+ export const createWorkflowDefinitionInputCheckedSchema =
1261
+ createWorkflowDefinitionInputSchema.superRefine(componentHasNoTriggers)
1262
+
712
1263
  export const updateWorkflowDefinitionSchema = createWorkflowDefinitionSchema.partial().extend({
713
1264
  id: uuid,
714
1265
  })
@@ -728,12 +1279,19 @@ export const updateWorkflowDefinitionInputSchema = z.object({
728
1279
  definition: workflowDefinitionDataSchema.optional(),
729
1280
  metadata: workflowMetadataSchema.optional().nullable(),
730
1281
  enabled: z.boolean().optional(),
1282
+ kind: workflowKindSchema.optional(),
1283
+ lifecycle: workflowLifecycleSchema.optional(),
731
1284
  effectiveFrom: dateOrNull.optional(),
732
1285
  effectiveTo: dateOrNull.optional(),
1286
+ grantedFeatures: workflowGrantedFeaturesSchema,
733
1287
  }).strict()
734
1288
 
735
1289
  export type UpdateWorkflowDefinitionApiInput = z.infer<typeof updateWorkflowDefinitionInputSchema>
736
1290
 
1291
+ // Validation variant that also enforces the component-has-no-triggers rule.
1292
+ export const updateWorkflowDefinitionInputCheckedSchema =
1293
+ updateWorkflowDefinitionInputSchema.superRefine(componentHasNoTriggers)
1294
+
737
1295
  export const workflowDefinitionFilterSchema = z.object({
738
1296
  workflowId: z.string().optional(),
739
1297
  workflowName: z.string().optional(),
@@ -744,6 +1302,57 @@ export const workflowDefinitionFilterSchema = z.object({
744
1302
 
745
1303
  export type WorkflowDefinitionFilter = z.infer<typeof workflowDefinitionFilterSchema>
746
1304
 
1305
+ // ============================================================================
1306
+ // WorkflowDefinitionDraft Schemas
1307
+ // ============================================================================
1308
+
1309
+ /**
1310
+ * Lenient shape-only schema for per-user editor drafts (spec §4.7).
1311
+ *
1312
+ * A draft is autosaved mid-edit and may be structurally incomplete — missing
1313
+ * START/END steps, dangling transitions, empty graphs — so it deliberately
1314
+ * does NOT reuse workflowDefinitionDataSchema (min counts, fork/join graph
1315
+ * rules). Only truly malformed payloads are rejected: steps and transitions
1316
+ * must be arrays of objects. Unknown keys (triggers, queries, signals, timers,
1317
+ * future fields) pass through untouched so a draft round-trips losslessly.
1318
+ * Full validation runs when the draft is promoted via the definition PUT.
1319
+ */
1320
+ export const workflowDefinitionDraftDataSchema = z.object({
1321
+ steps: z.array(z.record(z.string(), z.unknown())),
1322
+ transitions: z.array(z.record(z.string(), z.unknown())),
1323
+ }).passthrough()
1324
+
1325
+ export type WorkflowDefinitionDraftData = z.infer<typeof workflowDefinitionDraftDataSchema>
1326
+
1327
+ export const upsertWorkflowDefinitionDraftInputSchema = z.object({
1328
+ definition: workflowDefinitionDraftDataSchema,
1329
+ metadata: workflowMetadataSchema.optional().nullable(),
1330
+ baseUpdatedAt: dateOrNull.optional(),
1331
+ }).strict()
1332
+
1333
+ export type UpsertWorkflowDefinitionDraftApiInput = z.infer<typeof upsertWorkflowDefinitionDraftInputSchema>
1334
+
1335
+ // ============================================================================
1336
+ // Test-Step (mock-first dry run) Schemas
1337
+ // ============================================================================
1338
+
1339
+ /**
1340
+ * Input for POST /definitions/[id]/test-step (spec §3.6). `config` is the raw
1341
+ * (possibly still-templated) activity config exactly as the editor holds it;
1342
+ * `context` is the caller-supplied sample workflow context the server
1343
+ * interpolates against. Both are intentionally shape-only records: per-type
1344
+ * config validation is the registry's concern (warnings, not gates), and a
1345
+ * sample context is arbitrary user data.
1346
+ */
1347
+ export const testWorkflowStepInputSchema = z.object({
1348
+ stepId: z.string().min(1).optional(),
1349
+ activityType: z.string().min(1),
1350
+ config: z.record(z.string(), z.unknown()),
1351
+ context: z.record(z.string(), z.unknown()).default({}),
1352
+ }).strict()
1353
+
1354
+ export type TestWorkflowStepApiInput = z.infer<typeof testWorkflowStepInputSchema>
1355
+
747
1356
  // ============================================================================
748
1357
  // WorkflowInstance Schemas
749
1358
  // ============================================================================
@@ -771,6 +1380,7 @@ export const createWorkflowInstanceSchema = z.object({
771
1380
  errorMessage: z.string().max(5000).optional().nullable(),
772
1381
  errorDetails: z.any().optional().nullable(),
773
1382
  retryCount: z.number().int().min(0).default(0),
1383
+ isDryRun: z.boolean().default(false),
774
1384
  tenantId: uuid,
775
1385
  organizationId: uuid,
776
1386
  })
@@ -789,6 +1399,7 @@ export const workflowInstanceFilterSchema = z.object({
789
1399
  status: workflowInstanceStatusSchema.optional(),
790
1400
  correlationKey: z.string().optional(),
791
1401
  currentStepId: z.string().optional(),
1402
+ isDryRun: z.boolean().optional(),
792
1403
  tenantId: uuid.optional(),
793
1404
  organizationId: uuid.optional(),
794
1405
  })
@@ -868,6 +1479,52 @@ export const updateUserTaskSchema = createUserTaskSchema.partial().extend({
868
1479
 
869
1480
  export type UpdateUserTaskInput = z.infer<typeof updateUserTaskSchema>
870
1481
 
1482
+ /**
1483
+ * Body of `POST /api/workflows/tasks/[id]/reassign`.
1484
+ *
1485
+ * The refinement is the point: §6.4 makes a task with no assignee AND no role
1486
+ * queue actionable by nobody, so a reassignment that wrote that shape would
1487
+ * create the very state reassignment exists to repair. Empty arrays and blank
1488
+ * strings are normalized away first, so `{ assignedTo: ' ' }` is refused rather
1489
+ * than silently storing whitespace as a user id.
1490
+ */
1491
+ export const reassignUserTaskSchema = z
1492
+ .object({
1493
+ assignedTo: z
1494
+ .string()
1495
+ .max(255)
1496
+ .nullable()
1497
+ .optional()
1498
+ .transform((value) => {
1499
+ const trimmed = typeof value === 'string' ? value.trim() : ''
1500
+ return trimmed.length > 0 ? trimmed : null
1501
+ }),
1502
+ assignedToRoles: z
1503
+ .array(z.string().max(100))
1504
+ .nullable()
1505
+ .optional()
1506
+ .transform((value) => {
1507
+ if (!Array.isArray(value)) return null
1508
+ const roles = value.map((role) => role.trim()).filter((role) => role.length > 0)
1509
+ return roles.length > 0 ? roles : null
1510
+ }),
1511
+ reason: z
1512
+ .string()
1513
+ .max(2000)
1514
+ .nullable()
1515
+ .optional()
1516
+ .transform((value) => {
1517
+ const trimmed = typeof value === 'string' ? value.trim() : ''
1518
+ return trimmed.length > 0 ? trimmed : null
1519
+ }),
1520
+ })
1521
+ .refine((value) => value.assignedTo !== null || value.assignedToRoles !== null, {
1522
+ message: 'Provide an assignee or at least one role queue',
1523
+ path: ['assignedTo'],
1524
+ })
1525
+
1526
+ export type ReassignUserTaskInput = z.infer<typeof reassignUserTaskSchema>
1527
+
871
1528
  export const userTaskFilterSchema = z.object({
872
1529
  workflowInstanceId: uuid.optional(),
873
1530
  status: userTaskStatusSchema.optional(),
@@ -932,6 +1589,18 @@ export const startWorkflowInputSchema = z.object({
932
1589
  correlationKey: z.string().optional(),
933
1590
  initialContext: z.record(z.string(), z.any()).optional(),
934
1591
  metadata: workflowInstanceMetadataSchema.optional(),
1592
+ /**
1593
+ * Start the run as a side-effect-free simulation (spec section 8.2). Opting
1594
+ * IN is the only way to get one: absent means a real run, exactly as before.
1595
+ * The route gates it behind `workflows.definitions.test_run`.
1596
+ */
1597
+ dryRun: z.boolean().optional(),
1598
+ /**
1599
+ * Pause before each step so the author can inspect the context and continue
1600
+ * or abort (spec section 8.2). Gated by the same `test_run` feature as
1601
+ * `dryRun`, and independent of it: a real run can be stepped through too.
1602
+ */
1603
+ stepThrough: z.boolean().optional(),
935
1604
  })
936
1605
 
937
1606
  export type StartWorkflowApiInput = z.infer<typeof startWorkflowInputSchema>