@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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/endpoint-catalog.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflows Module - in-process endpoint catalog (issue #4235, spec\n * 2026-07-26-workflows-ux-redesign.md section 5.3).\n *\n * Builds a trimmed index of the platform's API surface from the SAME inputs\n * the docs route uses \u2014 the registered module list plus the API route\n * manifests \u2014 via `attachOpenApiDocsToModules` + `buildOpenApiDocument`. The\n * projection keeps only what the endpoint picker and the CALL_API output\n * contract need: path, method, summary, tag, parameter descriptors, and the\n * declared request/response JSON schemas. Undeclared responses (the\n * generator's advisory `Schema not declared` fallback) are omitted so\n * consumers degrade honestly to `unknown` instead of trusting a placeholder.\n *\n * Server-only: assembling the catalog loads every route module through the\n * manifests (exactly what the docs route pays), so the result is cached per\n * process. Paths are exposed with the `/api` prefix to match what CALL_API\n * `endpoint` config values look like (`buildApiUrl` only accepts `/api/*`).\n */\n\nimport { ZodType } from 'zod'\nimport type { ZodTypeAny } from 'zod'\nimport type { Module } from '@open-mercato/shared/modules/registry'\nimport { getApiRouteManifests } from '@open-mercato/shared/modules/registry'\nimport { getModules } from '@open-mercato/shared/lib/modules/registry'\nimport { attachOpenApiDocsToModules, buildOpenApiDocument } from '@open-mercato/shared/lib/openapi'\nimport type { OpenApiMethodDoc, OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { findMatchingEndpoint } from './endpoint-path'\n\nexport type WorkflowEndpointParamLocation = 'path' | 'query' | 'header'\n\nexport interface WorkflowEndpointParam {\n name: string\n in: WorkflowEndpointParamLocation\n required: boolean\n type: string\n}\n\nexport interface WorkflowEndpointDescriptor {\n path: string\n method: string\n summary: string\n tag: string\n params: WorkflowEndpointParam[]\n hasRequestSchema: boolean\n requestSchema?: Record<string, unknown>\n responseSchema?: Record<string, unknown>\n}\n\nexport interface WorkflowEndpointCatalog {\n items: WorkflowEndpointDescriptor[]\n}\n\nconst METHOD_ORDER = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'] as const\n\nconst PARAM_LOCATIONS = new Set<WorkflowEndpointParamLocation>(['path', 'query', 'header'])\n\nconst UNDECLARED_RESPONSE_DESCRIPTION = 'Schema not declared'\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction methodRank(method: string): number {\n const index = METHOD_ORDER.indexOf(method as (typeof METHOD_ORDER)[number])\n return index === -1 ? METHOD_ORDER.length : index\n}\n\nfunction compareEndpoints(left: WorkflowEndpointDescriptor, right: WorkflowEndpointDescriptor): number {\n const byPath = left.path.localeCompare(right.path)\n if (byPath !== 0) return byPath\n return methodRank(left.method) - methodRank(right.method)\n}\n\nfunction schemaTypeOf(schema: unknown): string {\n if (!isRecord(schema)) return 'unknown'\n if (typeof schema.type === 'string' && schema.type.length > 0) return schema.type\n return 'unknown'\n}\n\nfunction projectParams(parameters: unknown): WorkflowEndpointParam[] {\n if (!Array.isArray(parameters)) return []\n const params: WorkflowEndpointParam[] = []\n for (const parameter of parameters) {\n if (!isRecord(parameter)) continue\n const name = parameter.name\n const location = parameter.in\n if (typeof name !== 'string' || name.length === 0) continue\n if (typeof location !== 'string' || !PARAM_LOCATIONS.has(location as WorkflowEndpointParamLocation)) continue\n params.push({\n name,\n in: location as WorkflowEndpointParamLocation,\n required: parameter.required === true,\n type: schemaTypeOf(parameter.schema),\n })\n }\n return params\n}\n\nfunction jsonContentSchema(container: unknown): Record<string, unknown> | undefined {\n if (!isRecord(container)) return undefined\n const content = container.content\n if (!isRecord(content)) return undefined\n const jsonEntry = content['application/json']\n if (!isRecord(jsonEntry)) return undefined\n const schema = jsonEntry.schema\n if (!isRecord(schema) || Object.keys(schema).length === 0) return undefined\n return schema\n}\n\nfunction isDeclaredResponseSchema(schema: Record<string, unknown>): boolean {\n if (schema.description !== UNDECLARED_RESPONSE_DESCRIPTION) return true\n if (isRecord(schema.properties) && Object.keys(schema.properties).length > 0) return true\n return schema.type !== 'object'\n}\n\nfunction projectSuccessResponseSchema(responses: unknown): Record<string, unknown> | undefined {\n if (!isRecord(responses)) return undefined\n const successStatuses = Object.keys(responses)\n .map((status) => Number.parseInt(status, 10))\n .filter((status) => Number.isInteger(status) && status >= 200 && status < 300)\n .sort((left, right) => left - right)\n for (const status of successStatuses) {\n const schema = jsonContentSchema(responses[String(status)])\n if (schema && isDeclaredResponseSchema(schema)) return schema\n }\n return undefined\n}\n\nexport function buildEndpointCatalog(modules: Module[]): WorkflowEndpointCatalog {\n const doc = buildOpenApiDocument(modules)\n const items: WorkflowEndpointDescriptor[] = []\n for (const [docPath, operations] of Object.entries(doc.paths)) {\n if (!isRecord(operations)) continue\n for (const [methodLower, operation] of Object.entries(operations)) {\n const method = methodLower.toUpperCase()\n if (methodRank(method) === METHOD_ORDER.length) continue\n if (!isRecord(operation)) continue\n const requestSchema = jsonContentSchema(operation.requestBody)\n const responseSchema = projectSuccessResponseSchema(operation.responses)\n const tags = operation.tags\n items.push({\n path: `/api${docPath}`,\n method,\n summary:\n typeof operation.summary === 'string' && operation.summary.length > 0\n ? operation.summary\n : `${method} /api${docPath}`,\n tag: Array.isArray(tags) && typeof tags[0] === 'string' ? tags[0] : '',\n params: projectParams(operation.parameters),\n hasRequestSchema: requestSchema !== undefined,\n ...(requestSchema !== undefined ? { requestSchema } : {}),\n ...(responseSchema !== undefined ? { responseSchema } : {}),\n })\n }\n }\n items.sort(compareEndpoints)\n return { items }\n}\n\ninterface EndpointResponseSchemaEntry {\n path: string\n method: string\n schema: ZodTypeAny | null\n}\n\nfunction normalizeDocPath(path: string): string {\n const segments = path\n .split('/')\n .filter((segment) => segment.length > 0)\n .map((segment) => {\n const optionalCatchAll = segment.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/)\n if (optionalCatchAll) return `{${optionalCatchAll[1]}}`\n const catchAll = segment.match(/^\\[\\.\\.\\.(.+)\\]$/)\n if (catchAll) return `{${catchAll[1]}}`\n const dynamic = segment.match(/^\\[(.+)\\]$/)\n if (dynamic) return `{${dynamic[1]}}`\n return segment\n })\n return `/${segments.join('/')}`\n}\n\nfunction successResponseZodSchema(methodDoc: OpenApiMethodDoc | undefined): ZodTypeAny | null {\n if (!methodDoc || !Array.isArray(methodDoc.responses)) return null\n const declaredSuccesses = methodDoc.responses\n .filter(\n (response) =>\n typeof response?.status === 'number' &&\n response.status >= 200 &&\n response.status < 300 &&\n response.schema instanceof ZodType,\n )\n .sort((left, right) => left.status - right.status)\n const schema = declaredSuccesses[0]?.schema\n return schema instanceof ZodType ? schema : null\n}\n\n/**\n * Index of the endpoint surface with each endpoint's declared zod success\n * response schema (or null when none is declared), built from the SAME\n * attached route docs the catalog projection reads. Every endpoint is\n * indexed \u2014 not only those with schemas \u2014 so a literal route always wins the\n * match over a sibling `{param}` template instead of borrowing its schema.\n * Schemas stay zod (not JSON schema) so the CALL_API output contract can\n * feed `flattenSchemaToContract` through the existing `resolveOutputContract`\n * seam.\n */\nfunction buildResponseSchemaIndex(modules: Module[]): EndpointResponseSchemaEntry[] {\n const entries: EndpointResponseSchemaEntry[] = []\n for (const moduleEntry of modules) {\n for (const api of moduleEntry.apis ?? []) {\n const rawPath = (api as { path?: unknown }).path\n if (typeof rawPath !== 'string' || rawPath.length === 0) continue\n const path = `/api${normalizeDocPath(rawPath)}`\n if ('handlers' in api) {\n const handlers = (api as { handlers?: Record<string, unknown> }).handlers ?? {}\n const docs = (api as { docs?: OpenApiRouteDoc }).docs\n for (const method of METHOD_ORDER) {\n if (typeof handlers[method] !== 'function') continue\n entries.push({ path, method, schema: successResponseZodSchema(docs?.methods?.[method]) })\n }\n continue\n }\n const legacyMethod = (api as { method?: unknown }).method\n if (typeof legacyMethod !== 'string' || legacyMethod.length === 0) continue\n entries.push({\n path,\n method: legacyMethod.toUpperCase(),\n schema: successResponseZodSchema((api as { docs?: OpenApiMethodDoc }).docs),\n })\n }\n }\n return entries\n}\n\nlet catalogPromise: Promise<WorkflowEndpointCatalog> | null = null\nlet responseSchemaIndex: EndpointResponseSchemaEntry[] | null = null\n\nasync function assembleCatalog(): Promise<WorkflowEndpointCatalog> {\n const docModules = await attachOpenApiDocsToModules(getModules(), getApiRouteManifests())\n responseSchemaIndex = buildResponseSchemaIndex(docModules)\n return buildEndpointCatalog(docModules)\n}\n\nexport async function getWorkflowEndpointCatalog(): Promise<WorkflowEndpointCatalog> {\n if (!catalogPromise) {\n catalogPromise = assembleCatalog().catch((error: unknown) => {\n catalogPromise = null\n throw error\n })\n }\n return catalogPromise\n}\n\n/**\n * Warms the per-process catalog cache, swallowing failures: callers that only\n * need the sync `findEndpointResponseSchema` lookup (the context-schema\n * route) degrade to 'unknown' contracts when assembly is impossible, e.g.\n * when the module registry is not bootstrapped.\n */\nexport async function ensureWorkflowEndpointCatalog(): Promise<void> {\n try {\n await getWorkflowEndpointCatalog()\n } catch {\n return\n }\n}\n\n/**\n * Sync lookup over the warmed response-schema index. Returns null until\n * `getWorkflowEndpointCatalog`/`ensureWorkflowEndpointCatalog` has resolved\n * at least once in this process, and for endpoints without a declared zod\n * success response.\n */\nexport function findEndpointResponseSchema(endpoint: string, method: string): ZodTypeAny | null {\n if (!responseSchemaIndex) return null\n const matched = findMatchingEndpoint(endpoint, method, responseSchemaIndex)\n return matched ? matched.item.schema : null\n}\n\nexport function clearWorkflowEndpointCatalogForTests(): void {\n catalogPromise = null\n responseSchemaIndex = null\n}\n"],
|
|
5
|
+
"mappings": "AAmBA,SAAS,eAAe;AAGxB,SAAS,4BAA4B;AACrC,SAAS,kBAAkB;AAC3B,SAAS,4BAA4B,4BAA4B;AAEjE,SAAS,4BAA4B;AA0BrC,MAAM,eAAe,CAAC,OAAO,QAAQ,OAAO,SAAS,QAAQ;AAE7D,MAAM,kBAAkB,oBAAI,IAAmC,CAAC,QAAQ,SAAS,QAAQ,CAAC;AAE1F,MAAM,kCAAkC;AAExC,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,QAAwB;AAC1C,QAAM,QAAQ,aAAa,QAAQ,MAAuC;AAC1E,SAAO,UAAU,KAAK,aAAa,SAAS;AAC9C;AAEA,SAAS,iBAAiB,MAAkC,OAA2C;AACrG,QAAM,SAAS,KAAK,KAAK,cAAc,MAAM,IAAI;AACjD,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO,WAAW,KAAK,MAAM,IAAI,WAAW,MAAM,MAAM;AAC1D;AAEA,SAAS,aAAa,QAAyB;AAC7C,MAAI,CAAC,SAAS,MAAM,EAAG,QAAO;AAC9B,MAAI,OAAO,OAAO,SAAS,YAAY,OAAO,KAAK,SAAS,EAAG,QAAO,OAAO;AAC7E,SAAO;AACT;AAEA,SAAS,cAAc,YAA8C;AACnE,MAAI,CAAC,MAAM,QAAQ,UAAU,EAAG,QAAO,CAAC;AACxC,QAAM,SAAkC,CAAC;AACzC,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,SAAS,SAAS,EAAG;AAC1B,UAAM,OAAO,UAAU;AACvB,UAAM,WAAW,UAAU;AAC3B,QAAI,OAAO,SAAS,YAAY,KAAK,WAAW,EAAG;AACnD,QAAI,OAAO,aAAa,YAAY,CAAC,gBAAgB,IAAI,QAAyC,EAAG;AACrG,WAAO,KAAK;AAAA,MACV;AAAA,MACA,IAAI;AAAA,MACJ,UAAU,UAAU,aAAa;AAAA,MACjC,MAAM,aAAa,UAAU,MAAM;AAAA,IACrC,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,WAAyD;AAClF,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,UAAU,UAAU;AAC1B,MAAI,CAAC,SAAS,OAAO,EAAG,QAAO;AAC/B,QAAM,YAAY,QAAQ,kBAAkB;AAC5C,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,SAAS,UAAU;AACzB,MAAI,CAAC,SAAS,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AAClE,SAAO;AACT;AAEA,SAAS,yBAAyB,QAA0C;AAC1E,MAAI,OAAO,gBAAgB,gCAAiC,QAAO;AACnE,MAAI,SAAS,OAAO,UAAU,KAAK,OAAO,KAAK,OAAO,UAAU,EAAE,SAAS,EAAG,QAAO;AACrF,SAAO,OAAO,SAAS;AACzB;AAEA,SAAS,6BAA6B,WAAyD;AAC7F,MAAI,CAAC,SAAS,SAAS,EAAG,QAAO;AACjC,QAAM,kBAAkB,OAAO,KAAK,SAAS,EAC1C,IAAI,CAAC,WAAW,OAAO,SAAS,QAAQ,EAAE,CAAC,EAC3C,OAAO,CAAC,WAAW,OAAO,UAAU,MAAM,KAAK,UAAU,OAAO,SAAS,GAAG,EAC5E,KAAK,CAAC,MAAM,UAAU,OAAO,KAAK;AACrC,aAAW,UAAU,iBAAiB;AACpC,UAAM,SAAS,kBAAkB,UAAU,OAAO,MAAM,CAAC,CAAC;AAC1D,QAAI,UAAU,yBAAyB,MAAM,EAAG,QAAO;AAAA,EACzD;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,SAA4C;AAC/E,QAAM,MAAM,qBAAqB,OAAO;AACxC,QAAM,QAAsC,CAAC;AAC7C,aAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,IAAI,KAAK,GAAG;AAC7D,QAAI,CAAC,SAAS,UAAU,EAAG;AAC3B,eAAW,CAAC,aAAa,SAAS,KAAK,OAAO,QAAQ,UAAU,GAAG;AACjE,YAAM,SAAS,YAAY,YAAY;AACvC,UAAI,WAAW,MAAM,MAAM,aAAa,OAAQ;AAChD,UAAI,CAAC,SAAS,SAAS,EAAG;AAC1B,YAAM,gBAAgB,kBAAkB,UAAU,WAAW;AAC7D,YAAM,iBAAiB,6BAA6B,UAAU,SAAS;AACvE,YAAM,OAAO,UAAU;AACvB,YAAM,KAAK;AAAA,QACT,MAAM,OAAO,OAAO;AAAA,QACpB;AAAA,QACA,SACE,OAAO,UAAU,YAAY,YAAY,UAAU,QAAQ,SAAS,IAChE,UAAU,UACV,GAAG,MAAM,QAAQ,OAAO;AAAA,QAC9B,KAAK,MAAM,QAAQ,IAAI,KAAK,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI;AAAA,QACpE,QAAQ,cAAc,UAAU,UAAU;AAAA,QAC1C,kBAAkB,kBAAkB;AAAA,QACpC,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,QACvD,GAAI,mBAAmB,SAAY,EAAE,eAAe,IAAI,CAAC;AAAA,MAC3D,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,KAAK,gBAAgB;AAC3B,SAAO,EAAE,MAAM;AACjB;AAQA,SAAS,iBAAiB,MAAsB;AAC9C,QAAM,WAAW,KACd,MAAM,GAAG,EACT,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC,EACtC,IAAI,CAAC,YAAY;AAChB,UAAM,mBAAmB,QAAQ,MAAM,sBAAsB;AAC7D,QAAI,iBAAkB,QAAO,IAAI,iBAAiB,CAAC,CAAC;AACpD,UAAM,WAAW,QAAQ,MAAM,kBAAkB;AACjD,QAAI,SAAU,QAAO,IAAI,SAAS,CAAC,CAAC;AACpC,UAAM,UAAU,QAAQ,MAAM,YAAY;AAC1C,QAAI,QAAS,QAAO,IAAI,QAAQ,CAAC,CAAC;AAClC,WAAO;AAAA,EACT,CAAC;AACH,SAAO,IAAI,SAAS,KAAK,GAAG,CAAC;AAC/B;AAEA,SAAS,yBAAyB,WAA4D;AAC5F,MAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,UAAU,SAAS,EAAG,QAAO;AAC9D,QAAM,oBAAoB,UAAU,UACjC;AAAA,IACC,CAAC,aACC,OAAO,UAAU,WAAW,YAC5B,SAAS,UAAU,OACnB,SAAS,SAAS,OAClB,SAAS,kBAAkB;AAAA,EAC/B,EACC,KAAK,CAAC,MAAM,UAAU,KAAK,SAAS,MAAM,MAAM;AACnD,QAAM,SAAS,kBAAkB,CAAC,GAAG;AACrC,SAAO,kBAAkB,UAAU,SAAS;AAC9C;AAYA,SAAS,yBAAyB,SAAkD;AAClF,QAAM,UAAyC,CAAC;AAChD,aAAW,eAAe,SAAS;AACjC,eAAW,OAAO,YAAY,QAAQ,CAAC,GAAG;AACxC,YAAM,UAAW,IAA2B;AAC5C,UAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,EAAG;AACzD,YAAM,OAAO,OAAO,iBAAiB,OAAO,CAAC;AAC7C,UAAI,cAAc,KAAK;AACrB,cAAM,WAAY,IAA+C,YAAY,CAAC;AAC9E,cAAM,OAAQ,IAAmC;AACjD,mBAAW,UAAU,cAAc;AACjC,cAAI,OAAO,SAAS,MAAM,MAAM,WAAY;AAC5C,kBAAQ,KAAK,EAAE,MAAM,QAAQ,QAAQ,yBAAyB,MAAM,UAAU,MAAM,CAAC,EAAE,CAAC;AAAA,QAC1F;AACA;AAAA,MACF;AACA,YAAM,eAAgB,IAA6B;AACnD,UAAI,OAAO,iBAAiB,YAAY,aAAa,WAAW,EAAG;AACnE,cAAQ,KAAK;AAAA,QACX;AAAA,QACA,QAAQ,aAAa,YAAY;AAAA,QACjC,QAAQ,yBAA0B,IAAoC,IAAI;AAAA,MAC5E,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAI,iBAA0D;AAC9D,IAAI,sBAA4D;AAEhE,eAAe,kBAAoD;AACjE,QAAM,aAAa,MAAM,2BAA2B,WAAW,GAAG,qBAAqB,CAAC;AACxF,wBAAsB,yBAAyB,UAAU;AACzD,SAAO,qBAAqB,UAAU;AACxC;AAEA,eAAsB,6BAA+D;AACnF,MAAI,CAAC,gBAAgB;AACnB,qBAAiB,gBAAgB,EAAE,MAAM,CAAC,UAAmB;AAC3D,uBAAiB;AACjB,YAAM;AAAA,IACR,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAQA,eAAsB,gCAA+C;AACnE,MAAI;AACF,UAAM,2BAA2B;AAAA,EACnC,QAAQ;AACN;AAAA,EACF;AACF;AAQO,SAAS,2BAA2B,UAAkB,QAAmC;AAC9F,MAAI,CAAC,oBAAqB,QAAO;AACjC,QAAM,UAAU,qBAAqB,UAAU,QAAQ,mBAAmB;AAC1E,SAAO,UAAU,QAAQ,KAAK,SAAS;AACzC;AAEO,SAAS,uCAA6C;AAC3D,mBAAiB;AACjB,wBAAsB;AACxB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
function stripTrailingSlash(path) {
|
|
2
|
+
if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
|
|
3
|
+
return path;
|
|
4
|
+
}
|
|
5
|
+
function splitEndpointValue(value) {
|
|
6
|
+
const trimmed = value.trim();
|
|
7
|
+
const queryIndex = trimmed.indexOf("?");
|
|
8
|
+
const path = stripTrailingSlash(queryIndex === -1 ? trimmed : trimmed.slice(0, queryIndex));
|
|
9
|
+
const query = {};
|
|
10
|
+
if (queryIndex !== -1) {
|
|
11
|
+
const rawQuery = trimmed.slice(queryIndex + 1);
|
|
12
|
+
for (const pair of rawQuery.split("&")) {
|
|
13
|
+
if (pair.length === 0) continue;
|
|
14
|
+
const equalsIndex = pair.indexOf("=");
|
|
15
|
+
const key = equalsIndex === -1 ? pair : pair.slice(0, equalsIndex);
|
|
16
|
+
if (key.length === 0) continue;
|
|
17
|
+
query[key] = equalsIndex === -1 ? "" : pair.slice(equalsIndex + 1);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { path, query };
|
|
21
|
+
}
|
|
22
|
+
function templateParamName(segment) {
|
|
23
|
+
if (segment.length > 2 && segment.startsWith("{") && segment.endsWith("}")) {
|
|
24
|
+
return segment.slice(1, -1);
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function matchEndpointTemplate(endpointPath, templatePath) {
|
|
29
|
+
const valueSegments = stripTrailingSlash(endpointPath.trim()).split("/");
|
|
30
|
+
const templateSegments = stripTrailingSlash(templatePath.trim()).split("/");
|
|
31
|
+
if (valueSegments.length !== templateSegments.length) return null;
|
|
32
|
+
const pathParams = {};
|
|
33
|
+
for (let index = 0; index < templateSegments.length; index += 1) {
|
|
34
|
+
const templateSegment = templateSegments[index];
|
|
35
|
+
const valueSegment = valueSegments[index];
|
|
36
|
+
const paramName = templateParamName(templateSegment);
|
|
37
|
+
if (paramName !== null) {
|
|
38
|
+
if (valueSegment.length === 0) return null;
|
|
39
|
+
pathParams[paramName] = valueSegment === `{${paramName}}` ? "" : valueSegment;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (templateSegment !== valueSegment) return null;
|
|
43
|
+
}
|
|
44
|
+
return { pathParams };
|
|
45
|
+
}
|
|
46
|
+
function templateParamCount(templatePath) {
|
|
47
|
+
let count = 0;
|
|
48
|
+
for (const segment of templatePath.split("/")) {
|
|
49
|
+
if (templateParamName(segment) !== null) count += 1;
|
|
50
|
+
}
|
|
51
|
+
return count;
|
|
52
|
+
}
|
|
53
|
+
function findMatchingEndpoint(endpointValue, method, items) {
|
|
54
|
+
const { path } = splitEndpointValue(endpointValue);
|
|
55
|
+
if (path.length === 0) return null;
|
|
56
|
+
const normalizedMethod = method.trim().toUpperCase();
|
|
57
|
+
const candidates = [];
|
|
58
|
+
for (const item of items) {
|
|
59
|
+
if (item.method.toUpperCase() !== normalizedMethod) continue;
|
|
60
|
+
const match = matchEndpointTemplate(path, item.path);
|
|
61
|
+
if (!match) continue;
|
|
62
|
+
candidates.push({ item, match, paramCount: templateParamCount(item.path) });
|
|
63
|
+
}
|
|
64
|
+
if (candidates.length === 0) return null;
|
|
65
|
+
candidates.sort((left, right) => {
|
|
66
|
+
if (left.paramCount !== right.paramCount) return left.paramCount - right.paramCount;
|
|
67
|
+
return left.item.path.localeCompare(right.item.path);
|
|
68
|
+
});
|
|
69
|
+
const best = candidates[0];
|
|
70
|
+
return { item: best.item, match: best.match };
|
|
71
|
+
}
|
|
72
|
+
function composeEndpointValue(templatePath, pathParams, queryParams) {
|
|
73
|
+
const path = stripTrailingSlash(templatePath.trim()).split("/").map((segment) => {
|
|
74
|
+
const paramName = templateParamName(segment);
|
|
75
|
+
if (paramName === null) return segment;
|
|
76
|
+
const value = pathParams[paramName];
|
|
77
|
+
return typeof value === "string" && value.length > 0 ? value : segment;
|
|
78
|
+
}).join("/");
|
|
79
|
+
const queryEntries = Object.entries(queryParams).filter(([key, value]) => key.length > 0 && value.length > 0);
|
|
80
|
+
if (queryEntries.length === 0) return path;
|
|
81
|
+
const query = queryEntries.map(([key, value]) => `${key}=${value}`).join("&");
|
|
82
|
+
return `${path}?${query}`;
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
composeEndpointValue,
|
|
86
|
+
findMatchingEndpoint,
|
|
87
|
+
matchEndpointTemplate,
|
|
88
|
+
splitEndpointValue
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=endpoint-path.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/endpoint-path.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflows Module - pure endpoint-path helpers (issue #4235).\n *\n * Shared between the EndpointPicker component (browser) and the server-side\n * CALL_API output-contract lookup: matching a CALL_API `endpoint` config\n * value against catalog template paths (`/api/customers/people/{id}`) and\n * composing an endpoint string from typed parameter values. PURE \u2014 no React,\n * no ORM, no DI, no registry imports.\n *\n * Values are treated as opaque text: `{{...}}` interpolation pills and\n * unfilled `{param}` placeholders both match a template's parameter segments,\n * and query values are never URL-encoded so pills survive round-trips.\n */\n\nexport interface EndpointValueParts {\n path: string\n query: Record<string, string>\n}\n\nexport interface EndpointTemplateMatch {\n pathParams: Record<string, string>\n}\n\nfunction stripTrailingSlash(path: string): string {\n if (path.length > 1 && path.endsWith('/')) return path.slice(0, -1)\n return path\n}\n\nexport function splitEndpointValue(value: string): EndpointValueParts {\n const trimmed = value.trim()\n const queryIndex = trimmed.indexOf('?')\n const path = stripTrailingSlash(queryIndex === -1 ? trimmed : trimmed.slice(0, queryIndex))\n const query: Record<string, string> = {}\n if (queryIndex !== -1) {\n const rawQuery = trimmed.slice(queryIndex + 1)\n for (const pair of rawQuery.split('&')) {\n if (pair.length === 0) continue\n const equalsIndex = pair.indexOf('=')\n const key = equalsIndex === -1 ? pair : pair.slice(0, equalsIndex)\n if (key.length === 0) continue\n query[key] = equalsIndex === -1 ? '' : pair.slice(equalsIndex + 1)\n }\n }\n return { path, query }\n}\n\nfunction templateParamName(segment: string): string | null {\n if (segment.length > 2 && segment.startsWith('{') && segment.endsWith('}')) {\n return segment.slice(1, -1)\n }\n return null\n}\n\nexport function matchEndpointTemplate(endpointPath: string, templatePath: string): EndpointTemplateMatch | null {\n const valueSegments = stripTrailingSlash(endpointPath.trim()).split('/')\n const templateSegments = stripTrailingSlash(templatePath.trim()).split('/')\n if (valueSegments.length !== templateSegments.length) return null\n const pathParams: Record<string, string> = {}\n for (let index = 0; index < templateSegments.length; index += 1) {\n const templateSegment = templateSegments[index]\n const valueSegment = valueSegments[index]\n const paramName = templateParamName(templateSegment)\n if (paramName !== null) {\n if (valueSegment.length === 0) return null\n pathParams[paramName] = valueSegment === `{${paramName}}` ? '' : valueSegment\n continue\n }\n if (templateSegment !== valueSegment) return null\n }\n return { pathParams }\n}\n\nexport interface MatchableEndpoint {\n path: string\n method: string\n}\n\nfunction templateParamCount(templatePath: string): number {\n let count = 0\n for (const segment of templatePath.split('/')) {\n if (templateParamName(segment) !== null) count += 1\n }\n return count\n}\n\n/**\n * Finds the catalog endpoint a CALL_API endpoint value points at. Exact\n * literal matches win; otherwise the template with the fewest parameter\n * segments wins, ties broken by path order, so `/api/a/{id}` beats\n * `/api/{x}/{y}` deterministically.\n */\nexport function findMatchingEndpoint<T extends MatchableEndpoint>(\n endpointValue: string,\n method: string,\n items: T[],\n): { item: T; match: EndpointTemplateMatch } | null {\n const { path } = splitEndpointValue(endpointValue)\n if (path.length === 0) return null\n const normalizedMethod = method.trim().toUpperCase()\n const candidates: Array<{ item: T; match: EndpointTemplateMatch; paramCount: number }> = []\n for (const item of items) {\n if (item.method.toUpperCase() !== normalizedMethod) continue\n const match = matchEndpointTemplate(path, item.path)\n if (!match) continue\n candidates.push({ item, match, paramCount: templateParamCount(item.path) })\n }\n if (candidates.length === 0) return null\n candidates.sort((left, right) => {\n if (left.paramCount !== right.paramCount) return left.paramCount - right.paramCount\n return left.item.path.localeCompare(right.item.path)\n })\n const best = candidates[0]\n return { item: best.item, match: best.match }\n}\n\nexport function composeEndpointValue(\n templatePath: string,\n pathParams: Record<string, string>,\n queryParams: Record<string, string>,\n): string {\n const path = stripTrailingSlash(templatePath.trim())\n .split('/')\n .map((segment) => {\n const paramName = templateParamName(segment)\n if (paramName === null) return segment\n const value = pathParams[paramName]\n return typeof value === 'string' && value.length > 0 ? value : segment\n })\n .join('/')\n const queryEntries = Object.entries(queryParams).filter(([key, value]) => key.length > 0 && value.length > 0)\n if (queryEntries.length === 0) return path\n const query = queryEntries.map(([key, value]) => `${key}=${value}`).join('&')\n return `${path}?${query}`\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const WORKFLOW_ENGINE_VERSION = 4;
|
|
2
|
+
const STEP_TYPE_MIN_ENGINE_VERSIONS = {
|
|
3
|
+
IF_ELSE: 2,
|
|
4
|
+
SWITCH: 2,
|
|
5
|
+
WAIT_FOR_CONDITION: 3
|
|
6
|
+
};
|
|
7
|
+
const TRANSITION_KIND_MIN_ENGINE_VERSIONS = {
|
|
8
|
+
outcome: 4
|
|
9
|
+
};
|
|
10
|
+
function resolveRequiredEngineVersion(definition) {
|
|
11
|
+
if (!definition || typeof definition !== "object") return 1;
|
|
12
|
+
let required = 1;
|
|
13
|
+
if (Array.isArray(definition.steps)) {
|
|
14
|
+
for (const step of definition.steps) {
|
|
15
|
+
const stepType = step && typeof step === "object" ? step.stepType : void 0;
|
|
16
|
+
if (typeof stepType !== "string") continue;
|
|
17
|
+
const version = STEP_TYPE_MIN_ENGINE_VERSIONS[stepType];
|
|
18
|
+
if (version && version > required) required = version;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(definition.transitions)) {
|
|
22
|
+
for (const transition of definition.transitions) {
|
|
23
|
+
const transitionKind = transition && typeof transition === "object" ? transition.kind : void 0;
|
|
24
|
+
if (typeof transitionKind !== "string") continue;
|
|
25
|
+
const version = TRANSITION_KIND_MIN_ENGINE_VERSIONS[transitionKind];
|
|
26
|
+
if (version && version > required) required = version;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return required;
|
|
30
|
+
}
|
|
31
|
+
function isEngineVersionSupported(minEngineVersion) {
|
|
32
|
+
if (typeof minEngineVersion !== "number" || !Number.isFinite(minEngineVersion)) return true;
|
|
33
|
+
return minEngineVersion <= WORKFLOW_ENGINE_VERSION;
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
STEP_TYPE_MIN_ENGINE_VERSIONS,
|
|
37
|
+
TRANSITION_KIND_MIN_ENGINE_VERSIONS,
|
|
38
|
+
WORKFLOW_ENGINE_VERSION,
|
|
39
|
+
isEngineVersionSupported,
|
|
40
|
+
resolveRequiredEngineVersion
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=engine-version.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/engine-version.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflow engine version \u2014 the forward-compatibility guard for additive\n * definition capabilities (spec 2026-07-26-workflows-ux-redesign.md section\n * 5.8).\n *\n * A definition may declare `metadata.minEngineVersion`. An engine whose\n * `WORKFLOW_ENGINE_VERSION` is lower refuses to instantiate that definition\n * rather than silently misexecuting a capability it does not know. Bump the\n * constant whenever a release teaches the engine a new definition capability,\n * and have the editor stamp the matching `minEngineVersion` on definitions\n * that use it.\n *\n * Version log:\n * - 1: baseline (all step types up to and including WAIT_FOR_TIMER)\n * - 2: IF_ELSE and SWITCH branching steps\n * - 3: WAIT_FOR_CONDITION predicate wait step\n * - 4: outcome transitions for agent disposition routing\n */\nexport const WORKFLOW_ENGINE_VERSION = 4\n\n/**\n * Engine versions required by definition capabilities. Kept pure and data-only\n * so both the editor (stamping metadata on save) and the engine can share them.\n */\nexport const STEP_TYPE_MIN_ENGINE_VERSIONS: Record<string, number> = {\n IF_ELSE: 2,\n SWITCH: 2,\n WAIT_FOR_CONDITION: 3,\n}\n\nexport const TRANSITION_KIND_MIN_ENGINE_VERSIONS: Record<string, number> = {\n outcome: 4,\n}\n\nexport type EngineVersionedDefinition = {\n steps?: unknown\n transitions?: unknown\n}\n\nexport function resolveRequiredEngineVersion(definition: EngineVersionedDefinition | null | undefined): number {\n if (!definition || typeof definition !== 'object') return 1\n let required = 1\n if (Array.isArray(definition.steps)) {\n for (const step of definition.steps) {\n const stepType = step && typeof step === 'object' ? (step as { stepType?: unknown }).stepType : undefined\n if (typeof stepType !== 'string') continue\n const version = STEP_TYPE_MIN_ENGINE_VERSIONS[stepType]\n if (version && version > required) required = version\n }\n }\n if (Array.isArray(definition.transitions)) {\n for (const transition of definition.transitions) {\n const transitionKind = transition && typeof transition === 'object'\n ? (transition as { kind?: unknown }).kind\n : undefined\n if (typeof transitionKind !== 'string') continue\n const version = TRANSITION_KIND_MIN_ENGINE_VERSIONS[transitionKind]\n if (version && version > required) required = version\n }\n }\n return required\n}\n\nexport function isEngineVersionSupported(minEngineVersion: unknown): boolean {\n if (typeof minEngineVersion !== 'number' || !Number.isFinite(minEngineVersion)) return true\n return minEngineVersion <= WORKFLOW_ENGINE_VERSION\n}\n"],
|
|
5
|
+
"mappings": "AAkBO,MAAM,0BAA0B;AAMhC,MAAM,gCAAwD;AAAA,EACnE,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,oBAAoB;AACtB;AAEO,MAAM,sCAA8D;AAAA,EACzE,SAAS;AACX;AAOO,SAAS,6BAA6B,YAAkE;AAC7G,MAAI,CAAC,cAAc,OAAO,eAAe,SAAU,QAAO;AAC1D,MAAI,WAAW;AACf,MAAI,MAAM,QAAQ,WAAW,KAAK,GAAG;AACnC,eAAW,QAAQ,WAAW,OAAO;AACnC,YAAM,WAAW,QAAQ,OAAO,SAAS,WAAY,KAAgC,WAAW;AAChG,UAAI,OAAO,aAAa,SAAU;AAClC,YAAM,UAAU,8BAA8B,QAAQ;AACtD,UAAI,WAAW,UAAU,SAAU,YAAW;AAAA,IAChD;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,WAAW,WAAW,GAAG;AACzC,eAAW,cAAc,WAAW,aAAa;AAC/C,YAAM,iBAAiB,cAAc,OAAO,eAAe,WACtD,WAAkC,OACnC;AACJ,UAAI,OAAO,mBAAmB,SAAU;AACxC,YAAM,UAAU,oCAAoC,cAAc;AAClE,UAAI,WAAW,UAAU,SAAU,YAAW;AAAA,IAChD;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,yBAAyB,kBAAoC;AAC3E,MAAI,OAAO,qBAAqB,YAAY,CAAC,OAAO,SAAS,gBAAgB,EAAG,QAAO;AACvF,SAAO,oBAAoB;AAC7B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { WorkflowInstance } from "../data/entities.js";
|
|
2
|
+
import { logWorkflowEvent } from "./event-logger.js";
|
|
3
|
+
import { readWorkflowErrorHandler } from "./error-routing.js";
|
|
4
|
+
import { findDefinitionForInstance } from "./find-definition.js";
|
|
5
|
+
import { WORKFLOW_ACTIVITIES_QUEUE_NAME } from "./activity-queue-types.js";
|
|
6
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
7
|
+
const logger = createLogger("workflows").child({ component: "error-handler" });
|
|
8
|
+
const WORKFLOW_MAX_ERROR_HANDLER_DEPTH = 1;
|
|
9
|
+
function readErrorHandlerDepth(instance) {
|
|
10
|
+
const depth = instance.metadata?.errorHandler?.depth;
|
|
11
|
+
return typeof depth === "number" && Number.isFinite(depth) ? depth : 0;
|
|
12
|
+
}
|
|
13
|
+
async function scheduleWorkflowErrorHandler(em, instance, failure) {
|
|
14
|
+
const definition = await findDefinitionForInstance(em, instance);
|
|
15
|
+
const handler = readWorkflowErrorHandler(definition?.definition);
|
|
16
|
+
if (!handler || !("workflowId" in handler)) return false;
|
|
17
|
+
const failedStepId = failure.failedStepId || instance.currentStepId || null;
|
|
18
|
+
const depth = readErrorHandlerDepth(instance);
|
|
19
|
+
if (depth >= WORKFLOW_MAX_ERROR_HANDLER_DEPTH) {
|
|
20
|
+
await logWorkflowEvent(em, {
|
|
21
|
+
workflowInstanceId: instance.id,
|
|
22
|
+
eventType: "ERROR_HANDLER_SKIPPED",
|
|
23
|
+
eventData: {
|
|
24
|
+
reason: "MAX_DEPTH",
|
|
25
|
+
depth,
|
|
26
|
+
maxDepth: WORKFLOW_MAX_ERROR_HANDLER_DEPTH,
|
|
27
|
+
handlerWorkflowId: handler.workflowId,
|
|
28
|
+
failedStepId
|
|
29
|
+
},
|
|
30
|
+
tenantId: instance.tenantId,
|
|
31
|
+
organizationId: instance.organizationId
|
|
32
|
+
});
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const contextSnapshot = { ...instance.context || {} };
|
|
36
|
+
await logWorkflowEvent(em, {
|
|
37
|
+
workflowInstanceId: instance.id,
|
|
38
|
+
eventType: "ERROR_HANDLER_SCHEDULED",
|
|
39
|
+
eventData: {
|
|
40
|
+
handlerWorkflowId: handler.workflowId,
|
|
41
|
+
handlerVersion: handler.version,
|
|
42
|
+
failedStepId,
|
|
43
|
+
error: failure.error ?? null,
|
|
44
|
+
depth: depth + 1
|
|
45
|
+
},
|
|
46
|
+
tenantId: instance.tenantId,
|
|
47
|
+
organizationId: instance.organizationId
|
|
48
|
+
});
|
|
49
|
+
const job = {
|
|
50
|
+
kind: "workflow_error_handler",
|
|
51
|
+
workflowInstanceId: instance.id,
|
|
52
|
+
handlerWorkflowId: handler.workflowId,
|
|
53
|
+
handlerVersion: handler.version,
|
|
54
|
+
failedStepId,
|
|
55
|
+
error: failure.error ?? null,
|
|
56
|
+
contextSnapshot,
|
|
57
|
+
depth: depth + 1,
|
|
58
|
+
tenantId: instance.tenantId,
|
|
59
|
+
organizationId: instance.organizationId
|
|
60
|
+
};
|
|
61
|
+
try {
|
|
62
|
+
const { createModuleQueue } = await import("@open-mercato/queue");
|
|
63
|
+
const queue = createModuleQueue(WORKFLOW_ACTIVITIES_QUEUE_NAME, {
|
|
64
|
+
concurrency: parseInt(process.env.WORKFLOW_WORKER_CONCURRENCY || "5")
|
|
65
|
+
});
|
|
66
|
+
await queue.enqueue(job);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
logger.error("Failed to enqueue workflow error handler", {
|
|
69
|
+
instanceId: instance.id,
|
|
70
|
+
handlerWorkflowId: handler.workflowId,
|
|
71
|
+
err: error
|
|
72
|
+
});
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
async function runWorkflowErrorHandler(em, container, payload) {
|
|
78
|
+
const failedInstance = await em.findOne(WorkflowInstance, {
|
|
79
|
+
id: payload.workflowInstanceId,
|
|
80
|
+
tenantId: payload.tenantId,
|
|
81
|
+
organizationId: payload.organizationId
|
|
82
|
+
});
|
|
83
|
+
if (!failedInstance) {
|
|
84
|
+
logger.warn("Error handler job references an unknown instance", {
|
|
85
|
+
instanceId: payload.workflowInstanceId
|
|
86
|
+
});
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const { startWorkflow, executeWorkflow } = await import("./workflow-executor.js");
|
|
90
|
+
const handlerInstance = await startWorkflow(em, {
|
|
91
|
+
workflowId: payload.handlerWorkflowId,
|
|
92
|
+
version: payload.handlerVersion,
|
|
93
|
+
initialContext: {
|
|
94
|
+
failedStepId: payload.failedStepId,
|
|
95
|
+
error: payload.error,
|
|
96
|
+
contextSnapshot: payload.contextSnapshot
|
|
97
|
+
},
|
|
98
|
+
metadata: {
|
|
99
|
+
labels: {
|
|
100
|
+
errorHandlerForInstanceId: payload.workflowInstanceId
|
|
101
|
+
},
|
|
102
|
+
errorHandler: {
|
|
103
|
+
depth: payload.depth,
|
|
104
|
+
forInstanceId: payload.workflowInstanceId,
|
|
105
|
+
forStepId: payload.failedStepId ?? void 0
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
tenantId: payload.tenantId,
|
|
109
|
+
organizationId: payload.organizationId
|
|
110
|
+
});
|
|
111
|
+
await logWorkflowEvent(em, {
|
|
112
|
+
workflowInstanceId: payload.workflowInstanceId,
|
|
113
|
+
eventType: "ERROR_HANDLER_STARTED",
|
|
114
|
+
eventData: {
|
|
115
|
+
handlerInstanceId: handlerInstance.id,
|
|
116
|
+
handlerWorkflowId: payload.handlerWorkflowId,
|
|
117
|
+
failedStepId: payload.failedStepId,
|
|
118
|
+
depth: payload.depth
|
|
119
|
+
},
|
|
120
|
+
tenantId: payload.tenantId,
|
|
121
|
+
organizationId: payload.organizationId
|
|
122
|
+
});
|
|
123
|
+
await executeWorkflow(em, container, handlerInstance.id);
|
|
124
|
+
return handlerInstance.id;
|
|
125
|
+
}
|
|
126
|
+
export {
|
|
127
|
+
WORKFLOW_MAX_ERROR_HANDLER_DEPTH,
|
|
128
|
+
readErrorHandlerDepth,
|
|
129
|
+
runWorkflowErrorHandler,
|
|
130
|
+
scheduleWorkflowErrorHandler
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/error-handler.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflows Module - Workflow-level Error Handler\n *\n * The definition-level catch-all of spec 5.9, implemented as an ENGINE\n * CONSTRUCT: `completeWorkflow`'s FAILED branch schedules the designated handler\n * before compensation runs, and a queue worker starts it as a sub-workflow with\n * `{ failedStepId, error, contextSnapshot }` as its initial context. It is\n * deliberately NOT an event trigger \u2014 the trigger subscriber excludes\n * `workflows.*` events.\n *\n * Durability: `ERROR_HANDLER_SCHEDULED` is written inside the failing\n * transaction, so the intent survives even if the enqueue is lost; the queue\n * carries the execution. Running the handler out of band keeps a handler failure\n * from poisoning the transaction that is recording the original failure, and\n * releases the instance row lock first.\n *\n * Recursion guard: handler instances carry `metadata.errorHandler.depth`, which\n * is engine-owned (unlike context, which the context PATCH API exposes). A\n * handler that fails cannot schedule another handler.\n */\n\nimport type { EntityManager } from '@mikro-orm/core'\nimport type { AwilixContainer } from 'awilix'\nimport { WorkflowInstance } from '../data/entities'\nimport { logWorkflowEvent } from './event-logger'\nimport { readWorkflowErrorHandler } from './error-routing'\nimport { findDefinitionForInstance } from './find-definition'\nimport type { WorkflowActivityJob, WorkflowActivityJobErrorHandler } from './activity-queue-types'\nimport { WORKFLOW_ACTIVITIES_QUEUE_NAME } from './activity-queue-types'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows').child({ component: 'error-handler' })\n\n/** One level of handling: a handler that fails is never handled by a handler. */\nexport const WORKFLOW_MAX_ERROR_HANDLER_DEPTH = 1\n\nexport interface WorkflowErrorHandlerFailure {\n failedStepId?: string | null\n error?: string | null\n details?: unknown\n}\n\nexport function readErrorHandlerDepth(instance: WorkflowInstance): number {\n const depth = instance.metadata?.errorHandler?.depth\n return typeof depth === 'number' && Number.isFinite(depth) ? depth : 0\n}\n\n/**\n * Schedule the definition-level handler sub-workflow for a failing instance.\n * Best-effort like `enqueueSubWorkflowParentResume`: a queue hiccup must never\n * undo the failure that is being recorded. Called BEFORE compensation so the\n * snapshot describes the state that actually failed.\n */\nexport async function scheduleWorkflowErrorHandler(\n em: EntityManager,\n instance: WorkflowInstance,\n failure: WorkflowErrorHandlerFailure\n): Promise<boolean> {\n const definition = await findDefinitionForInstance(em, instance)\n const handler = readWorkflowErrorHandler(definition?.definition)\n if (!handler || !('workflowId' in handler)) return false\n\n const failedStepId = failure.failedStepId || instance.currentStepId || null\n const depth = readErrorHandlerDepth(instance)\n\n if (depth >= WORKFLOW_MAX_ERROR_HANDLER_DEPTH) {\n await logWorkflowEvent(em, {\n workflowInstanceId: instance.id,\n eventType: 'ERROR_HANDLER_SKIPPED',\n eventData: {\n reason: 'MAX_DEPTH',\n depth,\n maxDepth: WORKFLOW_MAX_ERROR_HANDLER_DEPTH,\n handlerWorkflowId: handler.workflowId,\n failedStepId,\n },\n tenantId: instance.tenantId,\n organizationId: instance.organizationId,\n })\n return false\n }\n\n const contextSnapshot = { ...(instance.context || {}) }\n\n await logWorkflowEvent(em, {\n workflowInstanceId: instance.id,\n eventType: 'ERROR_HANDLER_SCHEDULED',\n eventData: {\n handlerWorkflowId: handler.workflowId,\n handlerVersion: handler.version,\n failedStepId,\n error: failure.error ?? null,\n depth: depth + 1,\n },\n tenantId: instance.tenantId,\n organizationId: instance.organizationId,\n })\n\n const job: WorkflowActivityJobErrorHandler = {\n kind: 'workflow_error_handler',\n workflowInstanceId: instance.id,\n handlerWorkflowId: handler.workflowId,\n handlerVersion: handler.version,\n failedStepId,\n error: failure.error ?? null,\n contextSnapshot,\n depth: depth + 1,\n tenantId: instance.tenantId,\n organizationId: instance.organizationId,\n }\n\n try {\n const { createModuleQueue } = await import('@open-mercato/queue')\n const queue = createModuleQueue<WorkflowActivityJob>(WORKFLOW_ACTIVITIES_QUEUE_NAME, {\n concurrency: parseInt(process.env.WORKFLOW_WORKER_CONCURRENCY || '5'),\n })\n await queue.enqueue(job)\n } catch (error) {\n logger.error('Failed to enqueue workflow error handler', {\n instanceId: instance.id,\n handlerWorkflowId: handler.workflowId,\n err: error,\n })\n return false\n }\n\n return true\n}\n\n/**\n * Worker side: start the handler workflow with the failure triple as its input\n * context, on the worker's own EntityManager. The depth marker rides the child's\n * metadata so a failing handler cannot schedule another one.\n */\nexport async function runWorkflowErrorHandler(\n em: EntityManager,\n container: AwilixContainer,\n payload: WorkflowActivityJobErrorHandler\n): Promise<string | null> {\n const failedInstance = await em.findOne(WorkflowInstance, {\n id: payload.workflowInstanceId,\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n if (!failedInstance) {\n logger.warn('Error handler job references an unknown instance', {\n instanceId: payload.workflowInstanceId,\n })\n return null\n }\n\n const { startWorkflow, executeWorkflow } = await import('./workflow-executor')\n\n const handlerInstance = await startWorkflow(em, {\n workflowId: payload.handlerWorkflowId,\n version: payload.handlerVersion,\n initialContext: {\n failedStepId: payload.failedStepId,\n error: payload.error,\n contextSnapshot: payload.contextSnapshot,\n },\n metadata: {\n labels: {\n errorHandlerForInstanceId: payload.workflowInstanceId,\n },\n errorHandler: {\n depth: payload.depth,\n forInstanceId: payload.workflowInstanceId,\n forStepId: payload.failedStepId ?? undefined,\n },\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n await logWorkflowEvent(em, {\n workflowInstanceId: payload.workflowInstanceId,\n eventType: 'ERROR_HANDLER_STARTED',\n eventData: {\n handlerInstanceId: handlerInstance.id,\n handlerWorkflowId: payload.handlerWorkflowId,\n failedStepId: payload.failedStepId,\n depth: payload.depth,\n },\n tenantId: payload.tenantId,\n organizationId: payload.organizationId,\n })\n\n await executeWorkflow(em, container, handlerInstance.id)\n\n return handlerInstance.id\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const ERROR_TRANSITION_KIND = "error";
|
|
2
|
+
const ERROR_SOURCE_HANDLE_ID = "error";
|
|
3
|
+
const WORKFLOW_ERROR_CONTEXT_KEY = "__error";
|
|
4
|
+
function buildErrorContextEntry(stepId, message) {
|
|
5
|
+
return { stepId, message, occurredAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
6
|
+
}
|
|
7
|
+
function isErrorTransition(transition) {
|
|
8
|
+
return transition?.kind === ERROR_TRANSITION_KIND;
|
|
9
|
+
}
|
|
10
|
+
function excludeErrorTransitions(transitions) {
|
|
11
|
+
return transitions.filter((transition) => !isErrorTransition(transition));
|
|
12
|
+
}
|
|
13
|
+
function findErrorTransition(definition, stepId) {
|
|
14
|
+
const transitions = definition?.transitions ?? [];
|
|
15
|
+
const candidates = transitions.filter(
|
|
16
|
+
(transition) => transition.fromStepId === stepId && isErrorTransition(transition)
|
|
17
|
+
);
|
|
18
|
+
if (candidates.length === 0) return null;
|
|
19
|
+
const ordered = [...candidates].sort((a, b) => (b.priority || 0) - (a.priority || 0));
|
|
20
|
+
return ordered[0] ?? null;
|
|
21
|
+
}
|
|
22
|
+
function readStepErrorDirective(definition, stepId) {
|
|
23
|
+
const step = (definition?.steps ?? []).find((candidate) => candidate.stepId === stepId);
|
|
24
|
+
const directive = step?.errorDirective;
|
|
25
|
+
if (!directive) return null;
|
|
26
|
+
const mode = directive.mode;
|
|
27
|
+
if (mode !== "fail" && mode !== "continueWithFallback" && mode !== "failureQueue") return null;
|
|
28
|
+
return { mode, fallbackValue: directive.fallbackValue };
|
|
29
|
+
}
|
|
30
|
+
function readWorkflowErrorHandler(definition) {
|
|
31
|
+
const handler = definition?.errorHandler;
|
|
32
|
+
if (!handler) return null;
|
|
33
|
+
const hasWorkflow = typeof handler.workflowId === "string" && handler.workflowId.length > 0;
|
|
34
|
+
const hasStep = typeof handler.stepId === "string" && handler.stepId.length > 0;
|
|
35
|
+
if (hasWorkflow === hasStep) return null;
|
|
36
|
+
if (hasWorkflow) {
|
|
37
|
+
return { workflowId: handler.workflowId, version: handler.version };
|
|
38
|
+
}
|
|
39
|
+
return { stepId: handler.stepId };
|
|
40
|
+
}
|
|
41
|
+
function resolveStepFailureHandling(definition, stepId) {
|
|
42
|
+
const errorTransition = findErrorTransition(definition, stepId);
|
|
43
|
+
if (errorTransition) return { kind: "route", transition: errorTransition };
|
|
44
|
+
const directive = readStepErrorDirective(definition, stepId);
|
|
45
|
+
if (directive?.mode === "continueWithFallback") {
|
|
46
|
+
return { kind: "continue", fallbackValue: directive.fallbackValue };
|
|
47
|
+
}
|
|
48
|
+
if (directive?.mode === "failureQueue") return { kind: "park" };
|
|
49
|
+
const handler = readWorkflowErrorHandler(definition);
|
|
50
|
+
if (handler && "stepId" in handler && handler.stepId !== stepId) {
|
|
51
|
+
return { kind: "handlerStep", stepId: handler.stepId };
|
|
52
|
+
}
|
|
53
|
+
return { kind: "fail" };
|
|
54
|
+
}
|
|
55
|
+
function validateErrorRoutes(definition) {
|
|
56
|
+
const issues = [];
|
|
57
|
+
const transitions = definition?.transitions ?? [];
|
|
58
|
+
const stepIds = new Set((definition?.steps ?? []).map((step) => step.stepId).filter(Boolean));
|
|
59
|
+
for (const transition of transitions) {
|
|
60
|
+
if (!isErrorTransition(transition)) continue;
|
|
61
|
+
if (transition.fromStepId && stepIds.size > 0 && !stepIds.has(transition.fromStepId)) {
|
|
62
|
+
issues.push({
|
|
63
|
+
code: "ERROR_ROUTE_UNKNOWN_SOURCE",
|
|
64
|
+
message: `Error route ${transition.transitionId ?? ""} starts at unknown step ${transition.fromStepId}`,
|
|
65
|
+
transitionId: transition.transitionId,
|
|
66
|
+
stepId: transition.fromStepId
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (transition.toStepId && stepIds.size > 0 && !stepIds.has(transition.toStepId)) {
|
|
70
|
+
issues.push({
|
|
71
|
+
code: "ERROR_ROUTE_UNKNOWN_TARGET",
|
|
72
|
+
message: `Error route ${transition.transitionId ?? ""} targets unknown step ${transition.toStepId}`,
|
|
73
|
+
transitionId: transition.transitionId,
|
|
74
|
+
stepId: transition.toStepId
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const collides = transitions.some(
|
|
78
|
+
(other) => !isErrorTransition(other) && other.fromStepId === transition.fromStepId && other.toStepId === transition.toStepId
|
|
79
|
+
);
|
|
80
|
+
if (collides) {
|
|
81
|
+
issues.push({
|
|
82
|
+
code: "ERROR_ROUTE_DUPLICATE_TARGET",
|
|
83
|
+
message: `Error route ${transition.transitionId ?? ""} shares its source and target with a normal route`,
|
|
84
|
+
transitionId: transition.transitionId,
|
|
85
|
+
stepId: transition.fromStepId
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return issues;
|
|
90
|
+
}
|
|
91
|
+
export {
|
|
92
|
+
ERROR_SOURCE_HANDLE_ID,
|
|
93
|
+
ERROR_TRANSITION_KIND,
|
|
94
|
+
WORKFLOW_ERROR_CONTEXT_KEY,
|
|
95
|
+
buildErrorContextEntry,
|
|
96
|
+
excludeErrorTransitions,
|
|
97
|
+
findErrorTransition,
|
|
98
|
+
isErrorTransition,
|
|
99
|
+
readStepErrorDirective,
|
|
100
|
+
readWorkflowErrorHandler,
|
|
101
|
+
resolveStepFailureHandling,
|
|
102
|
+
validateErrorRoutes
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=error-routing.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/error-routing.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflows Module - Error Routing (pure)\n *\n * Resolves what happens when a step fails, from the definition alone:\n *\n * 1. an outgoing transition marked `kind: 'error'` wins \u2014 the engine follows it\n * instead of failing the instance (spec 5.9 \"error output handle\");\n * 2. otherwise the failed step's `errorDirective` applies\n * (`fail` | `continueWithFallback` | `failureQueue`);\n * 3. otherwise the instance fails exactly as it does today.\n *\n * Definitions carrying neither an error transition nor a directive resolve to\n * `fail`, which is the untouched legacy path \u2014 this module is the single place\n * that decides, so the \"no error config \u21D2 identical trace\" guarantee is testable.\n *\n * PURE: no ORM, DI, React or registry imports. Engine call sites pass the plain\n * definition JSON.\n */\n\nexport const ERROR_TRANSITION_KIND = 'error'\n\n/**\n * Canvas handle id every activity-bearing node exposes for its error output. A\n * connection drawn from it compiles to a transition with `kind: 'error'`. Lives\n * in this pure module so `graph-utils` can read it without pulling the React\n * component chain (enforced by the xyflow import-boundary test).\n */\nexport const ERROR_SOURCE_HANDLE_ID = 'error'\n\n/**\n * Run-context key carrying the failure that caused an error route to be taken,\n * so the handling branch can render/forward it. Engine-owned and reserved\n * against user context writes.\n */\nexport const WORKFLOW_ERROR_CONTEXT_KEY = '__error'\n\nexport interface WorkflowErrorContextEntry {\n stepId: string\n message: string\n occurredAt: string\n}\n\nexport function buildErrorContextEntry(stepId: string, message: string): WorkflowErrorContextEntry {\n return { stepId, message, occurredAt: new Date().toISOString() }\n}\n\nexport type WorkflowErrorDirectiveMode = 'fail' | 'continueWithFallback' | 'failureQueue'\n\nexport interface ErrorRoutingTransitionLike {\n transitionId?: string\n fromStepId?: string\n toStepId?: string\n kind?: string\n priority?: number\n}\n\nexport interface ErrorRoutingStepLike {\n stepId?: string\n errorDirective?: {\n mode?: string\n fallbackValue?: unknown\n } | null\n}\n\nexport interface ErrorRoutingErrorHandlerLike {\n workflowId?: string\n version?: number\n stepId?: string\n}\n\nexport interface ErrorRoutingDefinitionLike {\n steps?: ErrorRoutingStepLike[]\n transitions?: ErrorRoutingTransitionLike[]\n errorHandler?: ErrorRoutingErrorHandlerLike | null\n}\n\nexport type StepFailureHandling =\n | { kind: 'route'; transition: ErrorRoutingTransitionLike }\n | { kind: 'continue'; fallbackValue?: unknown }\n | { kind: 'park' }\n | { kind: 'handlerStep'; stepId: string }\n | { kind: 'fail' }\n\nexport interface ErrorRouteIssue {\n code: 'ERROR_ROUTE_DUPLICATE_TARGET' | 'ERROR_ROUTE_UNKNOWN_TARGET' | 'ERROR_ROUTE_UNKNOWN_SOURCE'\n message: string\n transitionId?: string\n stepId?: string\n}\n\n/**\n * A transition authored as an error route. The discriminator is the additive\n * optional `kind` field: absent (or any other value) means a normal route, so\n * every stored definition keeps its current meaning.\n */\nexport function isErrorTransition(transition: ErrorRoutingTransitionLike | null | undefined): boolean {\n return transition?.kind === ERROR_TRANSITION_KIND\n}\n\n/**\n * Error routes must never be taken by normal routing \u2014 they are only reachable\n * from a failure. Every routing lookup filters through this helper.\n */\nexport function excludeErrorTransitions<T extends ErrorRoutingTransitionLike>(transitions: T[]): T[] {\n return transitions.filter((transition) => !isErrorTransition(transition))\n}\n\n/**\n * Highest-priority outgoing error route of a step. Ties keep definition order,\n * mirroring how `findValidTransitions` orders normal routes.\n */\nexport function findErrorTransition(\n definition: ErrorRoutingDefinitionLike | null | undefined,\n stepId: string\n): ErrorRoutingTransitionLike | null {\n const transitions = definition?.transitions ?? []\n const candidates = transitions.filter(\n (transition) => transition.fromStepId === stepId && isErrorTransition(transition)\n )\n if (candidates.length === 0) return null\n const ordered = [...candidates].sort((a, b) => (b.priority || 0) - (a.priority || 0))\n return ordered[0] ?? null\n}\n\nexport function readStepErrorDirective(\n definition: ErrorRoutingDefinitionLike | null | undefined,\n stepId: string\n): { mode: WorkflowErrorDirectiveMode; fallbackValue?: unknown } | null {\n const step = (definition?.steps ?? []).find((candidate) => candidate.stepId === stepId)\n const directive = step?.errorDirective\n if (!directive) return null\n const mode = directive.mode\n if (mode !== 'fail' && mode !== 'continueWithFallback' && mode !== 'failureQueue') return null\n return { mode, fallbackValue: directive.fallbackValue }\n}\n\n/**\n * Definition-level catch-all handler (spec 5.9). Returns null unless exactly one\n * form is declared, so a malformed handler degrades to today's behavior instead\n * of guessing.\n */\nexport function readWorkflowErrorHandler(\n definition: ErrorRoutingDefinitionLike | null | undefined\n): { workflowId: string; version?: number } | { stepId: string } | null {\n const handler = definition?.errorHandler\n if (!handler) return null\n const hasWorkflow = typeof handler.workflowId === 'string' && handler.workflowId.length > 0\n const hasStep = typeof handler.stepId === 'string' && handler.stepId.length > 0\n if (hasWorkflow === hasStep) return null\n if (hasWorkflow) {\n return { workflowId: handler.workflowId as string, version: handler.version }\n }\n return { stepId: handler.stepId as string }\n}\n\n/**\n * The single decision point for a failed step, in precedence order:\n * wired error route \u2192 step directive \u2192 definition-level handler step \u2192 fail.\n * The handler step comes last because it is a catch-all, and a step never jumps\n * to itself, which is the recursion guard for the in-instance handler form.\n * `fail` is both the explicit directive and the absent-config default, so legacy\n * definitions never diverge.\n */\nexport function resolveStepFailureHandling(\n definition: ErrorRoutingDefinitionLike | null | undefined,\n stepId: string\n): StepFailureHandling {\n const errorTransition = findErrorTransition(definition, stepId)\n if (errorTransition) return { kind: 'route', transition: errorTransition }\n\n const directive = readStepErrorDirective(definition, stepId)\n if (directive?.mode === 'continueWithFallback') {\n return { kind: 'continue', fallbackValue: directive.fallbackValue }\n }\n if (directive?.mode === 'failureQueue') return { kind: 'park' }\n\n const handler = readWorkflowErrorHandler(definition)\n if (handler && 'stepId' in handler && handler.stepId !== stepId) {\n return { kind: 'handlerStep', stepId: handler.stepId }\n }\n\n return { kind: 'fail' }\n}\n\n/**\n * Author-time checks surfaced by the Problems panel. An error route sharing its\n * source AND target with a normal route is rejected because the engine resolves\n * a followed route by its `(fromStepId, toStepId)` pair \u2014 the pair would be\n * ambiguous and the wrong activities could run.\n */\nexport function validateErrorRoutes(\n definition: ErrorRoutingDefinitionLike | null | undefined\n): ErrorRouteIssue[] {\n const issues: ErrorRouteIssue[] = []\n const transitions = definition?.transitions ?? []\n const stepIds = new Set((definition?.steps ?? []).map((step) => step.stepId).filter(Boolean))\n\n for (const transition of transitions) {\n if (!isErrorTransition(transition)) continue\n\n if (transition.fromStepId && stepIds.size > 0 && !stepIds.has(transition.fromStepId)) {\n issues.push({\n code: 'ERROR_ROUTE_UNKNOWN_SOURCE',\n message: `Error route ${transition.transitionId ?? ''} starts at unknown step ${transition.fromStepId}`,\n transitionId: transition.transitionId,\n stepId: transition.fromStepId,\n })\n }\n\n if (transition.toStepId && stepIds.size > 0 && !stepIds.has(transition.toStepId)) {\n issues.push({\n code: 'ERROR_ROUTE_UNKNOWN_TARGET',\n message: `Error route ${transition.transitionId ?? ''} targets unknown step ${transition.toStepId}`,\n transitionId: transition.transitionId,\n stepId: transition.toStepId,\n })\n }\n\n const collides = transitions.some(\n (other) =>\n !isErrorTransition(other) &&\n other.fromStepId === transition.fromStepId &&\n other.toStepId === transition.toStepId\n )\n if (collides) {\n issues.push({\n code: 'ERROR_ROUTE_DUPLICATE_TARGET',\n message: `Error route ${transition.transitionId ?? ''} shares its source and target with a normal route`,\n transitionId: transition.transitionId,\n stepId: transition.fromStepId,\n })\n }\n }\n\n return issues\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -46,6 +46,29 @@ const WorkflowEventTypes = {
|
|
|
46
46
|
SIGNAL_AWAITING: "SIGNAL_AWAITING",
|
|
47
47
|
SIGNAL_RECEIVED: "SIGNAL_RECEIVED",
|
|
48
48
|
SIGNAL_TIMEOUT: "SIGNAL_TIMEOUT",
|
|
49
|
+
// Error routing (spec 5.9)
|
|
50
|
+
ERROR_ROUTED: "ERROR_ROUTED",
|
|
51
|
+
ERROR_DIRECTIVE_APPLIED: "ERROR_DIRECTIVE_APPLIED",
|
|
52
|
+
ERROR_PARKED: "ERROR_PARKED",
|
|
53
|
+
ERROR_HANDLER_SCHEDULED: "ERROR_HANDLER_SCHEDULED",
|
|
54
|
+
ERROR_HANDLER_STARTED: "ERROR_HANDLER_STARTED",
|
|
55
|
+
ERROR_HANDLER_SKIPPED: "ERROR_HANDLER_SKIPPED",
|
|
56
|
+
// Recovery (spec 8.4). `STEP_RERUN` carries `{ stepId, editedContextDiff, by }`
|
|
57
|
+
// and is the audit record of a rerun — the terminal StepInstance of the
|
|
58
|
+
// previous attempt is never touched, so the event log is where the two
|
|
59
|
+
// attempts are linked.
|
|
60
|
+
STEP_RERUN: "STEP_RERUN",
|
|
61
|
+
// Agent outcome routing (spec 7.2)
|
|
62
|
+
OUTCOME_ROUTED: "OUTCOME_ROUTED",
|
|
63
|
+
OUTCOME_UNHANDLED: "OUTCOME_UNHANDLED",
|
|
64
|
+
// Dry run (spec 8.2). Written only by an `isDryRun` instance; the pure
|
|
65
|
+
// `lib/dry-run.ts` owns the same literals as `DRY_RUN_EVENT_TYPES` and builds
|
|
66
|
+
// the "Would do" report from them. A test pins the two lists together.
|
|
67
|
+
DRY_RUN_STARTED: "DRY_RUN_STARTED",
|
|
68
|
+
ACTIVITY_SIMULATED: "ACTIVITY_SIMULATED",
|
|
69
|
+
ACTIVITY_SIMULATION_REFUSED: "ACTIVITY_SIMULATION_REFUSED",
|
|
70
|
+
USER_TASK_SIMULATED: "USER_TASK_SIMULATED",
|
|
71
|
+
BUSINESS_RULE_ACTIONS_SUPPRESSED: "BUSINESS_RULE_ACTIONS_SUPPRESSED",
|
|
49
72
|
// Timer events (Phase 9)
|
|
50
73
|
TIMER_AWAITING: "TIMER_AWAITING",
|
|
51
74
|
TIMER_FIRED: "TIMER_FIRED",
|