@oomol-lab/open-flow 0.1.0-beta.73 → 0.1.0-beta.75
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/LICENSE +36 -0
- package/NOTICE +7 -0
- package/README.md +41 -0
- package/dist/browser/{ContentIcon-CUQHjQIw.js → ContentIcon-FCpKiwjp.js} +2 -1
- package/dist/browser/{FlowCanvas-Dtf8_cQp.js → FlowCanvas-dzRBnlUT.js} +1 -1
- package/dist/browser/{createResourceDialog-BWJkjiOO.js → createResourceDialog-BeYDdUl-.js} +2 -2
- package/dist/browser/{dialog-CUy_fwx9.js → dialog-ZtpsFbl4.js} +337 -31
- package/dist/browser/{exportSvg-BOoy7-Db.js → exportSvg-DqXw1yf-.js} +2 -2
- package/dist/browser/{flowChanges-CgSnSqqP.js → flowChanges-b_5UobFj.js} +586 -87
- package/dist/browser/{flowWorkspace-Bf7H-r0t.js → flowWorkspace-ItojZbO4.js} +21162 -20242
- package/dist/browser/preview.css +254 -179
- package/dist/browser/preview.js +22201 -20625
- package/dist/browser/{typeScriptSession-B0hC-C8y.js → typeScriptSession-CSRwWmZm.js} +1 -1
- package/dist/browser/ui.css +72 -2
- package/dist/browser/workbench.css +254 -179
- package/dist/browser/workbench.js +22 -78
- package/dist/browser/{workbenchSelect-C3e4J93X.js → workbenchSelect-M441Lz0d.js} +1 -1
- package/dist/command/index.js +42 -42
- package/dist/common/authoring.d.ts +5 -5
- package/dist/common/authoringExamples.d.ts +3 -2
- package/dist/common/authoringFields.d.ts +1 -1
- package/dist/common/authoringSchema.d.ts +95 -8
- package/dist/common/connector-proxy.d.ts +1 -1
- package/dist/common/control-api-conformance.d.ts +1 -1
- package/dist/common/control-api-conformance.js +119 -31
- package/dist/common/control-api.d.ts +4 -3
- package/dist/common/control-api.js +117 -29
- package/dist/common/control-requests.d.ts +5 -4
- package/dist/common/control-requests.js +437 -103
- package/dist/common/cron-trigger.d.ts +1 -1
- package/dist/common/decision.d.ts +1 -1
- package/dist/common/draftOperations.d.ts +1 -1
- package/dist/common/engine-contract.d.ts +4 -2
- package/dist/common/event-source-definition.d.ts +1 -1
- package/dist/common/flow-agent.d.ts +1 -1
- package/dist/{browser → common}/flow-authoring-node.d.ts +3 -3
- package/dist/{browser → common}/flow-authoring.js +131 -30
- package/dist/{browser → common}/flow-change-schema.d.ts +177 -6
- package/dist/{browser → common}/flow-change.d.ts +35 -15
- package/dist/{browser → common}/flow-change.js +133 -32
- package/dist/common/flow-connectionUsage.d.ts +1 -1
- package/dist/common/flow-encoding.d.ts +1 -1
- package/dist/common/flow-encoding.js +89 -23
- package/dist/common/flow-errorHandling.d.ts +1 -1
- package/dist/common/flow-graph.d.ts +3 -2
- package/dist/common/flow-modules.d.ts +1 -1
- package/dist/common/flow-promptTemplate.d.ts +1 -1
- package/dist/common/flow-retry.d.ts +2 -2
- package/dist/common/flow-semantics.d.ts +1 -1
- package/dist/common/flow-semantics.js +966 -614
- package/dist/common/flow-workflowFile.d.ts +1 -1
- package/dist/common/flowInspection.d.ts +3 -3
- package/dist/common/http-request.d.ts +156 -0
- package/dist/common/http-request.js +5254 -0
- package/dist/common/integration-trigger.d.ts +1 -1
- package/dist/common/licenses.md +118 -1
- package/dist/common/liveDetails.d.ts +1 -1
- package/dist/common/mcp.d.ts +5 -4
- package/dist/common/mcp.js +117 -29
- package/dist/common/openapi.d.ts +1 -1
- package/dist/common/poll-trigger.d.ts +1 -1
- package/dist/common/run-events.js +11 -9
- package/dist/common/run-results.d.ts +8 -1
- package/dist/common/runtime-contract.d.ts +8 -2
- package/dist/common/runtime-contract.js +25 -5
- package/dist/common/scheduler-checkpoint.d.ts +1 -1
- package/dist/common/scheduler-dependencies.d.ts +1 -1
- package/dist/common/scheduler-node-execution.d.ts +1 -1
- package/dist/common/scheduler.d.ts +3 -3
- package/dist/common/scheduler.js +101 -33
- package/dist/common/trigger-catalog.d.ts +1 -1
- package/dist/common/trigger-config-options.d.ts +1 -1
- package/dist/common/trigger-config.d.ts +1 -1
- package/dist/common/trigger-contract.d.ts +2 -2
- package/dist/common/trigger-localization.d.ts +1 -1
- package/dist/common/webhook-response.d.ts +1 -3
- package/dist/common/webhook-trigger.d.ts +1 -1
- package/dist/common/webhook-trigger.js +12 -11
- package/dist/common/workflow.d.ts +17 -1
- package/dist/common/workflow.js +68 -22
- package/dist/index.d.ts +6 -3
- package/package.json +11 -6
- package/skills/open-flow/references/flow-authoring.md +1 -0
- package/skills/open-flow/references/flow-n8n-conversion.md +19 -15
- package/src/base/common/json.ts +90 -0
- package/src/canvas/common/commands.ts +15 -0
- package/src/connector/common/actionSchema.ts +168 -0
- package/src/connector/common/proxy.ts +44 -0
- package/src/control/common/api.ts +1506 -0
- package/src/control/common/authoring.ts +923 -0
- package/src/control/common/authoringCondition.ts +110 -0
- package/src/control/common/authoringDiagnosticFields.ts +136 -0
- package/src/control/common/authoringExamples.ts +200 -0
- package/src/control/common/authoringFields.ts +53 -0
- package/src/control/common/authoringLlm.ts +70 -0
- package/src/control/common/authoringOpenApi.ts +129 -0
- package/src/control/common/authoringSchema.ts +410 -0
- package/src/control/common/authoringTools.ts +123 -0
- package/src/control/common/authoringTriggers.ts +26 -0
- package/src/control/common/checkDecoders.ts +65 -0
- package/src/control/common/conformance.ts +1989 -0
- package/src/control/common/connectorDecoders.ts +370 -0
- package/src/control/common/connectorQueries.ts +61 -0
- package/src/control/common/decoding.ts +60 -0
- package/src/control/common/draftOperations.ts +61 -0
- package/src/control/common/errors.ts +114 -0
- package/src/control/common/eventSourceSchemas.ts +13 -0
- package/src/control/common/eventSources.ts +186 -0
- package/src/control/common/flowDecoders.ts +153 -0
- package/src/control/common/flowInspection.ts +181 -0
- package/src/control/common/flowNotifications.ts +37 -0
- package/src/control/common/liveDetails.ts +124 -0
- package/src/control/common/mcp.ts +241 -0
- package/src/control/common/mcpConformance.ts +142 -0
- package/src/control/common/providerAccess.ts +28 -0
- package/src/control/common/providerIconSprite.ts +42 -0
- package/src/control/common/publicationDecoders.ts +98 -0
- package/src/control/common/random.ts +16 -0
- package/src/control/common/requests.ts +112 -0
- package/src/control/common/resultQuery.ts +8 -0
- package/src/control/common/results.ts +176 -0
- package/src/control/common/revisionDecoders.ts +52 -0
- package/src/control/common/runDecoders.ts +240 -0
- package/src/control/common/triggerCatalog.ts +89 -0
- package/src/control/common/triggerDecoders.ts +175 -0
- package/src/decision/common/decision.ts +168 -0
- package/src/event-source/common/catalog.generated.json +65 -0
- package/src/event-source/common/definition.ts +66 -0
- package/src/event-source/common/index.ts +99 -0
- package/src/execution/common/checkpoint.ts +311 -0
- package/src/execution/common/dependencies.ts +440 -0
- package/src/execution/common/engineContract.ts +84 -0
- package/src/execution/common/events.ts +331 -0
- package/src/execution/common/node-execution.ts +469 -0
- package/src/execution/common/runLifecycle.ts +250 -0
- package/src/execution/common/runtime.ts +563 -0
- package/src/execution/common/scheduler.ts +697 -0
- package/src/execution/common/wait.ts +36 -0
- package/src/flow/common/agent.ts +305 -0
- package/src/flow/common/authoring.ts +30 -0
- package/src/flow/common/change.ts +1037 -0
- package/src/flow/common/changeSchema.ts +792 -0
- package/src/flow/common/codePermissions.ts +2 -0
- package/src/flow/common/condition.ts +265 -0
- package/src/flow/common/connectionUsage.ts +131 -0
- package/src/flow/common/edgeChanges.ts +35 -0
- package/src/flow/common/encoding.ts +437 -0
- package/src/flow/common/errorHandling.ts +34 -0
- package/src/flow/common/graph.ts +898 -0
- package/src/flow/common/inputValue.ts +16 -0
- package/src/flow/common/json.ts +8 -0
- package/src/flow/common/moduleChanges.ts +31 -0
- package/src/flow/common/modules.ts +292 -0
- package/src/flow/common/nodeChanges.ts +762 -0
- package/src/flow/common/portChanges.ts +36 -0
- package/src/flow/common/promptTemplate.ts +15 -0
- package/src/flow/common/retry.ts +20 -0
- package/src/flow/common/schema.ts +162 -0
- package/src/flow/common/schemaCompare.ts +176 -0
- package/src/flow/common/schemaComparer.ts +178 -0
- package/src/flow/common/schemaKeywords.ts +53 -0
- package/src/flow/common/semantics.ts +531 -0
- package/src/flow/common/sourceField.ts +35 -0
- package/src/flow/common/triggerScheduleSchema.ts +8 -0
- package/src/flow/common/wait.ts +30 -0
- package/src/flow/common/webhookMethod.ts +7 -0
- package/src/flow/common/webhookResponse.ts +71 -0
- package/src/flow/common/workflowFile.ts +97 -0
- package/src/http/common/authBindings.ts +12 -0
- package/src/http/common/headers.ts +5 -0
- package/src/http/common/httpRequest.ts +251 -0
- package/src/json-schema-subset/checker/array.ts +142 -0
- package/src/json-schema-subset/checker/cache.ts +57 -0
- package/src/json-schema-subset/checker/checker.ts +230 -0
- package/src/json-schema-subset/checker/enumAndConst.ts +113 -0
- package/src/json-schema-subset/checker/equals.ts +93 -0
- package/src/json-schema-subset/checker/numeric/checker.ts +50 -0
- package/src/json-schema-subset/checker/numeric/float.ts +121 -0
- package/src/json-schema-subset/checker/numeric/index.ts +1 -0
- package/src/json-schema-subset/checker/numeric/integer.ts +119 -0
- package/src/json-schema-subset/checker/numeric/integerNormalizer.ts +72 -0
- package/src/json-schema-subset/checker/object.ts +354 -0
- package/src/json-schema-subset/checker/range.ts +91 -0
- package/src/json-schema-subset/checker/string.ts +60 -0
- package/src/json-schema-subset/checker/tools/index.ts +3 -0
- package/src/json-schema-subset/checker/tools/mark.ts +82 -0
- package/src/json-schema-subset/checker/tools/quantum.ts +106 -0
- package/src/json-schema-subset/checker/tools/range.ts +210 -0
- package/src/json-schema-subset/checker/validator.ts +23 -0
- package/src/json-schema-subset/compiler/array.ts +163 -0
- package/src/json-schema-subset/compiler/combination.ts +109 -0
- package/src/json-schema-subset/compiler/common.ts +99 -0
- package/src/json-schema-subset/compiler/compiler.ts +188 -0
- package/src/json-schema-subset/compiler/enumAndConst.ts +75 -0
- package/src/json-schema-subset/compiler/index.ts +11 -0
- package/src/json-schema-subset/compiler/object.ts +411 -0
- package/src/json-schema-subset/compiler/primitive.ts +144 -0
- package/src/json-schema-subset/compiler/utils.ts +24 -0
- package/src/json-schema-subset/compiler/wrapper.ts +192 -0
- package/src/json-schema-subset/error.ts +55 -0
- package/src/json-schema-subset/expression/calculator.ts +442 -0
- package/src/json-schema-subset/expression/combination.ts +49 -0
- package/src/json-schema-subset/expression/expression.ts +191 -0
- package/src/json-schema-subset/expression/index.ts +25 -0
- package/src/json-schema-subset/expression/result.ts +88 -0
- package/src/json-schema-subset/expression/types.ts +36 -0
- package/src/json-schema-subset/extends/extendsContext.ts +89 -0
- package/src/json-schema-subset/extends/index.ts +2 -0
- package/src/json-schema-subset/extends/types.ts +12 -0
- package/src/json-schema-subset/global.ts +60 -0
- package/src/json-schema-subset/index.ts +8 -0
- package/src/json-schema-subset/preprocessing.ts +74 -0
- package/src/json-schema-subset/types.ts +8 -0
- package/src/json-schema-subset/utils.ts +95 -0
- package/src/localization/common/languages.ts +118 -0
- package/src/localization/common/timeZone.ts +25 -0
- package/src/openapi/common/openapi.ts +459 -0
- package/src/trigger/common/config.ts +56 -0
- package/src/trigger/common/configOptions.ts +15 -0
- package/src/trigger/common/configSchema.ts +8 -0
- package/src/trigger/common/contract.ts +132 -0
- package/src/trigger/common/cron.ts +151 -0
- package/src/trigger/common/integration.ts +498 -0
- package/src/trigger/common/poll.ts +187 -0
- package/src/trigger/common/webhook.ts +413 -0
- package/src/trigger/providers/airtable/locales/fr.json +18 -0
- package/src/trigger/providers/airtable/locales/ja.json +18 -0
- package/src/trigger/providers/airtable/locales/ko.json +18 -0
- package/src/trigger/providers/airtable/locales/ru.json +18 -0
- package/src/trigger/providers/airtable/locales/zh-CN.json +18 -0
- package/src/trigger/providers/airtable/locales/zh-TW.json +18 -0
- package/src/trigger/providers/asana/locales/fr.json +15 -0
- package/src/trigger/providers/asana/locales/ja.json +15 -0
- package/src/trigger/providers/asana/locales/ko.json +15 -0
- package/src/trigger/providers/asana/locales/ru.json +15 -0
- package/src/trigger/providers/asana/locales/zh-CN.json +15 -0
- package/src/trigger/providers/asana/locales/zh-TW.json +15 -0
- package/src/trigger/providers/calendly/locales/fr.json +16 -0
- package/src/trigger/providers/calendly/locales/ja.json +16 -0
- package/src/trigger/providers/calendly/locales/ko.json +16 -0
- package/src/trigger/providers/calendly/locales/ru.json +16 -0
- package/src/trigger/providers/calendly/locales/zh-CN.json +16 -0
- package/src/trigger/providers/calendly/locales/zh-TW.json +16 -0
- package/src/trigger/providers/catalog.generated.json +4996 -0
- package/src/trigger/providers/clickup/locales/fr.json +16 -0
- package/src/trigger/providers/clickup/locales/ja.json +16 -0
- package/src/trigger/providers/clickup/locales/ko.json +16 -0
- package/src/trigger/providers/clickup/locales/ru.json +16 -0
- package/src/trigger/providers/clickup/locales/zh-CN.json +16 -0
- package/src/trigger/providers/clickup/locales/zh-TW.json +16 -0
- package/src/trigger/providers/definitions.ts +19 -0
- package/src/trigger/providers/feishu/locales/fr.json +20 -0
- package/src/trigger/providers/feishu/locales/ja.json +20 -0
- package/src/trigger/providers/feishu/locales/ko.json +20 -0
- package/src/trigger/providers/feishu/locales/ru.json +20 -0
- package/src/trigger/providers/feishu/locales/zh-CN.json +20 -0
- package/src/trigger/providers/feishu/locales/zh-TW.json +20 -0
- package/src/trigger/providers/fieldDescriptions.ts +392 -0
- package/src/trigger/providers/fieldLabels.ts +256 -0
- package/src/trigger/providers/fireflies/locales/fr.json +17 -0
- package/src/trigger/providers/fireflies/locales/ja.json +17 -0
- package/src/trigger/providers/fireflies/locales/ko.json +17 -0
- package/src/trigger/providers/fireflies/locales/ru.json +17 -0
- package/src/trigger/providers/fireflies/locales/zh-CN.json +17 -0
- package/src/trigger/providers/fireflies/locales/zh-TW.json +17 -0
- package/src/trigger/providers/github/locales/fr.json +30 -0
- package/src/trigger/providers/github/locales/ja.json +30 -0
- package/src/trigger/providers/github/locales/ko.json +30 -0
- package/src/trigger/providers/github/locales/ru.json +30 -0
- package/src/trigger/providers/github/locales/zh-CN.json +30 -0
- package/src/trigger/providers/github/locales/zh-TW.json +30 -0
- package/src/trigger/providers/gitlab/locales/fr.json +18 -0
- package/src/trigger/providers/gitlab/locales/ja.json +18 -0
- package/src/trigger/providers/gitlab/locales/ko.json +18 -0
- package/src/trigger/providers/gitlab/locales/ru.json +18 -0
- package/src/trigger/providers/gitlab/locales/zh-CN.json +18 -0
- package/src/trigger/providers/gitlab/locales/zh-TW.json +18 -0
- package/src/trigger/providers/gmail/locales/fr.json +18 -0
- package/src/trigger/providers/gmail/locales/ja.json +18 -0
- package/src/trigger/providers/gmail/locales/ko.json +18 -0
- package/src/trigger/providers/gmail/locales/ru.json +18 -0
- package/src/trigger/providers/gmail/locales/zh-CN.json +18 -0
- package/src/trigger/providers/gmail/locales/zh-TW.json +18 -0
- package/src/trigger/providers/google-calendar/locales/fr.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ja.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ko.json +15 -0
- package/src/trigger/providers/google-calendar/locales/ru.json +15 -0
- package/src/trigger/providers/google-calendar/locales/zh-CN.json +15 -0
- package/src/trigger/providers/google-calendar/locales/zh-TW.json +15 -0
- package/src/trigger/providers/google-drive/locales/fr.json +48 -0
- package/src/trigger/providers/google-drive/locales/ja.json +48 -0
- package/src/trigger/providers/google-drive/locales/ko.json +48 -0
- package/src/trigger/providers/google-drive/locales/ru.json +48 -0
- package/src/trigger/providers/google-drive/locales/zh-CN.json +48 -0
- package/src/trigger/providers/google-drive/locales/zh-TW.json +48 -0
- package/src/trigger/providers/google-sheets/locales/fr.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ja.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ko.json +19 -0
- package/src/trigger/providers/google-sheets/locales/ru.json +19 -0
- package/src/trigger/providers/google-sheets/locales/zh-CN.json +19 -0
- package/src/trigger/providers/google-sheets/locales/zh-TW.json +19 -0
- package/src/trigger/providers/intercom/locales/fr.json +17 -0
- package/src/trigger/providers/intercom/locales/ja.json +17 -0
- package/src/trigger/providers/intercom/locales/ko.json +17 -0
- package/src/trigger/providers/intercom/locales/ru.json +17 -0
- package/src/trigger/providers/intercom/locales/zh-CN.json +17 -0
- package/src/trigger/providers/intercom/locales/zh-TW.json +17 -0
- package/src/trigger/providers/jira/locales/fr.json +17 -0
- package/src/trigger/providers/jira/locales/ja.json +17 -0
- package/src/trigger/providers/jira/locales/ko.json +17 -0
- package/src/trigger/providers/jira/locales/ru.json +17 -0
- package/src/trigger/providers/jira/locales/zh-CN.json +17 -0
- package/src/trigger/providers/jira/locales/zh-TW.json +17 -0
- package/src/trigger/providers/linear/locales/fr.json +13 -0
- package/src/trigger/providers/linear/locales/ja.json +13 -0
- package/src/trigger/providers/linear/locales/ko.json +13 -0
- package/src/trigger/providers/linear/locales/ru.json +13 -0
- package/src/trigger/providers/linear/locales/zh-CN.json +13 -0
- package/src/trigger/providers/linear/locales/zh-TW.json +13 -0
- package/src/trigger/providers/locales/fr.ts +71 -0
- package/src/trigger/providers/locales/ja.ts +71 -0
- package/src/trigger/providers/locales/ko.ts +71 -0
- package/src/trigger/providers/locales/ru.ts +71 -0
- package/src/trigger/providers/locales/zh-CN.ts +71 -0
- package/src/trigger/providers/locales/zh-TW.ts +71 -0
- package/src/trigger/providers/localization.ts +59 -0
- package/src/trigger/providers/notion/locales/fr.json +16 -0
- package/src/trigger/providers/notion/locales/ja.json +16 -0
- package/src/trigger/providers/notion/locales/ko.json +16 -0
- package/src/trigger/providers/notion/locales/ru.json +16 -0
- package/src/trigger/providers/notion/locales/zh-CN.json +16 -0
- package/src/trigger/providers/notion/locales/zh-TW.json +16 -0
- package/src/trigger/providers/one-drive/locales/fr.json +16 -0
- package/src/trigger/providers/one-drive/locales/ja.json +16 -0
- package/src/trigger/providers/one-drive/locales/ko.json +16 -0
- package/src/trigger/providers/one-drive/locales/ru.json +16 -0
- package/src/trigger/providers/one-drive/locales/zh-CN.json +16 -0
- package/src/trigger/providers/one-drive/locales/zh-TW.json +16 -0
- package/src/trigger/providers/outlook/locales/fr.json +18 -0
- package/src/trigger/providers/outlook/locales/ja.json +18 -0
- package/src/trigger/providers/outlook/locales/ko.json +18 -0
- package/src/trigger/providers/outlook/locales/ru.json +18 -0
- package/src/trigger/providers/outlook/locales/zh-CN.json +18 -0
- package/src/trigger/providers/outlook/locales/zh-TW.json +18 -0
- package/src/trigger/providers/pandadoc/locales/fr.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ja.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ko.json +12 -0
- package/src/trigger/providers/pandadoc/locales/ru.json +12 -0
- package/src/trigger/providers/pandadoc/locales/zh-CN.json +12 -0
- package/src/trigger/providers/pandadoc/locales/zh-TW.json +12 -0
- package/src/trigger/providers/pipedrive/locales/fr.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ja.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ko.json +15 -0
- package/src/trigger/providers/pipedrive/locales/ru.json +15 -0
- package/src/trigger/providers/pipedrive/locales/zh-CN.json +15 -0
- package/src/trigger/providers/pipedrive/locales/zh-TW.json +15 -0
- package/src/trigger/providers/remote.ts +163 -0
- package/src/trigger/providers/resend/locales/fr.json +16 -0
- package/src/trigger/providers/resend/locales/ja.json +16 -0
- package/src/trigger/providers/resend/locales/ko.json +16 -0
- package/src/trigger/providers/resend/locales/ru.json +16 -0
- package/src/trigger/providers/resend/locales/zh-CN.json +16 -0
- package/src/trigger/providers/resend/locales/zh-TW.json +16 -0
- package/src/trigger/providers/sentry/locales/fr.json +19 -0
- package/src/trigger/providers/sentry/locales/ja.json +19 -0
- package/src/trigger/providers/sentry/locales/ko.json +19 -0
- package/src/trigger/providers/sentry/locales/ru.json +19 -0
- package/src/trigger/providers/sentry/locales/zh-CN.json +19 -0
- package/src/trigger/providers/sentry/locales/zh-TW.json +19 -0
- package/src/trigger/providers/shopify/locales/fr.json +18 -0
- package/src/trigger/providers/shopify/locales/ja.json +18 -0
- package/src/trigger/providers/shopify/locales/ko.json +18 -0
- package/src/trigger/providers/shopify/locales/ru.json +18 -0
- package/src/trigger/providers/shopify/locales/zh-CN.json +18 -0
- package/src/trigger/providers/shopify/locales/zh-TW.json +18 -0
- package/src/trigger/providers/slack/locales/fr.json +18 -0
- package/src/trigger/providers/slack/locales/ja.json +18 -0
- package/src/trigger/providers/slack/locales/ko.json +18 -0
- package/src/trigger/providers/slack/locales/ru.json +18 -0
- package/src/trigger/providers/slack/locales/zh-CN.json +18 -0
- package/src/trigger/providers/slack/locales/zh-TW.json +18 -0
- package/src/trigger/providers/slackbot/locales/fr.json +23 -0
- package/src/trigger/providers/slackbot/locales/ja.json +23 -0
- package/src/trigger/providers/slackbot/locales/ko.json +23 -0
- package/src/trigger/providers/slackbot/locales/ru.json +23 -0
- package/src/trigger/providers/slackbot/locales/zh-CN.json +23 -0
- package/src/trigger/providers/slackbot/locales/zh-TW.json +23 -0
- package/src/trigger/providers/source-events.ts +25 -0
- package/src/trigger/providers/stripe/locales/fr.json +17 -0
- package/src/trigger/providers/stripe/locales/ja.json +17 -0
- package/src/trigger/providers/stripe/locales/ko.json +17 -0
- package/src/trigger/providers/stripe/locales/ru.json +17 -0
- package/src/trigger/providers/stripe/locales/zh-CN.json +17 -0
- package/src/trigger/providers/stripe/locales/zh-TW.json +17 -0
- package/src/trigger/providers/tally/locales/fr.json +12 -0
- package/src/trigger/providers/tally/locales/ja.json +12 -0
- package/src/trigger/providers/tally/locales/ko.json +12 -0
- package/src/trigger/providers/tally/locales/ru.json +12 -0
- package/src/trigger/providers/tally/locales/zh-CN.json +12 -0
- package/src/trigger/providers/tally/locales/zh-TW.json +12 -0
- package/src/trigger/providers/telegram/locales/fr.json +17 -0
- package/src/trigger/providers/telegram/locales/ja.json +17 -0
- package/src/trigger/providers/telegram/locales/ko.json +17 -0
- package/src/trigger/providers/telegram/locales/ru.json +17 -0
- package/src/trigger/providers/telegram/locales/zh-CN.json +17 -0
- package/src/trigger/providers/telegram/locales/zh-TW.json +17 -0
- package/src/trigger/providers/typeform/locales/fr.json +12 -0
- package/src/trigger/providers/typeform/locales/ja.json +12 -0
- package/src/trigger/providers/typeform/locales/ko.json +12 -0
- package/src/trigger/providers/typeform/locales/ru.json +12 -0
- package/src/trigger/providers/typeform/locales/zh-CN.json +12 -0
- package/src/trigger/providers/typeform/locales/zh-TW.json +12 -0
- package/src/trigger/providers/vercel/locales/fr.json +18 -0
- package/src/trigger/providers/vercel/locales/ja.json +18 -0
- package/src/trigger/providers/vercel/locales/ko.json +18 -0
- package/src/trigger/providers/vercel/locales/ru.json +18 -0
- package/src/trigger/providers/vercel/locales/zh-CN.json +18 -0
- package/src/trigger/providers/vercel/locales/zh-TW.json +18 -0
- package/src/trigger/providers/woocommerce/locales/fr.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ja.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ko.json +19 -0
- package/src/trigger/providers/woocommerce/locales/ru.json +19 -0
- package/src/trigger/providers/woocommerce/locales/zh-CN.json +19 -0
- package/src/trigger/providers/woocommerce/locales/zh-TW.json +19 -0
- package/src/trigger/providers/zendesk/locales/fr.json +15 -0
- package/src/trigger/providers/zendesk/locales/ja.json +15 -0
- package/src/trigger/providers/zendesk/locales/ko.json +15 -0
- package/src/trigger/providers/zendesk/locales/ru.json +15 -0
- package/src/trigger/providers/zendesk/locales/zh-CN.json +15 -0
- package/src/trigger/providers/zendesk/locales/zh-TW.json +15 -0
- package/src/trigger/providers/zoom/locales/fr.json +17 -0
- package/src/trigger/providers/zoom/locales/ja.json +17 -0
- package/src/trigger/providers/zoom/locales/ko.json +17 -0
- package/src/trigger/providers/zoom/locales/ru.json +17 -0
- package/src/trigger/providers/zoom/locales/zh-CN.json +17 -0
- package/src/trigger/providers/zoom/locales/zh-TW.json +17 -0
- package/src/types/index.ts +112 -0
- package/src/workflow/common/workflow.ts +273 -0
- package/dist/browser/lib-DrKav3HG.js +0 -11403
- /package/dist/{browser → common}/flow-authoring-edge.d.ts +0 -0
- /package/dist/{browser → common}/flow-authoring-module.d.ts +0 -0
- /package/dist/{browser → common}/flow-authoring.d.ts +0 -0
- /package/dist/{browser → common}/flow-input-value.d.ts +0 -0
- /package/dist/{browser → common}/webhook-method.d.ts +0 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import type { Graph, JsonValue } from '../../flow/common/change.ts'
|
|
2
|
+
import type { DependenciesCheckpoint } from './dependencies.ts'
|
|
3
|
+
import type { ExecutableNode } from './node-execution.ts'
|
|
4
|
+
import type { AgentCheckpoint } from './runtime.ts'
|
|
5
|
+
|
|
6
|
+
import { z } from 'zod'
|
|
7
|
+
import { isTriggerNode } from '../../flow/common/change.ts'
|
|
8
|
+
import { nodeErrorSchema, nodeSystemOutputPorts } from '../../flow/common/errorHandling.ts'
|
|
9
|
+
import { nodeInputPorts as nodePorts, isResolutionNode, resolutionActions } from '../../flow/common/graph.ts'
|
|
10
|
+
import { matchesSchema } from '../../flow/common/schema.ts'
|
|
11
|
+
import { matchesTriggerOutputs } from '../../trigger/common/contract.ts'
|
|
12
|
+
import { dependenciesSchema, dependencyValues } from './dependencies.ts'
|
|
13
|
+
import { agentCheckpointSchema, agentConfig, agentApproval, jsonEqual, jsonValue, outputRecord, usesPending, validateOutputs } from './node-execution.ts'
|
|
14
|
+
|
|
15
|
+
export interface PendingWait {
|
|
16
|
+
readonly jobId: string
|
|
17
|
+
readonly nodeId: string
|
|
18
|
+
readonly value: JsonValue
|
|
19
|
+
readonly waitId: string
|
|
20
|
+
readonly pending?: JsonValue
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface PendingWorkflowCall {
|
|
24
|
+
readonly jobId: string
|
|
25
|
+
readonly nodeId: string
|
|
26
|
+
readonly childRunId: string
|
|
27
|
+
readonly input: Readonly<Record<string, JsonValue>>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface FlowRunCheckpoint {
|
|
31
|
+
readonly calls?: readonly PendingWorkflowCall[]
|
|
32
|
+
readonly bindingValues: Readonly<Record<string, string>>
|
|
33
|
+
readonly inputs: Readonly<Record<string, Readonly<Record<string, JsonValue>>>>
|
|
34
|
+
readonly results: Readonly<
|
|
35
|
+
Record<
|
|
36
|
+
string,
|
|
37
|
+
{
|
|
38
|
+
readonly handled?: true
|
|
39
|
+
readonly jobId: string
|
|
40
|
+
readonly outputs: Readonly<Record<string, JsonValue>>
|
|
41
|
+
readonly systemOutputs?: Readonly<Record<string, JsonValue>>
|
|
42
|
+
}
|
|
43
|
+
>
|
|
44
|
+
>
|
|
45
|
+
readonly counts: Readonly<Record<string, Readonly<Record<string, number>>>>
|
|
46
|
+
readonly dependencies: DependenciesCheckpoint
|
|
47
|
+
readonly version: 6
|
|
48
|
+
readonly waits: readonly PendingWait[]
|
|
49
|
+
readonly agents: Readonly<
|
|
50
|
+
Record<
|
|
51
|
+
string,
|
|
52
|
+
{
|
|
53
|
+
readonly invocationId: string
|
|
54
|
+
readonly input: Readonly<Record<string, JsonValue>>
|
|
55
|
+
readonly remainingMs?: number
|
|
56
|
+
readonly checkpoint: AgentCheckpoint
|
|
57
|
+
}
|
|
58
|
+
>
|
|
59
|
+
>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function checkpointRecord(value: unknown, description: string): Readonly<Record<string, unknown>> {
|
|
63
|
+
if (value == null || typeof value != 'object' || Array.isArray(value)) throw new Error(`${description} must be an object.`)
|
|
64
|
+
return value as Readonly<Record<string, unknown>>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function checkpointExact(value: Readonly<Record<string, unknown>>, fields: readonly string[], description: string): void {
|
|
68
|
+
const keys = Object.keys(value)
|
|
69
|
+
if (keys.length != fields.length || keys.some((key) => !fields.includes(key))) throw new Error(`${description} contains unsupported fields.`)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function checkpointString(value: unknown, description: string): string {
|
|
73
|
+
if (typeof value != 'string' || value.length == 0) throw new Error(`${description} must be a non-empty string.`)
|
|
74
|
+
return value
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function decodeFlowRunCheckpoint(input: unknown): FlowRunCheckpoint {
|
|
78
|
+
const source = checkpointRecord(input, 'Flow Run checkpoint')
|
|
79
|
+
checkpointExact(
|
|
80
|
+
source,
|
|
81
|
+
['agents', 'bindingValues', 'counts', 'dependencies', 'inputs', 'results', 'version', 'waits', ...(source.calls === undefined ? [] : ['calls'])],
|
|
82
|
+
'Flow Run checkpoint',
|
|
83
|
+
)
|
|
84
|
+
if (source.version != 6) throw new Error('Flow Run checkpoint version is unsupported.')
|
|
85
|
+
const bindingValues = Object.fromEntries(
|
|
86
|
+
Object.entries(checkpointRecord(source.bindingValues, 'Checkpoint bindings')).map(([id, value]) => {
|
|
87
|
+
if (typeof value != 'string') throw new Error('Checkpoint binding must be a string.')
|
|
88
|
+
return [id, value]
|
|
89
|
+
}),
|
|
90
|
+
)
|
|
91
|
+
const inputs = Object.fromEntries(
|
|
92
|
+
Object.entries(checkpointRecord(source.inputs, 'Checkpoint inputs')).map(([id, value]) => [
|
|
93
|
+
id,
|
|
94
|
+
Object.fromEntries(
|
|
95
|
+
Object.entries(checkpointRecord(value, 'Checkpoint node inputs')).map(([handle, item]) => [handle, jsonValue(item, 'Checkpoint input')]),
|
|
96
|
+
),
|
|
97
|
+
]),
|
|
98
|
+
)
|
|
99
|
+
const results = Object.fromEntries(
|
|
100
|
+
Object.entries(checkpointRecord(source.results, 'Checkpoint results')).map(([id, value]) => {
|
|
101
|
+
const result = checkpointRecord(value, 'Checkpoint result')
|
|
102
|
+
if (result.handled !== undefined && result.handled !== true) throw new Error('Checkpoint handled flag is invalid.')
|
|
103
|
+
checkpointExact(
|
|
104
|
+
result,
|
|
105
|
+
['jobId', 'outputs', ...(result.systemOutputs === undefined ? [] : ['systemOutputs']), ...(result.handled === undefined ? [] : ['handled'])],
|
|
106
|
+
'Checkpoint result',
|
|
107
|
+
)
|
|
108
|
+
return [
|
|
109
|
+
id,
|
|
110
|
+
{
|
|
111
|
+
jobId: checkpointString(result.jobId, 'Checkpoint job ID'),
|
|
112
|
+
...(result.systemOutputs === undefined ? {} : { systemOutputs: outputRecord(jsonValue(result.systemOutputs, 'Checkpoint system outputs'), id) }),
|
|
113
|
+
...(result.handled === true ? { handled: true as const } : {}),
|
|
114
|
+
outputs: Object.fromEntries(
|
|
115
|
+
Object.entries(checkpointRecord(result.outputs, 'Checkpoint outputs')).map(([handle, item]) => [handle, jsonValue(item, 'Checkpoint output')]),
|
|
116
|
+
),
|
|
117
|
+
},
|
|
118
|
+
]
|
|
119
|
+
}),
|
|
120
|
+
)
|
|
121
|
+
const counts = z.record(z.string(), z.record(z.string(), z.number().int().positive().max(Number.MAX_SAFE_INTEGER))).parse(source.counts)
|
|
122
|
+
const dependencies = dependenciesSchema.parse(source.dependencies)
|
|
123
|
+
const savedWaitFields = {
|
|
124
|
+
jobId: z.string().min(1),
|
|
125
|
+
nodeId: z.string().min(1),
|
|
126
|
+
value: z.json(),
|
|
127
|
+
waitId: z.string().min(1),
|
|
128
|
+
}
|
|
129
|
+
const savedWait = z.strictObject({ ...savedWaitFields, pending: z.json().optional() })
|
|
130
|
+
const pendingWaits = z.array(savedWait).parse(source.waits)
|
|
131
|
+
const calls = z
|
|
132
|
+
.array(z.strictObject({ jobId: z.string().min(1), nodeId: z.string().min(1), childRunId: z.string().min(1), input: z.record(z.string(), z.json()) }))
|
|
133
|
+
.parse(source.calls ?? [])
|
|
134
|
+
if (pendingWaits.length + calls.length == 0) throw new Error('Checkpoint has no pending execution.')
|
|
135
|
+
const agents = z
|
|
136
|
+
.record(
|
|
137
|
+
z.string(),
|
|
138
|
+
z.strictObject({
|
|
139
|
+
invocationId: z.string().min(1),
|
|
140
|
+
input: z.record(z.string(), z.json()),
|
|
141
|
+
remainingMs: z.number().positive().optional(),
|
|
142
|
+
checkpoint: agentCheckpointSchema,
|
|
143
|
+
}),
|
|
144
|
+
)
|
|
145
|
+
.parse(source.agents)
|
|
146
|
+
const jobs = new Set<string>()
|
|
147
|
+
const waits = new Set<string>()
|
|
148
|
+
for (const pending of pendingWaits) {
|
|
149
|
+
if (
|
|
150
|
+
jobs.has(pending.jobId) ||
|
|
151
|
+
waits.has(pending.waitId) ||
|
|
152
|
+
dependencies.nodes[pending.nodeId]?.status != 'running' ||
|
|
153
|
+
dependencies.nodes[pending.nodeId]?.jobId != pending.jobId ||
|
|
154
|
+
Object.values(results).some((result) => result.jobId == pending.jobId)
|
|
155
|
+
) {
|
|
156
|
+
throw new Error('Checkpoint waiting execution states conflict.')
|
|
157
|
+
}
|
|
158
|
+
jobs.add(pending.jobId)
|
|
159
|
+
waits.add(pending.waitId)
|
|
160
|
+
}
|
|
161
|
+
for (const call of calls) {
|
|
162
|
+
if (
|
|
163
|
+
jobs.has(call.jobId) ||
|
|
164
|
+
dependencies.nodes[call.nodeId]?.status != 'running' ||
|
|
165
|
+
dependencies.nodes[call.nodeId]?.jobId != call.jobId ||
|
|
166
|
+
Object.values(results).some((result) => result.jobId == call.jobId)
|
|
167
|
+
)
|
|
168
|
+
throw new Error('Checkpoint call execution conflicts.')
|
|
169
|
+
jobs.add(call.jobId)
|
|
170
|
+
}
|
|
171
|
+
if (Object.values(dependencies.nodes).some((state) => state.status == 'running' && !jobs.has(state.jobId!)))
|
|
172
|
+
throw new Error('Checkpoint dependency has no waiting execution.')
|
|
173
|
+
if (Object.keys(agents).some((id) => !jobs.has(id))) throw new Error('Checkpoint Agent has no waiting execution.')
|
|
174
|
+
return { agents, bindingValues, counts, dependencies, inputs, results, version: 6, waits: pendingWaits, ...(source.calls === undefined ? {} : { calls }) }
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function validateCheckpoint(
|
|
178
|
+
target: { readonly graph: Graph },
|
|
179
|
+
checkpoint: FlowRunCheckpoint,
|
|
180
|
+
resolveInputs: (nodeId: string, node: ExecutableNode) => Readonly<Record<string, JsonValue>>,
|
|
181
|
+
): void {
|
|
182
|
+
const launch = checkpoint.inputs
|
|
183
|
+
const agents = checkpoint.agents
|
|
184
|
+
if ([...Object.keys(checkpoint.results), ...Object.keys(launch)].some((id) => target.graph.nodes[id] == null))
|
|
185
|
+
throw new Error('Checkpoint nodes do not match the prepared graph.')
|
|
186
|
+
for (const [scope, counts] of Object.entries(checkpoint.counts)) {
|
|
187
|
+
const graph = scope == '' ? target.graph : undefined
|
|
188
|
+
if (graph == null) throw new Error('Checkpoint execution counts reference an unknown graph.')
|
|
189
|
+
for (const [id, count] of Object.entries(counts)) {
|
|
190
|
+
const node = graph.nodes[id]
|
|
191
|
+
if (node == null || isTriggerNode(node) || count > (node.maxExecutions ?? 1000)) throw new Error('Checkpoint execution count is invalid.')
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const validateResults = (
|
|
195
|
+
results: Readonly<Record<string, Readonly<Record<string, JsonValue>>>>,
|
|
196
|
+
frame = false,
|
|
197
|
+
metadata: Readonly<Record<string, { readonly systemOutputs?: Readonly<Record<string, JsonValue>>; readonly handled?: true }>> = checkpoint.results,
|
|
198
|
+
) => {
|
|
199
|
+
for (const [id, outputs] of Object.entries(results)) {
|
|
200
|
+
const result = metadata[id]
|
|
201
|
+
const node = target.graph.nodes[id]
|
|
202
|
+
if (node == null) throw new Error('Checkpoint result node is missing.')
|
|
203
|
+
const systemEnabled = nodeSystemOutputPorts(node).error != null
|
|
204
|
+
if (systemEnabled && result?.systemOutputs == null) throw new Error('Checkpoint system output is missing.')
|
|
205
|
+
if (!isTriggerNode(node) && checkpoint.counts['']?.[id] == null) throw new Error('Checkpoint execution count is missing.')
|
|
206
|
+
if (result?.systemOutputs != null) {
|
|
207
|
+
const error = result.systemOutputs.error
|
|
208
|
+
if (
|
|
209
|
+
!systemEnabled ||
|
|
210
|
+
Object.keys(result.systemOutputs).length != 1 ||
|
|
211
|
+
!Object.hasOwn(result.systemOutputs, 'error') ||
|
|
212
|
+
(error !== null && (!matchesSchema(error!, nodeErrorSchema) || typeof error != 'object' || !('nodeId' in error) || error.nodeId != id))
|
|
213
|
+
)
|
|
214
|
+
throw new Error('Checkpoint system output is invalid.')
|
|
215
|
+
}
|
|
216
|
+
const handled = frame ? result?.systemOutputs?.error != null : result?.handled === true
|
|
217
|
+
if (handled !== (result?.systemOutputs?.error != null)) throw new Error('Checkpoint failure status is inconsistent.')
|
|
218
|
+
if (handled) {
|
|
219
|
+
if (Object.keys(outputs).length || result.systemOutputs?.error == null) throw new Error('Checkpoint handled failure is invalid.')
|
|
220
|
+
continue
|
|
221
|
+
}
|
|
222
|
+
if (isTriggerNode(node)) {
|
|
223
|
+
if (!matchesTriggerOutputs(node, outputs)) throw new Error('Checkpoint Trigger output is invalid.')
|
|
224
|
+
} else {
|
|
225
|
+
if (!jsonEqual(validateOutputs(id, node, outputs), outputs)) throw new Error('Checkpoint node outputs are incomplete.')
|
|
226
|
+
const count = Object.keys(outputs).length
|
|
227
|
+
if (
|
|
228
|
+
(node.kind == 'condition' && count != 0) ||
|
|
229
|
+
(isResolutionNode(node) &&
|
|
230
|
+
(resolutionActions(node).filter((action) => Object.hasOwn(outputs, action)).length > 1 ||
|
|
231
|
+
(!resolutionActions(node).some((action) => Object.hasOwn(outputs, action)) && !(frame && Object.hasOwn(outputs, 'pending')))))
|
|
232
|
+
)
|
|
233
|
+
throw new Error('Checkpoint branch result is invalid.')
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
validateResults(Object.fromEntries(Object.entries(checkpoint.results).map(([id, result]) => [id, result.outputs])))
|
|
238
|
+
const triggerIds = Object.keys(checkpoint.results).filter((id) => isTriggerNode(target.graph.nodes[id]!))
|
|
239
|
+
if (triggerIds.length != 1) throw new Error('Checkpoint must contain exactly one selected Trigger.')
|
|
240
|
+
const pendingCounts = new Map<string, number>()
|
|
241
|
+
for (const waiting of [...checkpoint.waits, ...(checkpoint.calls ?? [])]) pendingCounts.set(waiting.nodeId, (pendingCounts.get(waiting.nodeId) ?? 0) + 1)
|
|
242
|
+
for (const [id, count] of pendingCounts) {
|
|
243
|
+
if ((checkpoint.counts['']?.[id] ?? 0) < count + (checkpoint.results[id] == null ? 0 : 1))
|
|
244
|
+
throw new Error('Checkpoint waiting execution count is incomplete.')
|
|
245
|
+
}
|
|
246
|
+
for (const [id, values] of Object.entries(launch)) {
|
|
247
|
+
const node = target.graph.nodes[id]!
|
|
248
|
+
if (isTriggerNode(node) || Object.keys(values).some((handle) => nodePorts(node)[handle] == null))
|
|
249
|
+
throw new Error('Checkpoint launch inputs do not match the prepared graph.')
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
for (const [nodeId, state] of Object.entries(checkpoint.dependencies.nodes)) {
|
|
253
|
+
const frame = dependencyValues(state.input)
|
|
254
|
+
validateResults(frame, true, state.input)
|
|
255
|
+
if (!isTriggerNode(target.graph.nodes[nodeId]!) && (state.status == 'running' || state.status == 'completed')) {
|
|
256
|
+
const triggers = Object.keys(frame).filter((id) => isTriggerNode(target.graph.nodes[id]!))
|
|
257
|
+
if (triggers.length != 1 || triggers[0] != triggerIds[0] || !jsonEqual(frame[triggers[0]!]!, checkpoint.results[triggers[0]!]!.outputs))
|
|
258
|
+
throw new Error('Checkpoint input Trigger does not match the Run.')
|
|
259
|
+
}
|
|
260
|
+
if (state.output != null) validateResults({ [nodeId]: state.output }, state.status == 'running')
|
|
261
|
+
if (state.status == 'completed') {
|
|
262
|
+
const result = checkpoint.results[nodeId]
|
|
263
|
+
if (
|
|
264
|
+
result == null ||
|
|
265
|
+
(state.jobId != null && state.jobId != result.jobId) ||
|
|
266
|
+
!jsonEqual(state.output!, result.outputs) ||
|
|
267
|
+
!jsonEqual(state.systemOutputs ?? {}, result.systemOutputs ?? {})
|
|
268
|
+
)
|
|
269
|
+
throw new Error('Checkpoint completed dependency conflicts with its result.')
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
for (const call of checkpoint.calls ?? []) {
|
|
273
|
+
const node = target.graph.nodes[call.nodeId]
|
|
274
|
+
if (
|
|
275
|
+
node?.kind != 'task' ||
|
|
276
|
+
!('executor' in node.task) ||
|
|
277
|
+
node.task.executor.kind != 'workflow' ||
|
|
278
|
+
!jsonEqual(resolveInputs(call.nodeId, node), call.input) ||
|
|
279
|
+
checkpoint.agents[call.jobId] != null ||
|
|
280
|
+
checkpoint.dependencies.nodes[call.nodeId]?.output != null
|
|
281
|
+
)
|
|
282
|
+
throw new Error('Checkpoint workflow call does not match its node.')
|
|
283
|
+
}
|
|
284
|
+
for (const waiting of checkpoint.waits) {
|
|
285
|
+
const node = target.graph.nodes[waiting.nodeId]
|
|
286
|
+
if (node == null || isTriggerNode(node)) throw new Error('Checkpoint waiting node is missing.')
|
|
287
|
+
const state = checkpoint.dependencies.nodes[waiting.nodeId]!
|
|
288
|
+
const expectedOutput = waiting.pending == null ? undefined : { pending: waiting.pending }
|
|
289
|
+
if ((state.output == null) != (expectedOutput == null) || (state.output != null && !jsonEqual(state.output, expectedOutput!)))
|
|
290
|
+
throw new Error('Checkpoint waiting dependency output is inconsistent.')
|
|
291
|
+
const config = agentConfig(node)
|
|
292
|
+
const saved = agents[waiting.jobId]
|
|
293
|
+
if (!isResolutionNode(node) && config == null) throw new Error('Checkpoint waiting node cannot suspend.')
|
|
294
|
+
if (config != null) {
|
|
295
|
+
if (saved != null && saved.invocationId != waiting.jobId) throw new Error('Checkpoint Agent invocation identity changed.')
|
|
296
|
+
if (saved == null || (node.timeoutMs == null) != (saved.remainingMs == null) || (saved.remainingMs != null && saved.remainingMs > node.timeoutMs!)) {
|
|
297
|
+
throw new Error('Checkpoint Agent budget is invalid.')
|
|
298
|
+
}
|
|
299
|
+
const approval = agentApproval(config, saved.checkpoint, saved.input)
|
|
300
|
+
if (!jsonEqual(waiting.value, approval)) throw new Error('Checkpoint Agent approval does not match its saved call.')
|
|
301
|
+
if (!jsonEqual(resolveInputs(waiting.nodeId, node), saved.input)) throw new Error('Checkpoint Agent inputs changed.')
|
|
302
|
+
} else {
|
|
303
|
+
if (saved != null) throw new Error('Checkpoint Wait contains Agent state.')
|
|
304
|
+
if (!isResolutionNode(node) || !jsonEqual(resolveInputs(waiting.nodeId, node), waiting.value)) throw new Error('Checkpoint resolution input changed.')
|
|
305
|
+
const notify = usesPending(target.graph, waiting.nodeId)
|
|
306
|
+
if (notify != (waiting.pending != null)) throw new Error('Checkpoint Wait pending output is missing or unexpected.')
|
|
307
|
+
if (waiting.pending != null) validateOutputs(waiting.nodeId, node, { pending: waiting.pending })
|
|
308
|
+
}
|
|
309
|
+
if (checkpoint.counts['']?.[waiting.nodeId] == null) throw new Error('Checkpoint waiting execution count is missing.')
|
|
310
|
+
}
|
|
311
|
+
}
|