@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
@@ -0,0 +1,31 @@
1
+ import { createLogger } from "@open-mercato/shared/lib/logger";
2
+ const logger = createLogger("workflows");
3
+ function isPlainRecord(value) {
4
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5
+ }
6
+ function parseAdvancedConfigValue(value) {
7
+ if (value === void 0 || value === null) return void 0;
8
+ if (typeof value === "object") {
9
+ if (!isPlainRecord(value)) {
10
+ logger.error("Advanced Configuration must be a JSON object", { received: Array.isArray(value) ? "array" : typeof value });
11
+ throw new Error("workflows.validation.invalidAdvancedConfigJson");
12
+ }
13
+ return Object.keys(value).length > 0 ? value : void 0;
14
+ }
15
+ if (!value.trim()) return void 0;
16
+ try {
17
+ const parsed = JSON.parse(value);
18
+ if (!isPlainRecord(parsed)) {
19
+ throw new Error("[internal] advanced configuration must parse to a JSON object");
20
+ }
21
+ return Object.keys(parsed).length > 0 ? parsed : void 0;
22
+ } catch (error) {
23
+ logger.error("Invalid JSON in Advanced Configuration", { err: error });
24
+ throw new Error("workflows.validation.invalidAdvancedConfigJson");
25
+ }
26
+ }
27
+ export {
28
+ isPlainRecord,
29
+ parseAdvancedConfigValue
30
+ };
31
+ //# sourceMappingURL=advanced-config.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/advanced-config.ts"],
4
+ "sourcesContent": ["/**\n * Advanced Configuration value handling shared by the node and edge form transforms.\n *\n * The CrudForm dialogs render the Advanced Configuration field with JsonBuilder,\n * which emits the PARSED OBJECT on every valid edit. Legacy callers (and tests)\n * may still hand the transforms a JSON string. The transform boundary accepts\n * both: objects are used directly, strings are trimmed and parsed. Invalid\n * strings and non-object payloads surface the existing i18n validation key.\n */\n\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows')\n\nexport type AdvancedConfigValue = Record<string, unknown> | string | undefined\n\nexport function isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nexport function parseAdvancedConfigValue(value: AdvancedConfigValue): Record<string, unknown> | undefined {\n if (value === undefined || value === null) return undefined\n if (typeof value === 'object') {\n if (!isPlainRecord(value)) {\n logger.error('Advanced Configuration must be a JSON object', { received: Array.isArray(value) ? 'array' : typeof value })\n throw new Error('workflows.validation.invalidAdvancedConfigJson')\n }\n return Object.keys(value).length > 0 ? value : undefined\n }\n if (!value.trim()) return undefined\n try {\n const parsed: unknown = JSON.parse(value)\n if (!isPlainRecord(parsed)) {\n throw new Error('[internal] advanced configuration must parse to a JSON object')\n }\n return Object.keys(parsed).length > 0 ? parsed : undefined\n } catch (error) {\n logger.error('Invalid JSON in Advanced Configuration', { err: error })\n throw new Error('workflows.validation.invalidAdvancedConfigJson')\n }\n}\n"],
5
+ "mappings": "AAUA,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,WAAW;AAIhC,SAAS,cAAc,OAAkD;AAC9E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,yBAAyB,OAAiE;AACxG,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB,aAAO,MAAM,gDAAgD,EAAE,UAAU,MAAM,QAAQ,KAAK,IAAI,UAAU,OAAO,MAAM,CAAC;AACxH,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,WAAO,OAAO,KAAK,KAAK,EAAE,SAAS,IAAI,QAAQ;AAAA,EACjD;AACA,MAAI,CAAC,MAAM,KAAK,EAAG,QAAO;AAC1B,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,KAAK;AACxC,QAAI,CAAC,cAAc,MAAM,GAAG;AAC1B,YAAM,IAAI,MAAM,+DAA+D;AAAA,IACjF;AACA,WAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AAAA,EACnD,SAAS,OAAO;AACd,WAAO,MAAM,0CAA0C,EAAE,KAAK,MAAM,CAAC;AACrE,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,198 @@
1
+ import { StepInstance, UserTask, WorkflowInstance } from "../data/entities.js";
2
+ import { calculateDueDate } from "./duration.js";
3
+ import { scheduleUserTaskSla } from "./task-sla.js";
4
+ import { emitWorkflowsEvent } from "../events.js";
5
+ import { createLogger } from "@open-mercato/shared/lib/logger";
6
+ const logger = createLogger("workflows");
7
+ function resolveDueDate(duration, now, proposalId) {
8
+ if (typeof duration !== "string" || !duration.length) return null;
9
+ try {
10
+ return calculateDueDate(duration, now);
11
+ } catch (error) {
12
+ logger.warn("Agent review deadline skipped because it is not a valid duration", {
13
+ component: "agent-disposition-task",
14
+ proposalId,
15
+ duration
16
+ });
17
+ return null;
18
+ }
19
+ }
20
+ async function createAgentDispositionTask(em, container, options) {
21
+ const { tenantId, organizationId } = options;
22
+ const now = options.now ?? /* @__PURE__ */ new Date();
23
+ const instance = await em.findOne(WorkflowInstance, {
24
+ id: options.workflowInstanceId,
25
+ tenantId,
26
+ organizationId
27
+ });
28
+ if (!instance) {
29
+ throw new Error(
30
+ `[internal] workflow instance ${options.workflowInstanceId} not found for agent disposition task`
31
+ );
32
+ }
33
+ const stepInstance = await em.findOne(StepInstance, {
34
+ workflowInstanceId: options.workflowInstanceId,
35
+ stepId: options.stepId,
36
+ status: "ACTIVE",
37
+ tenantId,
38
+ organizationId
39
+ });
40
+ const review = options.review ?? null;
41
+ const assignedTo = review?.assignedTo?.length ? review.assignedTo : null;
42
+ const assignedToRoles = review?.assignedToRoles?.length ? review.assignedToRoles : null;
43
+ const dueDate = resolveDueDate(review?.deadlineDuration, now, options.proposalId);
44
+ const task = em.create(UserTask, {
45
+ workflowInstanceId: options.workflowInstanceId,
46
+ // The step instance is what the SLA scheduler, the run view and the §6.4
47
+ // gate address. Falling back to the workflow instance id (as the inline
48
+ // version did) writes a value that is not a step instance at all.
49
+ stepInstanceId: stepInstance?.id ?? options.workflowInstanceId,
50
+ branchInstanceId: stepInstance?.branchInstanceId ?? null,
51
+ taskName: options.taskName,
52
+ description: options.description,
53
+ status: "PENDING",
54
+ formSchema: {
55
+ proposalId: options.proposalId,
56
+ payload: options.proposalPayload,
57
+ confidence: options.confidence
58
+ },
59
+ assignedTo,
60
+ // Always the backoffice namespace: a proposal is disposed from the operator
61
+ // caseload, and no portal surface can dispose one.
62
+ assigneeKind: "user",
63
+ assignedToRoles,
64
+ priority: review?.priority ?? null,
65
+ dueDate,
66
+ tenantId,
67
+ organizationId,
68
+ createdAt: now,
69
+ updatedAt: now
70
+ });
71
+ em.persist(task);
72
+ await em.flush();
73
+ await logDispositionTaskEvent(em, container, {
74
+ workflowInstanceId: options.workflowInstanceId,
75
+ stepInstanceId: task.stepInstanceId,
76
+ branchInstanceId: task.branchInstanceId ?? null,
77
+ eventType: "USER_TASK_CREATED",
78
+ eventData: {
79
+ userTaskId: task.id,
80
+ taskName: task.taskName,
81
+ assignedTo: task.assignedTo,
82
+ assignedToRoles: task.assignedToRoles,
83
+ proposalId: options.proposalId,
84
+ agentId: options.agentId,
85
+ ...task.priority ? { priority: task.priority } : {},
86
+ ...dueDate ? { dueDate: dueDate.toISOString() } : {}
87
+ },
88
+ userId: options.userId,
89
+ tenantId,
90
+ organizationId
91
+ });
92
+ await emitDispositionTaskAssigned(task, instance);
93
+ await scheduleUserTaskSla({
94
+ workflowInstanceId: options.workflowInstanceId,
95
+ stepInstanceId: task.stepInstanceId,
96
+ branchInstanceId: task.branchInstanceId ?? null,
97
+ userTaskId: task.id,
98
+ dueDate,
99
+ reminders: review?.reminders ?? null,
100
+ tenantId,
101
+ organizationId,
102
+ userId: options.userId,
103
+ now
104
+ });
105
+ return {
106
+ userTaskId: task.id,
107
+ stepInstanceId: task.stepInstanceId,
108
+ assignedTo,
109
+ assignedToRoles,
110
+ dueDate
111
+ };
112
+ }
113
+ const OPEN_TASK_STATUSES = ["PENDING", "IN_PROGRESS"];
114
+ async function closeAgentDispositionTask(em, container, options) {
115
+ const { tenantId, organizationId } = options;
116
+ const now = options.now ?? /* @__PURE__ */ new Date();
117
+ const task = await em.findOne(UserTask, {
118
+ id: options.userTaskId,
119
+ tenantId,
120
+ organizationId
121
+ });
122
+ if (!task) return "noop";
123
+ const claimed = await em.nativeUpdate(
124
+ UserTask,
125
+ {
126
+ id: task.id,
127
+ tenantId,
128
+ organizationId,
129
+ status: { $in: [...OPEN_TASK_STATUSES] }
130
+ },
131
+ {
132
+ status: "COMPLETED",
133
+ completedAt: now,
134
+ completedBy: options.closedBy ?? null,
135
+ updatedAt: now
136
+ }
137
+ );
138
+ if (claimed === 0) return "noop";
139
+ await logDispositionTaskEvent(em, container, {
140
+ workflowInstanceId: task.workflowInstanceId,
141
+ stepInstanceId: task.stepInstanceId,
142
+ ...task.branchInstanceId ? { branchInstanceId: task.branchInstanceId } : {},
143
+ eventType: "USER_TASK_COMPLETED",
144
+ eventData: {
145
+ userTaskId: task.id,
146
+ taskName: task.taskName,
147
+ closedBy: "agent_disposition",
148
+ disposition: options.disposition
149
+ },
150
+ tenantId,
151
+ organizationId
152
+ });
153
+ return "closed";
154
+ }
155
+ async function emitDispositionTaskAssigned(task, instance) {
156
+ try {
157
+ await emitWorkflowsEvent(
158
+ "workflows.task.assigned",
159
+ {
160
+ taskId: task.id,
161
+ taskName: task.taskName,
162
+ workflowInstanceId: instance.id,
163
+ workflowId: instance.workflowId,
164
+ workflowName: instance.workflowId,
165
+ assignedUserId: task.assignedTo ?? null,
166
+ assignedToRoles: task.assignedToRoles ?? null,
167
+ dueDate: task.dueDate ? task.dueDate.toISOString() : null,
168
+ entityBindings: task.entityBindings ?? null,
169
+ tenantId: instance.tenantId,
170
+ organizationId: instance.organizationId ?? null
171
+ },
172
+ { persistent: true }
173
+ );
174
+ } catch (error) {
175
+ logger.error("Failed to emit workflows.task.assigned for an agent disposition task", {
176
+ component: "agent-disposition-task",
177
+ taskId: task.id,
178
+ err: error
179
+ });
180
+ }
181
+ }
182
+ async function logDispositionTaskEvent(em, container, event) {
183
+ try {
184
+ const eventLogger = container.resolve("eventLogger");
185
+ await eventLogger.logWorkflowEvent(em, event);
186
+ } catch (error) {
187
+ logger.error("Failed to log an agent disposition task workflow event", {
188
+ component: "agent-disposition-task",
189
+ eventType: event.eventType,
190
+ err: error
191
+ });
192
+ }
193
+ }
194
+ export {
195
+ closeAgentDispositionTask,
196
+ createAgentDispositionTask
197
+ };
198
+ //# sourceMappingURL=agent-disposition-task.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/agent-disposition-task.ts"],
4
+ "sourcesContent": ["/**\n * Workflows Module \u2014 the implicit agent-disposition task (spec \u00A77.5).\n *\n * When an INVOKE_AGENT step's confidence gate routes to a human, the enterprise\n * `dispositionService` raises a workflows `USER_TASK` for that decision. Until\n * now it built that row itself, inline, with no assignee, no role queue, no\n * deadline, no audit event and no assignment event \u2014 which under the \u00A76.4\n * visibility model produces a task that is visible only to administrative\n * oversight and ACTABLE BY NOBODY (`currentTaskOwnerId` is null, so\n * `ownsTheRow` is false for every principal), and which never reaches the\n * notification subscriber at all.\n *\n * The disposition task is supposed to be \"a real Work Inbox task\" (\u00A77.5), so\n * the row is built HERE, by the module that owns the entity, the audit log, the\n * assignment event and the SLA scheduler \u2014 and the enterprise service passes\n * the authored Review descriptor in. `agent_orchestrator` stays an optional\n * peer in both directions: it reaches this module through a dynamic import\n * guarded by its own try/catch, exactly as `lib/disposition/resume.ts` reaches\n * `sendSignal`.\n */\n\nimport type { EntityManager } from '@mikro-orm/core'\nimport type { AwilixContainer } from 'awilix'\nimport { StepInstance, UserTask, WorkflowInstance } from '../data/entities'\nimport { calculateDueDate } from './duration'\nimport { scheduleUserTaskSla } from './task-sla'\nimport { emitWorkflowsEvent } from '../events'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows')\n\n/**\n * The already-resolved Review section: assignment interpolated against the run\n * context and the deadline still expressed as a DURATION, because a disposition\n * deadline is anchored to when the task is created \u2014 not to when the agent was\n * enqueued, which can be minutes earlier.\n */\nexport interface AgentDispositionReview {\n assignedTo?: string | null\n assignedToRoles?: string[] | null\n priority?: string | null\n deadlineDuration?: string | null\n reminders?: { offset: string }[] | null\n}\n\nexport interface CreateAgentDispositionTaskOptions {\n workflowInstanceId: string\n stepId: string\n proposalId: string\n agentId: string\n proposalPayload: unknown\n confidence: number | null\n taskName: string\n description: string\n review?: AgentDispositionReview | null\n tenantId: string\n organizationId: string\n userId?: string\n now?: Date\n}\n\nexport interface CreatedAgentDispositionTask {\n userTaskId: string\n stepInstanceId: string\n assignedTo: string | null\n assignedToRoles: string[] | null\n dueDate: Date | null\n}\n\nfunction resolveDueDate(\n duration: string | null | undefined,\n now: Date,\n proposalId: string,\n): Date | null {\n if (typeof duration !== 'string' || !duration.length) return null\n try {\n return calculateDueDate(duration, now)\n } catch (error) {\n // An unparseable deadline must not cost the operator the task. A USER_TASK\n // step fails the step here; a disposition task cannot, because the agent has\n // already run and its proposal is already pending \u2014 losing the review task\n // would strand the proposal with nobody able to see it.\n logger.warn('Agent review deadline skipped because it is not a valid duration', {\n component: 'agent-disposition-task',\n proposalId,\n duration,\n })\n return null\n }\n}\n\n/**\n * Create the disposition task for a pending proposal.\n *\n * Returns the created task; throws only when the workflow instance the caller\n * named cannot be read, which is the caller's signal to fall back to its\n * synthetic id.\n */\nexport async function createAgentDispositionTask(\n em: EntityManager,\n container: AwilixContainer,\n options: CreateAgentDispositionTaskOptions,\n): Promise<CreatedAgentDispositionTask> {\n const { tenantId, organizationId } = options\n const now = options.now ?? new Date()\n\n const instance = await em.findOne(WorkflowInstance, {\n id: options.workflowInstanceId,\n tenantId,\n organizationId,\n })\n if (!instance) {\n throw new Error(\n `[internal] workflow instance ${options.workflowInstanceId} not found for agent disposition task`,\n )\n }\n\n const stepInstance = await em.findOne(StepInstance, {\n workflowInstanceId: options.workflowInstanceId,\n stepId: options.stepId,\n status: 'ACTIVE',\n tenantId,\n organizationId,\n })\n\n const review = options.review ?? null\n const assignedTo = review?.assignedTo?.length ? review.assignedTo : null\n const assignedToRoles = review?.assignedToRoles?.length ? review.assignedToRoles : null\n const dueDate = resolveDueDate(review?.deadlineDuration, now, options.proposalId)\n\n const task = em.create(UserTask, {\n workflowInstanceId: options.workflowInstanceId,\n // The step instance is what the SLA scheduler, the run view and the \u00A76.4\n // gate address. Falling back to the workflow instance id (as the inline\n // version did) writes a value that is not a step instance at all.\n stepInstanceId: stepInstance?.id ?? options.workflowInstanceId,\n branchInstanceId: stepInstance?.branchInstanceId ?? null,\n taskName: options.taskName,\n description: options.description,\n status: 'PENDING',\n formSchema: {\n proposalId: options.proposalId,\n payload: options.proposalPayload,\n confidence: options.confidence,\n },\n assignedTo,\n // Always the backoffice namespace: a proposal is disposed from the operator\n // caseload, and no portal surface can dispose one.\n assigneeKind: 'user',\n assignedToRoles,\n priority: review?.priority ?? null,\n dueDate,\n tenantId,\n organizationId,\n createdAt: now,\n updatedAt: now,\n })\n\n em.persist(task)\n await em.flush()\n\n await logDispositionTaskEvent(em, container, {\n workflowInstanceId: options.workflowInstanceId,\n stepInstanceId: task.stepInstanceId,\n branchInstanceId: task.branchInstanceId ?? null,\n eventType: 'USER_TASK_CREATED',\n eventData: {\n userTaskId: task.id,\n taskName: task.taskName,\n assignedTo: task.assignedTo,\n assignedToRoles: task.assignedToRoles,\n proposalId: options.proposalId,\n agentId: options.agentId,\n ...(task.priority ? { priority: task.priority } : {}),\n ...(dueDate ? { dueDate: dueDate.toISOString() } : {}),\n },\n userId: options.userId,\n tenantId,\n organizationId,\n })\n\n await emitDispositionTaskAssigned(task, instance)\n\n // Reminders and the deadline breach ride the SAME queue-backed scheduler a\n // USER_TASK's do \u2014 one job per authored offset plus one for the deadline, all\n // enqueued here with the deadline ABSOLUTE on the payload. A task with no\n // deadline schedules nothing. What the breach then DOES is escalate-only\n // (`lib/task-sla.ts` \u2192 `applyBreachHandling`): it never disposes the proposal\n // and never routes the run past it.\n await scheduleUserTaskSla({\n workflowInstanceId: options.workflowInstanceId,\n stepInstanceId: task.stepInstanceId,\n branchInstanceId: task.branchInstanceId ?? null,\n userTaskId: task.id,\n dueDate,\n reminders: review?.reminders ?? null,\n tenantId,\n organizationId,\n userId: options.userId,\n now,\n })\n\n return {\n userTaskId: task.id,\n stepInstanceId: task.stepInstanceId,\n assignedTo,\n assignedToRoles,\n dueDate,\n }\n}\n\nexport interface CloseAgentDispositionTaskOptions {\n userTaskId: string\n /** The verdict that closed it \u2014 audit only; it never decides anything here. */\n disposition: string\n closedBy?: string | null\n tenantId: string\n organizationId: string\n now?: Date\n}\n\n/** Statuses a disposition task is still open in \u2014 anything else is already closed. */\nconst OPEN_TASK_STATUSES = ['PENDING', 'IN_PROGRESS'] as const\n\n/**\n * Close the review task a disposed proposal no longer needs (A7).\n *\n * The decision has already been made and committed by the caller; this only\n * clears the work item so the operator's inbox stops offering a decision that\n * has already been taken. It deliberately does NOT complete the task through\n * `completeUserTask`: that would ADVANCE the run, and the run resumes on\n * `agent_orchestrator.proposal.ready` instead. Closing a task and advancing a\n * workflow are different acts, and only the second one belongs to the engine.\n *\n * Idempotent by construction: the status change is claimed with a conditional\n * UPDATE, so a redelivered close (or a task a human already completed) updates\n * zero rows and returns `noop`.\n */\nexport async function closeAgentDispositionTask(\n em: EntityManager,\n container: AwilixContainer,\n options: CloseAgentDispositionTaskOptions,\n): Promise<'closed' | 'noop'> {\n const { tenantId, organizationId } = options\n const now = options.now ?? new Date()\n\n const task = await em.findOne(UserTask, {\n id: options.userTaskId,\n tenantId,\n organizationId,\n })\n if (!task) return 'noop'\n\n const claimed = await em.nativeUpdate(\n UserTask,\n {\n id: task.id,\n tenantId,\n organizationId,\n status: { $in: [...OPEN_TASK_STATUSES] },\n },\n {\n status: 'COMPLETED',\n completedAt: now,\n completedBy: options.closedBy ?? null,\n updatedAt: now,\n },\n )\n if (claimed === 0) return 'noop'\n\n await logDispositionTaskEvent(em, container, {\n workflowInstanceId: task.workflowInstanceId,\n stepInstanceId: task.stepInstanceId,\n ...(task.branchInstanceId ? { branchInstanceId: task.branchInstanceId } : {}),\n eventType: 'USER_TASK_COMPLETED',\n eventData: {\n userTaskId: task.id,\n taskName: task.taskName,\n closedBy: 'agent_disposition',\n disposition: options.disposition,\n },\n tenantId,\n organizationId,\n })\n\n return 'closed'\n}\n\n/**\n * Publish `workflows.task.assigned` for a disposition task, so it reaches the\n * notification subscriber the same way every other task does. Best-effort by\n * contract: the proposal is already pending and the task row already committed,\n * so a bus failure must never turn into a failed disposition.\n */\nasync function emitDispositionTaskAssigned(\n task: UserTask,\n instance: WorkflowInstance,\n): Promise<void> {\n try {\n await emitWorkflowsEvent(\n 'workflows.task.assigned',\n {\n taskId: task.id,\n taskName: task.taskName,\n workflowInstanceId: instance.id,\n workflowId: instance.workflowId,\n workflowName: instance.workflowId,\n assignedUserId: task.assignedTo ?? null,\n assignedToRoles: task.assignedToRoles ?? null,\n dueDate: task.dueDate ? task.dueDate.toISOString() : null,\n entityBindings: task.entityBindings ?? null,\n tenantId: instance.tenantId,\n organizationId: instance.organizationId ?? null,\n },\n { persistent: true },\n )\n } catch (error) {\n logger.error('Failed to emit workflows.task.assigned for an agent disposition task', {\n component: 'agent-disposition-task',\n taskId: task.id,\n err: error,\n })\n }\n}\n\nasync function logDispositionTaskEvent(\n em: EntityManager,\n container: AwilixContainer,\n event: Record<string, unknown>,\n): Promise<void> {\n try {\n const eventLogger = container.resolve<{\n logWorkflowEvent: (em: EntityManager, event: Record<string, unknown>) => Promise<unknown>\n }>('eventLogger')\n await eventLogger.logWorkflowEvent(em, event)\n } catch (error) {\n logger.error('Failed to log an agent disposition task workflow event', {\n component: 'agent-disposition-task',\n eventType: event.eventType,\n err: error,\n })\n }\n}\n"],
5
+ "mappings": "AAuBA,SAAS,cAAc,UAAU,wBAAwB;AACzD,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,WAAW;AAwCvC,SAAS,eACP,UACA,KACA,YACa;AACb,MAAI,OAAO,aAAa,YAAY,CAAC,SAAS,OAAQ,QAAO;AAC7D,MAAI;AACF,WAAO,iBAAiB,UAAU,GAAG;AAAA,EACvC,SAAS,OAAO;AAKd,WAAO,KAAK,oEAAoE;AAAA,MAC9E,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AACF;AASA,eAAsB,2BACpB,IACA,WACA,SACsC;AACtC,QAAM,EAAE,UAAU,eAAe,IAAI;AACrC,QAAM,MAAM,QAAQ,OAAO,oBAAI,KAAK;AAEpC,QAAM,WAAW,MAAM,GAAG,QAAQ,kBAAkB;AAAA,IAClD,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,UAAU;AACb,UAAM,IAAI;AAAA,MACR,gCAAgC,QAAQ,kBAAkB;AAAA,IAC5D;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,GAAG,QAAQ,cAAc;AAAA,IAClD,oBAAoB,QAAQ;AAAA,IAC5B,QAAQ,QAAQ;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,aAAa,QAAQ,YAAY,SAAS,OAAO,aAAa;AACpE,QAAM,kBAAkB,QAAQ,iBAAiB,SAAS,OAAO,kBAAkB;AACnF,QAAM,UAAU,eAAe,QAAQ,kBAAkB,KAAK,QAAQ,UAAU;AAEhF,QAAM,OAAO,GAAG,OAAO,UAAU;AAAA,IAC/B,oBAAoB,QAAQ;AAAA;AAAA;AAAA;AAAA,IAI5B,gBAAgB,cAAc,MAAM,QAAQ;AAAA,IAC5C,kBAAkB,cAAc,oBAAoB;AAAA,IACpD,UAAU,QAAQ;AAAA,IAClB,aAAa,QAAQ;AAAA,IACrB,QAAQ;AAAA,IACR,YAAY;AAAA,MACV,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ;AAAA,IACtB;AAAA,IACA;AAAA;AAAA;AAAA,IAGA,cAAc;AAAA,IACd;AAAA,IACA,UAAU,QAAQ,YAAY;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AAED,KAAG,QAAQ,IAAI;AACf,QAAM,GAAG,MAAM;AAEf,QAAM,wBAAwB,IAAI,WAAW;AAAA,IAC3C,oBAAoB,QAAQ;AAAA,IAC5B,gBAAgB,KAAK;AAAA,IACrB,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,WAAW;AAAA,IACX,WAAW;AAAA,MACT,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,iBAAiB,KAAK;AAAA,MACtB,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,MACjB,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC;AAAA,MACnD,GAAI,UAAU,EAAE,SAAS,QAAQ,YAAY,EAAE,IAAI,CAAC;AAAA,IACtD;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,4BAA4B,MAAM,QAAQ;AAQhD,QAAM,oBAAoB;AAAA,IACxB,oBAAoB,QAAQ;AAAA,IAC5B,gBAAgB,KAAK;AAAA,IACrB,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,YAAY,KAAK;AAAA,IACjB;AAAA,IACA,WAAW,QAAQ,aAAa;AAAA,IAChC;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,YAAY,KAAK;AAAA,IACjB,gBAAgB,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAaA,MAAM,qBAAqB,CAAC,WAAW,aAAa;AAgBpD,eAAsB,0BACpB,IACA,WACA,SAC4B;AAC5B,QAAM,EAAE,UAAU,eAAe,IAAI;AACrC,QAAM,MAAM,QAAQ,OAAO,oBAAI,KAAK;AAEpC,QAAM,OAAO,MAAM,GAAG,QAAQ,UAAU;AAAA,IACtC,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,UAAU,MAAM,GAAG;AAAA,IACvB;AAAA,IACA;AAAA,MACE,IAAI,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA,QAAQ,EAAE,KAAK,CAAC,GAAG,kBAAkB,EAAE;AAAA,IACzC;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,aAAa,QAAQ,YAAY;AAAA,MACjC,WAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,YAAY,EAAG,QAAO;AAE1B,QAAM,wBAAwB,IAAI,WAAW;AAAA,IAC3C,oBAAoB,KAAK;AAAA,IACzB,gBAAgB,KAAK;AAAA,IACrB,GAAI,KAAK,mBAAmB,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;AAAA,IAC3E,WAAW;AAAA,IACX,WAAW;AAAA,MACT,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,UAAU;AAAA,MACV,aAAa,QAAQ;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAQA,eAAe,4BACb,MACA,UACe;AACf,MAAI;AACF,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,QAAQ,KAAK;AAAA,QACb,UAAU,KAAK;AAAA,QACf,oBAAoB,SAAS;AAAA,QAC7B,YAAY,SAAS;AAAA,QACrB,cAAc,SAAS;AAAA,QACvB,gBAAgB,KAAK,cAAc;AAAA,QACnC,iBAAiB,KAAK,mBAAmB;AAAA,QACzC,SAAS,KAAK,UAAU,KAAK,QAAQ,YAAY,IAAI;AAAA,QACrD,gBAAgB,KAAK,kBAAkB;AAAA,QACvC,UAAU,SAAS;AAAA,QACnB,gBAAgB,SAAS,kBAAkB;AAAA,MAC7C;AAAA,MACA,EAAE,YAAY,KAAK;AAAA,IACrB;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,wEAAwE;AAAA,MACnF,WAAW;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACF;AAEA,eAAe,wBACb,IACA,WACA,OACe;AACf,MAAI;AACF,UAAM,cAAc,UAAU,QAE3B,aAAa;AAChB,UAAM,YAAY,iBAAiB,IAAI,KAAK;AAAA,EAC9C,SAAS,OAAO;AACd,WAAO,MAAM,0DAA0D;AAAA,MACrE,WAAW;AAAA,MACX,WAAW,MAAM;AAAA,MACjB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,82 @@
1
+ const MAX_OUTCOME_DEPTH = 3;
2
+ const ENVELOPE_PATHS = [
3
+ { path: "kind", type: "text", container: false },
4
+ { path: "disposition", type: "text", container: false },
5
+ { path: "agentId", type: "text", container: false },
6
+ { path: "proposalId", type: "text", container: false }
7
+ ];
8
+ const JSON_TYPE_LABELS = {
9
+ string: "text",
10
+ number: "number",
11
+ integer: "number",
12
+ boolean: "boolean",
13
+ object: "object",
14
+ array: "array"
15
+ };
16
+ function isPlainObject(value) {
17
+ return typeof value === "object" && value !== null && !Array.isArray(value);
18
+ }
19
+ function labelFor(node) {
20
+ const type = node?.type;
21
+ return typeof type === "string" ? JSON_TYPE_LABELS[type] ?? "unknown" : "unknown";
22
+ }
23
+ function agentOutcomeRootKey(resultKind) {
24
+ return resultKind === "research" ? "data" : "proposalPayload";
25
+ }
26
+ function describesProperties(node) {
27
+ const properties = node.properties;
28
+ return isPlainObject(properties) && Object.keys(properties).length > 0;
29
+ }
30
+ function collectOutcomePaths(node, prefix, depth, collected) {
31
+ const properties = node.properties;
32
+ if (!isPlainObject(properties)) return;
33
+ for (const [name, child] of Object.entries(properties)) {
34
+ if (!name || !isPlainObject(child)) continue;
35
+ const childNode = child;
36
+ const path = `${prefix}.${name}`;
37
+ const expandable = childNode.type === "object" && describesProperties(childNode) && depth < MAX_OUTCOME_DEPTH;
38
+ collected.push({ path, type: labelFor(childNode), container: !expandable && childNode.type === "object" });
39
+ if (expandable) collectOutcomePaths(childNode, path, depth + 1, collected);
40
+ }
41
+ }
42
+ function buildAgentSourcePaths(resultKind, outcomeSchema) {
43
+ if (!resultKind || !isPlainObject(outcomeSchema)) return [];
44
+ const rootKey = agentOutcomeRootKey(resultKind);
45
+ const root = outcomeSchema;
46
+ const paths = [
47
+ ...ENVELOPE_PATHS,
48
+ { path: rootKey, type: "object", container: !describesProperties(root) }
49
+ ];
50
+ collectOutcomePaths(root, rootKey, 1, paths);
51
+ return paths;
52
+ }
53
+ function isTemplateExpression(value) {
54
+ return /\{\{.*\}\}/.test(value);
55
+ }
56
+ function isKnownAgentSourcePath(paths, value) {
57
+ const trimmed = value.trim();
58
+ if (trimmed.length === 0) return true;
59
+ if (paths.length === 0) return true;
60
+ return paths.some(
61
+ (candidate) => candidate.path === trimmed || candidate.container && trimmed.startsWith(`${candidate.path}.`)
62
+ );
63
+ }
64
+ function agentSampleInputKeys(sampleInput) {
65
+ return isPlainObject(sampleInput) ? Object.keys(sampleInput) : [];
66
+ }
67
+ function agentSampleInputRows(sampleInput) {
68
+ if (!isPlainObject(sampleInput)) return [];
69
+ return Object.entries(sampleInput).map(([key, value]) => ({
70
+ key,
71
+ value: typeof value === "string" ? value : JSON.stringify(value) ?? ""
72
+ }));
73
+ }
74
+ export {
75
+ agentOutcomeRootKey,
76
+ agentSampleInputKeys,
77
+ agentSampleInputRows,
78
+ buildAgentSourcePaths,
79
+ isKnownAgentSourcePath,
80
+ isTemplateExpression
81
+ };
82
+ //# sourceMappingURL=agent-outcome-paths.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/agent-outcome-paths.ts"],
4
+ "sourcesContent": ["/**\n * Workflows Module - INVOKE_AGENT source-path vocabulary (spec\n * 2026-07-26-workflows-ux-redesign.md sections 3.4 / 7.1).\n *\n * Pure translation of an agent's declared OUTCOME JSON-Schema (served by the\n * optional agent_orchestrator peer on `/api/agent_orchestrator/agents`) into\n * the dot paths an `outputMapping` row may read from. The vocabulary is the\n * normalized result envelope `mapAgentResultToContext` builds: the platform's\n * own `kind`/`disposition`/`agentId`/`proposalId` keys, plus the agent's OUTCOME\n * under `data` (researcher agents) or `proposalPayload` (proposal ones).\n *\n * No React, no network, no registry \u2014 the editor feeds it the fetched schema and\n * gets back plain data, so the same helper backs the source picker, the\n * author-time path check, and the \"Insert sample\" rows.\n */\n\nexport type AgentResultKind = 'research' | 'proposal'\n\nexport interface AgentOutcomeSchemaNode {\n type?: string\n properties?: Record<string, AgentOutcomeSchemaNode>\n items?: AgentOutcomeSchemaNode\n}\n\nexport interface AgentSourcePath {\n path: string\n type: string\n /**\n * True only for an object whose properties this vocabulary does NOT describe\n * (declared without `properties`, or nested past the depth cap). Deeper paths\n * below such a node stay valid; a fully described object is closed, so an\n * undeclared property under it is an author error.\n */\n container: boolean\n}\n\nexport interface AgentInputRow {\n key: string\n value: string\n}\n\nconst MAX_OUTCOME_DEPTH = 3\n\nconst ENVELOPE_PATHS: ReadonlyArray<AgentSourcePath> = [\n { path: 'kind', type: 'text', container: false },\n { path: 'disposition', type: 'text', container: false },\n { path: 'agentId', type: 'text', container: false },\n { path: 'proposalId', type: 'text', container: false },\n]\n\nconst JSON_TYPE_LABELS: Record<string, string> = {\n string: 'text',\n number: 'number',\n integer: 'number',\n boolean: 'boolean',\n object: 'object',\n array: 'array',\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction labelFor(node: AgentOutcomeSchemaNode | undefined): string {\n const type = node?.type\n return typeof type === 'string' ? JSON_TYPE_LABELS[type] ?? 'unknown' : 'unknown'\n}\n\nexport function agentOutcomeRootKey(resultKind: AgentResultKind): 'data' | 'proposalPayload' {\n return resultKind === 'research' ? 'data' : 'proposalPayload'\n}\n\nfunction describesProperties(node: AgentOutcomeSchemaNode): boolean {\n const properties = node.properties\n return isPlainObject(properties) && Object.keys(properties).length > 0\n}\n\nfunction collectOutcomePaths(\n node: AgentOutcomeSchemaNode,\n prefix: string,\n depth: number,\n collected: AgentSourcePath[],\n): void {\n const properties = node.properties\n if (!isPlainObject(properties)) return\n for (const [name, child] of Object.entries(properties)) {\n if (!name || !isPlainObject(child)) continue\n const childNode = child as AgentOutcomeSchemaNode\n const path = `${prefix}.${name}`\n const expandable =\n childNode.type === 'object' && describesProperties(childNode) && depth < MAX_OUTCOME_DEPTH\n collected.push({ path, type: labelFor(childNode), container: !expandable && childNode.type === 'object' })\n if (expandable) collectOutcomePaths(childNode, path, depth + 1, collected)\n }\n}\n\n/**\n * Every source path an outputMapping row may reference for the selected agent.\n * Returns an empty list when the agent declares no usable OUTCOME shape \u2014 the\n * caller then keeps free text and skips the author-time check rather than\n * flagging paths it cannot verify.\n */\nexport function buildAgentSourcePaths(\n resultKind: AgentResultKind | undefined,\n outcomeSchema: unknown,\n): AgentSourcePath[] {\n if (!resultKind || !isPlainObject(outcomeSchema)) return []\n const rootKey = agentOutcomeRootKey(resultKind)\n const root = outcomeSchema as AgentOutcomeSchemaNode\n const paths: AgentSourcePath[] = [\n ...ENVELOPE_PATHS,\n { path: rootKey, type: 'object', container: !describesProperties(root) },\n ]\n collectOutcomePaths(root, rootKey, 1, paths)\n return paths\n}\n\nexport function isTemplateExpression(value: string): boolean {\n return /\\{\\{.*\\}\\}/.test(value)\n}\n\n/**\n * A source path resolves when it names a declared path or descends into an\n * object this vocabulary does not describe. A blank path (a row still being\n * written) and an agent with no declared OUTCOME both resolve \u2014 the check only\n * fires where the schema can actually prove the path wrong.\n */\nexport function isKnownAgentSourcePath(paths: ReadonlyArray<AgentSourcePath>, value: string): boolean {\n const trimmed = value.trim()\n if (trimmed.length === 0) return true\n if (paths.length === 0) return true\n return paths.some(\n (candidate) =>\n candidate.path === trimmed || (candidate.container && trimmed.startsWith(`${candidate.path}.`)),\n )\n}\n\nexport function agentSampleInputKeys(sampleInput: unknown): string[] {\n return isPlainObject(sampleInput) ? Object.keys(sampleInput) : []\n}\n\n/**\n * The `input` rows an agent's SAMPLE input fills in. String values are inserted\n * verbatim (they may already be `{{context.*}}` pills); anything else is\n * serialized so the author sees the exact literal the step will send.\n */\nexport function agentSampleInputRows(sampleInput: unknown): AgentInputRow[] {\n if (!isPlainObject(sampleInput)) return []\n return Object.entries(sampleInput).map(([key, value]) => ({\n key,\n value: typeof value === 'string' ? value : JSON.stringify(value) ?? '',\n }))\n}\n"],
5
+ "mappings": "AAyCA,MAAM,oBAAoB;AAE1B,MAAM,iBAAiD;AAAA,EACrD,EAAE,MAAM,QAAQ,MAAM,QAAQ,WAAW,MAAM;AAAA,EAC/C,EAAE,MAAM,eAAe,MAAM,QAAQ,WAAW,MAAM;AAAA,EACtD,EAAE,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM;AAAA,EAClD,EAAE,MAAM,cAAc,MAAM,QAAQ,WAAW,MAAM;AACvD;AAEA,MAAM,mBAA2C;AAAA,EAC/C,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,SAAS,MAAkD;AAClE,QAAM,OAAO,MAAM;AACnB,SAAO,OAAO,SAAS,WAAW,iBAAiB,IAAI,KAAK,YAAY;AAC1E;AAEO,SAAS,oBAAoB,YAAyD;AAC3F,SAAO,eAAe,aAAa,SAAS;AAC9C;AAEA,SAAS,oBAAoB,MAAuC;AAClE,QAAM,aAAa,KAAK;AACxB,SAAO,cAAc,UAAU,KAAK,OAAO,KAAK,UAAU,EAAE,SAAS;AACvE;AAEA,SAAS,oBACP,MACA,QACA,OACA,WACM;AACN,QAAM,aAAa,KAAK;AACxB,MAAI,CAAC,cAAc,UAAU,EAAG;AAChC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACtD,QAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,EAAG;AACpC,UAAM,YAAY;AAClB,UAAM,OAAO,GAAG,MAAM,IAAI,IAAI;AAC9B,UAAM,aACJ,UAAU,SAAS,YAAY,oBAAoB,SAAS,KAAK,QAAQ;AAC3E,cAAU,KAAK,EAAE,MAAM,MAAM,SAAS,SAAS,GAAG,WAAW,CAAC,cAAc,UAAU,SAAS,SAAS,CAAC;AACzG,QAAI,WAAY,qBAAoB,WAAW,MAAM,QAAQ,GAAG,SAAS;AAAA,EAC3E;AACF;AAQO,SAAS,sBACd,YACA,eACmB;AACnB,MAAI,CAAC,cAAc,CAAC,cAAc,aAAa,EAAG,QAAO,CAAC;AAC1D,QAAM,UAAU,oBAAoB,UAAU;AAC9C,QAAM,OAAO;AACb,QAAM,QAA2B;AAAA,IAC/B,GAAG;AAAA,IACH,EAAE,MAAM,SAAS,MAAM,UAAU,WAAW,CAAC,oBAAoB,IAAI,EAAE;AAAA,EACzE;AACA,sBAAoB,MAAM,SAAS,GAAG,KAAK;AAC3C,SAAO;AACT;AAEO,SAAS,qBAAqB,OAAwB;AAC3D,SAAO,aAAa,KAAK,KAAK;AAChC;AAQO,SAAS,uBAAuB,OAAuC,OAAwB;AACpG,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,MAAM;AAAA,IACX,CAAC,cACC,UAAU,SAAS,WAAY,UAAU,aAAa,QAAQ,WAAW,GAAG,UAAU,IAAI,GAAG;AAAA,EACjG;AACF;AAEO,SAAS,qBAAqB,aAAgC;AACnE,SAAO,cAAc,WAAW,IAAI,OAAO,KAAK,WAAW,IAAI,CAAC;AAClE;AAOO,SAAS,qBAAqB,aAAuC;AAC1E,MAAI,CAAC,cAAc,WAAW,EAAG,QAAO,CAAC;AACzC,SAAO,OAAO,QAAQ,WAAW,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IACxD;AAAA,IACA,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK,KAAK;AAAA,EACtE,EAAE;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,54 @@
1
+ import { createLogger } from "@open-mercato/shared/lib/logger";
2
+ const logger = createLogger("workflows").child({ component: "agent-result-mapping" });
3
+ function getNestedValue(obj, path) {
4
+ return path.split(".").reduce((current, key) => current?.[key], obj);
5
+ }
6
+ function setNestedValue(obj, path, value) {
7
+ const keys = path.split(".");
8
+ const lastKey = keys.pop();
9
+ const target = keys.reduce((current, key) => {
10
+ if (!(key in current)) current[key] = {};
11
+ return current[key];
12
+ }, obj);
13
+ target[lastKey] = value;
14
+ }
15
+ function warnOnTemplateMapping(sourcePath) {
16
+ if (/\{\{.*\}\}/.test(sourcePath)) {
17
+ logger.warn(
18
+ 'INVOKE_AGENT outputMapping value looks like a {{ }} template, but mapping values are plain dot-paths into the agent result envelope (e.g. "proposalPayload.riskScore"). This entry will not resolve and is being ignored.',
19
+ { sourcePath }
20
+ );
21
+ }
22
+ }
23
+ function mapAgentResultToContext(envelope, outputMapping) {
24
+ if (!outputMapping || Object.keys(outputMapping).length === 0) return null;
25
+ const source = {
26
+ kind: envelope.kind,
27
+ // `artifact` reports as `researcher` here for the same reason it routes onto
28
+ // that handle: the disposition vocabulary describes DECISIONS, and producing
29
+ // a file is not one. The `kind` above still says what actually came back.
30
+ //
31
+ // Note the two spellings are deliberate: `research` is the agent RESULT kind
32
+ // (unification spec §7), `researcher` the core-owned outcome handle it routes
33
+ // to. Renaming the handle would rewrite persisted workflow graphs.
34
+ disposition: envelope.kind === "research" || envelope.kind === "artifact" ? "researcher" : envelope.kind,
35
+ agentId: envelope.agentId,
36
+ proposalId: envelope.proposalId,
37
+ proposalPayload: envelope.proposalPayload,
38
+ data: envelope.data,
39
+ artifacts: envelope.artifacts
40
+ };
41
+ const result = {};
42
+ for (const [targetKey, sourcePath] of Object.entries(outputMapping)) {
43
+ warnOnTemplateMapping(sourcePath);
44
+ const value = getNestedValue(source, sourcePath);
45
+ if (value !== void 0) {
46
+ setNestedValue(result, targetKey, value);
47
+ }
48
+ }
49
+ return result;
50
+ }
51
+ export {
52
+ mapAgentResultToContext
53
+ };
54
+ //# sourceMappingURL=agent-result-mapping.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/agent-result-mapping.ts"],
4
+ "sourcesContent": ["/**\n * Maps an INVOKE_AGENT result into a workflow-context patch.\n *\n * An INVOKE_AGENT activity may declare an optional `outputMapping` (mirroring\n * SUB_WORKFLOW). When present, the agent's result is routed into the chosen\n * context keys instead of the legacy fixed keys. The mapping reads from a\n * normalized envelope so authors address a stable contract regardless of the\n * runtime (in-process vs OpenCode) or the resolution path (inline branch vs\n * parked-and-resumed worker).\n *\n * Returns the mapped patch when a non-empty mapping is provided, otherwise\n * `null` to signal the caller should fall back to its legacy fixed-key payload \u2014\n * keeping existing definitions byte-for-byte backward compatible.\n */\n\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows').child({ component: 'agent-result-mapping' })\n\nexport type AgentResultEnvelope = {\n kind: 'auto_approved' | 'research' | 'user_task' | 'none_proposed' | 'artifact'\n agentId?: string\n proposalId?: string\n proposalPayload?: unknown\n data?: unknown\n /** Set for an `artifact` result: the files the run produced, by reference. */\n artifacts?: unknown[]\n}\n\nfunction getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj)\n}\n\nfunction setNestedValue(obj: Record<string, any>, path: string, value: any): void {\n const keys = path.split('.')\n const lastKey = keys.pop()!\n const target = keys.reduce<Record<string, any>>((current, key) => {\n if (!(key in current)) current[key] = {}\n return current[key]\n }, obj)\n target[lastKey] = value\n}\n\nfunction warnOnTemplateMapping(sourcePath: string): void {\n if (/\\{\\{.*\\}\\}/.test(sourcePath)) {\n logger.warn(\n 'INVOKE_AGENT outputMapping value looks like a {{ }} template, but mapping values are plain ' +\n 'dot-paths into the agent result envelope (e.g. \"proposalPayload.riskScore\"). This entry ' +\n 'will not resolve and is being ignored.',\n { sourcePath }\n )\n }\n}\n\nexport function mapAgentResultToContext(\n envelope: AgentResultEnvelope,\n outputMapping: Record<string, string> | undefined | null\n): Record<string, any> | null {\n if (!outputMapping || Object.keys(outputMapping).length === 0) return null\n\n const source = {\n kind: envelope.kind,\n // `artifact` reports as `researcher` here for the same reason it routes onto\n // that handle: the disposition vocabulary describes DECISIONS, and producing\n // a file is not one. The `kind` above still says what actually came back.\n //\n // Note the two spellings are deliberate: `research` is the agent RESULT kind\n // (unification spec \u00A77), `researcher` the core-owned outcome handle it routes\n // to. Renaming the handle would rewrite persisted workflow graphs.\n disposition:\n envelope.kind === 'research' || envelope.kind === 'artifact' ? 'researcher' : envelope.kind,\n agentId: envelope.agentId,\n proposalId: envelope.proposalId,\n proposalPayload: envelope.proposalPayload,\n data: envelope.data,\n artifacts: envelope.artifacts,\n }\n\n const result: Record<string, any> = {}\n for (const [targetKey, sourcePath] of Object.entries(outputMapping)) {\n warnOnTemplateMapping(sourcePath)\n const value = getNestedValue(source, sourcePath)\n if (value !== undefined) {\n setNestedValue(result, targetKey, value)\n }\n }\n return result\n}\n"],
5
+ "mappings": "AAeA,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,WAAW,EAAE,MAAM,EAAE,WAAW,uBAAuB,CAAC;AAYpF,SAAS,eAAe,KAAU,MAAmB;AACnD,SAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,SAAS,QAAQ,UAAU,GAAG,GAAG,GAAG;AACrE;AAEA,SAAS,eAAe,KAA0B,MAAc,OAAkB;AAChF,QAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,QAAM,UAAU,KAAK,IAAI;AACzB,QAAM,SAAS,KAAK,OAA4B,CAAC,SAAS,QAAQ;AAChE,QAAI,EAAE,OAAO,SAAU,SAAQ,GAAG,IAAI,CAAC;AACvC,WAAO,QAAQ,GAAG;AAAA,EACpB,GAAG,GAAG;AACN,SAAO,OAAO,IAAI;AACpB;AAEA,SAAS,sBAAsB,YAA0B;AACvD,MAAI,aAAa,KAAK,UAAU,GAAG;AACjC,WAAO;AAAA,MACL;AAAA,MAGA,EAAE,WAAW;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,wBACd,UACA,eAC4B;AAC5B,MAAI,CAAC,iBAAiB,OAAO,KAAK,aAAa,EAAE,WAAW,EAAG,QAAO;AAEtE,QAAM,SAAS;AAAA,IACb,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQf,aACE,SAAS,SAAS,cAAc,SAAS,SAAS,aAAa,eAAe,SAAS;AAAA,IACzF,SAAS,SAAS;AAAA,IAClB,YAAY,SAAS;AAAA,IACrB,iBAAiB,SAAS;AAAA,IAC1B,MAAM,SAAS;AAAA,IACf,WAAW,SAAS;AAAA,EACtB;AAEA,QAAM,SAA8B,CAAC;AACrC,aAAW,CAAC,WAAW,UAAU,KAAK,OAAO,QAAQ,aAAa,GAAG;AACnE,0BAAsB,UAAU;AAChC,UAAM,QAAQ,eAAe,QAAQ,UAAU;AAC/C,QAAI,UAAU,QAAW;AACvB,qBAAe,QAAQ,WAAW,KAAK;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,61 @@
1
+ const AGENT_REVIEW_ON_BREACH_ACTIONS = [
2
+ "notify",
3
+ "reassign",
4
+ "attention"
5
+ ];
6
+ const AGENT_REVIEW_ASSIGNMENT_MODES = [
7
+ "role",
8
+ "user",
9
+ "dynamic"
10
+ ];
11
+ function isAgentReviewPriority(value) {
12
+ return value === "low" || value === "medium" || value === "high" || value === "extreme";
13
+ }
14
+ function deriveAgentReviewAssignmentMode(assignedTo) {
15
+ if (!assignedTo.length) return "role";
16
+ return assignedTo.includes("{{") ? "dynamic" : "user";
17
+ }
18
+ function agentReviewToFormValues(review) {
19
+ const assignedTo = typeof review?.assignedTo === "string" ? review.assignedTo : "";
20
+ return {
21
+ reviewAssignmentMode: deriveAgentReviewAssignmentMode(assignedTo),
22
+ reviewAssignedTo: assignedTo,
23
+ reviewAssignedToRoles: Array.isArray(review?.assignedToRoles) ? [...review.assignedToRoles] : [],
24
+ reviewAssignmentRule: "",
25
+ reviewPriority: isAgentReviewPriority(review?.priority) ? review.priority : "",
26
+ reviewDeadline: typeof review?.deadline?.duration === "string" ? review.deadline.duration : "",
27
+ reviewReminders: (review?.reminders ?? []).map((reminder) => typeof reminder?.offset === "string" ? reminder.offset : "").filter((offset) => offset.length > 0),
28
+ reviewOnBreach: {
29
+ action: review?.onBreach?.action ?? "",
30
+ reassignTo: review?.onBreach?.reassignTo ?? ""
31
+ }
32
+ };
33
+ }
34
+ function formValuesToAgentReview(values) {
35
+ const mode = values?.reviewAssignmentMode;
36
+ const assignedTo = mode === "role" ? "" : (values?.reviewAssignedTo ?? "").trim();
37
+ const assignedToRoles = (values?.reviewAssignedToRoles ?? []).map((role) => typeof role === "string" ? role.trim() : "").filter((role) => role.length > 0);
38
+ const deadline = (values?.reviewDeadline ?? "").trim();
39
+ const reminders = (values?.reviewReminders ?? []).map((offset) => typeof offset === "string" ? offset.trim() : "").filter((offset) => offset.length > 0).map((offset) => ({ offset }));
40
+ const breachAction = values?.reviewOnBreach?.action;
41
+ const reassignTo = (values?.reviewOnBreach?.reassignTo ?? "").trim();
42
+ const review = {
43
+ ...assignedTo ? { assignedTo } : {},
44
+ ...assignedToRoles.length ? { assignedToRoles } : {},
45
+ ...isAgentReviewPriority(values?.reviewPriority) ? { priority: values.reviewPriority } : {},
46
+ ...deadline ? { deadline: { duration: deadline } } : {},
47
+ ...reminders.length ? { reminders } : {},
48
+ ...breachAction ? {
49
+ onBreach: breachAction === "reassign" && reassignTo ? { action: breachAction, reassignTo } : { action: breachAction }
50
+ } : {}
51
+ };
52
+ return Object.keys(review).length ? review : void 0;
53
+ }
54
+ export {
55
+ AGENT_REVIEW_ASSIGNMENT_MODES,
56
+ AGENT_REVIEW_ON_BREACH_ACTIONS,
57
+ agentReviewToFormValues,
58
+ deriveAgentReviewAssignmentMode,
59
+ formValuesToAgentReview
60
+ };
61
+ //# sourceMappingURL=agent-review-inspector.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/agent-review-inspector.ts"],
4
+ "sourcesContent": ["/**\n * Editor-side drafts for the Invoke Agent node's Review section (spec \u00A77.5).\n *\n * The sibling of `lib/task-inspector-config.ts`, and deliberately shaped like\n * it: the Review section authors the same Who/When vocabulary a task does, so\n * the drafts are the same drafts and the inspector reuses the same field\n * components. What differs is the breach action set \u2014 a disposition deadline\n * escalates and never decides, so `route` is absent and `attention` is present.\n *\n * PURE: no React, ORM, DI or registry imports.\n */\n\nimport type { AgentReviewConfig, AgentReviewOnBreach } from '../data/activity-config-schemas'\nimport type { TaskAssignmentMode } from './task-inspector-config'\n\nexport const AGENT_REVIEW_ON_BREACH_ACTIONS: readonly AgentReviewOnBreach['action'][] = [\n 'notify',\n 'reassign',\n 'attention',\n] as const\n\n/**\n * A proposal is disposed from the backoffice caseload, so the Rule tab has no\n * engine behind it here \u2014 `resolveAgentReview` reads exactly the three tabs\n * below. Offering a fourth would be authoring config nothing honours.\n */\nexport const AGENT_REVIEW_ASSIGNMENT_MODES: readonly TaskAssignmentMode[] = [\n 'role',\n 'user',\n 'dynamic',\n] as const\n\nexport interface AgentReviewOnBreachDraft {\n action: '' | AgentReviewOnBreach['action']\n reassignTo: string\n}\n\nexport interface AgentReviewFormValues {\n reviewAssignmentMode: TaskAssignmentMode\n reviewAssignedTo: string\n reviewAssignedToRoles: string[]\n reviewAssignmentRule: string\n reviewPriority: string\n reviewDeadline: string\n reviewReminders: string[]\n reviewOnBreach: AgentReviewOnBreachDraft\n}\n\nfunction isAgentReviewPriority(value: unknown): value is NonNullable<AgentReviewConfig['priority']> {\n return value === 'low' || value === 'medium' || value === 'high' || value === 'extreme'\n}\n\n/**\n * Which tab a stored Review belongs to. Derived exactly as the task inspector\n * derives its own: an individual assignee that carries a `{{\u2026}}` pill is a\n * Dynamic assignment, a literal one is a User assignment, and everything else\n * is the role queue.\n */\nexport function deriveAgentReviewAssignmentMode(assignedTo: string): TaskAssignmentMode {\n if (!assignedTo.length) return 'role'\n return assignedTo.includes('{{') ? 'dynamic' : 'user'\n}\n\nexport function agentReviewToFormValues(\n review: AgentReviewConfig | null | undefined,\n): AgentReviewFormValues {\n const assignedTo = typeof review?.assignedTo === 'string' ? review.assignedTo : ''\n return {\n reviewAssignmentMode: deriveAgentReviewAssignmentMode(assignedTo),\n reviewAssignedTo: assignedTo,\n reviewAssignedToRoles: Array.isArray(review?.assignedToRoles) ? [...review.assignedToRoles] : [],\n reviewAssignmentRule: '',\n reviewPriority: isAgentReviewPriority(review?.priority) ? review.priority : '',\n reviewDeadline: typeof review?.deadline?.duration === 'string' ? review.deadline.duration : '',\n reviewReminders: (review?.reminders ?? [])\n .map((reminder) => (typeof reminder?.offset === 'string' ? reminder.offset : ''))\n .filter((offset) => offset.length > 0),\n reviewOnBreach: {\n action: review?.onBreach?.action ?? '',\n reassignTo: review?.onBreach?.reassignTo ?? '',\n },\n }\n}\n\n/**\n * Persist only what the author actually configured.\n *\n * Returns `undefined` for an untouched section so a step that never opened it\n * serializes byte-identically to one authored before the section existed \u2014\n * the same \"absent stays absent\" rule the task inspector holds to.\n */\nexport function formValuesToAgentReview(\n values: Partial<AgentReviewFormValues> | undefined,\n): AgentReviewConfig | undefined {\n const mode = values?.reviewAssignmentMode\n const assignedTo = mode === 'role' ? '' : (values?.reviewAssignedTo ?? '').trim()\n const assignedToRoles = (values?.reviewAssignedToRoles ?? [])\n .map((role) => (typeof role === 'string' ? role.trim() : ''))\n .filter((role) => role.length > 0)\n const deadline = (values?.reviewDeadline ?? '').trim()\n const reminders = (values?.reviewReminders ?? [])\n .map((offset) => (typeof offset === 'string' ? offset.trim() : ''))\n .filter((offset) => offset.length > 0)\n .map((offset) => ({ offset }))\n const breachAction = values?.reviewOnBreach?.action\n const reassignTo = (values?.reviewOnBreach?.reassignTo ?? '').trim()\n\n const review: AgentReviewConfig = {\n ...(assignedTo ? { assignedTo } : {}),\n ...(assignedToRoles.length ? { assignedToRoles } : {}),\n ...(isAgentReviewPriority(values?.reviewPriority) ? { priority: values.reviewPriority } : {}),\n ...(deadline ? { deadline: { duration: deadline } } : {}),\n ...(reminders.length ? { reminders } : {}),\n ...(breachAction\n ? {\n onBreach:\n breachAction === 'reassign' && reassignTo\n ? { action: breachAction, reassignTo }\n : { action: breachAction },\n }\n : {}),\n }\n\n return Object.keys(review).length ? review : undefined\n}\n"],
5
+ "mappings": "AAeO,MAAM,iCAA2E;AAAA,EACtF;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,gCAA+D;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AACF;AAkBA,SAAS,sBAAsB,OAAqE;AAClG,SAAO,UAAU,SAAS,UAAU,YAAY,UAAU,UAAU,UAAU;AAChF;AAQO,SAAS,gCAAgC,YAAwC;AACtF,MAAI,CAAC,WAAW,OAAQ,QAAO;AAC/B,SAAO,WAAW,SAAS,IAAI,IAAI,YAAY;AACjD;AAEO,SAAS,wBACd,QACuB;AACvB,QAAM,aAAa,OAAO,QAAQ,eAAe,WAAW,OAAO,aAAa;AAChF,SAAO;AAAA,IACL,sBAAsB,gCAAgC,UAAU;AAAA,IAChE,kBAAkB;AAAA,IAClB,uBAAuB,MAAM,QAAQ,QAAQ,eAAe,IAAI,CAAC,GAAG,OAAO,eAAe,IAAI,CAAC;AAAA,IAC/F,sBAAsB;AAAA,IACtB,gBAAgB,sBAAsB,QAAQ,QAAQ,IAAI,OAAO,WAAW;AAAA,IAC5E,gBAAgB,OAAO,QAAQ,UAAU,aAAa,WAAW,OAAO,SAAS,WAAW;AAAA,IAC5F,kBAAkB,QAAQ,aAAa,CAAC,GACrC,IAAI,CAAC,aAAc,OAAO,UAAU,WAAW,WAAW,SAAS,SAAS,EAAG,EAC/E,OAAO,CAAC,WAAW,OAAO,SAAS,CAAC;AAAA,IACvC,gBAAgB;AAAA,MACd,QAAQ,QAAQ,UAAU,UAAU;AAAA,MACpC,YAAY,QAAQ,UAAU,cAAc;AAAA,IAC9C;AAAA,EACF;AACF;AASO,SAAS,wBACd,QAC+B;AAC/B,QAAM,OAAO,QAAQ;AACrB,QAAM,aAAa,SAAS,SAAS,MAAM,QAAQ,oBAAoB,IAAI,KAAK;AAChF,QAAM,mBAAmB,QAAQ,yBAAyB,CAAC,GACxD,IAAI,CAAC,SAAU,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI,EAAG,EAC3D,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AACnC,QAAM,YAAY,QAAQ,kBAAkB,IAAI,KAAK;AACrD,QAAM,aAAa,QAAQ,mBAAmB,CAAC,GAC5C,IAAI,CAAC,WAAY,OAAO,WAAW,WAAW,OAAO,KAAK,IAAI,EAAG,EACjE,OAAO,CAAC,WAAW,OAAO,SAAS,CAAC,EACpC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAC/B,QAAM,eAAe,QAAQ,gBAAgB;AAC7C,QAAM,cAAc,QAAQ,gBAAgB,cAAc,IAAI,KAAK;AAEnE,QAAM,SAA4B;AAAA,IAChC,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,IACnC,GAAI,gBAAgB,SAAS,EAAE,gBAAgB,IAAI,CAAC;AAAA,IACpD,GAAI,sBAAsB,QAAQ,cAAc,IAAI,EAAE,UAAU,OAAO,eAAe,IAAI,CAAC;AAAA,IAC3F,GAAI,WAAW,EAAE,UAAU,EAAE,UAAU,SAAS,EAAE,IAAI,CAAC;AAAA,IACvD,GAAI,UAAU,SAAS,EAAE,UAAU,IAAI,CAAC;AAAA,IACxC,GAAI,eACA;AAAA,MACE,UACE,iBAAiB,cAAc,aAC3B,EAAE,QAAQ,cAAc,WAAW,IACnC,EAAE,QAAQ,aAAa;AAAA,IAC/B,IACA,CAAC;AAAA,EACP;AAEA,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,SAAS;AAC/C;",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
1
+ import { resolveBreachReassignTarget } from "./breach-routing.js";
2
+ import {
3
+ resolveTaskAssignment
4
+ } from "./task-resolution.js";
5
+ const INVOKE_AGENT_ACTIVITY_TYPE = "INVOKE_AGENT";
6
+ function isRecord(value) {
7
+ return typeof value === "object" && value !== null && !Array.isArray(value);
8
+ }
9
+ function findAgentReviewConfig(step) {
10
+ const activity = (step?.activities ?? []).find(
11
+ (candidate) => candidate?.activityType === INVOKE_AGENT_ACTIVITY_TYPE
12
+ );
13
+ const review = activity?.config?.review;
14
+ return isRecord(review) ? review : null;
15
+ }
16
+ function findAgentReviewConfigForStep(definition, stepId) {
17
+ const step = (definition?.steps ?? []).find((candidate) => candidate?.stepId === stepId);
18
+ return findAgentReviewConfig(step);
19
+ }
20
+ function resolveAgentReview(review, interpolate) {
21
+ const assignment = resolveTaskAssignment(
22
+ {
23
+ assignedTo: review?.assignedTo,
24
+ assignedToRoles: review?.assignedToRoles
25
+ },
26
+ interpolate
27
+ );
28
+ const reminders = (review?.reminders ?? []).filter(
29
+ (reminder) => typeof reminder?.offset === "string" && reminder.offset.length > 0
30
+ );
31
+ return {
32
+ ...assignment,
33
+ priority: review?.priority ?? null,
34
+ deadlineDuration: typeof review?.deadline?.duration === "string" && review.deadline.duration.length ? review.deadline.duration : null,
35
+ reminders: reminders.length ? reminders : null
36
+ };
37
+ }
38
+ function toAgentDispositionReview(resolved) {
39
+ const descriptor = {
40
+ ...resolved.assignedTo ? { assignedTo: resolved.assignedTo } : {},
41
+ ...resolved.assignedToRoles?.length ? { assignedToRoles: resolved.assignedToRoles } : {},
42
+ ...resolved.priority ? { priority: resolved.priority } : {},
43
+ ...resolved.deadlineDuration ? { deadlineDuration: resolved.deadlineDuration } : {},
44
+ ...resolved.reminders?.length ? { reminders: resolved.reminders } : {}
45
+ };
46
+ return Object.keys(descriptor).length ? descriptor : null;
47
+ }
48
+ function resolveAgentReviewBreachHandling(onBreach) {
49
+ const action = onBreach?.action;
50
+ if (action === "notify") return { kind: "notify" };
51
+ if (action === "attention") return { kind: "attention" };
52
+ if (action === "reassign") {
53
+ const target = resolveBreachReassignTarget(onBreach?.reassignTo);
54
+ return target ? { kind: "reassign", ...target } : { kind: "none" };
55
+ }
56
+ return { kind: "none" };
57
+ }
58
+ export {
59
+ INVOKE_AGENT_ACTIVITY_TYPE,
60
+ findAgentReviewConfig,
61
+ findAgentReviewConfigForStep,
62
+ resolveAgentReview,
63
+ resolveAgentReviewBreachHandling,
64
+ toAgentDispositionReview
65
+ };
66
+ //# sourceMappingURL=agent-review.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/workflows/lib/agent-review.ts"],
4
+ "sourcesContent": ["/**\n * Workflows Module \u2014 the Invoke Agent node's Review section (spec \u00A77.5).\n *\n * \"Who reviews a proposal this step raises, and by when.\" The thing being\n * authored is a real task \u2014 the implicit disposition task the enterprise\n * `dispositionService` raises when the confidence gate routes to a human \u2014 so\n * every rule here delegates to the \u00A76.1 task resolvers rather than restating\n * them. What is NEW is the breach vocabulary, and what is new about it is what\n * it LACKS.\n *\n * ## A breached disposition deadline escalates. It never decides.\n *\n * `resolveAgentReviewBreachHandling` has no `route` arm and no verdict arm, and\n * that absence is the feature. Auto-rejecting a proposal nobody answered \u2014 or\n * auto-approving it, or routing the run past it \u2014 is a disposition reached\n * without a human, which is precisely the boundary\n * `agent_orchestrator/AGENTS.md` guards (\"Ask before changing \u2026 the auto-approve\n * vs `user_task` boundary\"). The maintainer decision for this phase is explicit:\n * on breach, notify / reassign / mark for attention; the proposal stays\n * `pending` until a person acts. The accepted cost is that a breached proposal\n * can sit indefinitely if nobody picks it up \u2014 which is a queue that is visibly\n * behind, not a decision made by a timer.\n *\n * PURE: no ORM, DI, React or registry imports. Callers pass plain definition\n * JSON and an `interpolate` bound to the run context.\n */\n\nimport type { AgentReviewConfig, AgentReviewOnBreach } from '../data/activity-config-schemas'\nimport type { AgentDispositionReview } from './agent-disposition-task'\nimport { resolveBreachReassignTarget } from './breach-routing'\nimport {\n resolveTaskAssignment,\n type ResolvedTaskAssignment,\n type TaskInterpolate,\n} from './task-resolution'\n\nexport const INVOKE_AGENT_ACTIVITY_TYPE = 'INVOKE_AGENT'\n\nexport interface AgentReviewStepLike {\n activities?: { activityType?: string; config?: { review?: unknown } }[] | null\n}\n\nexport interface AgentReviewDefinitionLike {\n steps?: ({ stepId?: string } & AgentReviewStepLike)[] | null\n}\n\nexport interface ResolvedAgentReview extends ResolvedTaskAssignment {\n priority: string | null\n /** Authored deadline duration; the absolute due date is anchored to task creation. */\n deadlineDuration: string | null\n reminders: { offset: string }[] | null\n}\n\nexport type AgentReviewBreachHandling =\n | { kind: 'notify' }\n | { kind: 'reassign'; assignedTo: string | null; assignedToRoles: string[] | null }\n | { kind: 'attention' }\n | { kind: 'none' }\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * The Review config authored on a step's INVOKE_AGENT activity.\n *\n * Read structurally rather than through the zod schema so a definition the\n * engine can still execute is never rejected here: a malformed Review block\n * degrades to \"no review configured\", which is the behaviour every definition\n * authored before this section existed already has.\n */\nexport function findAgentReviewConfig(\n step: AgentReviewStepLike | null | undefined,\n): AgentReviewConfig | null {\n const activity = (step?.activities ?? []).find(\n (candidate) => candidate?.activityType === INVOKE_AGENT_ACTIVITY_TYPE,\n )\n const review = activity?.config?.review\n return isRecord(review) ? (review as AgentReviewConfig) : null\n}\n\n/** The Review config of one step of a definition, addressed by step id. */\nexport function findAgentReviewConfigForStep(\n definition: AgentReviewDefinitionLike | null | undefined,\n stepId: string,\n): AgentReviewConfig | null {\n const step = (definition?.steps ?? []).find((candidate) => candidate?.stepId === stepId)\n return findAgentReviewConfig(step)\n}\n\n/**\n * Resolve the authored Review section against the run context.\n *\n * Assignment goes through the SAME `resolveTaskAssignment` a USER_TASK step\n * uses, so a dynamic assignee that resolves to nothing falls back to the\n * authored role queue here exactly as it does there \u2014 never to an unassigned\n * row, which under the \u00A76.4 visibility model is a row nobody can act on.\n *\n * `assigneeKind` is always `'user'`: a proposal is disposed from the backoffice\n * caseload, and a portal principal has no surface that could dispose one.\n */\nexport function resolveAgentReview(\n review: AgentReviewConfig | null | undefined,\n interpolate: TaskInterpolate,\n): ResolvedAgentReview {\n const assignment = resolveTaskAssignment(\n {\n assignedTo: review?.assignedTo,\n assignedToRoles: review?.assignedToRoles,\n },\n interpolate,\n )\n\n const reminders = (review?.reminders ?? []).filter(\n (reminder) => typeof reminder?.offset === 'string' && reminder.offset.length > 0,\n )\n\n return {\n ...assignment,\n priority: review?.priority ?? null,\n deadlineDuration:\n typeof review?.deadline?.duration === 'string' && review.deadline.duration.length\n ? review.deadline.duration\n : null,\n reminders: reminders.length ? reminders : null,\n }\n}\n\n/**\n * Project a resolved Review onto the descriptor that crosses the bridge to\n * `agent_orchestrator`.\n *\n * Returns null when the author configured nothing, so a step that never opened\n * the Review section sends no descriptor at all and the disposition service\n * takes exactly the path it took before.\n */\nexport function toAgentDispositionReview(\n resolved: ResolvedAgentReview,\n): AgentDispositionReview | null {\n const descriptor: AgentDispositionReview = {\n ...(resolved.assignedTo ? { assignedTo: resolved.assignedTo } : {}),\n ...(resolved.assignedToRoles?.length ? { assignedToRoles: resolved.assignedToRoles } : {}),\n ...(resolved.priority ? { priority: resolved.priority } : {}),\n ...(resolved.deadlineDuration ? { deadlineDuration: resolved.deadlineDuration } : {}),\n ...(resolved.reminders?.length ? { reminders: resolved.reminders } : {}),\n }\n return Object.keys(descriptor).length ? descriptor : null\n}\n\n/**\n * The single decision point for a breached disposition deadline.\n *\n * Every fall-through is `none`, which is what a step that authored no breach\n * action has always done. Note what cannot be returned: nothing here disposes\n * the proposal, and nothing here advances the run past it.\n */\nexport function resolveAgentReviewBreachHandling(\n onBreach: AgentReviewOnBreach | null | undefined,\n): AgentReviewBreachHandling {\n const action = onBreach?.action\n\n if (action === 'notify') return { kind: 'notify' }\n if (action === 'attention') return { kind: 'attention' }\n\n if (action === 'reassign') {\n const target = resolveBreachReassignTarget(onBreach?.reassignTo)\n return target ? { kind: 'reassign', ...target } : { kind: 'none' }\n }\n\n return { kind: 'none' }\n}\n"],
5
+ "mappings": "AA6BA,SAAS,mCAAmC;AAC5C;AAAA,EACE;AAAA,OAGK;AAEA,MAAM,6BAA6B;AAuB1C,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAUO,SAAS,sBACd,MAC0B;AAC1B,QAAM,YAAY,MAAM,cAAc,CAAC,GAAG;AAAA,IACxC,CAAC,cAAc,WAAW,iBAAiB;AAAA,EAC7C;AACA,QAAM,SAAS,UAAU,QAAQ;AACjC,SAAO,SAAS,MAAM,IAAK,SAA+B;AAC5D;AAGO,SAAS,6BACd,YACA,QAC0B;AAC1B,QAAM,QAAQ,YAAY,SAAS,CAAC,GAAG,KAAK,CAAC,cAAc,WAAW,WAAW,MAAM;AACvF,SAAO,sBAAsB,IAAI;AACnC;AAaO,SAAS,mBACd,QACA,aACqB;AACrB,QAAM,aAAa;AAAA,IACjB;AAAA,MACE,YAAY,QAAQ;AAAA,MACpB,iBAAiB,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAa,QAAQ,aAAa,CAAC,GAAG;AAAA,IAC1C,CAAC,aAAa,OAAO,UAAU,WAAW,YAAY,SAAS,OAAO,SAAS;AAAA,EACjF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY;AAAA,IAC9B,kBACE,OAAO,QAAQ,UAAU,aAAa,YAAY,OAAO,SAAS,SAAS,SACvE,OAAO,SAAS,WAChB;AAAA,IACN,WAAW,UAAU,SAAS,YAAY;AAAA,EAC5C;AACF;AAUO,SAAS,yBACd,UAC+B;AAC/B,QAAM,aAAqC;AAAA,IACzC,GAAI,SAAS,aAAa,EAAE,YAAY,SAAS,WAAW,IAAI,CAAC;AAAA,IACjE,GAAI,SAAS,iBAAiB,SAAS,EAAE,iBAAiB,SAAS,gBAAgB,IAAI,CAAC;AAAA,IACxF,GAAI,SAAS,WAAW,EAAE,UAAU,SAAS,SAAS,IAAI,CAAC;AAAA,IAC3D,GAAI,SAAS,mBAAmB,EAAE,kBAAkB,SAAS,iBAAiB,IAAI,CAAC;AAAA,IACnF,GAAI,SAAS,WAAW,SAAS,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,EACxE;AACA,SAAO,OAAO,KAAK,UAAU,EAAE,SAAS,aAAa;AACvD;AASO,SAAS,iCACd,UAC2B;AAC3B,QAAM,SAAS,UAAU;AAEzB,MAAI,WAAW,SAAU,QAAO,EAAE,MAAM,SAAS;AACjD,MAAI,WAAW,YAAa,QAAO,EAAE,MAAM,YAAY;AAEvD,MAAI,WAAW,YAAY;AACzB,UAAM,SAAS,4BAA4B,UAAU,UAAU;AAC/D,WAAO,SAAS,EAAE,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,MAAM,OAAO;AAAA,EACnE;AAEA,SAAO,EAAE,MAAM,OAAO;AACxB;",
6
+ "names": []
7
+ }