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