@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,56 @@
|
|
|
1
|
+
import { getDeclaredEvents } from "@open-mercato/shared/modules/events";
|
|
2
|
+
import { WorkflowDefinition } from "../data/entities.js";
|
|
3
|
+
import {
|
|
4
|
+
buildTriggerPayloadContracts,
|
|
5
|
+
computeContextLedger
|
|
6
|
+
} from "./context-ledger.js";
|
|
7
|
+
import { ensureWorkflowEndpointCatalog } from "./endpoint-catalog.js";
|
|
8
|
+
import {
|
|
9
|
+
ensureWorkflowAgentOutcomeContracts,
|
|
10
|
+
resolveServerOutputContract
|
|
11
|
+
} from "./server-output-contract.js";
|
|
12
|
+
import { getCodeWorkflow, getAllCodeWorkflows } from "./code-registry.js";
|
|
13
|
+
import { codeWorkflowUuid } from "./find-definition.js";
|
|
14
|
+
async function warmContextLedgerResolvers(container) {
|
|
15
|
+
await ensureWorkflowEndpointCatalog();
|
|
16
|
+
await ensureWorkflowAgentOutcomeContracts(container);
|
|
17
|
+
}
|
|
18
|
+
function computeDefinitionContextLedger(definition) {
|
|
19
|
+
const ledgerDefinition = definition;
|
|
20
|
+
return computeContextLedger(ledgerDefinition, {
|
|
21
|
+
resolveOutputContract: resolveServerOutputContract,
|
|
22
|
+
triggerPayloadContracts: buildTriggerPayloadContracts(
|
|
23
|
+
ledgerDefinition.triggers ?? [],
|
|
24
|
+
getDeclaredEvents()
|
|
25
|
+
)
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function narrowLedgerToStep(ledger, stepId) {
|
|
29
|
+
return ledger.steps[stepId] ?? null;
|
|
30
|
+
}
|
|
31
|
+
async function resolveDefinitionDataForLedger(em, id, scope) {
|
|
32
|
+
if (id.startsWith("code:")) {
|
|
33
|
+
const codeDef2 = getCodeWorkflow(id.slice(5));
|
|
34
|
+
if (!codeDef2) return null;
|
|
35
|
+
return codeDef2.definition;
|
|
36
|
+
}
|
|
37
|
+
const definition = await em.findOne(WorkflowDefinition, {
|
|
38
|
+
id,
|
|
39
|
+
tenantId: scope.tenantId,
|
|
40
|
+
...scope.organizationWhere,
|
|
41
|
+
deletedAt: null
|
|
42
|
+
});
|
|
43
|
+
if (definition) return definition.definition;
|
|
44
|
+
const codeDef = getAllCodeWorkflows().find(
|
|
45
|
+
(workflow) => codeWorkflowUuid(workflow.workflowId) === id
|
|
46
|
+
);
|
|
47
|
+
if (codeDef) return codeDef.definition;
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
computeDefinitionContextLedger,
|
|
52
|
+
narrowLedgerToStep,
|
|
53
|
+
resolveDefinitionDataForLedger,
|
|
54
|
+
warmContextLedgerResolvers
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=definition-context-schema.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/definition-context-schema.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared context-ledger resolution for a workflow definition.\n *\n * Extracted verbatim from `api/definitions/[id]/context-schema/route.ts` so the\n * REST route and the `workflows.get_context_schema` AI tool serve the SAME\n * ledger from the SAME id forms. The output-contract seam stays single-sourced:\n * both callers reach `resolveServerOutputContract` through\n * {@link computeDefinitionContextLedger} and never resolve contracts a second\n * way (the browser editor deliberately pins the seam to `'unknown'` and\n * consumes this response instead).\n */\n\nimport type { EntityManager } from '@mikro-orm/core'\nimport { getDeclaredEvents } from '@open-mercato/shared/modules/events'\nimport { WorkflowDefinition, type WorkflowDefinitionData } from '../data/entities'\nimport {\n buildTriggerPayloadContracts,\n computeContextLedger,\n type ContextLedger,\n type LedgerStepView,\n type LedgerWorkflowDefinition,\n} from './context-ledger'\nimport { ensureWorkflowEndpointCatalog } from './endpoint-catalog'\nimport {\n ensureWorkflowAgentOutcomeContracts,\n resolveServerOutputContract,\n} from './server-output-contract'\nimport { getCodeWorkflow, getAllCodeWorkflows } from './code-registry'\nimport { codeWorkflowUuid } from './find-definition'\n\nexport type DefinitionLookupScope = {\n tenantId: string\n /**\n * Organization where-clause fragment. The route passes\n * `resolveOrganizationScopeFilter(...).where`; other callers pass\n * `{ organizationId }` (or `{}` when the caller is tenant-wide).\n */\n organizationWhere: Record<string, unknown>\n}\n\n/**\n * Warm the two sync-lookup caches the server output-contract seam reads.\n * MUST run before {@link computeDefinitionContextLedger} or CALL_API and\n * INVOKE_AGENT contracts silently degrade to `'unknown'`.\n */\nexport async function warmContextLedgerResolvers(container: {\n resolve: <T>(name: string) => T\n}): Promise<void> {\n await ensureWorkflowEndpointCatalog()\n await ensureWorkflowAgentOutcomeContracts(container)\n}\n\nexport function computeDefinitionContextLedger(definition: WorkflowDefinitionData): ContextLedger {\n const ledgerDefinition = definition as unknown as LedgerWorkflowDefinition\n return computeContextLedger(ledgerDefinition, {\n resolveOutputContract: resolveServerOutputContract,\n triggerPayloadContracts: buildTriggerPayloadContracts(\n ledgerDefinition.triggers ?? [],\n getDeclaredEvents(),\n ),\n })\n}\n\nexport function narrowLedgerToStep(ledger: ContextLedger, stepId: string): LedgerStepView | null {\n return ledger.steps[stepId] ?? null\n}\n\n/**\n * Resolve a definition's `definition` JSON from any of the three id forms the\n * context-schema route accepts: `code:<workflowId>`, a tenant/org-scoped DB\n * UUID, and the synthetic `codeWorkflowUuid(workflowId)` fallback.\n *\n * Tenant scoping is not optional \u2014 a definition outside `scope.tenantId` is\n * INVISIBLE (returns `null`, indistinguishable from \"does not exist\"), never\n * merely unauthorized.\n */\nexport async function resolveDefinitionDataForLedger(\n em: EntityManager,\n id: string,\n scope: DefinitionLookupScope,\n): Promise<WorkflowDefinitionData | null> {\n if (id.startsWith('code:')) {\n const codeDef = getCodeWorkflow(id.slice(5))\n if (!codeDef) return null\n return codeDef.definition as unknown as WorkflowDefinitionData\n }\n\n const definition = (await em.findOne(WorkflowDefinition, {\n id,\n tenantId: scope.tenantId,\n ...scope.organizationWhere,\n deletedAt: null,\n })) as WorkflowDefinition | null\n\n if (definition) return definition.definition\n\n const codeDef = getAllCodeWorkflows().find(\n (workflow) => codeWorkflowUuid(workflow.workflowId) === id,\n )\n if (codeDef) return codeDef.definition as unknown as WorkflowDefinitionData\n\n return null\n}\n"],
|
|
5
|
+
"mappings": "AAaA,SAAS,yBAAyB;AAClC,SAAS,0BAAuD;AAChE;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AACP,SAAS,qCAAqC;AAC9C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,2BAA2B;AACrD,SAAS,wBAAwB;AAiBjC,eAAsB,2BAA2B,WAE/B;AAChB,QAAM,8BAA8B;AACpC,QAAM,oCAAoC,SAAS;AACrD;AAEO,SAAS,+BAA+B,YAAmD;AAChG,QAAM,mBAAmB;AACzB,SAAO,qBAAqB,kBAAkB;AAAA,IAC5C,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,MACvB,iBAAiB,YAAY,CAAC;AAAA,MAC9B,kBAAkB;AAAA,IACpB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,mBAAmB,QAAuB,QAAuC;AAC/F,SAAO,OAAO,MAAM,MAAM,KAAK;AACjC;AAWA,eAAsB,+BACpB,IACA,IACA,OACwC;AACxC,MAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,UAAMA,WAAU,gBAAgB,GAAG,MAAM,CAAC,CAAC;AAC3C,QAAI,CAACA,SAAS,QAAO;AACrB,WAAOA,SAAQ;AAAA,EACjB;AAEA,QAAM,aAAc,MAAM,GAAG,QAAQ,oBAAoB;AAAA,IACvD;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,GAAG,MAAM;AAAA,IACT,WAAW;AAAA,EACb,CAAC;AAED,MAAI,WAAY,QAAO,WAAW;AAElC,QAAM,UAAU,oBAAoB,EAAE;AAAA,IACpC,CAAC,aAAa,iBAAiB,SAAS,UAAU,MAAM;AAAA,EAC1D;AACA,MAAI,QAAS,QAAO,QAAQ;AAE5B,SAAO;AACT;",
|
|
6
|
+
"names": ["codeDef"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const ACTIVE_WORKFLOW_INSTANCE_STATUSES = [
|
|
2
|
+
"RUNNING",
|
|
3
|
+
"PAUSED",
|
|
4
|
+
"WAITING_FOR_ACTIVITIES",
|
|
5
|
+
"FORKED",
|
|
6
|
+
"COMPENSATING"
|
|
7
|
+
];
|
|
8
|
+
const STRUCTURAL_EDIT_CONFLICT_CODE = "WORKFLOW_STRUCTURAL_EDIT_REQUIRES_NEW_VERSION";
|
|
9
|
+
function asRecord(value) {
|
|
10
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
11
|
+
}
|
|
12
|
+
function asArray(value) {
|
|
13
|
+
return Array.isArray(value) ? value : [];
|
|
14
|
+
}
|
|
15
|
+
function readString(source, key) {
|
|
16
|
+
const value = source[key];
|
|
17
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
18
|
+
}
|
|
19
|
+
function stepSignatures(definition) {
|
|
20
|
+
const signatures = /* @__PURE__ */ new Map();
|
|
21
|
+
const document = asRecord(definition);
|
|
22
|
+
if (!document) return signatures;
|
|
23
|
+
for (const entry of asArray(document.steps)) {
|
|
24
|
+
const step = asRecord(entry);
|
|
25
|
+
if (!step) continue;
|
|
26
|
+
const stepId = readString(step, "stepId");
|
|
27
|
+
if (!stepId) continue;
|
|
28
|
+
const config = asRecord(step.config);
|
|
29
|
+
signatures.set(stepId, {
|
|
30
|
+
stepType: readString(step, "stepType") ?? "",
|
|
31
|
+
joinStepId: config ? readString(config, "joinStepId") : null,
|
|
32
|
+
forkStepId: config ? readString(config, "forkStepId") : null
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return signatures;
|
|
36
|
+
}
|
|
37
|
+
function transitionSignatures(definition) {
|
|
38
|
+
const signatures = /* @__PURE__ */ new Map();
|
|
39
|
+
const document = asRecord(definition);
|
|
40
|
+
if (!document) return signatures;
|
|
41
|
+
for (const entry of asArray(document.transitions)) {
|
|
42
|
+
const transition = asRecord(entry);
|
|
43
|
+
if (!transition) continue;
|
|
44
|
+
const transitionId = readString(transition, "transitionId");
|
|
45
|
+
if (!transitionId) continue;
|
|
46
|
+
signatures.set(transitionId, {
|
|
47
|
+
fromStepId: readString(transition, "fromStepId") ?? "",
|
|
48
|
+
toStepId: readString(transition, "toStepId") ?? "",
|
|
49
|
+
kind: readString(transition, "kind") ?? "normal"
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return signatures;
|
|
53
|
+
}
|
|
54
|
+
function diffDefinitionStructure(previous, next) {
|
|
55
|
+
const changes = [];
|
|
56
|
+
const previousSteps = stepSignatures(previous);
|
|
57
|
+
const nextSteps = stepSignatures(next);
|
|
58
|
+
for (const [stepId, signature] of nextSteps) {
|
|
59
|
+
const before = previousSteps.get(stepId);
|
|
60
|
+
if (!before) {
|
|
61
|
+
changes.push({ kind: "stepAdded", id: stepId });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (before.stepType !== signature.stepType) {
|
|
65
|
+
changes.push({ kind: "stepTypeChanged", id: stepId });
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (before.joinStepId !== signature.joinStepId || before.forkStepId !== signature.forkStepId) {
|
|
69
|
+
changes.push({ kind: "stepWiringChanged", id: stepId });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const stepId of previousSteps.keys()) {
|
|
73
|
+
if (!nextSteps.has(stepId)) changes.push({ kind: "stepRemoved", id: stepId });
|
|
74
|
+
}
|
|
75
|
+
const previousTransitions = transitionSignatures(previous);
|
|
76
|
+
const nextTransitions = transitionSignatures(next);
|
|
77
|
+
for (const [transitionId, signature] of nextTransitions) {
|
|
78
|
+
const before = previousTransitions.get(transitionId);
|
|
79
|
+
if (!before) {
|
|
80
|
+
changes.push({ kind: "transitionAdded", id: transitionId });
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (before.fromStepId !== signature.fromStepId || before.toStepId !== signature.toStepId) {
|
|
84
|
+
changes.push({ kind: "transitionRetargeted", id: transitionId });
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (before.kind !== signature.kind) {
|
|
88
|
+
changes.push({ kind: "transitionKindChanged", id: transitionId });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (const transitionId of previousTransitions.keys()) {
|
|
92
|
+
if (!nextTransitions.has(transitionId)) {
|
|
93
|
+
changes.push({ kind: "transitionRemoved", id: transitionId });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return changes;
|
|
97
|
+
}
|
|
98
|
+
function isStructuralDefinitionChange(previous, next) {
|
|
99
|
+
return diffDefinitionStructure(previous, next).length > 0;
|
|
100
|
+
}
|
|
101
|
+
function buildStructuralEditConflictBody(params) {
|
|
102
|
+
return {
|
|
103
|
+
error: "Structural changes require a new version while instances are still running",
|
|
104
|
+
code: STRUCTURAL_EDIT_CONFLICT_CODE,
|
|
105
|
+
definitionId: params.definitionId,
|
|
106
|
+
activeInstanceCount: params.activeInstanceCount,
|
|
107
|
+
activeStatuses: ACTIVE_WORKFLOW_INSTANCE_STATUSES,
|
|
108
|
+
changes: params.changes,
|
|
109
|
+
remedy: {
|
|
110
|
+
action: "createVersion",
|
|
111
|
+
method: "POST",
|
|
112
|
+
endpoint: `/api/workflows/definitions/${params.definitionId}/publish`
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export {
|
|
117
|
+
ACTIVE_WORKFLOW_INSTANCE_STATUSES,
|
|
118
|
+
STRUCTURAL_EDIT_CONFLICT_CODE,
|
|
119
|
+
buildStructuralEditConflictBody,
|
|
120
|
+
diffDefinitionStructure,
|
|
121
|
+
isStructuralDefinitionChange
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=definition-edit-safety.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/definition-edit-safety.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflows Module \u2014 Edit-safety rule for definitions with active instances (pure)\n *\n * Spec \u00A74.1: \"structural edits to a definition with active instances require a\n * new version (running instances keep executing their pinned definition\n * snapshot)\u2026 Re-pointing an edge under a running instance must be impossible,\n * not merely discouraged.\"\n *\n * A `WorkflowInstance` pins `definitionId` \u2014 a specific `(workflowId, version,\n * tenantId)` row \u2014 and the engine re-reads that row on every advance, so a PUT\n * that rewrites the row's `definition` JSONB changes what a running instance\n * executes mid-flight. This module answers the one question the definition PUT\n * needs before it writes: does the incoming definition change the topology the\n * engine navigates?\n *\n * Topology means the parts a mid-flight instance resolves against: which steps\n * exist and what type they are, how forks and joins pair up, and which routes\n * exist with which endpoints. Labels, descriptions, editor positions, activity\n * config, conditions, priorities, triggers and metadata are deliberately NOT\n * structural \u2014 authors must never be blocked from cosmetic or config edits.\n *\n * PURE: no ORM, no DI, no React. The caller supplies both definition documents.\n */\n\nimport type { WorkflowInstanceStatus } from '../data/entities'\n\n/**\n * Instance statuses that still execute (or still resolve) their pinned\n * definition row. `COMPENSATING` is included: the saga walks the definition's\n * activities in reverse, so a topology rewrite corrupts it exactly like a\n * running instance. Terminal statuses (`COMPLETED`, `FAILED`, `CANCELLED`,\n * `COMPENSATED`) never read the definition again and never block an edit.\n */\nexport const ACTIVE_WORKFLOW_INSTANCE_STATUSES: readonly WorkflowInstanceStatus[] = [\n 'RUNNING',\n 'PAUSED',\n 'WAITING_FOR_ACTIVITIES',\n 'FORKED',\n 'COMPENSATING',\n]\n\n/** Machine-readable marker on the 409 body so clients can offer \"Create version\". */\nexport const STRUCTURAL_EDIT_CONFLICT_CODE = 'WORKFLOW_STRUCTURAL_EDIT_REQUIRES_NEW_VERSION'\n\nexport type StructuralChangeKind =\n | 'stepAdded'\n | 'stepRemoved'\n | 'stepTypeChanged'\n | 'stepWiringChanged'\n | 'transitionAdded'\n | 'transitionRemoved'\n | 'transitionRetargeted'\n | 'transitionKindChanged'\n\nexport interface StructuralChange {\n kind: StructuralChangeKind\n /** `stepId` for step changes, `transitionId` for route changes. */\n id: string\n}\n\nexport interface StructuralEditConflictBody {\n error: string\n code: typeof STRUCTURAL_EDIT_CONFLICT_CODE\n definitionId: string\n activeInstanceCount: number\n activeStatuses: readonly WorkflowInstanceStatus[]\n changes: StructuralChange[]\n remedy: {\n action: 'createVersion'\n method: 'POST'\n endpoint: string\n }\n}\n\ninterface StepSignature {\n stepType: string\n joinStepId: string | null\n forkStepId: string | null\n}\n\ninterface TransitionSignature {\n fromStepId: string\n toStepId: string\n kind: string\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : []\n}\n\nfunction readString(source: Record<string, unknown>, key: string): string | null {\n const value = source[key]\n return typeof value === 'string' && value.length > 0 ? value : null\n}\n\nfunction stepSignatures(definition: unknown): Map<string, StepSignature> {\n const signatures = new Map<string, StepSignature>()\n const document = asRecord(definition)\n if (!document) return signatures\n\n for (const entry of asArray(document.steps)) {\n const step = asRecord(entry)\n if (!step) continue\n const stepId = readString(step, 'stepId')\n if (!stepId) continue\n const config = asRecord(step.config)\n signatures.set(stepId, {\n stepType: readString(step, 'stepType') ?? '',\n joinStepId: config ? readString(config, 'joinStepId') : null,\n forkStepId: config ? readString(config, 'forkStepId') : null,\n })\n }\n\n return signatures\n}\n\nfunction transitionSignatures(definition: unknown): Map<string, TransitionSignature> {\n const signatures = new Map<string, TransitionSignature>()\n const document = asRecord(definition)\n if (!document) return signatures\n\n for (const entry of asArray(document.transitions)) {\n const transition = asRecord(entry)\n if (!transition) continue\n const transitionId = readString(transition, 'transitionId')\n if (!transitionId) continue\n signatures.set(transitionId, {\n fromStepId: readString(transition, 'fromStepId') ?? '',\n toStepId: readString(transition, 'toStepId') ?? '',\n kind: readString(transition, 'kind') ?? 'normal',\n })\n }\n\n return signatures\n}\n\n/**\n * Diff the execution topology of two definition documents.\n *\n * Order is deterministic without sorting: step changes in `next` order, then\n * removals in `previous` order, then the same for transitions.\n */\nexport function diffDefinitionStructure(previous: unknown, next: unknown): StructuralChange[] {\n const changes: StructuralChange[] = []\n\n const previousSteps = stepSignatures(previous)\n const nextSteps = stepSignatures(next)\n\n for (const [stepId, signature] of nextSteps) {\n const before = previousSteps.get(stepId)\n if (!before) {\n changes.push({ kind: 'stepAdded', id: stepId })\n continue\n }\n if (before.stepType !== signature.stepType) {\n changes.push({ kind: 'stepTypeChanged', id: stepId })\n continue\n }\n if (before.joinStepId !== signature.joinStepId || before.forkStepId !== signature.forkStepId) {\n changes.push({ kind: 'stepWiringChanged', id: stepId })\n }\n }\n\n for (const stepId of previousSteps.keys()) {\n if (!nextSteps.has(stepId)) changes.push({ kind: 'stepRemoved', id: stepId })\n }\n\n const previousTransitions = transitionSignatures(previous)\n const nextTransitions = transitionSignatures(next)\n\n for (const [transitionId, signature] of nextTransitions) {\n const before = previousTransitions.get(transitionId)\n if (!before) {\n changes.push({ kind: 'transitionAdded', id: transitionId })\n continue\n }\n if (before.fromStepId !== signature.fromStepId || before.toStepId !== signature.toStepId) {\n changes.push({ kind: 'transitionRetargeted', id: transitionId })\n continue\n }\n if (before.kind !== signature.kind) {\n changes.push({ kind: 'transitionKindChanged', id: transitionId })\n }\n }\n\n for (const transitionId of previousTransitions.keys()) {\n if (!nextTransitions.has(transitionId)) {\n changes.push({ kind: 'transitionRemoved', id: transitionId })\n }\n }\n\n return changes\n}\n\n/** True when the incoming definition changes the topology the engine navigates. */\nexport function isStructuralDefinitionChange(previous: unknown, next: unknown): boolean {\n return diffDefinitionStructure(previous, next).length > 0\n}\n\n/**\n * Structured 409 body. It names the remedy explicitly so the Studio can offer a\n * one-click \"Create version\" instead of leaving the author with a dead end.\n */\nexport function buildStructuralEditConflictBody(params: {\n definitionId: string\n activeInstanceCount: number\n changes: StructuralChange[]\n}): StructuralEditConflictBody {\n return {\n error: 'Structural changes require a new version while instances are still running',\n code: STRUCTURAL_EDIT_CONFLICT_CODE,\n definitionId: params.definitionId,\n activeInstanceCount: params.activeInstanceCount,\n activeStatuses: ACTIVE_WORKFLOW_INSTANCE_STATUSES,\n changes: params.changes,\n remedy: {\n action: 'createVersion',\n method: 'POST',\n endpoint: `/api/workflows/definitions/${params.definitionId}/publish`,\n },\n }\n}\n"],
|
|
5
|
+
"mappings": "AAiCO,MAAM,oCAAuE;AAAA,EAClF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,gCAAgC;AA4C7C,SAAS,SAAS,OAAgD;AAChE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD;AACN;AAEA,SAAS,QAAQ,OAA2B;AAC1C,SAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;AACzC;AAEA,SAAS,WAAW,QAAiC,KAA4B;AAC/E,QAAM,QAAQ,OAAO,GAAG;AACxB,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,SAAS,eAAe,YAAiD;AACvE,QAAM,aAAa,oBAAI,IAA2B;AAClD,QAAM,WAAW,SAAS,UAAU;AACpC,MAAI,CAAC,SAAU,QAAO;AAEtB,aAAW,SAAS,QAAQ,SAAS,KAAK,GAAG;AAC3C,UAAM,OAAO,SAAS,KAAK;AAC3B,QAAI,CAAC,KAAM;AACX,UAAM,SAAS,WAAW,MAAM,QAAQ;AACxC,QAAI,CAAC,OAAQ;AACb,UAAM,SAAS,SAAS,KAAK,MAAM;AACnC,eAAW,IAAI,QAAQ;AAAA,MACrB,UAAU,WAAW,MAAM,UAAU,KAAK;AAAA,MAC1C,YAAY,SAAS,WAAW,QAAQ,YAAY,IAAI;AAAA,MACxD,YAAY,SAAS,WAAW,QAAQ,YAAY,IAAI;AAAA,IAC1D,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,YAAuD;AACnF,QAAM,aAAa,oBAAI,IAAiC;AACxD,QAAM,WAAW,SAAS,UAAU;AACpC,MAAI,CAAC,SAAU,QAAO;AAEtB,aAAW,SAAS,QAAQ,SAAS,WAAW,GAAG;AACjD,UAAM,aAAa,SAAS,KAAK;AACjC,QAAI,CAAC,WAAY;AACjB,UAAM,eAAe,WAAW,YAAY,cAAc;AAC1D,QAAI,CAAC,aAAc;AACnB,eAAW,IAAI,cAAc;AAAA,MAC3B,YAAY,WAAW,YAAY,YAAY,KAAK;AAAA,MACpD,UAAU,WAAW,YAAY,UAAU,KAAK;AAAA,MAChD,MAAM,WAAW,YAAY,MAAM,KAAK;AAAA,IAC1C,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAQO,SAAS,wBAAwB,UAAmB,MAAmC;AAC5F,QAAM,UAA8B,CAAC;AAErC,QAAM,gBAAgB,eAAe,QAAQ;AAC7C,QAAM,YAAY,eAAe,IAAI;AAErC,aAAW,CAAC,QAAQ,SAAS,KAAK,WAAW;AAC3C,UAAM,SAAS,cAAc,IAAI,MAAM;AACvC,QAAI,CAAC,QAAQ;AACX,cAAQ,KAAK,EAAE,MAAM,aAAa,IAAI,OAAO,CAAC;AAC9C;AAAA,IACF;AACA,QAAI,OAAO,aAAa,UAAU,UAAU;AAC1C,cAAQ,KAAK,EAAE,MAAM,mBAAmB,IAAI,OAAO,CAAC;AACpD;AAAA,IACF;AACA,QAAI,OAAO,eAAe,UAAU,cAAc,OAAO,eAAe,UAAU,YAAY;AAC5F,cAAQ,KAAK,EAAE,MAAM,qBAAqB,IAAI,OAAO,CAAC;AAAA,IACxD;AAAA,EACF;AAEA,aAAW,UAAU,cAAc,KAAK,GAAG;AACzC,QAAI,CAAC,UAAU,IAAI,MAAM,EAAG,SAAQ,KAAK,EAAE,MAAM,eAAe,IAAI,OAAO,CAAC;AAAA,EAC9E;AAEA,QAAM,sBAAsB,qBAAqB,QAAQ;AACzD,QAAM,kBAAkB,qBAAqB,IAAI;AAEjD,aAAW,CAAC,cAAc,SAAS,KAAK,iBAAiB;AACvD,UAAM,SAAS,oBAAoB,IAAI,YAAY;AACnD,QAAI,CAAC,QAAQ;AACX,cAAQ,KAAK,EAAE,MAAM,mBAAmB,IAAI,aAAa,CAAC;AAC1D;AAAA,IACF;AACA,QAAI,OAAO,eAAe,UAAU,cAAc,OAAO,aAAa,UAAU,UAAU;AACxF,cAAQ,KAAK,EAAE,MAAM,wBAAwB,IAAI,aAAa,CAAC;AAC/D;AAAA,IACF;AACA,QAAI,OAAO,SAAS,UAAU,MAAM;AAClC,cAAQ,KAAK,EAAE,MAAM,yBAAyB,IAAI,aAAa,CAAC;AAAA,IAClE;AAAA,EACF;AAEA,aAAW,gBAAgB,oBAAoB,KAAK,GAAG;AACrD,QAAI,CAAC,gBAAgB,IAAI,YAAY,GAAG;AACtC,cAAQ,KAAK,EAAE,MAAM,qBAAqB,IAAI,aAAa,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,SAAO;AACT;AAGO,SAAS,6BAA6B,UAAmB,MAAwB;AACtF,SAAO,wBAAwB,UAAU,IAAI,EAAE,SAAS;AAC1D;AAMO,SAAS,gCAAgC,QAIjB;AAC7B,SAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,cAAc,OAAO;AAAA,IACrB,qBAAqB,OAAO;AAAA,IAC5B,gBAAgB;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU,8BAA8B,OAAO,YAAY;AAAA,IAC7D;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const RECEIVED_MESSAGE_PATTERN = /received (.+)$/;
|
|
2
|
+
function normalizeIssuePath(path) {
|
|
3
|
+
return path.map((segment) => typeof segment === "number" ? segment : String(segment));
|
|
4
|
+
}
|
|
5
|
+
function resolveExpected(issue) {
|
|
6
|
+
if ("expected" in issue && typeof issue.expected === "string") return issue.expected;
|
|
7
|
+
if ("values" in issue && Array.isArray(issue.values)) {
|
|
8
|
+
return issue.values.map((value) => JSON.stringify(value)).join(" | ");
|
|
9
|
+
}
|
|
10
|
+
return void 0;
|
|
11
|
+
}
|
|
12
|
+
function resolveGot(issue) {
|
|
13
|
+
if (issue.code !== "invalid_type") return void 0;
|
|
14
|
+
const match = RECEIVED_MESSAGE_PATTERN.exec(issue.message);
|
|
15
|
+
return match ? match[1] : void 0;
|
|
16
|
+
}
|
|
17
|
+
function normalizeDefinitionValidationIssues(error) {
|
|
18
|
+
return error.issues.map((issue) => {
|
|
19
|
+
const expected = resolveExpected(issue);
|
|
20
|
+
const got = resolveGot(issue);
|
|
21
|
+
return {
|
|
22
|
+
path: normalizeIssuePath(issue.path),
|
|
23
|
+
code: typeof issue.code === "string" ? issue.code : "custom",
|
|
24
|
+
message: issue.message,
|
|
25
|
+
...expected !== void 0 ? { expected } : {},
|
|
26
|
+
...got !== void 0 ? { got } : {}
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
normalizeDefinitionValidationIssues
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=definition-error-body.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/definition-error-body.ts"],
|
|
4
|
+
"sourcesContent": ["import type { z } from 'zod'\n\nexport type DefinitionValidationIssue = {\n path: Array<string | number>\n code: string\n message: string\n expected?: string\n got?: string\n}\n\nconst RECEIVED_MESSAGE_PATTERN = /received (.+)$/\n\nfunction normalizeIssuePath(path: ReadonlyArray<PropertyKey>): Array<string | number> {\n return path.map((segment) => (typeof segment === 'number' ? segment : String(segment)))\n}\n\nfunction resolveExpected(issue: z.core.$ZodIssue): string | undefined {\n if ('expected' in issue && typeof issue.expected === 'string') return issue.expected\n if ('values' in issue && Array.isArray(issue.values)) {\n return issue.values.map((value) => JSON.stringify(value)).join(' | ')\n }\n return undefined\n}\n\nfunction resolveGot(issue: z.core.$ZodIssue): string | undefined {\n if (issue.code !== 'invalid_type') return undefined\n const match = RECEIVED_MESSAGE_PATTERN.exec(issue.message)\n return match ? match[1] : undefined\n}\n\nexport function normalizeDefinitionValidationIssues(error: z.ZodError): DefinitionValidationIssue[] {\n return error.issues.map((issue) => {\n const expected = resolveExpected(issue)\n const got = resolveGot(issue)\n return {\n path: normalizeIssuePath(issue.path),\n code: typeof issue.code === 'string' ? issue.code : 'custom',\n message: issue.message,\n ...(expected !== undefined ? { expected } : {}),\n ...(got !== undefined ? { got } : {}),\n }\n })\n}\n"],
|
|
5
|
+
"mappings": "AAUA,MAAM,2BAA2B;AAEjC,SAAS,mBAAmB,MAA0D;AACpF,SAAO,KAAK,IAAI,CAAC,YAAa,OAAO,YAAY,WAAW,UAAU,OAAO,OAAO,CAAE;AACxF;AAEA,SAAS,gBAAgB,OAA6C;AACpE,MAAI,cAAc,SAAS,OAAO,MAAM,aAAa,SAAU,QAAO,MAAM;AAC5E,MAAI,YAAY,SAAS,MAAM,QAAQ,MAAM,MAAM,GAAG;AACpD,WAAO,MAAM,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,KAAK,CAAC,EAAE,KAAK,KAAK;AAAA,EACtE;AACA,SAAO;AACT;AAEA,SAAS,WAAW,OAA6C;AAC/D,MAAI,MAAM,SAAS,eAAgB,QAAO;AAC1C,QAAM,QAAQ,yBAAyB,KAAK,MAAM,OAAO;AACzD,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;AAEO,SAAS,oCAAoC,OAAgD;AAClG,SAAO,MAAM,OAAO,IAAI,CAAC,UAAU;AACjC,UAAM,WAAW,gBAAgB,KAAK;AACtC,UAAM,MAAM,WAAW,KAAK;AAC5B,WAAO;AAAA,MACL,MAAM,mBAAmB,MAAM,IAAI;AAAA,MACnC,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,MACpD,SAAS,MAAM;AAAA,MACf,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,MAC7C,GAAI,QAAQ,SAAY,EAAE,IAAI,IAAI,CAAC;AAAA,IACrC;AAAA,EACF,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { collectActivityConfigWarnings } from "../data/activity-config-warnings.js";
|
|
2
|
+
import { workflowDefinitionDataSchema } from "../data/validators.js";
|
|
3
|
+
import {
|
|
4
|
+
collectValidationIssues,
|
|
5
|
+
countIssuesBySeverity
|
|
6
|
+
} from "./collect-validation-issues.js";
|
|
7
|
+
import {
|
|
8
|
+
normalizeDefinitionValidationIssues
|
|
9
|
+
} from "./definition-error-body.js";
|
|
10
|
+
import { collectUnresolvedContextRefWarnings } from "./expression-refs.js";
|
|
11
|
+
import { definitionToGraph, validateWorkflowGraph } from "./graph-utils.js";
|
|
12
|
+
const UNRESOLVED_CONTEXT_REF_MESSAGE = {
|
|
13
|
+
key: "workflows.visualEditor.problems.unresolvedContextRef",
|
|
14
|
+
fallback: 'Context reference "{path}" is not provided by any earlier step, trigger, or input'
|
|
15
|
+
};
|
|
16
|
+
function interpolateFallback(fallback, params) {
|
|
17
|
+
return fallback.replace(
|
|
18
|
+
/\{(\w+)\}/g,
|
|
19
|
+
(match, name) => Object.prototype.hasOwnProperty.call(params, name) ? params[name] : match
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function toUnresolvedContextRefIssues(definition, ledger, translate) {
|
|
23
|
+
return collectUnresolvedContextRefWarnings(definition, ledger).map((warning) => ({
|
|
24
|
+
path: warning.path,
|
|
25
|
+
message: translate ? translate(UNRESOLVED_CONTEXT_REF_MESSAGE.key, UNRESOLVED_CONTEXT_REF_MESSAGE.fallback, {
|
|
26
|
+
path: warning.refPath
|
|
27
|
+
}) : interpolateFallback(UNRESOLVED_CONTEXT_REF_MESSAGE.fallback, { path: warning.refPath })
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function evaluateWorkflowDefinition(definition, options = {}) {
|
|
31
|
+
const shaped = Array.isArray(definition?.steps) && Array.isArray(definition?.transitions);
|
|
32
|
+
if (!shaped) {
|
|
33
|
+
const parsedShape = workflowDefinitionDataSchema.safeParse(definition);
|
|
34
|
+
const structuralIssues = parsedShape.success ? [] : normalizeDefinitionValidationIssues(parsedShape.error);
|
|
35
|
+
return {
|
|
36
|
+
valid: false,
|
|
37
|
+
errorCount: structuralIssues.length,
|
|
38
|
+
warningCount: 0,
|
|
39
|
+
issues: structuralIssues,
|
|
40
|
+
problems: structuralIssues.map((entry, index) => ({
|
|
41
|
+
id: `schema-${index}`,
|
|
42
|
+
severity: "error",
|
|
43
|
+
message: entry.path.length ? `${entry.path.join(".")} - ${entry.message}` : entry.message
|
|
44
|
+
}))
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const { nodes, edges } = definitionToGraph(definition, { autoLayout: false });
|
|
48
|
+
const graphErrors = validateWorkflowGraph(nodes, edges);
|
|
49
|
+
const parsed = workflowDefinitionDataSchema.safeParse(definition);
|
|
50
|
+
const zodIssues = parsed.success ? [] : parsed.error.issues;
|
|
51
|
+
const ledger = options.ledger ?? null;
|
|
52
|
+
const configWarnings = [
|
|
53
|
+
...collectActivityConfigWarnings(definition),
|
|
54
|
+
...ledger ? toUnresolvedContextRefIssues(definition, ledger) : []
|
|
55
|
+
];
|
|
56
|
+
const problems = collectValidationIssues({
|
|
57
|
+
graphErrors,
|
|
58
|
+
zodIssues,
|
|
59
|
+
configWarnings,
|
|
60
|
+
nodes,
|
|
61
|
+
edges,
|
|
62
|
+
definition,
|
|
63
|
+
ledger: ledger ?? void 0
|
|
64
|
+
});
|
|
65
|
+
const { errors, warnings } = countIssuesBySeverity(problems);
|
|
66
|
+
return {
|
|
67
|
+
valid: errors === 0,
|
|
68
|
+
errorCount: errors,
|
|
69
|
+
warningCount: warnings,
|
|
70
|
+
issues: parsed.success ? [] : normalizeDefinitionValidationIssues(parsed.error),
|
|
71
|
+
problems
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
UNRESOLVED_CONTEXT_REF_MESSAGE,
|
|
76
|
+
evaluateWorkflowDefinition,
|
|
77
|
+
toUnresolvedContextRefIssues
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=definition-evaluation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/definition-evaluation.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * One evaluation path for a workflow definition.\n *\n * The Studio's Problems panel and the definition API routes historically ran\n * the same checks through two different normalizers: the panel builds\n * `WorkflowValidationIssue[]` via `collectValidationIssues`, the routes build\n * the structured `{path, code, message, expected?, got?}` body via\n * `normalizeDefinitionValidationIssues`. Neither reimplements the checks \u2014 they\n * share `workflowDefinitionDataSchema` \u2014 but nothing composed both.\n *\n * This module composes them, and NOTHING ELSE. Every check below is an existing\n * exported function; a second validator that could disagree with the panel is\n * precisely the failure mode to avoid, so callers that need \"what would the\n * Studio show me?\" MUST come through here rather than re-deriving the recipe.\n */\n\nimport { collectActivityConfigWarnings } from '../data/activity-config-warnings'\nimport { workflowDefinitionDataSchema } from '../data/validators'\nimport type { WorkflowDefinitionData } from '../data/entities'\nimport {\n collectValidationIssues,\n countIssuesBySeverity,\n type WorkflowIssueTranslator,\n type WorkflowValidationIssue,\n type ZodIssueLike,\n} from './collect-validation-issues'\nimport type { ContextLedger } from './context-ledger'\nimport {\n normalizeDefinitionValidationIssues,\n type DefinitionValidationIssue,\n} from './definition-error-body'\nimport { collectUnresolvedContextRefWarnings } from './expression-refs'\nimport { definitionToGraph, validateWorkflowGraph } from './graph-utils'\n\n/**\n * Problems-panel copy for an unresolved `{{context.*}}` reference. Shared so\n * the Studio and every server-side evaluator emit the identical warning instead\n * of drifting apart on the message text.\n */\nexport const UNRESOLVED_CONTEXT_REF_MESSAGE = {\n key: 'workflows.visualEditor.problems.unresolvedContextRef',\n fallback: 'Context reference \"{path}\" is not provided by any earlier step, trigger, or input',\n} as const\n\nfunction interpolateFallback(fallback: string, params: Record<string, string>): string {\n return fallback.replace(/\\{(\\w+)\\}/g, (match, name: string) =>\n Object.prototype.hasOwnProperty.call(params, name) ? params[name] : match,\n )\n}\n\n/**\n * Map unresolved `{{context.*}}` references onto Problems-panel warnings.\n * `translate` is optional \u2014 omit it (server, agent tools) to get the English\n * fallback the panel itself falls back to.\n */\nexport function toUnresolvedContextRefIssues(\n definition: WorkflowDefinitionData,\n ledger: ContextLedger,\n translate?: WorkflowIssueTranslator,\n): ZodIssueLike[] {\n return collectUnresolvedContextRefWarnings(definition, ledger).map((warning) => ({\n path: warning.path,\n message: translate\n ? translate(UNRESOLVED_CONTEXT_REF_MESSAGE.key, UNRESOLVED_CONTEXT_REF_MESSAGE.fallback, {\n path: warning.refPath,\n })\n : interpolateFallback(UNRESOLVED_CONTEXT_REF_MESSAGE.fallback, { path: warning.refPath }),\n }))\n}\n\nexport interface EvaluateWorkflowDefinitionOptions {\n /**\n * Server-computed context ledger. When supplied, unresolved-reference\n * warnings join the result exactly as they do in the Studio; when omitted\n * those warnings are skipped (they are advisory and never blocking).\n */\n ledger?: ContextLedger | null\n}\n\nexport interface WorkflowDefinitionEvaluation {\n /** No blocking errors \u2014 the same bar the Studio's Save handler enforces. */\n valid: boolean\n errorCount: number\n warningCount: number\n /**\n * The structured issue format: identical in shape and content to the\n * `details[]` array the definition create/update routes return on a 400.\n * Empty when the definition parses.\n */\n issues: DefinitionValidationIssue[]\n /** Exactly what the Studio's Problems panel renders, in its order. */\n problems: WorkflowValidationIssue[]\n}\n\n/**\n * Run the Studio Problems-panel evaluation plus the API routes' structured-body\n * normalizer over one definition.\n */\nexport function evaluateWorkflowDefinition(\n definition: WorkflowDefinitionData,\n options: EvaluateWorkflowDefinitionOptions = {},\n): WorkflowDefinitionEvaluation {\n // The Studio only ever evaluates well-formed canvas state, but an agent can\n // hand us anything. A definition whose `steps`/`transitions` are not arrays\n // cannot be turned into a graph at all, so it answers with the schema issues\n // alone rather than throwing out of a validation call.\n const shaped =\n Array.isArray((definition as { steps?: unknown })?.steps) &&\n Array.isArray((definition as { transitions?: unknown })?.transitions)\n if (!shaped) {\n const parsedShape = workflowDefinitionDataSchema.safeParse(definition)\n const structuralIssues = parsedShape.success\n ? []\n : normalizeDefinitionValidationIssues(parsedShape.error)\n return {\n valid: false,\n errorCount: structuralIssues.length,\n warningCount: 0,\n issues: structuralIssues,\n problems: structuralIssues.map((entry, index) => ({\n id: `schema-${index}`,\n severity: 'error' as const,\n message: entry.path.length ? `${entry.path.join('.')} - ${entry.message}` : entry.message,\n })),\n }\n }\n\n const { nodes, edges } = definitionToGraph(definition, { autoLayout: false })\n const graphErrors = validateWorkflowGraph(nodes, edges)\n const parsed = workflowDefinitionDataSchema.safeParse(definition)\n const zodIssues: ZodIssueLike[] = parsed.success ? [] : parsed.error.issues\n const ledger = options.ledger ?? null\n const configWarnings: ZodIssueLike[] = [\n ...collectActivityConfigWarnings(definition),\n ...(ledger ? toUnresolvedContextRefIssues(definition, ledger) : []),\n ]\n\n const problems = collectValidationIssues({\n graphErrors,\n zodIssues,\n configWarnings,\n nodes,\n edges,\n definition,\n ledger: ledger ?? undefined,\n })\n const { errors, warnings } = countIssuesBySeverity(problems)\n\n return {\n valid: errors === 0,\n errorCount: errors,\n warningCount: warnings,\n issues: parsed.success ? [] : normalizeDefinitionValidationIssues(parsed.error),\n problems,\n }\n}\n"],
|
|
5
|
+
"mappings": "AAgBA,SAAS,qCAAqC;AAC9C,SAAS,oCAAoC;AAE7C;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAEP;AAAA,EACE;AAAA,OAEK;AACP,SAAS,2CAA2C;AACpD,SAAS,mBAAmB,6BAA6B;AAOlD,MAAM,iCAAiC;AAAA,EAC5C,KAAK;AAAA,EACL,UAAU;AACZ;AAEA,SAAS,oBAAoB,UAAkB,QAAwC;AACrF,SAAO,SAAS;AAAA,IAAQ;AAAA,IAAc,CAAC,OAAO,SAC5C,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,IAAI,OAAO,IAAI,IAAI;AAAA,EACtE;AACF;AAOO,SAAS,6BACd,YACA,QACA,WACgB;AAChB,SAAO,oCAAoC,YAAY,MAAM,EAAE,IAAI,CAAC,aAAa;AAAA,IAC/E,MAAM,QAAQ;AAAA,IACd,SAAS,YACL,UAAU,+BAA+B,KAAK,+BAA+B,UAAU;AAAA,MACrF,MAAM,QAAQ;AAAA,IAChB,CAAC,IACD,oBAAoB,+BAA+B,UAAU,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EAC5F,EAAE;AACJ;AA8BO,SAAS,2BACd,YACA,UAA6C,CAAC,GAChB;AAK9B,QAAM,SACJ,MAAM,QAAS,YAAoC,KAAK,KACxD,MAAM,QAAS,YAA0C,WAAW;AACtE,MAAI,CAAC,QAAQ;AACX,UAAM,cAAc,6BAA6B,UAAU,UAAU;AACrE,UAAM,mBAAmB,YAAY,UACjC,CAAC,IACD,oCAAoC,YAAY,KAAK;AACzD,WAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY,iBAAiB;AAAA,MAC7B,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,UAAU,iBAAiB,IAAI,CAAC,OAAO,WAAW;AAAA,QAChD,IAAI,UAAU,KAAK;AAAA,QACnB,UAAU;AAAA,QACV,SAAS,MAAM,KAAK,SAAS,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,MAAM,MAAM,OAAO,KAAK,MAAM;AAAA,MACpF,EAAE;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,EAAE,OAAO,MAAM,IAAI,kBAAkB,YAAY,EAAE,YAAY,MAAM,CAAC;AAC5E,QAAM,cAAc,sBAAsB,OAAO,KAAK;AACtD,QAAM,SAAS,6BAA6B,UAAU,UAAU;AAChE,QAAM,YAA4B,OAAO,UAAU,CAAC,IAAI,OAAO,MAAM;AACrE,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,iBAAiC;AAAA,IACrC,GAAG,8BAA8B,UAAU;AAAA,IAC3C,GAAI,SAAS,6BAA6B,YAAY,MAAM,IAAI,CAAC;AAAA,EACnE;AAEA,QAAM,WAAW,wBAAwB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,UAAU;AAAA,EACpB,CAAC;AACD,QAAM,EAAE,QAAQ,SAAS,IAAI,sBAAsB,QAAQ;AAE3D,SAAO;AAAA,IACL,OAAO,WAAW;AAAA,IAClB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,QAAQ,OAAO,UAAU,CAAC,IAAI,oCAAoC,OAAO,KAAK;AAAA,IAC9E;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { hasFeature } from "@open-mercato/shared/security/features";
|
|
2
|
+
import {
|
|
3
|
+
normalizeFeatureList,
|
|
4
|
+
provisionExecutionPrincipal,
|
|
5
|
+
resolveExecutionPrincipalUserId
|
|
6
|
+
} from "../../auth/lib/executionPrincipal.js";
|
|
7
|
+
function workflowPrincipalKey(definitionId) {
|
|
8
|
+
return `workflow:${definitionId}`;
|
|
9
|
+
}
|
|
10
|
+
function normalizeGrantedFeatures(value) {
|
|
11
|
+
return normalizeFeatureList(value);
|
|
12
|
+
}
|
|
13
|
+
function definitionDeclaresGrant(definition) {
|
|
14
|
+
return normalizeGrantedFeatures(definition?.grantedFeatures).length > 0;
|
|
15
|
+
}
|
|
16
|
+
function findUngrantableFeatures(requested, granted) {
|
|
17
|
+
return normalizeGrantedFeatures(requested).filter((feature) => !hasFeature(granted, feature));
|
|
18
|
+
}
|
|
19
|
+
const WORKFLOW_GRANT_FEATURE = "workflows.definitions.grant_features";
|
|
20
|
+
async function authorizeWorkflowGrantChange(rbacService, params) {
|
|
21
|
+
const requested = normalizeGrantedFeatures(params.requested);
|
|
22
|
+
const current = normalizeGrantedFeatures(params.current);
|
|
23
|
+
if (requested.length === current.length && requested.every((feature, index) => feature === current[index])) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const mayGrant = await rbacService.userHasAllFeatures(params.userId, [WORKFLOW_GRANT_FEATURE], params.scope);
|
|
27
|
+
if (!mayGrant) {
|
|
28
|
+
return {
|
|
29
|
+
status: 403,
|
|
30
|
+
body: { error: "Insufficient permissions", code: "WORKFLOW_GRANT_FEATURE_REQUIRED" }
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (!requested.length) return null;
|
|
34
|
+
const withinOwnGrants = await rbacService.userHasAllFeatures(params.userId, requested, params.scope);
|
|
35
|
+
if (withinOwnGrants) return null;
|
|
36
|
+
const granted = rbacService.getGrantedFeatures ? await rbacService.getGrantedFeatures(params.userId, params.scope) : [];
|
|
37
|
+
return {
|
|
38
|
+
status: 403,
|
|
39
|
+
body: {
|
|
40
|
+
error: "Insufficient permissions",
|
|
41
|
+
code: "WORKFLOW_GRANT_EXCEEDS_GRANTOR_FEATURES",
|
|
42
|
+
details: { missingFeatures: findUngrantableFeatures(requested, granted) }
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
class WorkflowExecutionPrincipalMissingError extends Error {
|
|
47
|
+
constructor(definitionId) {
|
|
48
|
+
super(
|
|
49
|
+
`[internal] workflow definition ${definitionId} declares granted features but its execution principal is not provisioned; refusing to fall back to the starting user`
|
|
50
|
+
);
|
|
51
|
+
this.definitionId = definitionId;
|
|
52
|
+
this.code = "EXECUTION_PRINCIPAL_MISSING";
|
|
53
|
+
this.name = "WorkflowExecutionPrincipalMissingError";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function syncWorkflowDefinitionPrincipal(container, definition, options) {
|
|
57
|
+
const features = normalizeGrantedFeatures(definition.grantedFeatures);
|
|
58
|
+
const previous = normalizeGrantedFeatures(options?.previousFeatures);
|
|
59
|
+
if (!features.length && !previous.length) return;
|
|
60
|
+
await provisionExecutionPrincipal(
|
|
61
|
+
container,
|
|
62
|
+
{ tenantId: definition.tenantId, organizationId: definition.organizationId },
|
|
63
|
+
{
|
|
64
|
+
principalKey: workflowPrincipalKey(definition.id),
|
|
65
|
+
displayName: `Workflow ${definition.workflowId ?? definition.id}`,
|
|
66
|
+
features
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
async function resolveWorkflowDefinitionExecutionUserId(em, definition, fallbackUserId) {
|
|
71
|
+
if (!definition || !definitionDeclaresGrant(definition)) return fallbackUserId ?? null;
|
|
72
|
+
const userId = await resolveExecutionPrincipalUserId(em, workflowPrincipalKey(definition.id), {
|
|
73
|
+
tenantId: definition.tenantId,
|
|
74
|
+
organizationId: definition.organizationId
|
|
75
|
+
});
|
|
76
|
+
if (!userId) throw new WorkflowExecutionPrincipalMissingError(definition.id);
|
|
77
|
+
return userId;
|
|
78
|
+
}
|
|
79
|
+
export {
|
|
80
|
+
WORKFLOW_GRANT_FEATURE,
|
|
81
|
+
WorkflowExecutionPrincipalMissingError,
|
|
82
|
+
authorizeWorkflowGrantChange,
|
|
83
|
+
definitionDeclaresGrant,
|
|
84
|
+
findUngrantableFeatures,
|
|
85
|
+
normalizeGrantedFeatures,
|
|
86
|
+
resolveWorkflowDefinitionExecutionUserId,
|
|
87
|
+
syncWorkflowDefinitionPrincipal,
|
|
88
|
+
workflowPrincipalKey
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=definition-grant.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/lib/definition-grant.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { hasFeature } from '@open-mercato/shared/security/features'\nimport {\n normalizeFeatureList,\n provisionExecutionPrincipal,\n resolveExecutionPrincipalUserId,\n} from '../../auth/lib/executionPrincipal'\n\n/**\n * Workflow execution identity (`grantedFeatures`).\n *\n * A workflow needs an acting user to write anything: `executeUpdateEntity`\n * refuses without one and then checks that user's LIVE features against the\n * command's `requiredFeatures`. Historically that user was whoever started the\n * run \u2014 so a workflow started by an admin silently ran with admin powers, and an\n * event-triggered run (whose `initiatedBy` is `trigger:<id>`) had no actor at\n * all and could not write.\n *\n * A definition may instead declare its own least-privilege grant. Two rules,\n * both deliberate:\n *\n * - **No grant \u21D2 today's behaviour, byte-for-byte.** The run borrows the\n * starting user's identity. The feature is additive and opt-in; every\n * pre-existing definition is unaffected.\n * - **A grant \u21D2 the run ALWAYS acts as its own principal**, regardless of who\n * started it. That is the point: the grant is a ceiling, not a floor, so a\n * run started by an admin must not gain the admin's powers. It also gives the\n * no-actor triggered case a real identity.\n *\n * The grant lives on the definition ROW (a real column), so it is per version:\n * publishing a new version mints a new row, hence a new principal, hence a\n * re-authorised grant.\n */\n\n/** The `auth` execution-principal namespace this module owns. */\nexport function workflowPrincipalKey(definitionId: string): string {\n return `workflow:${definitionId}`\n}\n\nexport function normalizeGrantedFeatures(value: unknown): string[] {\n return normalizeFeatureList(value)\n}\n\nexport type WorkflowDefinitionGrantLike = {\n id: string\n tenantId: string\n organizationId: string\n workflowId?: string\n grantedFeatures?: string[] | null\n}\n\nexport function definitionDeclaresGrant(definition: WorkflowDefinitionGrantLike | null | undefined): boolean {\n return normalizeGrantedFeatures(definition?.grantedFeatures).length > 0\n}\n\n/**\n * The features in `requested` that `granted` does not cover.\n *\n * Wildcard-aware on purpose: `workflows.*` in the author's own grants satisfies\n * `workflows.definitions.view` in the request, and a plain `includes()` would\n * refuse a grant the author demonstrably holds. Uses the shared matcher so this\n * agrees with every other ACL decision in the platform.\n */\nexport function findUngrantableFeatures(requested: string[], granted: string[]): string[] {\n return normalizeGrantedFeatures(requested).filter((feature) => !hasFeature(granted, feature))\n}\n\nexport const WORKFLOW_GRANT_FEATURE = 'workflows.definitions.grant_features'\n\nexport type WorkflowGrantAuthorizationFailure = {\n status: number\n body: {\n error: string\n code: 'WORKFLOW_GRANT_FEATURE_REQUIRED' | 'WORKFLOW_GRANT_EXCEEDS_GRANTOR_FEATURES'\n details?: { missingFeatures: string[] }\n }\n}\n\ntype RbacServiceLike = {\n userHasAllFeatures: (\n userId: string,\n features: string[],\n scope: { tenantId: string | null; organizationId: string | null },\n ) => Promise<boolean>\n getGrantedFeatures?: (\n userId: string,\n scope: { tenantId: string | null; organizationId: string | null },\n ) => Promise<string[]>\n}\n\n/**\n * Authorises a change to a definition's grant. Returns null when the change is\n * allowed, otherwise the response body/status the route should return.\n *\n * Two gates, both required:\n * 1. `workflows.definitions.grant_features` \u2014 declaring an execution identity\n * is not implied by ordinary `definitions.edit`.\n * 2. The requested grant must be a SUBSET of the saving user's own current\n * features. `userHasAllFeatures` is the authority (it is the same primitive\n * every other route uses, so it honours super-admin, wildcards, module\n * enablement and organization visibility identically); the missing-feature\n * list in the error body is derived with the shared wildcard-aware matcher,\n * never `includes()`.\n *\n * A no-op change (`requested` deep-equals `current`) is not a change and needs\n * neither gate \u2014 otherwise every ordinary metadata save of a granted definition\n * would demand the grant feature. Callers that mint a NEW principal from an\n * existing grant (publish) MUST pass `current: []` so the copy is re-authorised.\n */\nexport async function authorizeWorkflowGrantChange(\n rbacService: RbacServiceLike,\n params: {\n userId: string\n scope: { tenantId: string | null; organizationId: string | null }\n requested: string[]\n current: string[]\n },\n): Promise<WorkflowGrantAuthorizationFailure | null> {\n const requested = normalizeGrantedFeatures(params.requested)\n const current = normalizeGrantedFeatures(params.current)\n if (requested.length === current.length && requested.every((feature, index) => feature === current[index])) {\n return null\n }\n\n const mayGrant = await rbacService.userHasAllFeatures(params.userId, [WORKFLOW_GRANT_FEATURE], params.scope)\n if (!mayGrant) {\n return {\n status: 403,\n body: { error: 'Insufficient permissions', code: 'WORKFLOW_GRANT_FEATURE_REQUIRED' },\n }\n }\n\n if (!requested.length) return null\n\n const withinOwnGrants = await rbacService.userHasAllFeatures(params.userId, requested, params.scope)\n if (withinOwnGrants) return null\n\n const granted = rbacService.getGrantedFeatures\n ? await rbacService.getGrantedFeatures(params.userId, params.scope)\n : []\n return {\n status: 403,\n body: {\n error: 'Insufficient permissions',\n code: 'WORKFLOW_GRANT_EXCEEDS_GRANTOR_FEATURES',\n details: { missingFeatures: findUngrantableFeatures(requested, granted) },\n },\n }\n}\n\nexport class WorkflowExecutionPrincipalMissingError extends Error {\n readonly code = 'EXECUTION_PRINCIPAL_MISSING'\n constructor(public readonly definitionId: string) {\n super(\n `[internal] workflow definition ${definitionId} declares granted features but its execution ` +\n `principal is not provisioned; refusing to fall back to the starting user`,\n )\n this.name = 'WorkflowExecutionPrincipalMissingError'\n }\n}\n\n/**\n * Provisions (idempotently) the definition's execution principal and re-scopes\n * its role ACL to exactly the declared grant \u2014 on every create, update and\n * publish, so an over-granted principal self-heals instead of lingering.\n *\n * A definition that never declared a grant provisions nothing (the opt-in stays\n * opt-in), but CLEARING a grant re-scopes the existing principal to no features\n * rather than leaving the old ACL behind for anything that still resolves it.\n */\nexport async function syncWorkflowDefinitionPrincipal(\n container: AwilixContainer,\n definition: WorkflowDefinitionGrantLike,\n options?: { previousFeatures?: string[] | null },\n): Promise<void> {\n const features = normalizeGrantedFeatures(definition.grantedFeatures)\n const previous = normalizeGrantedFeatures(options?.previousFeatures)\n // Nothing declared and nothing to revoke \u21D2 no principal, no writes at all.\n if (!features.length && !previous.length) return\n await provisionExecutionPrincipal(\n container,\n { tenantId: definition.tenantId, organizationId: definition.organizationId },\n {\n principalKey: workflowPrincipalKey(definition.id),\n displayName: `Workflow ${definition.workflowId ?? definition.id}`,\n features,\n },\n )\n}\n\n/**\n * The user id a run of `definition` acts as.\n *\n * Fails CLOSED: a definition that declares a grant whose principal cannot be\n * resolved throws rather than silently reverting to `fallbackUserId`, because\n * that fallback is precisely the escalation the grant exists to prevent.\n */\nexport async function resolveWorkflowDefinitionExecutionUserId(\n em: EntityManager,\n definition: WorkflowDefinitionGrantLike | null | undefined,\n fallbackUserId: string | null | undefined,\n): Promise<string | null> {\n if (!definition || !definitionDeclaresGrant(definition)) return fallbackUserId ?? null\n const userId = await resolveExecutionPrincipalUserId(em, workflowPrincipalKey(definition.id), {\n tenantId: definition.tenantId,\n organizationId: definition.organizationId,\n })\n if (!userId) throw new WorkflowExecutionPrincipalMissingError(definition.id)\n return userId\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6BA,SAAS,qBAAqB,cAA8B;AACjE,SAAO,YAAY,YAAY;AACjC;AAEO,SAAS,yBAAyB,OAA0B;AACjE,SAAO,qBAAqB,KAAK;AACnC;AAUO,SAAS,wBAAwB,YAAqE;AAC3G,SAAO,yBAAyB,YAAY,eAAe,EAAE,SAAS;AACxE;AAUO,SAAS,wBAAwB,WAAqB,SAA6B;AACxF,SAAO,yBAAyB,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,WAAW,SAAS,OAAO,CAAC;AAC9F;AAEO,MAAM,yBAAyB;AA0CtC,eAAsB,6BACpB,aACA,QAMmD;AACnD,QAAM,YAAY,yBAAyB,OAAO,SAAS;AAC3D,QAAM,UAAU,yBAAyB,OAAO,OAAO;AACvD,MAAI,UAAU,WAAW,QAAQ,UAAU,UAAU,MAAM,CAAC,SAAS,UAAU,YAAY,QAAQ,KAAK,CAAC,GAAG;AAC1G,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,MAAM,YAAY,mBAAmB,OAAO,QAAQ,CAAC,sBAAsB,GAAG,OAAO,KAAK;AAC3G,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,EAAE,OAAO,4BAA4B,MAAM,kCAAkC;AAAA,IACrF;AAAA,EACF;AAEA,MAAI,CAAC,UAAU,OAAQ,QAAO;AAE9B,QAAM,kBAAkB,MAAM,YAAY,mBAAmB,OAAO,QAAQ,WAAW,OAAO,KAAK;AACnG,MAAI,gBAAiB,QAAO;AAE5B,QAAM,UAAU,YAAY,qBACxB,MAAM,YAAY,mBAAmB,OAAO,QAAQ,OAAO,KAAK,IAChE,CAAC;AACL,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS,EAAE,iBAAiB,wBAAwB,WAAW,OAAO,EAAE;AAAA,IAC1E;AAAA,EACF;AACF;AAEO,MAAM,+CAA+C,MAAM;AAAA,EAEhE,YAA4B,cAAsB;AAChD;AAAA,MACE,kCAAkC,YAAY;AAAA,IAEhD;AAJ0B;AAD5B,SAAS,OAAO;AAMd,SAAK,OAAO;AAAA,EACd;AACF;AAWA,eAAsB,gCACpB,WACA,YACA,SACe;AACf,QAAM,WAAW,yBAAyB,WAAW,eAAe;AACpE,QAAM,WAAW,yBAAyB,SAAS,gBAAgB;AAEnE,MAAI,CAAC,SAAS,UAAU,CAAC,SAAS,OAAQ;AAC1C,QAAM;AAAA,IACJ;AAAA,IACA,EAAE,UAAU,WAAW,UAAU,gBAAgB,WAAW,eAAe;AAAA,IAC3E;AAAA,MACE,cAAc,qBAAqB,WAAW,EAAE;AAAA,MAChD,aAAa,YAAY,WAAW,cAAc,WAAW,EAAE;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACF;AASA,eAAsB,yCACpB,IACA,YACA,gBACwB;AACxB,MAAI,CAAC,cAAc,CAAC,wBAAwB,UAAU,EAAG,QAAO,kBAAkB;AAClF,QAAM,SAAS,MAAM,gCAAgC,IAAI,qBAAqB,WAAW,EAAE,GAAG;AAAA,IAC5F,UAAU,WAAW;AAAA,IACrB,gBAAgB,WAAW;AAAA,EAC7B,CAAC;AACD,MAAI,CAAC,OAAQ,OAAM,IAAI,uCAAuC,WAAW,EAAE;AAC3E,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
function scanTopLevelArrayElements(text) {
|
|
2
|
+
const steps = [];
|
|
3
|
+
const transitions = [];
|
|
4
|
+
let line = 1;
|
|
5
|
+
let inString = false;
|
|
6
|
+
let escaped = false;
|
|
7
|
+
let depth = 0;
|
|
8
|
+
let pendingKey = null;
|
|
9
|
+
let currentStringStart = -1;
|
|
10
|
+
let trackedArray = null;
|
|
11
|
+
let trackedArrayDepth = -1;
|
|
12
|
+
let elementIndex = 0;
|
|
13
|
+
let elementStartLine = -1;
|
|
14
|
+
let elementDepth = -1;
|
|
15
|
+
for (let position = 0; position < text.length; position += 1) {
|
|
16
|
+
const char = text[position];
|
|
17
|
+
if (char === "\n") {
|
|
18
|
+
line += 1;
|
|
19
|
+
inString = false;
|
|
20
|
+
escaped = false;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (inString) {
|
|
24
|
+
if (escaped) {
|
|
25
|
+
escaped = false;
|
|
26
|
+
} else if (char === "\\") {
|
|
27
|
+
escaped = true;
|
|
28
|
+
} else if (char === '"') {
|
|
29
|
+
inString = false;
|
|
30
|
+
const literal = text.slice(currentStringStart, position);
|
|
31
|
+
let lookahead = position + 1;
|
|
32
|
+
while (lookahead < text.length && /\s/.test(text[lookahead])) lookahead += 1;
|
|
33
|
+
if (text[lookahead] === ":") pendingKey = literal;
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (char === '"') {
|
|
38
|
+
inString = true;
|
|
39
|
+
currentStringStart = position + 1;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (char === "[") {
|
|
43
|
+
if (depth === 1 && (pendingKey === "steps" || pendingKey === "transitions")) {
|
|
44
|
+
trackedArray = pendingKey;
|
|
45
|
+
trackedArrayDepth = depth;
|
|
46
|
+
elementIndex = 0;
|
|
47
|
+
}
|
|
48
|
+
depth += 1;
|
|
49
|
+
pendingKey = null;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (char === "{") {
|
|
53
|
+
if (trackedArray && depth === trackedArrayDepth + 1 && elementStartLine === -1) {
|
|
54
|
+
elementStartLine = line;
|
|
55
|
+
elementDepth = depth;
|
|
56
|
+
}
|
|
57
|
+
depth += 1;
|
|
58
|
+
pendingKey = null;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (char === "}") {
|
|
62
|
+
depth -= 1;
|
|
63
|
+
if (trackedArray && elementStartLine !== -1 && depth === elementDepth) {
|
|
64
|
+
const range = { index: elementIndex, startLine: elementStartLine, endLine: line };
|
|
65
|
+
if (trackedArray === "steps") steps.push(range);
|
|
66
|
+
else transitions.push(range);
|
|
67
|
+
elementIndex += 1;
|
|
68
|
+
elementStartLine = -1;
|
|
69
|
+
elementDepth = -1;
|
|
70
|
+
}
|
|
71
|
+
pendingKey = null;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (char === "]") {
|
|
75
|
+
depth -= 1;
|
|
76
|
+
if (trackedArray && depth === trackedArrayDepth) {
|
|
77
|
+
trackedArray = null;
|
|
78
|
+
trackedArrayDepth = -1;
|
|
79
|
+
elementStartLine = -1;
|
|
80
|
+
elementDepth = -1;
|
|
81
|
+
}
|
|
82
|
+
pendingKey = null;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { steps, transitions };
|
|
87
|
+
}
|
|
88
|
+
function readIdsAt(parsed, key, idField) {
|
|
89
|
+
if (!parsed || typeof parsed !== "object") return [];
|
|
90
|
+
const collection = parsed[key];
|
|
91
|
+
if (!Array.isArray(collection)) return [];
|
|
92
|
+
return collection.map((element) => {
|
|
93
|
+
if (!element || typeof element !== "object") return null;
|
|
94
|
+
const value = element[idField];
|
|
95
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function locateDefinitionJsonEntities(text, parsed) {
|
|
99
|
+
const scanned = scanTopLevelArrayElements(text);
|
|
100
|
+
const stepIds = readIdsAt(parsed, "steps", "stepId");
|
|
101
|
+
const transitionIds = readIdsAt(parsed, "transitions", "transitionId");
|
|
102
|
+
const steps = /* @__PURE__ */ new Map();
|
|
103
|
+
for (const element of scanned.steps) {
|
|
104
|
+
const id = stepIds[element.index];
|
|
105
|
+
if (id && !steps.has(id)) steps.set(id, { startLine: element.startLine, endLine: element.endLine });
|
|
106
|
+
}
|
|
107
|
+
const transitions = /* @__PURE__ */ new Map();
|
|
108
|
+
for (const element of scanned.transitions) {
|
|
109
|
+
const id = transitionIds[element.index];
|
|
110
|
+
if (id && !transitions.has(id)) {
|
|
111
|
+
transitions.set(id, { startLine: element.startLine, endLine: element.endLine });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { steps, transitions };
|
|
115
|
+
}
|
|
116
|
+
function locateIssues(issues, locations) {
|
|
117
|
+
const located = [];
|
|
118
|
+
for (const issue of issues) {
|
|
119
|
+
const range = issue.nodeId ? locations.steps.get(issue.nodeId) : issue.edgeId ? locations.transitions.get(issue.edgeId) : void 0;
|
|
120
|
+
if (!range) continue;
|
|
121
|
+
located.push({ issueId: issue.id, severity: issue.severity, line: range.startLine });
|
|
122
|
+
}
|
|
123
|
+
return located;
|
|
124
|
+
}
|
|
125
|
+
function severityByLine(located) {
|
|
126
|
+
const byLine = /* @__PURE__ */ new Map();
|
|
127
|
+
for (const issue of located) {
|
|
128
|
+
const existing = byLine.get(issue.line);
|
|
129
|
+
if (existing === "error") continue;
|
|
130
|
+
byLine.set(issue.line, issue.severity);
|
|
131
|
+
}
|
|
132
|
+
return byLine;
|
|
133
|
+
}
|
|
134
|
+
export {
|
|
135
|
+
locateDefinitionJsonEntities,
|
|
136
|
+
locateIssues,
|
|
137
|
+
severityByLine
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=definition-json-locations.js.map
|