@open-mercato/core 0.7.1-develop.7193.1.910a5b0a1e → 0.7.1-develop.7194.1.ab4fc81f82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -2
- package/AGENTS.md +4 -3
- package/agentic/standalone-guide.md +1 -1
- package/build.mjs +16 -0
- package/dist/generated/entities/action_log/index.js +2 -0
- package/dist/generated/entities/action_log/index.js.map +2 -2
- package/dist/generated/entities/user/index.js +2 -0
- package/dist/generated/entities/user/index.js.map +2 -2
- package/dist/generated/entities/user_task/index.js +14 -0
- package/dist/generated/entities/user_task/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition/index.js +6 -0
- package/dist/generated/entities/workflow_definition/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
- package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
- package/dist/generated/entities/workflow_instance/index.js +4 -0
- package/dist/generated/entities/workflow_instance/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +4 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +39 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/workflowsFixtures.js +477 -2
- package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
- package/dist/helpers/integration/workflowsUi.js +148 -0
- package/dist/helpers/integration/workflowsUi.js.map +7 -0
- package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
- package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
- package/dist/modules/audit_logs/data/entities.js +5 -0
- package/dist/modules/audit_logs/data/entities.js.map +2 -2
- package/dist/modules/audit_logs/data/validators.js +1 -0
- package/dist/modules/audit_logs/data/validators.js.map +2 -2
- package/dist/modules/audit_logs/lib/projections.js +2 -1
- package/dist/modules/audit_logs/lib/projections.js.map +2 -2
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
- package/dist/modules/audit_logs/services/actionLogService.js +3 -0
- package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
- package/dist/modules/auth/data/entities.js +6 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/executionPrincipal.js +140 -0
- package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
- package/dist/modules/business_rules/data/validators.js +6 -0
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +5 -3
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/commands/products.js +5 -0
- package/dist/modules/catalog/commands/products.js.map +2 -2
- package/dist/modules/catalog/workflows.js +19 -0
- package/dist/modules/catalog/workflows.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/cli.js +80 -0
- package/dist/modules/customer_accounts/cli.js.map +7 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
- package/dist/modules/customer_accounts/setup.js +4 -2
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +4 -0
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +2 -0
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/events.js +13 -2
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
- package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
- package/dist/modules/customers/lib/todoCompatibility.js +1 -1
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
- package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
- package/dist/modules/customers/workflows.js +29 -0
- package/dist/modules/customers/workflows.js.map +7 -0
- package/dist/modules/entities/api/records.js +13 -33
- package/dist/modules/entities/api/records.js.map +3 -3
- package/dist/modules/entities/lib/entityClassification.js +60 -0
- package/dist/modules/entities/lib/entityClassification.js.map +7 -0
- package/dist/modules/sales/commands/documents.js +31 -0
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/events.js +12 -1
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/workflows.js +12 -1
- package/dist/modules/sales/workflows.js.map +2 -2
- package/dist/modules/seeds/cli.js +199 -0
- package/dist/modules/seeds/cli.js.map +7 -0
- package/dist/modules/seeds/examples/sample-seed.json +26 -0
- package/dist/modules/seeds/index.js +12 -0
- package/dist/modules/seeds/index.js.map +7 -0
- package/dist/modules/workflows/acl.js +96 -0
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/ai-agents.js +50 -0
- package/dist/modules/workflows/ai-agents.js.map +7 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
- package/dist/modules/workflows/ai-tools/types.js +43 -0
- package/dist/modules/workflows/ai-tools/types.js.map +7 -0
- package/dist/modules/workflows/ai-tools.js +10 -0
- package/dist/modules/workflows/ai-tools.js.map +7 -0
- package/dist/modules/workflows/api/command-settings/route.js +137 -0
- package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/commands/route.js +72 -0
- package/dist/modules/workflows/api/commands/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
- package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/route.js +61 -113
- package/dist/modules/workflows/api/definitions/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/serialize.js +9 -0
- package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
- package/dist/modules/workflows/api/endpoints/route.js +69 -0
- package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
- package/dist/modules/workflows/api/functions/route.js +73 -0
- package/dist/modules/workflows/api/functions/route.js.map +7 -0
- package/dist/modules/workflows/api/grantable-features/route.js +75 -0
- package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
- package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/route.js +94 -3
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
- package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
- package/dist/modules/workflows/api/openapi.js +415 -4
- package/dist/modules/workflows/api/openapi.js.map +2 -2
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
- package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
- package/dist/modules/workflows/api/rule-usage/route.js +80 -0
- package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
- package/dist/modules/workflows/api/task-settings/route.js +107 -0
- package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
- package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/route.js +37 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/serialize.js +83 -0
- package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
- package/dist/modules/workflows/api/templates/route.js +69 -0
- package/dist/modules/workflows/api/templates/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/route.js +119 -0
- package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
- package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +131 -51
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
- package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
- package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/instances/page.js +159 -22
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/tasks/page.js +8 -250
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
- package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
- package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
- package/dist/modules/workflows/cli.js +1 -1
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/commands/tasks.js +81 -0
- package/dist/modules/workflows/commands/tasks.js.map +7 -0
- package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
- package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
- package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
- package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/AgentSelector.js +115 -0
- package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
- package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
- package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
- package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
- package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/InputDataPanel.js +128 -0
- package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
- package/dist/modules/workflows/components/InspectorPanel.js +161 -0
- package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
- package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
- package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
- package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
- package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
- package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TriggersDialog.js +53 -0
- package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
- package/dist/modules/workflows/components/TriggersEditor.js +331 -0
- package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
- package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
- package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
- package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
- package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
- package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
- package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
- package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
- package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
- package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
- package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
- package/dist/modules/workflows/components/formConfig.js +39 -10
- package/dist/modules/workflows/components/formConfig.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
- package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
- package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
- package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
- package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
- package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/index.js +14 -0
- package/dist/modules/workflows/components/nodes/index.js.map +2 -2
- package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
- package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunGantt.js +130 -0
- package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
- package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
- package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
- package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
- package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
- package/dist/modules/workflows/data/entities.js +144 -4
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/metrics-validators.js +35 -0
- package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
- package/dist/modules/workflows/data/task-primitives.js +14 -0
- package/dist/modules/workflows/data/task-primitives.js.map +7 -0
- package/dist/modules/workflows/data/validators.js +504 -61
- package/dist/modules/workflows/data/validators.js.map +3 -3
- package/dist/modules/workflows/di.js +16 -1
- package/dist/modules/workflows/di.js.map +2 -2
- package/dist/modules/workflows/events.js +66 -8
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
- package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/dist/modules/workflows/extension-points.js +1 -1
- package/dist/modules/workflows/extension-points.js.map +2 -2
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
- package/dist/modules/workflows/lib/activity-executor.js +505 -137
- package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
- package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
- package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
- package/dist/modules/workflows/lib/activity-registry.js +27 -0
- package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
- package/dist/modules/workflows/lib/activity-types.js +291 -0
- package/dist/modules/workflows/lib/activity-types.js.map +7 -0
- package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
- package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
- package/dist/modules/workflows/lib/advanced-config.js +31 -0
- package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review.js +66 -0
- package/dist/modules/workflows/lib/agent-review.js.map +7 -0
- package/dist/modules/workflows/lib/ai-authoring.js +155 -0
- package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
- package/dist/modules/workflows/lib/annotation-events.js +10 -0
- package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
- package/dist/modules/workflows/lib/branching-routes.js +182 -0
- package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
- package/dist/modules/workflows/lib/breach-routing.js +50 -0
- package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
- package/dist/modules/workflows/lib/bulk-replay.js +101 -0
- package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
- package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
- package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
- package/dist/modules/workflows/lib/caller-graph.js +53 -0
- package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
- package/dist/modules/workflows/lib/code-view-apply.js +86 -0
- package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
- package/dist/modules/workflows/lib/component-guard.js +7 -0
- package/dist/modules/workflows/lib/component-guard.js.map +7 -0
- package/dist/modules/workflows/lib/condition-handler.js +443 -0
- package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
- package/dist/modules/workflows/lib/context-ledger.js +448 -0
- package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
- package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
- package/dist/modules/workflows/lib/definition-error-body.js +33 -0
- package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
- package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
- package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
- package/dist/modules/workflows/lib/definition-grant.js +90 -0
- package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
- package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
- package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
- package/dist/modules/workflows/lib/definition-payload.js +31 -0
- package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
- package/dist/modules/workflows/lib/draft-restore.js +49 -0
- package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
- package/dist/modules/workflows/lib/dry-run.js +106 -0
- package/dist/modules/workflows/lib/dry-run.js.map +7 -0
- package/dist/modules/workflows/lib/duration.js +66 -17
- package/dist/modules/workflows/lib/duration.js.map +2 -2
- package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
- package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
- package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
- package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/editor-annotations.js +195 -0
- package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
- package/dist/modules/workflows/lib/editor-commands.js +103 -0
- package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
- package/dist/modules/workflows/lib/editor-history.js +51 -0
- package/dist/modules/workflows/lib/editor-history.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-path.js +90 -0
- package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
- package/dist/modules/workflows/lib/engine-version.js +42 -0
- package/dist/modules/workflows/lib/engine-version.js.map +7 -0
- package/dist/modules/workflows/lib/error-handler.js +132 -0
- package/dist/modules/workflows/lib/error-handler.js.map +7 -0
- package/dist/modules/workflows/lib/error-routing.js +104 -0
- package/dist/modules/workflows/lib/error-routing.js.map +7 -0
- package/dist/modules/workflows/lib/event-logger.js +23 -0
- package/dist/modules/workflows/lib/event-logger.js.map +2 -2
- package/dist/modules/workflows/lib/expression-refs.js +168 -0
- package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
- package/dist/modules/workflows/lib/failure-grouping.js +62 -0
- package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
- package/dist/modules/workflows/lib/find-definition.js +1 -0
- package/dist/modules/workflows/lib/find-definition.js.map +2 -2
- package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
- package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
- package/dist/modules/workflows/lib/graph-utils.js +328 -77
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/icon-search.js +32 -0
- package/dist/modules/workflows/lib/icon-search.js.map +7 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
- package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
- package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-drag.js +28 -0
- package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
- package/dist/modules/workflows/lib/node-config-summary.js +128 -0
- package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
- package/dist/modules/workflows/lib/node-geometry.js +53 -0
- package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
- package/dist/modules/workflows/lib/node-nudge.js +44 -0
- package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
- package/dist/modules/workflows/lib/node-placement.js +55 -0
- package/dist/modules/workflows/lib/node-placement.js.map +7 -0
- package/dist/modules/workflows/lib/node-type-icons.js +54 -13
- package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
- package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
- package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/outcome-routing.js +158 -0
- package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
- package/dist/modules/workflows/lib/owned-definition.js +107 -0
- package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
- package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
- package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drag.js +36 -0
- package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drop.js +45 -0
- package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
- package/dist/modules/workflows/lib/parallel-handler.js +57 -2
- package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
- package/dist/modules/workflows/lib/port-contract.js +54 -0
- package/dist/modules/workflows/lib/port-contract.js.map +7 -0
- package/dist/modules/workflows/lib/portal-task-access.js +89 -0
- package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
- package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
- package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
- package/dist/modules/workflows/lib/route-chip-events.js +23 -0
- package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
- package/dist/modules/workflows/lib/route-chips.js +91 -0
- package/dist/modules/workflows/lib/route-chips.js.map +7 -0
- package/dist/modules/workflows/lib/route-edge.js +17 -0
- package/dist/modules/workflows/lib/route-edge.js.map +7 -0
- package/dist/modules/workflows/lib/route-kinds.js +67 -0
- package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
- package/dist/modules/workflows/lib/route-priority.js +104 -0
- package/dist/modules/workflows/lib/route-priority.js.map +7 -0
- package/dist/modules/workflows/lib/run-duration.js +44 -0
- package/dist/modules/workflows/lib/run-duration.js.map +7 -0
- package/dist/modules/workflows/lib/run-event-tone.js +25 -0
- package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
- package/dist/modules/workflows/lib/run-execution.js +305 -0
- package/dist/modules/workflows/lib/run-execution.js.map +7 -0
- package/dist/modules/workflows/lib/run-gantt.js +180 -0
- package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome.js +48 -0
- package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
- package/dist/modules/workflows/lib/sample-resolver.js +71 -0
- package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
- package/dist/modules/workflows/lib/seeds.js +1 -1
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/server-output-contract.js +65 -0
- package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
- package/dist/modules/workflows/lib/set-variable.js +47 -0
- package/dist/modules/workflows/lib/set-variable.js.map +7 -0
- package/dist/modules/workflows/lib/signal-handler.js +63 -4
- package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
- package/dist/modules/workflows/lib/start-fixtures.js +42 -0
- package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
- package/dist/modules/workflows/lib/status-colors.js +153 -22
- package/dist/modules/workflows/lib/status-colors.js.map +2 -2
- package/dist/modules/workflows/lib/step-handler.js +529 -53
- package/dist/modules/workflows/lib/step-handler.js.map +3 -3
- package/dist/modules/workflows/lib/step-presentation.js +147 -0
- package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
- package/dist/modules/workflows/lib/step-through.js +26 -0
- package/dist/modules/workflows/lib/step-through.js.map +7 -0
- package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
- package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
- package/dist/modules/workflows/lib/task-decision-context.js +38 -0
- package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
- package/dist/modules/workflows/lib/task-decisions.js +49 -0
- package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-access.js +62 -0
- package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-types.js +36 -0
- package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-registry.js +33 -0
- package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-schema.js +75 -0
- package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
- package/dist/modules/workflows/lib/task-handler.js +251 -32
- package/dist/modules/workflows/lib/task-handler.js.map +2 -2
- package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
- package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
- package/dist/modules/workflows/lib/task-list-query.js +19 -0
- package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
- package/dist/modules/workflows/lib/task-notifications.js +119 -0
- package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
- package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
- package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
- package/dist/modules/workflows/lib/task-presets.js +35 -0
- package/dist/modules/workflows/lib/task-presets.js.map +7 -0
- package/dist/modules/workflows/lib/task-quick-action.js +45 -0
- package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
- package/dist/modules/workflows/lib/task-resolution.js +120 -0
- package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
- package/dist/modules/workflows/lib/task-sla.js +357 -0
- package/dist/modules/workflows/lib/task-sla.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
- package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility.js +194 -0
- package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
- package/dist/modules/workflows/lib/timer-handler.js +3 -1
- package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +148 -20
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/dist/modules/workflows/lib/trigger-node.js +121 -0
- package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
- package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
- package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-executor.js +658 -6
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
- package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
- package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-templates.js +69 -0
- package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
- package/dist/modules/workflows/notifications.js +38 -10
- package/dist/modules/workflows/notifications.js.map +2 -2
- package/dist/modules/workflows/setup.js +81 -1
- package/dist/modules/workflows/setup.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
- package/dist/modules/workflows/widgets/injection-table.js +26 -0
- package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
- package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
- package/generated/entities/action_log/index.ts +1 -0
- package/generated/entities/user/index.ts +1 -0
- package/generated/entities/user_task/index.ts +7 -0
- package/generated/entities/workflow_definition/index.ts +3 -0
- package/generated/entities/workflow_definition_draft/index.ts +11 -0
- package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
- package/generated/entities/workflow_instance/index.ts +2 -0
- package/generated/entities.ids.generated.ts +4 -1
- package/generated/entity-fields-registry.ts +39 -0
- package/jest.setup.ts +13 -0
- package/package.json +8 -7
- package/src/helpers/integration/workflowsFixtures.ts +765 -5
- package/src/helpers/integration/workflowsUi.ts +318 -0
- package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
- package/src/modules/audit_logs/data/entities.ts +12 -0
- package/src/modules/audit_logs/data/validators.ts +1 -0
- package/src/modules/audit_logs/lib/projections.ts +5 -1
- package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
- package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
- package/src/modules/audit_logs/services/actionLogService.ts +3 -0
- package/src/modules/auth/data/entities.ts +21 -0
- package/src/modules/auth/i18n/de.json +31 -0
- package/src/modules/auth/i18n/en.json +31 -0
- package/src/modules/auth/i18n/es.json +31 -0
- package/src/modules/auth/i18n/ko.json +31 -0
- package/src/modules/auth/i18n/pl.json +31 -0
- package/src/modules/auth/lib/executionPrincipal.ts +235 -0
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
- package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
- package/src/modules/business_rules/data/validators.ts +6 -0
- package/src/modules/business_rules/i18n/de.json +4 -0
- package/src/modules/business_rules/i18n/en.json +4 -0
- package/src/modules/business_rules/i18n/es.json +4 -0
- package/src/modules/business_rules/i18n/ko.json +4 -0
- package/src/modules/business_rules/i18n/pl.json +4 -0
- package/src/modules/business_rules/lib/rule-engine.ts +15 -1
- package/src/modules/catalog/commands/products.ts +12 -0
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/ko.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/catalog/workflows.ts +35 -0
- package/src/modules/customer_accounts/AGENTS.md +11 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
- package/src/modules/customer_accounts/cli.ts +96 -0
- package/src/modules/customer_accounts/i18n/de.json +5 -0
- package/src/modules/customer_accounts/i18n/en.json +5 -0
- package/src/modules/customer_accounts/i18n/es.json +5 -0
- package/src/modules/customer_accounts/i18n/ko.json +5 -0
- package/src/modules/customer_accounts/i18n/pl.json +5 -0
- package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
- package/src/modules/customer_accounts/setup.ts +15 -3
- package/src/modules/customers/commands/deals.ts +5 -0
- package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
- package/src/modules/customers/components/detail/utils.ts +2 -0
- package/src/modules/customers/events.ts +21 -3
- package/src/modules/customers/i18n/de.json +4 -0
- package/src/modules/customers/i18n/en.json +4 -0
- package/src/modules/customers/i18n/es.json +4 -0
- package/src/modules/customers/i18n/ko.json +4 -0
- package/src/modules/customers/i18n/pl.json +4 -0
- package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
- package/src/modules/customers/lib/todoCompatibility.ts +4 -1
- package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
- package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
- package/src/modules/customers/workflows.ts +57 -0
- package/src/modules/entities/api/records.ts +18 -62
- package/src/modules/entities/lib/entityClassification.ts +102 -0
- package/src/modules/sales/commands/documents.ts +46 -0
- package/src/modules/sales/events.ts +20 -2
- package/src/modules/sales/i18n/de.json +2 -1
- package/src/modules/sales/i18n/en.json +2 -1
- package/src/modules/sales/i18n/es.json +2 -1
- package/src/modules/sales/i18n/ko.json +2 -1
- package/src/modules/sales/i18n/pl.json +2 -1
- package/src/modules/sales/workflows.ts +12 -1
- package/src/modules/seeds/README.md +86 -0
- package/src/modules/seeds/cli.ts +220 -0
- package/src/modules/seeds/examples/sample-seed.json +26 -0
- package/src/modules/seeds/index.ts +11 -0
- package/src/modules/workflows/AGENTS.md +851 -10
- package/src/modules/workflows/acl.ts +96 -0
- package/src/modules/workflows/ai-agents.ts +80 -0
- package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
- package/src/modules/workflows/ai-tools/types.ts +117 -0
- package/src/modules/workflows/ai-tools.ts +20 -0
- package/src/modules/workflows/api/command-settings/route.ts +171 -0
- package/src/modules/workflows/api/commands/route.ts +109 -0
- package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
- package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
- package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
- package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
- package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
- package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
- package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
- package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
- package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
- package/src/modules/workflows/api/definitions/route.ts +88 -113
- package/src/modules/workflows/api/definitions/serialize.ts +9 -0
- package/src/modules/workflows/api/endpoints/route.ts +88 -0
- package/src/modules/workflows/api/functions/route.ts +91 -0
- package/src/modules/workflows/api/grantable-features/route.ts +102 -0
- package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
- package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
- package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
- package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
- package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
- package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
- package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
- package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
- package/src/modules/workflows/api/instances/route.ts +135 -3
- package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
- package/src/modules/workflows/api/openapi.ts +549 -2
- package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
- package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
- package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
- package/src/modules/workflows/api/rule-usage/route.ts +94 -0
- package/src/modules/workflows/api/task-settings/route.ts +138 -0
- package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
- package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
- package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
- package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
- package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
- package/src/modules/workflows/api/tasks/route.ts +60 -5
- package/src/modules/workflows/api/tasks/serialize.ts +119 -0
- package/src/modules/workflows/api/templates/route.ts +87 -0
- package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
- package/src/modules/workflows/api/work-inbox/route.ts +153 -0
- package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
- package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
- package/src/modules/workflows/backend/definitions/page.tsx +156 -76
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
- package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
- package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
- package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/page.tsx +218 -38
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
- package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
- package/src/modules/workflows/backend/tasks/page.tsx +20 -333
- package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
- package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
- package/src/modules/workflows/cli.ts +1 -1
- package/src/modules/workflows/commands/tasks.ts +146 -0
- package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
- package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
- package/src/modules/workflows/components/AgentSelector.tsx +200 -0
- package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
- package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
- package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
- package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
- package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
- package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
- package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
- package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
- package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
- package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
- package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
- package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
- package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
- package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
- package/src/modules/workflows/components/StepsEditor.tsx +9 -2
- package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
- package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
- package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
- package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
- package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
- package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
- package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
- package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
- package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
- package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
- package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
- package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
- package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
- package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
- package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
- package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
- package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
- package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
- package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
- package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
- package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
- package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
- package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
- package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
- package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
- package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
- package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
- package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
- package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
- package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
- package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
- package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
- package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
- package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
- package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
- package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
- package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
- package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
- package/src/modules/workflows/components/formConfig.tsx +84 -10
- package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
- package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
- package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
- package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
- package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
- package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
- package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
- package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
- package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
- package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
- package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
- package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
- package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
- package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
- package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
- package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
- package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
- package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
- package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
- package/src/modules/workflows/components/nodes/index.ts +17 -0
- package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
- package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
- package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
- package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
- package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
- package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
- package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
- package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
- package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
- package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
- package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
- package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
- package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
- package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
- package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
- package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
- package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
- package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
- package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
- package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
- package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
- package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
- package/src/modules/workflows/data/entities.ts +397 -4
- package/src/modules/workflows/data/metrics-validators.ts +51 -0
- package/src/modules/workflows/data/task-primitives.ts +36 -0
- package/src/modules/workflows/data/types.ts +81 -2
- package/src/modules/workflows/data/validators.ts +729 -60
- package/src/modules/workflows/di.ts +22 -0
- package/src/modules/workflows/events.ts +68 -8
- package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/src/modules/workflows/examples/templates/order-approval.json +230 -0
- package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/src/modules/workflows/extension-points.ts +1 -1
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
- package/src/modules/workflows/i18n/de.json +1083 -24
- package/src/modules/workflows/i18n/en.json +1081 -22
- package/src/modules/workflows/i18n/es.json +1083 -24
- package/src/modules/workflows/i18n/ko.json +1072 -13
- package/src/modules/workflows/i18n/pl.json +1082 -23
- package/src/modules/workflows/lib/activity-executor.ts +855 -186
- package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
- package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
- package/src/modules/workflows/lib/activity-registry.ts +89 -0
- package/src/modules/workflows/lib/activity-types.ts +415 -0
- package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
- package/src/modules/workflows/lib/advanced-config.ts +41 -0
- package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
- package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
- package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
- package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
- package/src/modules/workflows/lib/agent-review.ts +171 -0
- package/src/modules/workflows/lib/ai-authoring.ts +402 -0
- package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
- package/src/modules/workflows/lib/annotation-events.ts +15 -0
- package/src/modules/workflows/lib/branching-routes.ts +280 -0
- package/src/modules/workflows/lib/breach-routing.ts +142 -0
- package/src/modules/workflows/lib/bulk-replay.ts +185 -0
- package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
- package/src/modules/workflows/lib/caller-graph.ts +104 -0
- package/src/modules/workflows/lib/code-view-apply.ts +178 -0
- package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
- package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
- package/src/modules/workflows/lib/component-guard.ts +13 -0
- package/src/modules/workflows/lib/condition-handler.ts +658 -0
- package/src/modules/workflows/lib/context-ledger.ts +814 -0
- package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
- package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
- package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
- package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
- package/src/modules/workflows/lib/definition-error-body.ts +43 -0
- package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
- package/src/modules/workflows/lib/definition-grant.ts +211 -0
- package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
- package/src/modules/workflows/lib/definition-payload.ts +81 -0
- package/src/modules/workflows/lib/draft-restore.ts +72 -0
- package/src/modules/workflows/lib/dry-run.ts +203 -0
- package/src/modules/workflows/lib/duration.ts +138 -24
- package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
- package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
- package/src/modules/workflows/lib/editor-annotations.ts +301 -0
- package/src/modules/workflows/lib/editor-commands.ts +205 -0
- package/src/modules/workflows/lib/editor-history.ts +151 -0
- package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
- package/src/modules/workflows/lib/endpoint-path.ts +134 -0
- package/src/modules/workflows/lib/engine-version.ts +67 -0
- package/src/modules/workflows/lib/error-handler.ts +192 -0
- package/src/modules/workflows/lib/error-routing.ts +236 -0
- package/src/modules/workflows/lib/event-logger.ts +27 -0
- package/src/modules/workflows/lib/expression-refs.ts +291 -0
- package/src/modules/workflows/lib/failure-grouping.ts +134 -0
- package/src/modules/workflows/lib/find-definition.ts +4 -0
- package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
- package/src/modules/workflows/lib/graph-utils.ts +620 -110
- package/src/modules/workflows/lib/icon-search.ts +65 -0
- package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
- package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
- package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
- package/src/modules/workflows/lib/ledger-drag.ts +61 -0
- package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
- package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
- package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
- package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
- package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
- package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
- package/src/modules/workflows/lib/node-config-summary.ts +235 -0
- package/src/modules/workflows/lib/node-geometry.ts +168 -0
- package/src/modules/workflows/lib/node-nudge.ts +63 -0
- package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
- package/src/modules/workflows/lib/node-placement.ts +104 -0
- package/src/modules/workflows/lib/node-type-icons.ts +71 -10
- package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
- package/src/modules/workflows/lib/outcome-routing.ts +346 -0
- package/src/modules/workflows/lib/owned-definition.ts +188 -0
- package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
- package/src/modules/workflows/lib/palette-drag.ts +68 -0
- package/src/modules/workflows/lib/palette-drop.ts +114 -0
- package/src/modules/workflows/lib/parallel-handler.ts +79 -2
- package/src/modules/workflows/lib/port-contract.ts +107 -0
- package/src/modules/workflows/lib/portal-task-access.ts +220 -0
- package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
- package/src/modules/workflows/lib/route-chip-events.ts +45 -0
- package/src/modules/workflows/lib/route-chips.ts +177 -0
- package/src/modules/workflows/lib/route-edge.ts +57 -0
- package/src/modules/workflows/lib/route-kinds.ts +166 -0
- package/src/modules/workflows/lib/route-priority.ts +197 -0
- package/src/modules/workflows/lib/run-duration.ts +70 -0
- package/src/modules/workflows/lib/run-event-tone.ts +46 -0
- package/src/modules/workflows/lib/run-execution.ts +598 -0
- package/src/modules/workflows/lib/run-gantt.ts +311 -0
- package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
- package/src/modules/workflows/lib/run-outcome.ts +142 -0
- package/src/modules/workflows/lib/sample-resolver.ts +113 -0
- package/src/modules/workflows/lib/seeds.ts +3 -1
- package/src/modules/workflows/lib/server-output-contract.ts +120 -0
- package/src/modules/workflows/lib/set-variable.ts +94 -0
- package/src/modules/workflows/lib/signal-handler.ts +134 -4
- package/src/modules/workflows/lib/start-fixtures.ts +93 -0
- package/src/modules/workflows/lib/status-colors.ts +220 -21
- package/src/modules/workflows/lib/step-handler.ts +744 -68
- package/src/modules/workflows/lib/step-presentation.ts +295 -0
- package/src/modules/workflows/lib/step-through.ts +71 -0
- package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
- package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
- package/src/modules/workflows/lib/task-decision-context.ts +76 -0
- package/src/modules/workflows/lib/task-decisions.ts +117 -0
- package/src/modules/workflows/lib/task-entity-access.ts +181 -0
- package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
- package/src/modules/workflows/lib/task-entity-types.ts +66 -0
- package/src/modules/workflows/lib/task-form-registry.ts +123 -0
- package/src/modules/workflows/lib/task-form-schema.ts +129 -0
- package/src/modules/workflows/lib/task-handler.ts +492 -51
- package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
- package/src/modules/workflows/lib/task-list-query.ts +46 -0
- package/src/modules/workflows/lib/task-notifications.ts +218 -0
- package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
- package/src/modules/workflows/lib/task-presets.ts +95 -0
- package/src/modules/workflows/lib/task-quick-action.ts +111 -0
- package/src/modules/workflows/lib/task-resolution.ts +270 -0
- package/src/modules/workflows/lib/task-sla.ts +628 -0
- package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
- package/src/modules/workflows/lib/task-visibility.ts +627 -0
- package/src/modules/workflows/lib/timer-handler.ts +8 -1
- package/src/modules/workflows/lib/transition-handler.ts +228 -20
- package/src/modules/workflows/lib/trigger-node.ts +272 -0
- package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
- package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
- package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
- package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
- package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
- package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
- package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
- package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
- package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
- package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
- package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
- package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
- package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
- package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
- package/src/modules/workflows/lib/workflow-templates.ts +91 -0
- package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
- package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
- package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
- package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
- package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
- package/src/modules/workflows/notifications.ts +40 -10
- package/src/modules/workflows/setup.ts +128 -0
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
- package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
- package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
- package/src/modules/workflows/widgets/injection-table.ts +52 -2
- package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
- package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
- package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
- package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/ai-tools/authoring-pack.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * `workflows.*` agent-authoring tool pack (spec \u00A79.5 \"Agent-as-author\").\n *\n * A person can author a workflow in the Studio; this pack lets an agent do the\n * same through the SAME surfaces. It is deliberately thin: the activity\n * registry, the context ledger and the structured issue body already ARE the\n * agent API, so every tool below delegates to an existing exported function\n * rather than growing a parallel engine surface.\n *\n * What each tool reuses:\n * - `list_activity_types` \u2192 `listActivityTypes()` + the OpenAPI `zodToJsonSchema`\n * - `get_context_schema` \u2192 the context-schema route's own resolver + ledger\n * - `validate_definition` \u2192 `evaluateWorkflowDefinition` (Problems panel + 400 body)\n * - `create_definition` \u2192 `createWorkflowDefinitionInputCheckedSchema` (the route's gate)\n * - `update_definition` \u2192 the per-user `workflow_definition_drafts` layer\n * - `start_test_run` \u2192 `startWorkflow({ isDryRun: true })` + `buildWouldDoReport`\n *\n * Two safety invariants hold for every write here:\n * 1. NEVER auto-published. `create_definition` mints the row with\n * `enabled: false`, which `findWorkflowDefinition` treats as unresolvable\n * for execution, and `update_definition` writes a draft, never the\n * definition. Neither tool exposes `enabled` or `lifecycle` as an input.\n * 2. NEVER cross-tenant. Every read and write is scoped by `tenantId`, so a\n * foreign definition is invisible rather than merely forbidden.\n */\n\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from '@open-mercato/shared/lib/openapi'\nimport {\n WorkflowDefinition,\n WorkflowDefinitionDraft,\n WorkflowEvent,\n WorkflowInstance,\n StepInstance,\n type WorkflowDefinitionData,\n} from '../data/entities'\nimport {\n createWorkflowDefinitionInputCheckedSchema,\n workflowDefinitionDataSchema,\n} from '../data/validators'\nimport { workflowDraftGenerationSchema } from '../lib/ai-authoring'\nimport { isComponentKind } from '../lib/component-guard'\nimport {\n computeDefinitionContextLedger,\n narrowLedgerToStep,\n resolveDefinitionDataForLedger,\n warmContextLedgerResolvers,\n} from '../lib/definition-context-schema'\nimport { evaluateWorkflowDefinition } from '../lib/definition-evaluation'\nimport { normalizeDefinitionValidationIssues } from '../lib/definition-error-body'\nimport {\n DRY_RUN_EVENT_TYPES,\n buildWouldDoReport,\n type WouldDoSourceEvent,\n} from '../lib/dry-run'\nimport { findWorkflowDefinition } from '../lib/find-definition'\nimport { listActivityTypes } from '../lib/activity-registry'\nimport '../lib/activity-registry-bootstrap'\nimport { invalidateTriggerCache } from '../lib/event-trigger-service'\nimport {\n MISSING_TENANT_ISSUE,\n failure,\n featureRefusal,\n issue,\n missingFeatures,\n organizationWhere,\n resolveScope,\n type WorkflowsAiToolDefinition,\n type WorkflowsToolContext,\n} from './types'\n\nconst DEFINITIONS_VIEW = 'workflows.definitions.view'\nconst DEFINITIONS_CREATE = 'workflows.definitions.create'\nconst DEFINITIONS_EDIT = 'workflows.definitions.edit'\nconst DEFINITIONS_TEST_RUN = 'workflows.definitions.test_run'\nconst INSTANCES_VIEW = 'workflows.instances.view'\nconst INSTANCES_CREATE = 'workflows.instances.create'\n\nfunction resolveEm(ctx: WorkflowsToolContext): EntityManager {\n return ctx.container.resolve<EntityManager>('em')\n}\n\n/**\n * Definition ids accepted by the context-schema route: a DB UUID, or\n * `code:<workflowId>` / the synthetic code UUID for code-defined workflows.\n */\nconst definitionIdSchema = z\n .string()\n .min(1)\n .describe('Definition UUID, or \"code:<workflowId>\" for a code-defined workflow')\n\nconst rawDefinitionSchema = z\n .record(z.string(), z.unknown())\n .describe('The workflow definition JSON \u2014 the same object the Studio Code view round-trips')\n\nfunction asDefinitionData(value: Record<string, unknown>): WorkflowDefinitionData {\n return value as unknown as WorkflowDefinitionData\n}\n\n/** Compute the server ledger for a definition, tolerating a malformed graph. */\nasync function tryComputeLedger(\n ctx: WorkflowsToolContext,\n definition: WorkflowDefinitionData,\n) {\n try {\n await warmContextLedgerResolvers(ctx.container)\n return computeDefinitionContextLedger(definition)\n } catch {\n return null\n }\n}\n\n// ===========================================================================\n// workflows.list_activity_types\n// ===========================================================================\n\nconst listActivityTypesInput = z.object({\n activityType: z\n .string()\n .optional()\n .describe('Return only this activity type instead of the whole registry'),\n})\n\nconst listActivityTypesTool: WorkflowsAiToolDefinition<\n z.infer<typeof listActivityTypesInput>\n> = {\n name: 'workflows.list_activity_types',\n displayName: 'List workflow activity types',\n description:\n 'List every registered workflow activity type with its JSON-Schema config contract, form fields, async capability, compensability and dry-run mock mode. This registry IS the authoring contract \u2014 read it before writing any activity config so the config validates on the first attempt.',\n inputSchema: listActivityTypesInput,\n requiredFeatures: [DEFINITIONS_VIEW],\n tags: ['read', 'workflows', 'authoring'],\n isMutation: false,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_VIEW])\n if (missing.length) return featureRefusal(missing)\n\n const entries = listActivityTypes().filter(\n (entry) => !input.activityType || entry.id === input.activityType,\n )\n\n if (input.activityType && entries.length === 0) {\n return failure(\n issue(\n ['activityType'],\n 'unknown_activity_type',\n `Unknown activity type \"${input.activityType}\"`,\n { expected: listActivityTypes().map((entry) => entry.id).join(' | '), got: input.activityType },\n ),\n )\n }\n\n return {\n ok: true,\n issues: [],\n activityTypes: entries.map((entry) => ({\n id: entry.id,\n icon: entry.icon,\n i18nKey: entry.i18nKey,\n configSchema: zodToJsonSchema(entry.configSchema) ?? null,\n form: entry.form.map((field) => ({\n id: field.id,\n component: field.component,\n required: field.required ?? false,\n })),\n async: entry.async,\n compensable: entry.compensable ?? false,\n // 'refuse' and 'none' both stop a dry run at this activity.\n dryRunMock:\n entry.mock === 'refuse' ? 'refuse' : entry.mock === undefined ? 'none' : 'simulated',\n })),\n }\n },\n}\n\n// ===========================================================================\n// workflows.get_context_schema\n// ===========================================================================\n\nconst getContextSchemaInput = z.object({\n definitionId: definitionIdSchema,\n stepId: z\n .string()\n .optional()\n .describe('Narrow the response to one step instead of returning every step'),\n})\n\nconst getContextSchemaTool: WorkflowsAiToolDefinition<\n z.infer<typeof getContextSchemaInput>\n> = {\n name: 'workflows.get_context_schema',\n displayName: 'Get workflow context ledger',\n description:\n 'Return the per-step context ledger for a saved workflow definition: for every step, which context paths are available when it runs, with type, presence (always/maybe) and the producing source. Use this to discover the exact {{context.*}} paths a step may reference before writing any expression.',\n inputSchema: getContextSchemaInput,\n requiredFeatures: [DEFINITIONS_VIEW],\n tags: ['read', 'workflows', 'authoring'],\n isMutation: false,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_VIEW])\n if (missing.length) return featureRefusal(missing)\n\n const scope = resolveScope(ctx)\n if (!scope) return failure(MISSING_TENANT_ISSUE)\n\n await warmContextLedgerResolvers(ctx.container)\n\n const definitionData = await resolveDefinitionDataForLedger(\n resolveEm(ctx),\n input.definitionId,\n { tenantId: scope.tenantId, organizationWhere: organizationWhere(scope) },\n )\n\n if (!definitionData) {\n return failure(\n issue(\n ['definitionId'],\n 'not_found',\n 'Workflow definition not found',\n { got: input.definitionId },\n ),\n )\n }\n\n const ledger = computeDefinitionContextLedger(definitionData)\n\n if (input.stepId === undefined) {\n return { ok: true, issues: [], steps: ledger.steps }\n }\n\n const stepView = narrowLedgerToStep(ledger, input.stepId)\n if (!stepView) {\n return failure(\n issue(\n ['stepId'],\n 'not_found',\n 'Step not found in workflow definition',\n { got: input.stepId },\n ),\n )\n }\n\n return { ok: true, issues: [], steps: { [input.stepId]: stepView } }\n },\n}\n\n// ===========================================================================\n// workflows.validate_definition\n// ===========================================================================\n\nconst validateDefinitionInput = z\n .object({\n definition: rawDefinitionSchema\n .optional()\n .describe('Validate this definition JSON directly, without saving anything'),\n definitionId: definitionIdSchema\n .optional()\n .describe('Validate the definition stored under this id instead'),\n })\n .describe('Supply exactly one of `definition` or `definitionId`')\n\nconst validateDefinitionTool: WorkflowsAiToolDefinition<\n z.infer<typeof validateDefinitionInput>\n> = {\n name: 'workflows.validate_definition',\n displayName: 'Validate a workflow definition',\n description:\n 'Run the full workflow validation pass over a definition without saving it. Returns `issues` (the same structured {path, code, message, expected, got} list the definition API returns on a 400) and `problems` (exactly what the Studio Problems panel would show, errors first). Call this before create_definition or update_definition and fix every error.',\n inputSchema: validateDefinitionInput,\n requiredFeatures: [DEFINITIONS_VIEW],\n tags: ['read', 'workflows', 'authoring'],\n isMutation: false,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_VIEW])\n if (missing.length) return featureRefusal(missing)\n\n if ((input.definition && input.definitionId) || (!input.definition && !input.definitionId)) {\n return failure(\n issue(\n ['definition'],\n 'invalid_input',\n 'Supply exactly one of `definition` or `definitionId`',\n { expected: 'definition | definitionId' },\n ),\n )\n }\n\n let definitionData: WorkflowDefinitionData\n if (input.definitionId) {\n const scope = resolveScope(ctx)\n if (!scope) return failure(MISSING_TENANT_ISSUE)\n const resolved = await resolveDefinitionDataForLedger(\n resolveEm(ctx),\n input.definitionId,\n { tenantId: scope.tenantId, organizationWhere: organizationWhere(scope) },\n )\n if (!resolved) {\n return failure(\n issue(['definitionId'], 'not_found', 'Workflow definition not found', {\n got: input.definitionId,\n }),\n )\n }\n definitionData = resolved\n } else {\n definitionData = asDefinitionData(input.definition!)\n }\n\n const ledger = await tryComputeLedger(ctx, definitionData)\n const evaluation = evaluateWorkflowDefinition(definitionData, { ledger })\n\n return {\n ok: evaluation.valid,\n issues: evaluation.issues,\n problems: evaluation.problems,\n valid: evaluation.valid,\n errorCount: evaluation.errorCount,\n warningCount: evaluation.warningCount,\n }\n },\n}\n\n// ===========================================================================\n// workflows.create_definition\n// ===========================================================================\n\nconst createDefinitionInput = z.object({\n workflowId: z\n .string()\n .min(1)\n .max(100)\n .describe('Stable machine id, lowercase letters/numbers/dots/hyphens/underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n definition: rawDefinitionSchema,\n metadata: z.record(z.string(), z.unknown()).optional().nullable(),\n})\n\nconst createDefinitionTool: WorkflowsAiToolDefinition<\n z.infer<typeof createDefinitionInput>\n> = {\n name: 'workflows.create_definition',\n displayName: 'Create a workflow definition (disabled draft)',\n description:\n 'Create a new workflow definition. It is ALWAYS created disabled: it appears in the Studio for a human to review and enable, and the engine will not resolve it for execution or fire its triggers until a person publishes it. Validate with validate_definition first \u2014 this tool applies the identical schema gate the REST API applies and returns the same structured issues on rejection.',\n inputSchema: createDefinitionInput,\n requiredFeatures: [DEFINITIONS_CREATE],\n tags: ['write', 'workflows', 'authoring'],\n isMutation: true,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_CREATE])\n if (missing.length) return featureRefusal(missing)\n\n const scope = resolveScope(ctx)\n if (!scope) return failure(MISSING_TENANT_ISSUE)\n if (!scope.organizationId) {\n return failure(\n issue(\n ['organizationId'],\n 'missing_organization_context',\n 'An organization context is required to create a workflow definition',\n ),\n )\n }\n\n // The exact gate the POST /api/workflows/definitions route applies, so an\n // agent-authored payload is rejected for exactly the same reasons, with\n // exactly the same structured issues, as a human-authored one.\n const validation = createWorkflowDefinitionInputCheckedSchema.safeParse({\n workflowId: input.workflowId,\n workflowName: input.workflowName,\n description: input.description,\n definition: input.definition,\n metadata: input.metadata,\n })\n if (!validation.success) {\n return failure(...normalizeDefinitionValidationIssues(validation.error))\n }\n\n const em = resolveEm(ctx)\n const existing = await em.findOne(\n WorkflowDefinition,\n { workflowId: input.workflowId, tenantId: scope.tenantId },\n { orderBy: { version: 'DESC' } },\n )\n if (existing) {\n return failure(\n issue(\n ['workflowId'],\n 'already_exists',\n `Workflow definition with ID \"${input.workflowId}\" already exists`,\n { got: input.workflowId },\n ),\n )\n }\n\n // New definitions default to strict interpolation, matching the create route.\n const definitionData = validation.data.definition.interpolation\n ? validation.data.definition\n : { ...validation.data.definition, interpolation: 'strict' as const }\n\n const created = em.create(WorkflowDefinition, {\n workflowId: validation.data.workflowId,\n workflowName: validation.data.workflowName,\n description: validation.data.description,\n version: validation.data.version,\n definition: definitionData,\n metadata: validation.data.metadata,\n // NEVER auto-published (spec \u00A79.5). `findWorkflowDefinition` requires\n // `enabled = true` to resolve a workflow for execution, so a human\n // enabling it in the Studio is the only way this ever runs.\n enabled: false,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n createdBy: ctx.userId ?? null,\n createdAt: new Date(),\n updatedAt: new Date(),\n })\n\n await em.persist(created).flush()\n invalidateTriggerCache(scope.tenantId, scope.organizationId ?? undefined)\n\n const ledger = await tryComputeLedger(ctx, definitionData as WorkflowDefinitionData)\n const evaluation = evaluateWorkflowDefinition(definitionData as WorkflowDefinitionData, {\n ledger,\n })\n\n return {\n ok: true,\n issues: [],\n definitionId: created.id,\n workflowId: created.workflowId,\n version: created.version,\n enabled: false,\n published: false,\n problems: evaluation.problems,\n errorCount: evaluation.errorCount,\n warningCount: evaluation.warningCount,\n }\n },\n}\n\n// ===========================================================================\n// workflows.update_definition\n// ===========================================================================\n\nconst updateDefinitionInput = z.object({\n definitionId: z.uuid().describe('UUID of the saved definition to draft changes against'),\n definition: rawDefinitionSchema,\n metadata: z.record(z.string(), z.unknown()).optional().nullable(),\n})\n\nconst updateDefinitionTool: WorkflowsAiToolDefinition<\n z.infer<typeof updateDefinitionInput>\n> = {\n name: 'workflows.update_definition',\n displayName: 'Update a workflow definition (as a review draft)',\n description:\n 'Write proposed changes to a saved workflow definition as a per-user editor DRAFT. The published definition is never modified: the next person to open that definition in the Studio sees the draft offered for restore, reviews the visual and JSON diff, and decides whether to save it. Returns the Problems-panel result for the drafted definition so you can self-correct before a human looks.',\n inputSchema: updateDefinitionInput,\n requiredFeatures: [DEFINITIONS_EDIT],\n tags: ['write', 'workflows', 'authoring'],\n isMutation: true,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_EDIT])\n if (missing.length) return featureRefusal(missing)\n\n const scope = resolveScope(ctx)\n if (!scope) return failure(MISSING_TENANT_ISSUE)\n\n // A draft belongs to a person \u2014 it is the working copy they will be shown\n // on their next Studio visit. Without a user there is nobody to review it.\n if (!ctx.userId) {\n return failure(\n issue(\n ['userId'],\n 'missing_user_context',\n 'A user context is required: drafts are per-user review copies',\n ),\n )\n }\n\n const parsed = workflowDefinitionDataSchema.safeParse(input.definition)\n if (!parsed.success) {\n return failure(...normalizeDefinitionValidationIssues(parsed.error))\n }\n\n const em = resolveEm(ctx)\n const definition = await em.findOne(WorkflowDefinition, {\n id: input.definitionId,\n tenantId: scope.tenantId,\n ...organizationWhere(scope),\n deletedAt: null,\n })\n\n if (!definition) {\n return failure(\n issue(['definitionId'], 'not_found', 'Workflow definition not found', {\n got: input.definitionId,\n }),\n )\n }\n\n // Matches the draft route's upsert key: (definitionId, userId, tenantId).\n const existingDraft = await em.findOne(WorkflowDefinitionDraft, {\n definitionId: input.definitionId,\n userId: ctx.userId,\n tenantId: scope.tenantId,\n })\n\n let draft: WorkflowDefinitionDraft\n if (existingDraft) {\n existingDraft.deletedAt = null\n existingDraft.organizationId = scope.organizationId ?? existingDraft.organizationId\n existingDraft.definition = parsed.data as WorkflowDefinitionData\n if (input.metadata !== undefined) {\n existingDraft.metadata = input.metadata as WorkflowDefinitionDraft['metadata']\n }\n existingDraft.baseUpdatedAt = definition.updatedAt\n draft = existingDraft\n } else {\n draft = em.create(WorkflowDefinitionDraft, {\n definitionId: input.definitionId,\n userId: ctx.userId,\n definition: parsed.data as WorkflowDefinitionData,\n metadata: (input.metadata ?? null) as WorkflowDefinitionDraft['metadata'],\n baseUpdatedAt: definition.updatedAt,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId ?? definition.organizationId,\n })\n em.persist(draft)\n }\n\n await em.flush()\n\n const definitionData = parsed.data as WorkflowDefinitionData\n const ledger = await tryComputeLedger(ctx, definitionData)\n const evaluation = evaluateWorkflowDefinition(definitionData, { ledger })\n\n return {\n ok: true,\n issues: [],\n draftId: draft.id,\n definitionId: input.definitionId,\n // The published definition was not touched, and its optimistic lock was\n // not taken \u2014 drafts deliberately sit outside it.\n published: false,\n definitionUpdatedAt: definition.updatedAt.toISOString(),\n problems: evaluation.problems,\n errorCount: evaluation.errorCount,\n warningCount: evaluation.warningCount,\n }\n },\n}\n\n// ===========================================================================\n// workflows.start_test_run\n// ===========================================================================\n\nconst startTestRunInput = z.object({\n workflowId: z.string().min(1).describe('The definition workflowId to test'),\n version: z.number().int().positive().optional(),\n initialContext: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Starting workflow context, shaped by the definition contextSchema.input'),\n correlationKey: z.string().optional(),\n})\n\nconst startTestRunTool: WorkflowsAiToolDefinition<z.infer<typeof startTestRunInput>> = {\n name: 'workflows.start_test_run',\n displayName: 'Start a workflow dry run',\n description:\n 'Start an isolated DRY RUN of a workflow and return the \"would do\" report: every side effect the run suppressed, in order. Activities are simulated from their registry mocks (an activity with no mock refuses and stops the run), user tasks are recorded but never created, and nothing reaches real data. This is always a dry run \u2014 there is no option to make it real.',\n inputSchema: startTestRunInput,\n requiredFeatures: [INSTANCES_VIEW, INSTANCES_CREATE, DEFINITIONS_TEST_RUN],\n tags: ['write', 'workflows', 'testing'],\n isMutation: true,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [INSTANCES_VIEW, INSTANCES_CREATE, DEFINITIONS_TEST_RUN])\n if (missing.length) return featureRefusal(missing)\n\n const scope = resolveScope(ctx)\n if (!scope) return failure(MISSING_TENANT_ISSUE)\n if (!scope.organizationId) {\n return failure(\n issue(\n ['organizationId'],\n 'missing_organization_context',\n 'An organization context is required to start a workflow run',\n ),\n )\n }\n\n const em = resolveEm(ctx)\n const definition = await findWorkflowDefinition(em, {\n workflowId: input.workflowId,\n version: input.version,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n })\n\n if (!definition) {\n return failure(\n issue(['workflowId'], 'not_found', 'Workflow definition not found', {\n got: input.workflowId,\n }),\n )\n }\n\n if (isComponentKind(definition.kind)) {\n return failure(\n issue(\n ['workflowId'],\n 'component_not_startable',\n 'This workflow is a reusable component and cannot be started standalone; invoke it from a SUB_WORKFLOW step',\n ),\n )\n }\n\n const workflowExecutor = ctx.container.resolve<{\n startWorkflow: (\n em: EntityManager,\n options: Record<string, unknown>,\n ) => Promise<WorkflowInstance>\n executeWorkflow: (\n em: EntityManager,\n container: unknown,\n instanceId: string,\n options: { userId?: string | null },\n ) => Promise<unknown>\n }>('workflowExecutor')\n\n const instance = await workflowExecutor.startWorkflow(em, {\n workflowId: input.workflowId,\n version: input.version,\n initialContext: input.initialContext ?? {},\n correlationKey: input.correlationKey,\n metadata: { initiatedBy: ctx.userId ?? null },\n // Forced, never an input. Dry-run isolation is the engine's own\n // mechanism: mocked effectors, suppressed USER_TASKs, no enqueueing.\n isDryRun: true,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n })\n\n let executionError: string | null = null\n try {\n await workflowExecutor.executeWorkflow(em, ctx.container, instance.id, {\n userId: ctx.userId,\n })\n } catch (error) {\n executionError = error instanceof Error ? error.message : String(error)\n }\n\n const events = await em.find(\n WorkflowEvent,\n {\n workflowInstanceId: instance.id,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n eventType: {\n $in: [\n DRY_RUN_EVENT_TYPES.activitySimulated,\n DRY_RUN_EVENT_TYPES.activityRefused,\n DRY_RUN_EVENT_TYPES.userTaskSimulated,\n DRY_RUN_EVENT_TYPES.businessRuleActionsSuppressed,\n ],\n },\n },\n { orderBy: [{ occurredAt: 'ASC' }, { id: 'ASC' }], limit: 100 },\n )\n\n const stepInstanceIds = Array.from(\n new Set(\n events\n .map((event) => event.stepInstanceId)\n .filter((id): id is string => typeof id === 'string' && id.length > 0),\n ),\n )\n const stepInstances = stepInstanceIds.length\n ? await em.find(StepInstance, {\n id: { $in: stepInstanceIds },\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n })\n : []\n const stepIdByInstanceId = new Map(stepInstances.map((step) => [step.id, step.stepId]))\n\n const sourceEvents: WouldDoSourceEvent[] = events.map((event) => ({\n id: event.id,\n eventType: event.eventType,\n stepId: event.stepInstanceId ? stepIdByInstanceId.get(event.stepInstanceId) ?? null : null,\n occurredAt: event.occurredAt,\n eventData: (event.eventData ?? null) as Record<string, unknown> | null,\n }))\n const report = buildWouldDoReport(sourceEvents)\n\n const refreshed = await em.findOne(WorkflowInstance, {\n id: instance.id,\n tenantId: scope.tenantId,\n })\n\n return {\n ok: executionError === null,\n issues: executionError\n ? [issue(['execution'], 'execution_failed', executionError)]\n : [],\n instanceId: instance.id,\n isDryRun: true,\n status: refreshed?.status ?? instance.status,\n currentStepId: refreshed?.currentStepId ?? null,\n wouldDo: report.entries,\n stoppedByRefusal: report.stoppedByRefusal,\n }\n },\n}\n\n// ===========================================================================\n// workflows.validate_workflow_definition\n// ===========================================================================\n\n/**\n * Validate a DRAFT in the exact shape the in-Studio `workflows.workflow_author`\n * agent emits, so that agent can self-correct inside its tool loop before a\n * draft ever reaches the generate route.\n *\n * This mirrors `api/definitions/generate/route.ts` step for step \u2014 reshape the\n * draft's `{ steps, transitions, contextSchema }` into a definition, parse it\n * through the one `workflowDefinitionDataSchema`, then run the same\n * `evaluateWorkflowDefinition` Problems pass \u2014 but is gated on\n * `definitions.create` (what the draft path itself requires) rather than the\n * broader `validate_definition` tool's `definitions.view`. It is READ-ONLY: it\n * persists nothing and reads no tenant rows, so an author self-correcting a\n * draft never touches data.\n */\nconst validateWorkflowDraftTool: WorkflowsAiToolDefinition<\n z.infer<typeof workflowDraftGenerationSchema>\n> = {\n name: 'workflows.validate_workflow_definition',\n displayName: 'Validate a draft workflow definition',\n description:\n 'Validate a DRAFT workflow (the {summary, steps, transitions, contextSchema} object you are authoring) without saving it. Returns the same structured {path, code, message, expected, got} issues and Problems-panel entries the generate route would. Call this before returning a draft and fix every error \u2014 in particular, an INVOKE_AGENT activity requires a string `config.agentId` and a `config.onResult`.',\n inputSchema: workflowDraftGenerationSchema,\n requiredFeatures: [DEFINITIONS_CREATE],\n tags: ['read', 'workflows', 'authoring'],\n isMutation: false,\n handler: async (input, ctx) => {\n const missing = missingFeatures(ctx, [DEFINITIONS_CREATE])\n if (missing.length) return featureRefusal(missing)\n\n const candidate: Record<string, unknown> = {\n steps: input.steps,\n transitions: input.transitions,\n ...(input.contextSchema ? { contextSchema: input.contextSchema } : {}),\n }\n\n const parsed = workflowDefinitionDataSchema.safeParse(candidate)\n if (!parsed.success) {\n return failure(\n ...parsed.error.issues.map((zodIssue) =>\n issue(\n [...zodIssue.path] as Array<string | number>,\n zodIssue.code,\n zodIssue.message,\n ),\n ),\n )\n }\n\n const definitionData = asDefinitionData(parsed.data as Record<string, unknown>)\n const ledger = await tryComputeLedger(ctx, definitionData)\n const evaluation = evaluateWorkflowDefinition(definitionData, { ledger })\n\n return {\n ok: evaluation.valid,\n issues: evaluation.issues,\n problems: evaluation.problems,\n valid: evaluation.valid,\n errorCount: evaluation.errorCount,\n warningCount: evaluation.warningCount,\n }\n },\n}\n\nexport const workflowsAuthoringAiTools: WorkflowsAiToolDefinition<never, never>[] = [\n listActivityTypesTool,\n getContextSchemaTool,\n validateDefinitionTool,\n validateWorkflowDraftTool,\n createDefinitionTool,\n updateDefinitionTool,\n startTestRunTool,\n] as unknown as WorkflowsAiToolDefinition<never, never>[]\n\nexport default workflowsAuthoringAiTools\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { hasFeature } from "@open-mercato/shared/security/features";
|
|
2
|
+
function issue(path, code, message, extra = {}) {
|
|
3
|
+
return { path, code, message, ...extra };
|
|
4
|
+
}
|
|
5
|
+
function failure(...issues) {
|
|
6
|
+
return { ok: false, issues };
|
|
7
|
+
}
|
|
8
|
+
function resolveScope(ctx) {
|
|
9
|
+
if (!ctx.tenantId) return null;
|
|
10
|
+
return { tenantId: ctx.tenantId, organizationId: ctx.organizationId };
|
|
11
|
+
}
|
|
12
|
+
const MISSING_TENANT_ISSUE = issue(
|
|
13
|
+
["tenantId"],
|
|
14
|
+
"missing_tenant_context",
|
|
15
|
+
"Tenant context is required for workflows.* tools"
|
|
16
|
+
);
|
|
17
|
+
function missingFeatures(ctx, required) {
|
|
18
|
+
if (ctx.isSuperAdmin) return [];
|
|
19
|
+
return required.filter((feature) => !hasFeature(ctx.userFeatures, feature));
|
|
20
|
+
}
|
|
21
|
+
function featureRefusal(missing) {
|
|
22
|
+
return failure(
|
|
23
|
+
issue(
|
|
24
|
+
["requiredFeatures"],
|
|
25
|
+
"insufficient_permissions",
|
|
26
|
+
`Missing required feature(s): ${missing.join(", ")}`,
|
|
27
|
+
{ expected: missing.join(", ") }
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
function organizationWhere(scope) {
|
|
32
|
+
return scope.organizationId ? { organizationId: scope.organizationId } : {};
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
MISSING_TENANT_ISSUE,
|
|
36
|
+
failure,
|
|
37
|
+
featureRefusal,
|
|
38
|
+
issue,
|
|
39
|
+
missingFeatures,
|
|
40
|
+
organizationWhere,
|
|
41
|
+
resolveScope
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/modules/workflows/ai-tools/types.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Local AI tool shape for the workflows module.\n *\n * `@open-mercato/core` carries `@open-mercato/ai-assistant` only as a dev/peer\n * dependency, so \u2014 exactly as `customers` and `inbox_ops` already do \u2014 this\n * module declares its tools as plain objects against a structural subset of\n * `AiToolDefinition` instead of importing the framework at runtime. The\n * generator walks every module root for a default/`aiTools` export of this\n * shape and emits it into `ai-tools.generated.ts`, which the ai-assistant\n * tool-loader registers through `registerMcpTool`.\n */\nimport type { z } from 'zod'\nimport type { AwilixContainer } from 'awilix'\nimport { hasFeature } from '@open-mercato/shared/security/features'\nimport type { DefinitionValidationIssue } from '../lib/definition-error-body'\n\nexport interface WorkflowsToolContext {\n tenantId: string | null\n organizationId: string | null\n userId: string | null\n container: AwilixContainer\n userFeatures: string[]\n isSuperAdmin: boolean\n apiKeySecret?: string\n sessionId?: string\n}\n\nexport interface WorkflowsAiToolDefinition<TInput = unknown, TOutput = unknown> {\n name: string\n displayName?: string\n description: string\n inputSchema: z.ZodType<TInput>\n requiredFeatures?: string[]\n tags?: string[]\n isMutation?: boolean\n isDestructive?: boolean | ((input: TInput) => boolean)\n handler: (input: TInput, context: WorkflowsToolContext) => Promise<TOutput>\n}\n\n/**\n * Every tool in this pack answers with the same envelope: a boolean outcome and\n * a list of STRUCTURED issues \u2014 never a prose error string. `issues` is the\n * identical `{path, code, message, expected?, got?}` shape the definition\n * create/update routes return in their 400 body.\n */\nexport interface WorkflowsToolEnvelope {\n ok: boolean\n issues: DefinitionValidationIssue[]\n}\n\nexport function issue(\n path: Array<string | number>,\n code: string,\n message: string,\n extra: { expected?: string; got?: string } = {},\n): DefinitionValidationIssue {\n return { path, code, message, ...extra }\n}\n\nexport function failure(...issues: DefinitionValidationIssue[]): WorkflowsToolEnvelope {\n return { ok: false, issues }\n}\n\nexport interface WorkflowsToolScope {\n tenantId: string\n organizationId: string | null\n}\n\n/**\n * Tenant scope is mandatory for every tool in this pack. An agent principal is\n * still a principal: without a tenant there is no safe query to run, so the\n * tool refuses rather than reading across tenants.\n */\nexport function resolveScope(ctx: WorkflowsToolContext): WorkflowsToolScope | null {\n if (!ctx.tenantId) return null\n return { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n}\n\nexport const MISSING_TENANT_ISSUE = issue(\n ['tenantId'],\n 'missing_tenant_context',\n 'Tenant context is required for workflows.* tools',\n)\n\n/**\n * Defense in depth. The tool runtime already gates `requiredFeatures` through\n * the wildcard-aware matcher before a handler runs; re-checking here keeps the\n * guarantee when a handler is invoked directly (tests, in-process callers) and\n * makes the refusal a structured issue rather than a thrown string.\n */\nexport function missingFeatures(\n ctx: WorkflowsToolContext,\n required: readonly string[],\n): string[] {\n if (ctx.isSuperAdmin) return []\n return required.filter((feature) => !hasFeature(ctx.userFeatures, feature))\n}\n\nexport function featureRefusal(missing: readonly string[]): WorkflowsToolEnvelope {\n return failure(\n issue(\n ['requiredFeatures'],\n 'insufficient_permissions',\n `Missing required feature(s): ${missing.join(', ')}`,\n { expected: missing.join(', ') },\n ),\n )\n}\n\n/**\n * Organization where-clause fragment for a tenant-scoped lookup. A null\n * organization stays tenant-wide, matching the REST routes' behaviour when the\n * caller's scope spans every organization.\n */\nexport function organizationWhere(scope: WorkflowsToolScope): Record<string, unknown> {\n return scope.organizationId ? { organizationId: scope.organizationId } : {}\n}\n"],
|
|
5
|
+
"mappings": "AAaA,SAAS,kBAAkB;AAqCpB,SAAS,MACd,MACA,MACA,SACA,QAA6C,CAAC,GACnB;AAC3B,SAAO,EAAE,MAAM,MAAM,SAAS,GAAG,MAAM;AACzC;AAEO,SAAS,WAAW,QAA4D;AACrF,SAAO,EAAE,IAAI,OAAO,OAAO;AAC7B;AAYO,SAAS,aAAa,KAAsD;AACjF,MAAI,CAAC,IAAI,SAAU,QAAO;AAC1B,SAAO,EAAE,UAAU,IAAI,UAAU,gBAAgB,IAAI,eAAe;AACtE;AAEO,MAAM,uBAAuB;AAAA,EAClC,CAAC,UAAU;AAAA,EACX;AAAA,EACA;AACF;AAQO,SAAS,gBACd,KACA,UACU;AACV,MAAI,IAAI,aAAc,QAAO,CAAC;AAC9B,SAAO,SAAS,OAAO,CAAC,YAAY,CAAC,WAAW,IAAI,cAAc,OAAO,CAAC;AAC5E;AAEO,SAAS,eAAe,SAAmD;AAChF,SAAO;AAAA,IACL;AAAA,MACE,CAAC,kBAAkB;AAAA,MACnB;AAAA,MACA,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AAAA,MAClD,EAAE,UAAU,QAAQ,KAAK,IAAI,EAAE;AAAA,IACjC;AAAA,EACF;AACF;AAOO,SAAS,kBAAkB,OAAoD;AACpF,SAAO,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAC5E;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/modules/workflows/ai-tools.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Module-root AI tool contribution for the workflows module (spec \u00A79.5,\n * roadmap Phase 6 \u2014 \"Agent-as-author (MCP tool pack)\").\n *\n * The generator walks every module for a top-level `ai-tools.ts` and takes the\n * default/`aiTools` export as the contribution; `ai-tools.generated.ts` is then\n * loaded by the ai-assistant tool-loader, which registers each tool through\n * `registerMcpTool`. That single registry serves BOTH consumers: the MCP server\n * (external agents) and the in-app `<AiChat>` agent runtime.\n *\n * Requires `yarn generate` to be discovered.\n */\nimport workflowsAuthoringAiTools from './ai-tools/authoring-pack'\nimport type { WorkflowsAiToolDefinition } from './ai-tools/types'\n\nexport const aiTools: WorkflowsAiToolDefinition<never, never>[] = [\n ...workflowsAuthoringAiTools,\n]\n\nexport default aiTools\n"],
|
|
5
|
+
"mappings": "AAYA,OAAO,+BAA+B;AAG/B,MAAM,UAAqD;AAAA,EAChE,GAAG;AACL;AAEA,IAAO,mBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
4
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
5
|
+
import { listWorkflowSafeCommands } from "../../lib/workflow-safe-commands.js";
|
|
6
|
+
import {
|
|
7
|
+
findUncataloguedCommandIds,
|
|
8
|
+
mergeEnabledCommandIds,
|
|
9
|
+
resolveWorkflowCommandCatalogue,
|
|
10
|
+
UNSET_WORKFLOW_COMMAND_POLICY
|
|
11
|
+
} from "../../lib/workflow-command-enablement.js";
|
|
12
|
+
import {
|
|
13
|
+
readEnabledWorkflowCommandIds,
|
|
14
|
+
resolveWorkflowCommandConfigService,
|
|
15
|
+
writeEnabledWorkflowCommandIds
|
|
16
|
+
} from "../../lib/workflow-command-settings.js";
|
|
17
|
+
import {
|
|
18
|
+
workflowsTag,
|
|
19
|
+
workflowErrorSchema,
|
|
20
|
+
workflowCommandSettingsResponseSchema,
|
|
21
|
+
workflowCommandSettingsPutBodySchema,
|
|
22
|
+
workflowCommandSettingsPutResponseSchema
|
|
23
|
+
} from "../openapi.js";
|
|
24
|
+
const metadata = {
|
|
25
|
+
// Reading which commands a workflow may execute is what a definition author
|
|
26
|
+
// needs in order to author one, so it rides on the definition-view feature
|
|
27
|
+
// rather than on task administration.
|
|
28
|
+
GET: { requireAuth: true, requireFeatures: ["workflows.definitions.view"] },
|
|
29
|
+
// Ticking a candidate widens what EVERY workflow in the tenant may mutate.
|
|
30
|
+
PUT: { requireAuth: true, requireFeatures: ["workflows.manage"] }
|
|
31
|
+
};
|
|
32
|
+
const putBodySchema = z.object({
|
|
33
|
+
enabledCommandIds: z.array(z.string().min(1)).max(500)
|
|
34
|
+
});
|
|
35
|
+
async function resolveModuleConfigService() {
|
|
36
|
+
try {
|
|
37
|
+
const container = await createRequestContainer();
|
|
38
|
+
return resolveWorkflowCommandConfigService(container);
|
|
39
|
+
} catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function GET(request) {
|
|
44
|
+
const auth = await getAuthFromRequest(request);
|
|
45
|
+
if (!auth || !auth.tenantId) {
|
|
46
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
47
|
+
}
|
|
48
|
+
const moduleConfigService = await resolveModuleConfigService();
|
|
49
|
+
const stored = await readEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId);
|
|
50
|
+
const catalogue = listWorkflowSafeCommands();
|
|
51
|
+
return NextResponse.json({
|
|
52
|
+
configured: stored !== null,
|
|
53
|
+
items: resolveWorkflowCommandCatalogue(
|
|
54
|
+
catalogue,
|
|
55
|
+
stored === null ? UNSET_WORKFLOW_COMMAND_POLICY : { enabledCommandIds: stored }
|
|
56
|
+
)
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function PUT(request) {
|
|
60
|
+
const auth = await getAuthFromRequest(request);
|
|
61
|
+
if (!auth || !auth.tenantId) {
|
|
62
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
63
|
+
}
|
|
64
|
+
let body;
|
|
65
|
+
try {
|
|
66
|
+
body = await request.json();
|
|
67
|
+
} catch {
|
|
68
|
+
return NextResponse.json({ error: "Invalid JSON" }, { status: 400 });
|
|
69
|
+
}
|
|
70
|
+
const parsed = putBodySchema.safeParse(body);
|
|
71
|
+
if (!parsed.success) {
|
|
72
|
+
return NextResponse.json(
|
|
73
|
+
{ error: "Validation failed", details: parsed.error.flatten() },
|
|
74
|
+
{ status: 400 }
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
const catalogue = listWorkflowSafeCommands();
|
|
78
|
+
const unknownCommandIds = findUncataloguedCommandIds(parsed.data.enabledCommandIds, catalogue);
|
|
79
|
+
if (unknownCommandIds.length > 0) {
|
|
80
|
+
return NextResponse.json(
|
|
81
|
+
{
|
|
82
|
+
error: "Unknown workflow-safe command",
|
|
83
|
+
code: "WORKFLOW_COMMAND_NOT_IN_CATALOGUE",
|
|
84
|
+
commandIds: unknownCommandIds
|
|
85
|
+
},
|
|
86
|
+
{ status: 400 }
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
const moduleConfigService = await resolveModuleConfigService();
|
|
90
|
+
if (!moduleConfigService) {
|
|
91
|
+
return NextResponse.json({ error: "Settings storage unavailable" }, { status: 503 });
|
|
92
|
+
}
|
|
93
|
+
const stored = await readEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId);
|
|
94
|
+
const enabledCommandIds = mergeEnabledCommandIds(
|
|
95
|
+
parsed.data.enabledCommandIds,
|
|
96
|
+
stored,
|
|
97
|
+
catalogue
|
|
98
|
+
);
|
|
99
|
+
await writeEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId, enabledCommandIds);
|
|
100
|
+
return NextResponse.json({
|
|
101
|
+
ok: true,
|
|
102
|
+
configured: true,
|
|
103
|
+
items: resolveWorkflowCommandCatalogue(catalogue, { enabledCommandIds })
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const openApi = {
|
|
107
|
+
tag: workflowsTag,
|
|
108
|
+
summary: "Tenant UPDATE_ENTITY command enablement",
|
|
109
|
+
methods: {
|
|
110
|
+
GET: {
|
|
111
|
+
summary: "List workflow-safe command candidates with tenant enablement",
|
|
112
|
+
description: "Returns every command declared through registerWorkflowSafeCommands together with whether this tenant has switched it on. `configured: false` means the tenant has never saved the setting and the answers come from the grandfathered defaults.",
|
|
113
|
+
responses: [
|
|
114
|
+
{ status: 200, description: "Catalogue with tenant enablement", schema: workflowCommandSettingsResponseSchema },
|
|
115
|
+
{ status: 401, description: "Missing authentication", schema: workflowErrorSchema }
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
PUT: {
|
|
119
|
+
summary: "Set which workflow-safe commands are enabled for the tenant",
|
|
120
|
+
description: "Replaces the tenant's enabled set. Every submitted id must be present in the code-declared catalogue; an unknown id is rejected with 400 rather than stored. Stored ids whose declaring module is not loaded in this process are retained so a save can never silently untick them.",
|
|
121
|
+
requestBody: { schema: workflowCommandSettingsPutBodySchema },
|
|
122
|
+
responses: [
|
|
123
|
+
{ status: 200, description: "Updated enablement", schema: workflowCommandSettingsPutResponseSchema },
|
|
124
|
+
{ status: 400, description: "Invalid payload or unknown command id", schema: workflowErrorSchema },
|
|
125
|
+
{ status: 401, description: "Missing authentication", schema: workflowErrorSchema },
|
|
126
|
+
{ status: 503, description: "Settings storage unavailable", schema: workflowErrorSchema }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
export {
|
|
132
|
+
GET,
|
|
133
|
+
PUT,
|
|
134
|
+
metadata,
|
|
135
|
+
openApi
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/workflows/api/command-settings/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Tenant enablement for UPDATE_ENTITY commands (tier 2 of the model described\n * in `lib/workflow-command-enablement.ts`).\n *\n * - GET /api/workflows/command-settings \u2014 the catalogue with this tenant's answer\n * - PUT /api/workflows/command-settings \u2014 tick / untick candidates\n *\n * A new route, which BACKWARD_COMPATIBILITY.md \u00A77 allows freely. Shape follows\n * `api/task-settings/route.ts`.\n *\n * The PUT body carries command IDS, never a free-form command name: every id is\n * checked against the code-declared catalogue and an unknown one is a 400. That\n * refusal IS the safety model \u2014 an administrator who could type an arbitrary id\n * would reach commands nobody designed for unattended execution, and a command\n * with no declared `requiredFeatures` would have no gate left at all.\n *\n * `tenantId` always comes from the authenticated context and never from the\n * request body \u2014 a settings write that accepted a tenant id would be a\n * cross-tenant write primitive.\n */\n\nimport { NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { listWorkflowSafeCommands } from '../../lib/workflow-safe-commands'\nimport {\n findUncataloguedCommandIds,\n mergeEnabledCommandIds,\n resolveWorkflowCommandCatalogue,\n UNSET_WORKFLOW_COMMAND_POLICY,\n} from '../../lib/workflow-command-enablement'\nimport {\n readEnabledWorkflowCommandIds,\n resolveWorkflowCommandConfigService,\n writeEnabledWorkflowCommandIds,\n type WorkflowCommandConfigService,\n} from '../../lib/workflow-command-settings'\nimport {\n workflowsTag,\n workflowErrorSchema,\n workflowCommandSettingsResponseSchema,\n workflowCommandSettingsPutBodySchema,\n workflowCommandSettingsPutResponseSchema,\n} from '../openapi'\n\nexport const metadata = {\n // Reading which commands a workflow may execute is what a definition author\n // needs in order to author one, so it rides on the definition-view feature\n // rather than on task administration.\n GET: { requireAuth: true, requireFeatures: ['workflows.definitions.view'] },\n // Ticking a candidate widens what EVERY workflow in the tenant may mutate.\n PUT: { requireAuth: true, requireFeatures: ['workflows.manage'] },\n}\n\nconst putBodySchema = z.object({\n enabledCommandIds: z.array(z.string().min(1)).max(500),\n})\n\nasync function resolveModuleConfigService(): Promise<WorkflowCommandConfigService | null> {\n try {\n const container = await createRequestContainer()\n return resolveWorkflowCommandConfigService(container)\n } catch {\n // Fails to the UNSET policy, i.e. the grandfathered set \u2014 never to\n // \"everything enabled\".\n return null\n }\n}\n\nexport async function GET(request: Request) {\n const auth = await getAuthFromRequest(request)\n if (!auth || !auth.tenantId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const moduleConfigService = await resolveModuleConfigService()\n const stored = await readEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId)\n const catalogue = listWorkflowSafeCommands()\n\n return NextResponse.json({\n configured: stored !== null,\n items: resolveWorkflowCommandCatalogue(\n catalogue,\n stored === null ? UNSET_WORKFLOW_COMMAND_POLICY : { enabledCommandIds: stored },\n ),\n })\n}\n\nexport async function PUT(request: Request) {\n const auth = await getAuthFromRequest(request)\n if (!auth || !auth.tenantId) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n let body: unknown\n try {\n body = await request.json()\n } catch {\n return NextResponse.json({ error: 'Invalid JSON' }, { status: 400 })\n }\n\n const parsed = putBodySchema.safeParse(body)\n if (!parsed.success) {\n return NextResponse.json(\n { error: 'Validation failed', details: parsed.error.flatten() },\n { status: 400 },\n )\n }\n\n const catalogue = listWorkflowSafeCommands()\n const unknownCommandIds = findUncataloguedCommandIds(parsed.data.enabledCommandIds, catalogue)\n if (unknownCommandIds.length > 0) {\n return NextResponse.json(\n {\n error: 'Unknown workflow-safe command',\n code: 'WORKFLOW_COMMAND_NOT_IN_CATALOGUE',\n commandIds: unknownCommandIds,\n },\n { status: 400 },\n )\n }\n\n const moduleConfigService = await resolveModuleConfigService()\n if (!moduleConfigService) {\n return NextResponse.json({ error: 'Settings storage unavailable' }, { status: 503 })\n }\n\n const stored = await readEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId)\n const enabledCommandIds = mergeEnabledCommandIds(\n parsed.data.enabledCommandIds,\n stored,\n catalogue,\n )\n await writeEnabledWorkflowCommandIds(moduleConfigService, auth.tenantId, enabledCommandIds)\n\n return NextResponse.json({\n ok: true,\n configured: true,\n items: resolveWorkflowCommandCatalogue(catalogue, { enabledCommandIds }),\n })\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: workflowsTag,\n summary: 'Tenant UPDATE_ENTITY command enablement',\n methods: {\n GET: {\n summary: 'List workflow-safe command candidates with tenant enablement',\n description:\n 'Returns every command declared through registerWorkflowSafeCommands together with whether this tenant has switched it on. `configured: false` means the tenant has never saved the setting and the answers come from the grandfathered defaults.',\n responses: [\n { status: 200, description: 'Catalogue with tenant enablement', schema: workflowCommandSettingsResponseSchema },\n { status: 401, description: 'Missing authentication', schema: workflowErrorSchema },\n ],\n },\n PUT: {\n summary: 'Set which workflow-safe commands are enabled for the tenant',\n description:\n 'Replaces the tenant\\'s enabled set. Every submitted id must be present in the code-declared catalogue; an unknown id is rejected with 400 rather than stored. Stored ids whose declaring module is not loaded in this process are retained so a save can never silently untick them.',\n requestBody: { schema: workflowCommandSettingsPutBodySchema },\n responses: [\n { status: 200, description: 'Updated enablement', schema: workflowCommandSettingsPutResponseSchema },\n { status: 400, description: 'Invalid payload or unknown command id', schema: workflowErrorSchema },\n { status: 401, description: 'Missing authentication', schema: workflowErrorSchema },\n { status: 503, description: 'Settings storage unavailable', schema: workflowErrorSchema },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
3
|
+
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
4
|
+
import { resolveOrganizationScopeForRequest } from "@open-mercato/core/modules/directory/utils/organizationScope";
|
|
5
|
+
import { listWorkflowSafeCommands } from "../../lib/workflow-safe-commands.js";
|
|
6
|
+
import { resolveWorkflowCommandCatalogue } from "../../lib/workflow-command-enablement.js";
|
|
7
|
+
import { resolveWorkflowCommandPolicyForContainer } from "../../lib/workflow-command-settings.js";
|
|
8
|
+
import { workflowsTag, workflowErrorSchema, workflowSafeCommandListResponseSchema } from "../openapi.js";
|
|
9
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
10
|
+
const logger = createLogger("workflows");
|
|
11
|
+
const metadata = {
|
|
12
|
+
requireAuth: true,
|
|
13
|
+
requireFeatures: ["workflows.definitions.edit"]
|
|
14
|
+
};
|
|
15
|
+
async function GET(request) {
|
|
16
|
+
try {
|
|
17
|
+
const container = await createRequestContainer();
|
|
18
|
+
const auth = await getAuthFromRequest(request);
|
|
19
|
+
if (!auth) {
|
|
20
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
21
|
+
}
|
|
22
|
+
const scope = await resolveOrganizationScopeForRequest({ container, auth, request });
|
|
23
|
+
const tenantId = auth.tenantId;
|
|
24
|
+
const organizationId = scope?.selectedId ?? auth.orgId;
|
|
25
|
+
if (!tenantId) {
|
|
26
|
+
return NextResponse.json({ error: "Missing tenant context" }, { status: 400 });
|
|
27
|
+
}
|
|
28
|
+
const rbacService = container.resolve("rbacService");
|
|
29
|
+
const hasPermission = await rbacService.userHasAllFeatures(
|
|
30
|
+
auth.sub,
|
|
31
|
+
["workflows.definitions.edit"],
|
|
32
|
+
{ tenantId, organizationId }
|
|
33
|
+
);
|
|
34
|
+
if (!hasPermission) {
|
|
35
|
+
return NextResponse.json({ error: "Insufficient permissions" }, { status: 403 });
|
|
36
|
+
}
|
|
37
|
+
const policy = await resolveWorkflowCommandPolicyForContainer(container, tenantId);
|
|
38
|
+
const items = resolveWorkflowCommandCatalogue(listWorkflowSafeCommands(), policy);
|
|
39
|
+
return NextResponse.json({ items });
|
|
40
|
+
} catch (error) {
|
|
41
|
+
logger.error("Error listing workflow-safe commands", { err: error });
|
|
42
|
+
return NextResponse.json(
|
|
43
|
+
{ error: "Failed to list workflow-safe commands" },
|
|
44
|
+
{ status: 500 }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const openApi = {
|
|
49
|
+
tag: workflowsTag,
|
|
50
|
+
summary: "List workflow-safe commands",
|
|
51
|
+
methods: {
|
|
52
|
+
GET: {
|
|
53
|
+
summary: "List commands allowlisted for UPDATE_ENTITY activities",
|
|
54
|
+
description: "Returns the registered workflow-safe command catalogue consumed by the UPDATE_ENTITY command picker, each entry carrying whether the caller's tenant has enabled it. Entries with enabled:false, and commands outside the catalogue entirely, can still be authored but fail at runtime.",
|
|
55
|
+
responses: [
|
|
56
|
+
{ status: 200, description: "Allowlisted workflow-safe commands", schema: workflowSafeCommandListResponseSchema }
|
|
57
|
+
],
|
|
58
|
+
errors: [
|
|
59
|
+
{ status: 400, description: "Missing tenant context", schema: workflowErrorSchema },
|
|
60
|
+
{ status: 401, description: "Unauthorized", schema: workflowErrorSchema },
|
|
61
|
+
{ status: 403, description: "Insufficient permissions", schema: workflowErrorSchema },
|
|
62
|
+
{ status: 500, description: "Internal server error", schema: workflowErrorSchema }
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export {
|
|
68
|
+
GET,
|
|
69
|
+
metadata,
|
|
70
|
+
openApi
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/modules/workflows/api/commands/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflow-Safe Commands API\n *\n * Endpoint:\n * - GET /api/workflows/commands - List commands allowlisted for UPDATE_ENTITY activities\n *\n * ## Why this returns disabled candidates instead of hiding them\n *\n * It used to return the whole catalogue to any holder of\n * `workflows.definitions.edit`, which meant an author could pick a command the\n * tenant had not enabled and only discover it when a run failed. Returning ONLY\n * the enabled ones would fix that failure but create a worse one: the field\n * accepts free text (`allowCustomValues`), so a command that vanishes from the\n * list is not prevented, it is merely unexplained \u2014 \"why can I not update\n * products here?\" becomes unanswerable from the editor.\n *\n * So every candidate is returned with an explicit `enabled` flag and the picker\n * renders the disabled ones as unavailable, naming the remedy. This is the same\n * rule the command palette already follows: a command that cannot run right now\n * is shown disabled, never hidden, because a missing entry reads as\n * \"unsupported\" and a disabled one reads as \"not now\".\n *\n * `enabled`, `defaultEnabled` and `labelKey` are ADDITIVE fields on an existing\n * response; `commandId` and `requiredFeatures` are unchanged.\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { resolveOrganizationScopeForRequest } from '@open-mercato/core/modules/directory/utils/organizationScope'\nimport { listWorkflowSafeCommands } from '../../lib/workflow-safe-commands'\nimport { resolveWorkflowCommandCatalogue } from '../../lib/workflow-command-enablement'\nimport { resolveWorkflowCommandPolicyForContainer } from '../../lib/workflow-command-settings'\nimport { workflowsTag, workflowErrorSchema, workflowSafeCommandListResponseSchema } from '../openapi'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('workflows')\n\nexport const metadata = {\n requireAuth: true,\n requireFeatures: ['workflows.definitions.edit'],\n}\n\n/**\n * GET /api/workflows/commands\n *\n * List the workflow-safe command allowlist for the UPDATE_ENTITY command picker.\n */\nexport async function GET(request: NextRequest) {\n try {\n const container = await createRequestContainer()\n const auth = await getAuthFromRequest(request)\n\n if (!auth) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const scope = await resolveOrganizationScopeForRequest({ container, auth, request })\n const tenantId = auth.tenantId\n const organizationId = scope?.selectedId ?? auth.orgId\n\n if (!tenantId) {\n return NextResponse.json({ error: 'Missing tenant context' }, { status: 400 })\n }\n\n const rbacService = container.resolve('rbacService')\n const hasPermission = await rbacService.userHasAllFeatures(\n auth.sub,\n ['workflows.definitions.edit'],\n { tenantId, organizationId }\n )\n\n if (!hasPermission) {\n return NextResponse.json({ error: 'Insufficient permissions' }, { status: 403 })\n }\n\n const policy = await resolveWorkflowCommandPolicyForContainer(container, tenantId)\n const items = resolveWorkflowCommandCatalogue(listWorkflowSafeCommands(), policy)\n\n return NextResponse.json({ items })\n } catch (error) {\n logger.error('Error listing workflow-safe commands', { err: error })\n return NextResponse.json(\n { error: 'Failed to list workflow-safe commands' },\n { status: 500 }\n )\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: workflowsTag,\n summary: 'List workflow-safe commands',\n methods: {\n GET: {\n summary: 'List commands allowlisted for UPDATE_ENTITY activities',\n description: 'Returns the registered workflow-safe command catalogue consumed by the UPDATE_ENTITY command picker, each entry carrying whether the caller\\'s tenant has enabled it. Entries with enabled:false, and commands outside the catalogue entirely, can still be authored but fail at runtime.',\n responses: [\n { status: 200, description: 'Allowlisted workflow-safe commands', schema: workflowSafeCommandListResponseSchema },\n ],\n errors: [\n { status: 400, description: 'Missing tenant context', schema: workflowErrorSchema },\n { status: 401, description: 'Unauthorized', schema: workflowErrorSchema },\n { status: 403, description: 'Insufficient permissions', schema: workflowErrorSchema },\n { status: 500, description: 'Internal server error', schema: workflowErrorSchema },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "AA0BA,SAAsB,oBAAoB;AAE1C,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,0CAA0C;AACnD,SAAS,gCAAgC;AACzC,SAAS,uCAAuC;AAChD,SAAS,gDAAgD;AACzD,SAAS,cAAc,qBAAqB,6CAA6C;AACzF,SAAS,oBAAoB;AAE7B,MAAM,SAAS,aAAa,WAAW;AAEhC,MAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,iBAAiB,CAAC,4BAA4B;AAChD;AAOA,eAAsB,IAAI,SAAsB;AAC9C,MAAI;AACF,UAAM,YAAY,MAAM,uBAAuB;AAC/C,UAAM,OAAO,MAAM,mBAAmB,OAAO;AAE7C,QAAI,CAAC,MAAM;AACT,aAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,UAAM,QAAQ,MAAM,mCAAmC,EAAE,WAAW,MAAM,QAAQ,CAAC;AACnF,UAAM,WAAW,KAAK;AACtB,UAAM,iBAAiB,OAAO,cAAc,KAAK;AAEjD,QAAI,CAAC,UAAU;AACb,aAAO,aAAa,KAAK,EAAE,OAAO,yBAAyB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/E;AAEA,UAAM,cAAc,UAAU,QAAQ,aAAa;AACnD,UAAM,gBAAgB,MAAM,YAAY;AAAA,MACtC,KAAK;AAAA,MACL,CAAC,4BAA4B;AAAA,MAC7B,EAAE,UAAU,eAAe;AAAA,IAC7B;AAEA,QAAI,CAAC,eAAe;AAClB,aAAO,aAAa,KAAK,EAAE,OAAO,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACjF;AAEA,UAAM,SAAS,MAAM,yCAAyC,WAAW,QAAQ;AACjF,UAAM,QAAQ,gCAAgC,yBAAyB,GAAG,MAAM;AAEhF,WAAO,aAAa,KAAK,EAAE,MAAM,CAAC;AAAA,EACpC,SAAS,OAAO;AACd,WAAO,MAAM,wCAAwC,EAAE,KAAK,MAAM,CAAC;AACnE,WAAO,aAAa;AAAA,MAClB,EAAE,OAAO,wCAAwC;AAAA,MACjD,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;AAEO,MAAM,UAA2B;AAAA,EACtC,KAAK;AAAA,EACL,SAAS;AAAA,EACT,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,EAAE,QAAQ,KAAK,aAAa,sCAAsC,QAAQ,sCAAsC;AAAA,MAClH;AAAA,MACA,QAAQ;AAAA,QACN,EAAE,QAAQ,KAAK,aAAa,0BAA0B,QAAQ,oBAAoB;AAAA,QAClF,EAAE,QAAQ,KAAK,aAAa,gBAAgB,QAAQ,oBAAoB;AAAA,QACxE,EAAE,QAAQ,KAAK,aAAa,4BAA4B,QAAQ,oBAAoB;AAAA,QACpF,EAAE,QAAQ,KAAK,aAAa,yBAAyB,QAAQ,oBAAoB;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
4
|
+
import { getAuthFromRequest } from "@open-mercato/shared/lib/auth/server";
|
|
5
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
6
|
+
import { resolveOrganizationScopeForRequest } from "@open-mercato/core/modules/directory/utils/organizationScope";
|
|
7
|
+
import { WorkflowDefinition } from "../../../../data/entities.js";
|
|
8
|
+
import { findSubWorkflowCallers } from "../../../../lib/caller-graph.js";
|
|
9
|
+
const logger = createLogger("workflows").child({ component: "definition-callers-api" });
|
|
10
|
+
const metadata = {
|
|
11
|
+
requireAuth: true,
|
|
12
|
+
requireFeatures: ["workflows.definitions.view"]
|
|
13
|
+
};
|
|
14
|
+
async function GET(request, context) {
|
|
15
|
+
try {
|
|
16
|
+
const params = await context.params;
|
|
17
|
+
const container = await createRequestContainer();
|
|
18
|
+
const em = container.resolve("em");
|
|
19
|
+
const auth = await getAuthFromRequest(request);
|
|
20
|
+
if (!auth) {
|
|
21
|
+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
22
|
+
}
|
|
23
|
+
const scope = await resolveOrganizationScopeForRequest({ container, auth, request });
|
|
24
|
+
const tenantId = auth.tenantId;
|
|
25
|
+
const organizationId = scope?.selectedId ?? auth.orgId;
|
|
26
|
+
if (!tenantId || !organizationId) {
|
|
27
|
+
return NextResponse.json({ error: "Missing tenant or organization context" }, { status: 400 });
|
|
28
|
+
}
|
|
29
|
+
const definition = await em.findOne(WorkflowDefinition, {
|
|
30
|
+
id: params.id,
|
|
31
|
+
tenantId,
|
|
32
|
+
organizationId,
|
|
33
|
+
deletedAt: null
|
|
34
|
+
});
|
|
35
|
+
if (!definition) {
|
|
36
|
+
return NextResponse.json({ error: "Workflow definition not found" }, { status: 404 });
|
|
37
|
+
}
|
|
38
|
+
const ports = definition.definition?.io || {};
|
|
39
|
+
const callers = await findSubWorkflowCallers(em, {
|
|
40
|
+
subWorkflowId: definition.workflowId,
|
|
41
|
+
tenantId,
|
|
42
|
+
organizationId,
|
|
43
|
+
ports
|
|
44
|
+
});
|
|
45
|
+
return NextResponse.json({ callers });
|
|
46
|
+
} catch (error) {
|
|
47
|
+
logger.error("error resolving workflow definition callers", {
|
|
48
|
+
error: error instanceof Error ? error.message : String(error)
|
|
49
|
+
});
|
|
50
|
+
return NextResponse.json({ error: "Failed to resolve callers" }, { status: 500 });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const openApi = {
|
|
54
|
+
methods: {
|
|
55
|
+
GET: {
|
|
56
|
+
summary: "List sub-workflow callers and breaking mappings",
|
|
57
|
+
description: "Returns parent definitions that invoke this workflow as a sub-workflow and the mappings its current port contract would break.",
|
|
58
|
+
tags: ["Workflows"],
|
|
59
|
+
pathParams: z.object({ id: z.string().describe("Workflow definition id") }),
|
|
60
|
+
responses: [
|
|
61
|
+
{
|
|
62
|
+
status: 200,
|
|
63
|
+
description: "Callers",
|
|
64
|
+
example: { callers: [{ workflowId: "order-flow", version: 1, stepId: "sub", brokenMappings: ["input:orderId"] }] }
|
|
65
|
+
},
|
|
66
|
+
{ status: 404, description: "Not found", example: { error: "Workflow definition not found" } }
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
export {
|
|
72
|
+
GET,
|
|
73
|
+
metadata,
|
|
74
|
+
openApi
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/workflows/api/definitions/%5Bid%5D/callers/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Workflow Definition Callers (breaking-change preview)\n *\n * GET /api/workflows/definitions/[id]/callers\n *\n * Returns the parent definitions that invoke this workflow as a sub-workflow and,\n * for each, the field mappings that this definition's current IO port contract\n * would break.\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { resolveOrganizationScopeForRequest } from '@open-mercato/core/modules/directory/utils/organizationScope'\nimport { WorkflowDefinition } from '../../../../data/entities'\nimport type { WorkflowIoContract } from '../../../../data/validators'\nimport { findSubWorkflowCallers } from '../../../../lib/caller-graph'\n\nconst logger = createLogger('workflows').child({ component: 'definition-callers-api' })\n\nexport const metadata = {\n requireAuth: true,\n requireFeatures: ['workflows.definitions.view'],\n}\n\ninterface RouteContext {\n params: Promise<{ id: string }>\n}\n\nexport async function GET(request: NextRequest, context: RouteContext) {\n try {\n const params = await context.params\n const container = await createRequestContainer()\n const em = container.resolve('em')\n const auth = await getAuthFromRequest(request)\n\n if (!auth) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const scope = await resolveOrganizationScopeForRequest({ container, auth, request })\n const tenantId = auth.tenantId\n const organizationId = scope?.selectedId ?? auth.orgId\n\n if (!tenantId || !organizationId) {\n return NextResponse.json({ error: 'Missing tenant or organization context' }, { status: 400 })\n }\n\n const definition = await em.findOne(WorkflowDefinition, {\n id: params.id,\n tenantId,\n organizationId,\n deletedAt: null,\n })\n if (!definition) {\n return NextResponse.json({ error: 'Workflow definition not found' }, { status: 404 })\n }\n\n const ports: WorkflowIoContract = (definition.definition as { io?: WorkflowIoContract })?.io || {}\n const callers = await findSubWorkflowCallers(em, {\n subWorkflowId: definition.workflowId,\n tenantId,\n organizationId,\n ports,\n })\n\n return NextResponse.json({ callers })\n } catch (error) {\n logger.error('error resolving workflow definition callers', {\n error: error instanceof Error ? error.message : String(error),\n })\n return NextResponse.json({ error: 'Failed to resolve callers' }, { status: 500 })\n }\n}\n\nexport const openApi = {\n methods: {\n GET: {\n summary: 'List sub-workflow callers and breaking mappings',\n description: 'Returns parent definitions that invoke this workflow as a sub-workflow and the mappings its current port contract would break.',\n tags: ['Workflows'],\n pathParams: z.object({ id: z.string().describe('Workflow definition id') }),\n responses: [\n {\n status: 200,\n description: 'Callers',\n example: { callers: [{ workflowId: 'order-flow', version: 1, stepId: 'sub', brokenMappings: ['input:orderId'] }] },\n },\n { status: 404, description: 'Not found', example: { error: 'Workflow definition not found' } },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "AAUA,SAAsB,oBAAoB;AAC1C,SAAS,SAAS;AAClB,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAC7B,SAAS,0CAA0C;AACnD,SAAS,0BAA0B;AAEnC,SAAS,8BAA8B;AAEvC,MAAM,SAAS,aAAa,WAAW,EAAE,MAAM,EAAE,WAAW,yBAAyB,CAAC;AAE/E,MAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,iBAAiB,CAAC,4BAA4B;AAChD;AAMA,eAAsB,IAAI,SAAsB,SAAuB;AACrE,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ;AAC7B,UAAM,YAAY,MAAM,uBAAuB;AAC/C,UAAM,KAAK,UAAU,QAAQ,IAAI;AACjC,UAAM,OAAO,MAAM,mBAAmB,OAAO;AAE7C,QAAI,CAAC,MAAM;AACT,aAAO,aAAa,KAAK,EAAE,OAAO,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,UAAM,QAAQ,MAAM,mCAAmC,EAAE,WAAW,MAAM,QAAQ,CAAC;AACnF,UAAM,WAAW,KAAK;AACtB,UAAM,iBAAiB,OAAO,cAAc,KAAK;AAEjD,QAAI,CAAC,YAAY,CAAC,gBAAgB;AAChC,aAAO,aAAa,KAAK,EAAE,OAAO,yCAAyC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/F;AAEA,UAAM,aAAa,MAAM,GAAG,QAAQ,oBAAoB;AAAA,MACtD,IAAI,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AACD,QAAI,CAAC,YAAY;AACf,aAAO,aAAa,KAAK,EAAE,OAAO,gCAAgC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACtF;AAEA,UAAM,QAA6B,WAAW,YAA4C,MAAM,CAAC;AACjG,UAAM,UAAU,MAAM,uBAAuB,IAAI;AAAA,MAC/C,eAAe,WAAW;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,aAAa,KAAK,EAAE,QAAQ,CAAC;AAAA,EACtC,SAAS,OAAO;AACd,WAAO,MAAM,+CAA+C;AAAA,MAC1D,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D,CAAC;AACD,WAAO,aAAa,KAAK,EAAE,OAAO,4BAA4B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAClF;AACF;AAEO,MAAM,UAAU;AAAA,EACrB,SAAS;AAAA,IACP,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM,CAAC,WAAW;AAAA,MAClB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;AAAA,MAC1E,WAAW;AAAA,QACT;AAAA,UACE,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,cAAc,SAAS,GAAG,QAAQ,OAAO,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE;AAAA,QACnH;AAAA,QACA,EAAE,QAAQ,KAAK,aAAa,aAAa,SAAS,EAAE,OAAO,gCAAgC,EAAE;AAAA,MAC/F;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|