@synergenius/flow-weaver 0.2.0
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 +122 -0
- package/README.md +315 -0
- package/dist/annotation-generator.d.ts +45 -0
- package/dist/annotation-generator.js +557 -0
- package/dist/api/builder.d.ts +223 -0
- package/dist/api/builder.js +345 -0
- package/dist/api/compile.d.ts +92 -0
- package/dist/api/compile.js +149 -0
- package/dist/api/extract-types.d.ts +29 -0
- package/dist/api/extract-types.js +57 -0
- package/dist/api/generate-in-place.d.ts +73 -0
- package/dist/api/generate-in-place.js +1353 -0
- package/dist/api/generate.d.ts +83 -0
- package/dist/api/generate.js +510 -0
- package/dist/api/helpers.d.ts +248 -0
- package/dist/api/helpers.js +285 -0
- package/dist/api/index.d.ts +46 -0
- package/dist/api/index.js +45 -0
- package/dist/api/inline-runtime.d.ts +27 -0
- package/dist/api/inline-runtime.js +551 -0
- package/dist/api/manipulation/connections.d.ts +79 -0
- package/dist/api/manipulation/connections.js +151 -0
- package/dist/api/manipulation/index.d.ts +34 -0
- package/dist/api/manipulation/index.js +41 -0
- package/dist/api/manipulation/node-types.d.ts +123 -0
- package/dist/api/manipulation/node-types.js +200 -0
- package/dist/api/manipulation/nodes.d.ts +144 -0
- package/dist/api/manipulation/nodes.js +333 -0
- package/dist/api/manipulation/ports.d.ts +59 -0
- package/dist/api/manipulation/ports.js +228 -0
- package/dist/api/manipulation/scopes.d.ts +52 -0
- package/dist/api/manipulation/scopes.js +156 -0
- package/dist/api/manipulation/validation.d.ts +6 -0
- package/dist/api/manipulation/validation.js +6 -0
- package/dist/api/manipulation/workflow.d.ts +81 -0
- package/dist/api/manipulation/workflow.js +116 -0
- package/dist/api/manipulation.d.ts +8 -0
- package/dist/api/manipulation.js +8 -0
- package/dist/api/parse.d.ts +48 -0
- package/dist/api/parse.js +110 -0
- package/dist/api/patterns.d.ts +112 -0
- package/dist/api/patterns.js +306 -0
- package/dist/api/query.d.ts +429 -0
- package/dist/api/query.js +816 -0
- package/dist/api/templates.d.ts +98 -0
- package/dist/api/templates.js +117 -0
- package/dist/api/transform.d.ts +31 -0
- package/dist/api/transform.js +40 -0
- package/dist/api/validate.d.ts +25 -0
- package/dist/api/validate.js +39 -0
- package/dist/api/workflow-file-operations.d.ts +29 -0
- package/dist/api/workflow-file-operations.js +180 -0
- package/dist/ast/builder.d.ts +210 -0
- package/dist/ast/builder.js +395 -0
- package/dist/ast/index.d.ts +5 -0
- package/dist/ast/index.js +5 -0
- package/dist/ast/serialization-node.d.ts +6 -0
- package/dist/ast/serialization-node.js +30 -0
- package/dist/ast/serialization.d.ts +43 -0
- package/dist/ast/serialization.js +134 -0
- package/dist/ast/types.d.ts +852 -0
- package/dist/ast/types.js +2 -0
- package/dist/ast/workflow-utils.d.ts +54 -0
- package/dist/ast/workflow-utils.js +114 -0
- package/dist/body-generator.d.ts +31 -0
- package/dist/body-generator.js +35 -0
- package/dist/built-in-nodes/delay.d.ts +11 -0
- package/dist/built-in-nodes/delay.js +29 -0
- package/dist/built-in-nodes/index.d.ts +5 -0
- package/dist/built-in-nodes/index.js +4 -0
- package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
- package/dist/built-in-nodes/invoke-workflow.js +25 -0
- package/dist/built-in-nodes/mock-types.d.ts +18 -0
- package/dist/built-in-nodes/mock-types.js +12 -0
- package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
- package/dist/built-in-nodes/wait-for-event.js +25 -0
- package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
- package/dist/chevrotain-parser/connect-parser.js +98 -0
- package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
- package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
- package/dist/chevrotain-parser/index.d.ts +25 -0
- package/dist/chevrotain-parser/index.js +27 -0
- package/dist/chevrotain-parser/map-parser.d.ts +33 -0
- package/dist/chevrotain-parser/map-parser.js +130 -0
- package/dist/chevrotain-parser/node-parser.d.ts +36 -0
- package/dist/chevrotain-parser/node-parser.js +466 -0
- package/dist/chevrotain-parser/path-parser.d.ts +28 -0
- package/dist/chevrotain-parser/path-parser.js +118 -0
- package/dist/chevrotain-parser/port-parser.d.ts +36 -0
- package/dist/chevrotain-parser/port-parser.js +442 -0
- package/dist/chevrotain-parser/position-parser.d.ts +20 -0
- package/dist/chevrotain-parser/position-parser.js +83 -0
- package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
- package/dist/chevrotain-parser/scope-parser.js +104 -0
- package/dist/chevrotain-parser/tokens.d.ts +78 -0
- package/dist/chevrotain-parser/tokens.js +384 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
- package/dist/cli/commands/changelog.d.ts +13 -0
- package/dist/cli/commands/changelog.js +135 -0
- package/dist/cli/commands/compile.d.ts +64 -0
- package/dist/cli/commands/compile.js +278 -0
- package/dist/cli/commands/create.d.ts +33 -0
- package/dist/cli/commands/create.js +147 -0
- package/dist/cli/commands/describe.d.ts +68 -0
- package/dist/cli/commands/describe.js +377 -0
- package/dist/cli/commands/dev.d.ts +32 -0
- package/dist/cli/commands/dev.js +384 -0
- package/dist/cli/commands/diagram.d.ts +13 -0
- package/dist/cli/commands/diagram.js +33 -0
- package/dist/cli/commands/diff.d.ts +11 -0
- package/dist/cli/commands/diff.js +59 -0
- package/dist/cli/commands/doctor.d.ts +57 -0
- package/dist/cli/commands/doctor.js +719 -0
- package/dist/cli/commands/export.d.ts +57 -0
- package/dist/cli/commands/export.js +163 -0
- package/dist/cli/commands/grammar.d.ts +9 -0
- package/dist/cli/commands/grammar.js +39 -0
- package/dist/cli/commands/init.d.ts +59 -0
- package/dist/cli/commands/init.js +435 -0
- package/dist/cli/commands/listen.d.ts +16 -0
- package/dist/cli/commands/listen.js +39 -0
- package/dist/cli/commands/market.d.ts +52 -0
- package/dist/cli/commands/market.js +436 -0
- package/dist/cli/commands/migrate.d.ts +13 -0
- package/dist/cli/commands/migrate.js +89 -0
- package/dist/cli/commands/openapi.d.ts +37 -0
- package/dist/cli/commands/openapi.js +67 -0
- package/dist/cli/commands/pattern.d.ts +34 -0
- package/dist/cli/commands/pattern.js +185 -0
- package/dist/cli/commands/plugin.d.ts +16 -0
- package/dist/cli/commands/plugin.js +176 -0
- package/dist/cli/commands/run.d.ts +49 -0
- package/dist/cli/commands/run.js +191 -0
- package/dist/cli/commands/serve.d.ts +45 -0
- package/dist/cli/commands/serve.js +81 -0
- package/dist/cli/commands/templates.d.ts +8 -0
- package/dist/cli/commands/templates.js +54 -0
- package/dist/cli/commands/ui.d.ts +16 -0
- package/dist/cli/commands/ui.js +130 -0
- package/dist/cli/commands/validate.d.ts +12 -0
- package/dist/cli/commands/validate.js +247 -0
- package/dist/cli/commands/watch.d.ts +9 -0
- package/dist/cli/commands/watch.js +70 -0
- package/dist/cli/flow-weaver.mjs +92924 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.js +742 -0
- package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
- package/dist/cli/templates/ai/mock-provider.js +64 -0
- package/dist/cli/templates/ai/types.d.ts +47 -0
- package/dist/cli/templates/ai/types.js +5 -0
- package/dist/cli/templates/approvals/index.d.ts +15 -0
- package/dist/cli/templates/approvals/index.js +241 -0
- package/dist/cli/templates/index.d.ts +102 -0
- package/dist/cli/templates/index.js +101 -0
- package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
- package/dist/cli/templates/nodes/agent-router.js +114 -0
- package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
- package/dist/cli/templates/nodes/aggregator.js +63 -0
- package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
- package/dist/cli/templates/nodes/conversation-memory.js +85 -0
- package/dist/cli/templates/nodes/http.d.ts +7 -0
- package/dist/cli/templates/nodes/http.js +80 -0
- package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
- package/dist/cli/templates/nodes/human-approval.js +110 -0
- package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
- package/dist/cli/templates/nodes/json-extractor.js +119 -0
- package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
- package/dist/cli/templates/nodes/llm-call.js +106 -0
- package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
- package/dist/cli/templates/nodes/prompt-template.js +52 -0
- package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
- package/dist/cli/templates/nodes/rag-retriever.js +128 -0
- package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
- package/dist/cli/templates/nodes/tool-executor.js +108 -0
- package/dist/cli/templates/nodes/transformer.d.ts +7 -0
- package/dist/cli/templates/nodes/transformer.js +68 -0
- package/dist/cli/templates/nodes/validator.d.ts +7 -0
- package/dist/cli/templates/nodes/validator.js +62 -0
- package/dist/cli/templates/providers/index.d.ts +14 -0
- package/dist/cli/templates/providers/index.js +239 -0
- package/dist/cli/templates/shared/approval-types.d.ts +9 -0
- package/dist/cli/templates/shared/approval-types.js +31 -0
- package/dist/cli/templates/shared/llm-types.d.ts +15 -0
- package/dist/cli/templates/shared/llm-types.js +104 -0
- package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
- package/dist/cli/templates/workflows/aggregator.js +104 -0
- package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
- package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
- package/dist/cli/templates/workflows/ai-agent.js +326 -0
- package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-chat.js +169 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
- package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-rag.js +186 -0
- package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-react.js +294 -0
- package/dist/cli/templates/workflows/conditional.d.ts +12 -0
- package/dist/cli/templates/workflows/conditional.js +142 -0
- package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
- package/dist/cli/templates/workflows/error-handler.js +147 -0
- package/dist/cli/templates/workflows/foreach.d.ts +7 -0
- package/dist/cli/templates/workflows/foreach.js +143 -0
- package/dist/cli/templates/workflows/sequential.d.ts +7 -0
- package/dist/cli/templates/workflows/sequential.js +198 -0
- package/dist/cli/templates/workflows/webhook.d.ts +7 -0
- package/dist/cli/templates/workflows/webhook.js +161 -0
- package/dist/cli/utils/logger.d.ts +15 -0
- package/dist/cli/utils/logger.js +46 -0
- package/dist/constants.d.ts +100 -0
- package/dist/constants.js +125 -0
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/deployment/config/defaults.d.ts +29 -0
- package/dist/deployment/config/defaults.js +98 -0
- package/dist/deployment/config/loader.d.ts +24 -0
- package/dist/deployment/config/loader.js +236 -0
- package/dist/deployment/config/types.d.ts +117 -0
- package/dist/deployment/config/types.js +5 -0
- package/dist/deployment/core/adapters.d.ts +90 -0
- package/dist/deployment/core/adapters.js +251 -0
- package/dist/deployment/core/executor.d.ts +62 -0
- package/dist/deployment/core/executor.js +197 -0
- package/dist/deployment/core/formatters.d.ts +57 -0
- package/dist/deployment/core/formatters.js +170 -0
- package/dist/deployment/index.d.ts +31 -0
- package/dist/deployment/index.js +48 -0
- package/dist/deployment/openapi/generator.d.ts +146 -0
- package/dist/deployment/openapi/generator.js +347 -0
- package/dist/deployment/openapi/schema-converter.d.ts +49 -0
- package/dist/deployment/openapi/schema-converter.js +192 -0
- package/dist/deployment/targets/base.d.ts +316 -0
- package/dist/deployment/targets/base.js +823 -0
- package/dist/deployment/targets/cloudflare.d.ts +23 -0
- package/dist/deployment/targets/cloudflare.js +1125 -0
- package/dist/deployment/targets/inngest.d.ts +38 -0
- package/dist/deployment/targets/inngest.js +926 -0
- package/dist/deployment/targets/lambda.d.ts +23 -0
- package/dist/deployment/targets/lambda.js +1289 -0
- package/dist/deployment/targets/vercel.d.ts +23 -0
- package/dist/deployment/targets/vercel.js +886 -0
- package/dist/deployment/types.d.ts +183 -0
- package/dist/deployment/types.js +8 -0
- package/dist/diagram/geometry.d.ts +26 -0
- package/dist/diagram/geometry.js +850 -0
- package/dist/diagram/index.d.ts +16 -0
- package/dist/diagram/index.js +42 -0
- package/dist/diagram/layout.d.ts +11 -0
- package/dist/diagram/layout.js +143 -0
- package/dist/diagram/orthogonal-router.d.ts +79 -0
- package/dist/diagram/orthogonal-router.js +568 -0
- package/dist/diagram/renderer.d.ts +3 -0
- package/dist/diagram/renderer.js +207 -0
- package/dist/diagram/theme.d.ts +20 -0
- package/dist/diagram/theme.js +189 -0
- package/dist/diagram/types.d.ts +70 -0
- package/dist/diagram/types.js +2 -0
- package/dist/diff/WorkflowDiffer.d.ts +13 -0
- package/dist/diff/WorkflowDiffer.js +429 -0
- package/dist/diff/formatDiff.d.ts +10 -0
- package/dist/diff/formatDiff.js +220 -0
- package/dist/diff/impact.d.ts +29 -0
- package/dist/diff/impact.js +119 -0
- package/dist/diff/index.d.ts +10 -0
- package/dist/diff/index.js +9 -0
- package/dist/diff/types.d.ts +138 -0
- package/dist/diff/types.js +35 -0
- package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
- package/dist/doc-metadata/extractors/annotations.js +337 -0
- package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
- package/dist/doc-metadata/extractors/cli-commands.js +355 -0
- package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
- package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
- package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
- package/dist/doc-metadata/extractors/plugin-api.js +279 -0
- package/dist/doc-metadata/index.d.ts +5 -0
- package/dist/doc-metadata/index.js +4 -0
- package/dist/doc-metadata/types.d.ts +120 -0
- package/dist/doc-metadata/types.js +5 -0
- package/dist/editor-completions/annotationValues.d.ts +12 -0
- package/dist/editor-completions/annotationValues.js +138 -0
- package/dist/editor-completions/contextParser.d.ts +40 -0
- package/dist/editor-completions/contextParser.js +410 -0
- package/dist/editor-completions/dataTypes.d.ts +16 -0
- package/dist/editor-completions/dataTypes.js +95 -0
- package/dist/editor-completions/goToDefinition.d.ts +27 -0
- package/dist/editor-completions/goToDefinition.js +112 -0
- package/dist/editor-completions/index.d.ts +39 -0
- package/dist/editor-completions/index.js +181 -0
- package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
- package/dist/editor-completions/jsDocAnnotations.js +357 -0
- package/dist/editor-completions/modifierCompletions.d.ts +17 -0
- package/dist/editor-completions/modifierCompletions.js +197 -0
- package/dist/editor-completions/types.d.ts +119 -0
- package/dist/editor-completions/types.js +8 -0
- package/dist/export/index.d.ts +68 -0
- package/dist/export/index.js +1074 -0
- package/dist/export/templates.d.ts +24 -0
- package/dist/export/templates.js +186 -0
- package/dist/friendly-errors.d.ts +35 -0
- package/dist/friendly-errors.js +375 -0
- package/dist/function-like.d.ts +38 -0
- package/dist/function-like.js +83 -0
- package/dist/generated-branding.d.ts +16 -0
- package/dist/generated-branding.js +22 -0
- package/dist/generator/async-detection.d.ts +27 -0
- package/dist/generator/async-detection.js +56 -0
- package/dist/generator/code-utils.d.ts +76 -0
- package/dist/generator/code-utils.js +410 -0
- package/dist/generator/control-flow.d.ts +54 -0
- package/dist/generator/control-flow.js +284 -0
- package/dist/generator/inngest.d.ts +53 -0
- package/dist/generator/inngest.js +1126 -0
- package/dist/generator/scope-function-generator.d.ts +78 -0
- package/dist/generator/scope-function-generator.js +360 -0
- package/dist/generator/unified.d.ts +42 -0
- package/dist/generator/unified.js +1504 -0
- package/dist/generator.d.ts +54 -0
- package/dist/generator.js +100 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +89 -0
- package/dist/jsdoc-parser.d.ts +308 -0
- package/dist/jsdoc-parser.js +923 -0
- package/dist/jsdoc-port-sync/constants.d.ts +41 -0
- package/dist/jsdoc-port-sync/constants.js +103 -0
- package/dist/jsdoc-port-sync/diff.d.ts +76 -0
- package/dist/jsdoc-port-sync/diff.js +319 -0
- package/dist/jsdoc-port-sync/index.d.ts +42 -0
- package/dist/jsdoc-port-sync/index.js +45 -0
- package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
- package/dist/jsdoc-port-sync/port-parser.js +579 -0
- package/dist/jsdoc-port-sync/rename.d.ts +21 -0
- package/dist/jsdoc-port-sync/rename.js +256 -0
- package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
- package/dist/jsdoc-port-sync/signature-parser.js +559 -0
- package/dist/jsdoc-port-sync/sync.d.ts +36 -0
- package/dist/jsdoc-port-sync/sync.js +644 -0
- package/dist/jsdoc-port-sync.d.ts +10 -0
- package/dist/jsdoc-port-sync.js +10 -0
- package/dist/marketplace/index.d.ts +11 -0
- package/dist/marketplace/index.js +10 -0
- package/dist/marketplace/manifest.d.ts +32 -0
- package/dist/marketplace/manifest.js +176 -0
- package/dist/marketplace/registry.d.ts +30 -0
- package/dist/marketplace/registry.js +100 -0
- package/dist/marketplace/types.d.ts +154 -0
- package/dist/marketplace/types.js +9 -0
- package/dist/marketplace/validator.d.ts +13 -0
- package/dist/marketplace/validator.js +131 -0
- package/dist/mcp/auto-registration.d.ts +3 -0
- package/dist/mcp/auto-registration.js +62 -0
- package/dist/mcp/editor-connection.d.ts +50 -0
- package/dist/mcp/editor-connection.js +125 -0
- package/dist/mcp/event-buffer.d.ts +62 -0
- package/dist/mcp/event-buffer.js +150 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/resources.d.ts +14 -0
- package/dist/mcp/resources.js +55 -0
- package/dist/mcp/response-utils.d.ts +63 -0
- package/dist/mcp/response-utils.js +89 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.js +99 -0
- package/dist/mcp/tools-diagram.d.ts +8 -0
- package/dist/mcp/tools-diagram.js +53 -0
- package/dist/mcp/tools-editor.d.ts +5 -0
- package/dist/mcp/tools-editor.js +190 -0
- package/dist/mcp/tools-export.d.ts +9 -0
- package/dist/mcp/tools-export.js +180 -0
- package/dist/mcp/tools-marketplace.d.ts +9 -0
- package/dist/mcp/tools-marketplace.js +132 -0
- package/dist/mcp/tools-pattern.d.ts +3 -0
- package/dist/mcp/tools-pattern.js +783 -0
- package/dist/mcp/tools-query.d.ts +3 -0
- package/dist/mcp/tools-query.js +364 -0
- package/dist/mcp/tools-template.d.ts +10 -0
- package/dist/mcp/tools-template.js +119 -0
- package/dist/mcp/types.d.ts +70 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/workflow-executor.d.ts +47 -0
- package/dist/mcp/workflow-executor.js +133 -0
- package/dist/migration/registry.d.ts +30 -0
- package/dist/migration/registry.js +29 -0
- package/dist/node-types-generator.d.ts +49 -0
- package/dist/node-types-generator.js +139 -0
- package/dist/npm-packages.d.ts +56 -0
- package/dist/npm-packages.js +255 -0
- package/dist/parser.d.ts +204 -0
- package/dist/parser.js +2100 -0
- package/dist/plugin/PluginPanel.d.ts +12 -0
- package/dist/plugin/PluginPanel.js +5 -0
- package/dist/plugin/index.d.ts +13 -0
- package/dist/plugin/index.js +14 -0
- package/dist/plugin/types.d.ts +75 -0
- package/dist/plugin/types.js +8 -0
- package/dist/resolve-package-types.d.ts +17 -0
- package/dist/resolve-package-types.js +123 -0
- package/dist/runtime/CancellationError.d.ts +11 -0
- package/dist/runtime/CancellationError.js +20 -0
- package/dist/runtime/ExecutionContext.d.ts +146 -0
- package/dist/runtime/ExecutionContext.js +235 -0
- package/dist/runtime/builtin-functions.d.ts +8 -0
- package/dist/runtime/builtin-functions.js +549 -0
- package/dist/runtime/events.d.ts +50 -0
- package/dist/runtime/events.js +2 -0
- package/dist/runtime/function-registry.d.ts +59 -0
- package/dist/runtime/function-registry.js +66 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/parameter-resolver.d.ts +62 -0
- package/dist/runtime/parameter-resolver.js +113 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +6 -0
- package/dist/server/types.d.ts +93 -0
- package/dist/server/types.js +5 -0
- package/dist/server/webhook-server.d.ts +50 -0
- package/dist/server/webhook-server.js +269 -0
- package/dist/server/workflow-registry.d.ts +61 -0
- package/dist/server/workflow-registry.js +202 -0
- package/dist/shared-project.d.ts +9 -0
- package/dist/shared-project.js +28 -0
- package/dist/sugar-optimizer.d.ts +40 -0
- package/dist/sugar-optimizer.js +387 -0
- package/dist/testing/assertions.d.ts +51 -0
- package/dist/testing/assertions.js +127 -0
- package/dist/testing/index.d.ts +30 -0
- package/dist/testing/index.js +24 -0
- package/dist/testing/mock-approval.d.ts +81 -0
- package/dist/testing/mock-approval.js +98 -0
- package/dist/testing/mock-llm.d.ts +124 -0
- package/dist/testing/mock-llm.js +119 -0
- package/dist/testing/recorder.d.ts +72 -0
- package/dist/testing/recorder.js +70 -0
- package/dist/testing/replayer.d.ts +56 -0
- package/dist/testing/replayer.js +143 -0
- package/dist/testing/token-tracker.d.ts +71 -0
- package/dist/testing/token-tracker.js +94 -0
- package/dist/type-checker.d.ts +42 -0
- package/dist/type-checker.js +190 -0
- package/dist/type-mappings.d.ts +29 -0
- package/dist/type-mappings.js +125 -0
- package/dist/types/branded-ports.d.ts +151 -0
- package/dist/types/branded-ports.js +121 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types.d.ts +139 -0
- package/dist/types.js +15 -0
- package/dist/utils/error-utils.d.ts +15 -0
- package/dist/utils/error-utils.js +27 -0
- package/dist/utils/lru-cache.d.ts +15 -0
- package/dist/utils/lru-cache.js +40 -0
- package/dist/utils/port-ordering.d.ts +26 -0
- package/dist/utils/port-ordering.js +88 -0
- package/dist/utils/port-tag-utils.d.ts +23 -0
- package/dist/utils/port-tag-utils.js +41 -0
- package/dist/utils/string-distance.d.ts +14 -0
- package/dist/utils/string-distance.js +56 -0
- package/dist/validation/agent-detection.d.ts +33 -0
- package/dist/validation/agent-detection.js +115 -0
- package/dist/validation/agent-rules.d.ts +48 -0
- package/dist/validation/agent-rules.js +262 -0
- package/dist/validator.d.ts +92 -0
- package/dist/validator.js +970 -0
- package/package.json +109 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request adapters for normalizing input from different sources
|
|
3
|
+
*
|
|
4
|
+
* Each adapter transforms source-specific input into a unified WorkflowRequest.
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkflowRequest, ExecutionContext, ValidationResult, CliInput, HttpInput, LambdaInput, VercelInput, CloudflareInput, Environment } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Request adapter interface
|
|
9
|
+
*/
|
|
10
|
+
export interface RequestAdapter<TInput> {
|
|
11
|
+
/**
|
|
12
|
+
* Parse source input into a unified WorkflowRequest
|
|
13
|
+
*/
|
|
14
|
+
parseRequest(input: TInput): WorkflowRequest;
|
|
15
|
+
/**
|
|
16
|
+
* Validate the parsed request
|
|
17
|
+
*/
|
|
18
|
+
validate(request: WorkflowRequest): ValidationResult;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Base adapter with shared validation logic
|
|
22
|
+
*/
|
|
23
|
+
declare abstract class BaseRequestAdapter<TInput> implements RequestAdapter<TInput> {
|
|
24
|
+
abstract parseRequest(input: TInput): WorkflowRequest;
|
|
25
|
+
validate(request: WorkflowRequest): ValidationResult;
|
|
26
|
+
/**
|
|
27
|
+
* Create a default execution context
|
|
28
|
+
*/
|
|
29
|
+
protected createContext(source: WorkflowRequest['context']['source'], options?: {
|
|
30
|
+
requestId?: string;
|
|
31
|
+
includeTrace?: boolean;
|
|
32
|
+
timeout?: number;
|
|
33
|
+
environment?: Environment;
|
|
34
|
+
}): ExecutionContext;
|
|
35
|
+
/**
|
|
36
|
+
* Detect runtime environment
|
|
37
|
+
*/
|
|
38
|
+
protected detectEnvironment(): Environment;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* CLI request adapter
|
|
42
|
+
*
|
|
43
|
+
* Parses CLI command input into a WorkflowRequest
|
|
44
|
+
*/
|
|
45
|
+
export declare class CliRequestAdapter extends BaseRequestAdapter<CliInput> {
|
|
46
|
+
parseRequest(input: CliInput): WorkflowRequest;
|
|
47
|
+
/**
|
|
48
|
+
* Extract workflow ID from file path (uses filename without extension)
|
|
49
|
+
*/
|
|
50
|
+
private extractWorkflowId;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* HTTP request adapter (for Fastify/Express-like servers)
|
|
54
|
+
*
|
|
55
|
+
* Parses HTTP request into a WorkflowRequest
|
|
56
|
+
*/
|
|
57
|
+
export declare class HttpRequestAdapter extends BaseRequestAdapter<HttpInput> {
|
|
58
|
+
parseRequest(input: HttpInput): WorkflowRequest;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* AWS Lambda request adapter
|
|
62
|
+
*
|
|
63
|
+
* Parses API Gateway event into a WorkflowRequest
|
|
64
|
+
*/
|
|
65
|
+
export declare class LambdaRequestAdapter extends BaseRequestAdapter<LambdaInput> {
|
|
66
|
+
parseRequest(input: LambdaInput): WorkflowRequest;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Vercel serverless function request adapter
|
|
70
|
+
*/
|
|
71
|
+
export declare class VercelRequestAdapter extends BaseRequestAdapter<VercelInput> {
|
|
72
|
+
parseRequest(input: VercelInput): WorkflowRequest;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Cloudflare Workers request adapter
|
|
76
|
+
*/
|
|
77
|
+
export declare class CloudflareRequestAdapter extends BaseRequestAdapter<CloudflareInput> {
|
|
78
|
+
parseRequestAsync(input: CloudflareInput): Promise<WorkflowRequest>;
|
|
79
|
+
parseRequest(_input: CloudflareInput): WorkflowRequest;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create the appropriate adapter for a given source
|
|
83
|
+
*/
|
|
84
|
+
export declare function createAdapter(source: 'cli'): CliRequestAdapter;
|
|
85
|
+
export declare function createAdapter(source: 'http'): HttpRequestAdapter;
|
|
86
|
+
export declare function createAdapter(source: 'lambda'): LambdaRequestAdapter;
|
|
87
|
+
export declare function createAdapter(source: 'vercel'): VercelRequestAdapter;
|
|
88
|
+
export declare function createAdapter(source: 'cloudflare'): CloudflareRequestAdapter;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request adapters for normalizing input from different sources
|
|
3
|
+
*
|
|
4
|
+
* Each adapter transforms source-specific input into a unified WorkflowRequest.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { randomUUID } from 'crypto';
|
|
9
|
+
/**
|
|
10
|
+
* Base adapter with shared validation logic
|
|
11
|
+
*/
|
|
12
|
+
class BaseRequestAdapter {
|
|
13
|
+
validate(request) {
|
|
14
|
+
const errors = [];
|
|
15
|
+
// Validate workflowId
|
|
16
|
+
if (!request.workflowId || typeof request.workflowId !== 'string') {
|
|
17
|
+
errors.push({
|
|
18
|
+
path: 'workflowId',
|
|
19
|
+
message: 'Workflow ID is required and must be a string',
|
|
20
|
+
expected: 'string',
|
|
21
|
+
actual: typeof request.workflowId,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// Validate params is an object
|
|
25
|
+
if (request.params !== null && typeof request.params !== 'object') {
|
|
26
|
+
errors.push({
|
|
27
|
+
path: 'params',
|
|
28
|
+
message: 'Params must be an object',
|
|
29
|
+
expected: 'object',
|
|
30
|
+
actual: typeof request.params,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Validate context
|
|
34
|
+
if (!request.context) {
|
|
35
|
+
errors.push({
|
|
36
|
+
path: 'context',
|
|
37
|
+
message: 'Execution context is required',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (!request.context.requestId) {
|
|
42
|
+
errors.push({
|
|
43
|
+
path: 'context.requestId',
|
|
44
|
+
message: 'Request ID is required',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
valid: errors.length === 0,
|
|
50
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a default execution context
|
|
55
|
+
*/
|
|
56
|
+
createContext(source, options = {}) {
|
|
57
|
+
return {
|
|
58
|
+
source,
|
|
59
|
+
environment: options.environment ?? this.detectEnvironment(),
|
|
60
|
+
requestId: options.requestId ?? randomUUID(),
|
|
61
|
+
includeTrace: options.includeTrace ?? true,
|
|
62
|
+
timeout: options.timeout,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Detect runtime environment
|
|
67
|
+
*/
|
|
68
|
+
detectEnvironment() {
|
|
69
|
+
const nodeEnv = process.env.NODE_ENV?.toLowerCase();
|
|
70
|
+
if (nodeEnv === 'production' || nodeEnv === 'prod') {
|
|
71
|
+
return 'production';
|
|
72
|
+
}
|
|
73
|
+
if (nodeEnv === 'staging' || nodeEnv === 'stage') {
|
|
74
|
+
return 'staging';
|
|
75
|
+
}
|
|
76
|
+
return 'development';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* CLI request adapter
|
|
81
|
+
*
|
|
82
|
+
* Parses CLI command input into a WorkflowRequest
|
|
83
|
+
*/
|
|
84
|
+
export class CliRequestAdapter extends BaseRequestAdapter {
|
|
85
|
+
parseRequest(input) {
|
|
86
|
+
// Parse params from JSON string or file
|
|
87
|
+
let params = {};
|
|
88
|
+
if (input.params) {
|
|
89
|
+
try {
|
|
90
|
+
params = JSON.parse(input.params);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw new Error(`Invalid JSON in params: ${input.params}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (input.paramsFile) {
|
|
97
|
+
const paramsFilePath = path.resolve(input.paramsFile);
|
|
98
|
+
if (!fs.existsSync(paramsFilePath)) {
|
|
99
|
+
throw new Error(`Params file not found: ${paramsFilePath}`);
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const content = fs.readFileSync(paramsFilePath, 'utf8');
|
|
103
|
+
params = JSON.parse(content);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw new Error(`Failed to parse params file: ${input.paramsFile}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Determine trace inclusion
|
|
110
|
+
const includeTrace = input.trace ?? !input.production;
|
|
111
|
+
return {
|
|
112
|
+
workflowId: input.workflowName || this.extractWorkflowId(input.filePath),
|
|
113
|
+
params,
|
|
114
|
+
context: this.createContext('cli', {
|
|
115
|
+
includeTrace,
|
|
116
|
+
timeout: input.timeout,
|
|
117
|
+
environment: input.production ? 'production' : 'development',
|
|
118
|
+
}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Extract workflow ID from file path (uses filename without extension)
|
|
123
|
+
*/
|
|
124
|
+
extractWorkflowId(filePath) {
|
|
125
|
+
const basename = path.basename(filePath, path.extname(filePath));
|
|
126
|
+
return basename;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* HTTP request adapter (for Fastify/Express-like servers)
|
|
131
|
+
*
|
|
132
|
+
* Parses HTTP request into a WorkflowRequest
|
|
133
|
+
*/
|
|
134
|
+
export class HttpRequestAdapter extends BaseRequestAdapter {
|
|
135
|
+
parseRequest(input) {
|
|
136
|
+
const workflowId = input.params.name || input.params.workflow || '';
|
|
137
|
+
const includeTrace = input.query.trace === 'true';
|
|
138
|
+
return {
|
|
139
|
+
workflowId,
|
|
140
|
+
params: input.body || {},
|
|
141
|
+
context: this.createContext('http', {
|
|
142
|
+
requestId: input.headers['x-request-id'],
|
|
143
|
+
includeTrace,
|
|
144
|
+
}),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* AWS Lambda request adapter
|
|
150
|
+
*
|
|
151
|
+
* Parses API Gateway event into a WorkflowRequest
|
|
152
|
+
*/
|
|
153
|
+
export class LambdaRequestAdapter extends BaseRequestAdapter {
|
|
154
|
+
parseRequest(input) {
|
|
155
|
+
// Parse body
|
|
156
|
+
let params = {};
|
|
157
|
+
if (typeof input.body === 'string') {
|
|
158
|
+
try {
|
|
159
|
+
params = JSON.parse(input.body || '{}');
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
params = {};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if (input.body && typeof input.body === 'object') {
|
|
166
|
+
params = input.body;
|
|
167
|
+
}
|
|
168
|
+
// Get workflow ID from path parameters
|
|
169
|
+
const workflowId = input.pathParameters?.name ||
|
|
170
|
+
input.pathParameters?.workflow ||
|
|
171
|
+
input.pathParameters?.id ||
|
|
172
|
+
'';
|
|
173
|
+
const includeTrace = input.queryStringParameters?.trace === 'true';
|
|
174
|
+
const isProduction = input.requestContext?.stage === 'prod' || input.requestContext?.stage === 'production';
|
|
175
|
+
return {
|
|
176
|
+
workflowId,
|
|
177
|
+
params,
|
|
178
|
+
context: this.createContext('lambda', {
|
|
179
|
+
requestId: input.requestContext?.requestId,
|
|
180
|
+
includeTrace,
|
|
181
|
+
environment: isProduction ? 'production' : 'development',
|
|
182
|
+
}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Vercel serverless function request adapter
|
|
188
|
+
*/
|
|
189
|
+
export class VercelRequestAdapter extends BaseRequestAdapter {
|
|
190
|
+
parseRequest(input) {
|
|
191
|
+
// Workflow ID comes from the file-based routing in Vercel
|
|
192
|
+
// The caller should provide it, or we extract from query
|
|
193
|
+
const workflowId = input.query.workflow || input.query.name || '';
|
|
194
|
+
const includeTrace = input.query.trace === 'true';
|
|
195
|
+
return {
|
|
196
|
+
workflowId,
|
|
197
|
+
params: input.body || {},
|
|
198
|
+
context: this.createContext('vercel', {
|
|
199
|
+
requestId: input.headers['x-vercel-id'],
|
|
200
|
+
includeTrace,
|
|
201
|
+
}),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Cloudflare Workers request adapter
|
|
207
|
+
*/
|
|
208
|
+
export class CloudflareRequestAdapter extends BaseRequestAdapter {
|
|
209
|
+
async parseRequestAsync(input) {
|
|
210
|
+
// Parse body
|
|
211
|
+
let params = {};
|
|
212
|
+
try {
|
|
213
|
+
params = await input.request.json();
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
params = {};
|
|
217
|
+
}
|
|
218
|
+
// Extract workflow ID from URL path
|
|
219
|
+
const url = new URL(input.request.url);
|
|
220
|
+
const pathParts = url.pathname.split('/').filter(Boolean);
|
|
221
|
+
const workflowId = pathParts[pathParts.length - 1] || '';
|
|
222
|
+
const includeTrace = url.searchParams.get('trace') === 'true';
|
|
223
|
+
return {
|
|
224
|
+
workflowId,
|
|
225
|
+
params,
|
|
226
|
+
context: this.createContext('cloudflare', {
|
|
227
|
+
requestId: input.request.headers.get('cf-ray') || undefined,
|
|
228
|
+
includeTrace,
|
|
229
|
+
}),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Sync version throws - use parseRequestAsync for Cloudflare
|
|
233
|
+
parseRequest(_input) {
|
|
234
|
+
throw new Error('Use parseRequestAsync for Cloudflare Workers');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export function createAdapter(source) {
|
|
238
|
+
switch (source) {
|
|
239
|
+
case 'cli':
|
|
240
|
+
return new CliRequestAdapter();
|
|
241
|
+
case 'http':
|
|
242
|
+
return new HttpRequestAdapter();
|
|
243
|
+
case 'lambda':
|
|
244
|
+
return new LambdaRequestAdapter();
|
|
245
|
+
case 'vercel':
|
|
246
|
+
return new VercelRequestAdapter();
|
|
247
|
+
case 'cloudflare':
|
|
248
|
+
return new CloudflareRequestAdapter();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified workflow executor
|
|
3
|
+
*
|
|
4
|
+
* Provides a single entry point for executing workflows across all contexts.
|
|
5
|
+
*/
|
|
6
|
+
import { WorkflowRegistry } from '../../server/workflow-registry.js';
|
|
7
|
+
import type { WorkflowRequest, WorkflowResponse, ValidationResult, ExecutionContext } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for the unified executor
|
|
10
|
+
*/
|
|
11
|
+
export interface ExecutorOptions {
|
|
12
|
+
/** Workflow registry for resolving workflows */
|
|
13
|
+
registry?: WorkflowRegistry;
|
|
14
|
+
/** Default timeout in milliseconds */
|
|
15
|
+
defaultTimeout?: number;
|
|
16
|
+
/** Production mode - disables trace by default */
|
|
17
|
+
production?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Unified workflow executor
|
|
21
|
+
*
|
|
22
|
+
* Provides consistent execution behavior across CLI, HTTP, and serverless contexts.
|
|
23
|
+
*/
|
|
24
|
+
export declare class UnifiedWorkflowExecutor {
|
|
25
|
+
private registry?;
|
|
26
|
+
private defaultTimeout;
|
|
27
|
+
private production;
|
|
28
|
+
constructor(options?: ExecutorOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Execute a workflow with the given request
|
|
31
|
+
*/
|
|
32
|
+
execute<T = unknown>(request: WorkflowRequest): Promise<WorkflowResponse<T>>;
|
|
33
|
+
/**
|
|
34
|
+
* Execute a workflow directly from a file path
|
|
35
|
+
*/
|
|
36
|
+
executeFromFile<T = unknown>(filePath: string, params: Record<string, unknown>, context?: Partial<ExecutionContext>): Promise<WorkflowResponse<T>>;
|
|
37
|
+
/**
|
|
38
|
+
* Execute a file directly without registry lookup
|
|
39
|
+
*/
|
|
40
|
+
private executeFileDirectly;
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a workflow from the registry
|
|
43
|
+
*/
|
|
44
|
+
private resolveWorkflow;
|
|
45
|
+
/**
|
|
46
|
+
* Execute workflow with timeout support
|
|
47
|
+
*/
|
|
48
|
+
private executeWithTimeout;
|
|
49
|
+
/**
|
|
50
|
+
* Create a standardized error response
|
|
51
|
+
*/
|
|
52
|
+
private createErrorResponse;
|
|
53
|
+
/**
|
|
54
|
+
* Validate a workflow request
|
|
55
|
+
*/
|
|
56
|
+
validateRequest(request: WorkflowRequest): ValidationResult;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a new executor instance
|
|
60
|
+
*/
|
|
61
|
+
export declare function createExecutor(options?: ExecutorOptions): UnifiedWorkflowExecutor;
|
|
62
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified workflow executor
|
|
3
|
+
*
|
|
4
|
+
* Provides a single entry point for executing workflows across all contexts.
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
7
|
+
import { executeWorkflowFromFile } from '../../mcp/workflow-executor.js';
|
|
8
|
+
/**
|
|
9
|
+
* Unified workflow executor
|
|
10
|
+
*
|
|
11
|
+
* Provides consistent execution behavior across CLI, HTTP, and serverless contexts.
|
|
12
|
+
*/
|
|
13
|
+
export class UnifiedWorkflowExecutor {
|
|
14
|
+
registry;
|
|
15
|
+
defaultTimeout;
|
|
16
|
+
production;
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.registry = options.registry;
|
|
19
|
+
this.defaultTimeout = options.defaultTimeout ?? 30000;
|
|
20
|
+
this.production = options.production ?? false;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute a workflow with the given request
|
|
24
|
+
*/
|
|
25
|
+
async execute(request) {
|
|
26
|
+
const startTime = Date.now();
|
|
27
|
+
const requestId = request.context.requestId || randomUUID();
|
|
28
|
+
try {
|
|
29
|
+
// Resolve the workflow
|
|
30
|
+
const workflow = await this.resolveWorkflow(request.workflowId);
|
|
31
|
+
if (!workflow) {
|
|
32
|
+
return this.createErrorResponse(request.workflowId, requestId, 'WORKFLOW_NOT_FOUND', `Workflow "${request.workflowId}" not found`, startTime);
|
|
33
|
+
}
|
|
34
|
+
// Execute with timeout if specified
|
|
35
|
+
const timeout = request.context.timeout ?? this.defaultTimeout;
|
|
36
|
+
const includeTrace = request.context.includeTrace && !this.production;
|
|
37
|
+
const result = await this.executeWithTimeout(workflow.filePath, request.params, {
|
|
38
|
+
workflowName: workflow.functionName,
|
|
39
|
+
production: this.production || request.context.environment === 'production',
|
|
40
|
+
includeTrace,
|
|
41
|
+
}, timeout, request.abortSignal);
|
|
42
|
+
return {
|
|
43
|
+
success: true,
|
|
44
|
+
workflowId: request.workflowId,
|
|
45
|
+
result: result.result,
|
|
46
|
+
executionTime: Date.now() - startTime,
|
|
47
|
+
trace: includeTrace ? result.trace : undefined,
|
|
48
|
+
requestId,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
// Check for specific error types
|
|
53
|
+
if (error instanceof Error) {
|
|
54
|
+
if (error.name === 'AbortError' || error.message.includes('abort')) {
|
|
55
|
+
return this.createErrorResponse(request.workflowId, requestId, 'CANCELLED', 'Workflow execution was cancelled', startTime);
|
|
56
|
+
}
|
|
57
|
+
if (error.message.includes('timeout') || error.message.includes('timed out')) {
|
|
58
|
+
return this.createErrorResponse(request.workflowId, requestId, 'TIMEOUT', `Workflow execution timed out after ${request.context.timeout ?? this.defaultTimeout}ms`, startTime);
|
|
59
|
+
}
|
|
60
|
+
// Check if it's a validation error
|
|
61
|
+
if (error.message.includes('validation') || error.message.includes('invalid')) {
|
|
62
|
+
return this.createErrorResponse(request.workflowId, requestId, 'VALIDATION_ERROR', error.message, startTime, error.stack);
|
|
63
|
+
}
|
|
64
|
+
// General execution error
|
|
65
|
+
return this.createErrorResponse(request.workflowId, requestId, 'EXECUTION_ERROR', error.message, startTime, error.stack);
|
|
66
|
+
}
|
|
67
|
+
// Unknown error
|
|
68
|
+
return this.createErrorResponse(request.workflowId, requestId, 'INTERNAL_ERROR', String(error), startTime);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Execute a workflow directly from a file path
|
|
73
|
+
*/
|
|
74
|
+
async executeFromFile(filePath, params, context = {}) {
|
|
75
|
+
const fullContext = {
|
|
76
|
+
source: context.source ?? 'cli',
|
|
77
|
+
environment: context.environment ?? 'development',
|
|
78
|
+
requestId: context.requestId ?? randomUUID(),
|
|
79
|
+
includeTrace: context.includeTrace ?? true,
|
|
80
|
+
timeout: context.timeout,
|
|
81
|
+
};
|
|
82
|
+
const request = {
|
|
83
|
+
workflowId: filePath,
|
|
84
|
+
params,
|
|
85
|
+
context: fullContext,
|
|
86
|
+
};
|
|
87
|
+
return this.executeFileDirectly(filePath, request);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Execute a file directly without registry lookup
|
|
91
|
+
*/
|
|
92
|
+
async executeFileDirectly(filePath, request) {
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
const requestId = request.context.requestId;
|
|
95
|
+
try {
|
|
96
|
+
const timeout = request.context.timeout ?? this.defaultTimeout;
|
|
97
|
+
const includeTrace = request.context.includeTrace && !this.production;
|
|
98
|
+
const result = await this.executeWithTimeout(filePath, request.params, {
|
|
99
|
+
production: this.production || request.context.environment === 'production',
|
|
100
|
+
includeTrace,
|
|
101
|
+
}, timeout, request.abortSignal);
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
workflowId: result.functionName,
|
|
105
|
+
result: result.result,
|
|
106
|
+
executionTime: Date.now() - startTime,
|
|
107
|
+
trace: includeTrace ? result.trace : undefined,
|
|
108
|
+
requestId,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
113
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
114
|
+
return this.createErrorResponse(request.workflowId, requestId, 'EXECUTION_ERROR', errorMessage, startTime, errorStack);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Resolve a workflow from the registry
|
|
119
|
+
*/
|
|
120
|
+
async resolveWorkflow(workflowId) {
|
|
121
|
+
if (!this.registry) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return this.registry.getEndpoint(workflowId);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Execute workflow with timeout support
|
|
128
|
+
*/
|
|
129
|
+
async executeWithTimeout(filePath, params, options, timeout, abortSignal) {
|
|
130
|
+
// Create a promise that rejects on timeout
|
|
131
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
132
|
+
const timer = setTimeout(() => {
|
|
133
|
+
reject(new Error(`Workflow execution timed out after ${timeout}ms`));
|
|
134
|
+
}, timeout);
|
|
135
|
+
// Clear timeout if abort signal fires
|
|
136
|
+
if (abortSignal) {
|
|
137
|
+
abortSignal.addEventListener('abort', () => {
|
|
138
|
+
clearTimeout(timer);
|
|
139
|
+
reject(new Error('Workflow execution was cancelled'));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
// Race between execution and timeout
|
|
144
|
+
return Promise.race([executeWorkflowFromFile(filePath, params, options), timeoutPromise]);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Create a standardized error response
|
|
148
|
+
*/
|
|
149
|
+
createErrorResponse(workflowId, requestId, code, message, startTime, stack) {
|
|
150
|
+
const error = {
|
|
151
|
+
code,
|
|
152
|
+
message,
|
|
153
|
+
};
|
|
154
|
+
// Only include stack in non-production environments
|
|
155
|
+
if (stack && !this.production) {
|
|
156
|
+
error.stack = stack;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
workflowId,
|
|
161
|
+
error,
|
|
162
|
+
executionTime: Date.now() - startTime,
|
|
163
|
+
requestId,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validate a workflow request
|
|
168
|
+
*/
|
|
169
|
+
validateRequest(request) {
|
|
170
|
+
const errors = [];
|
|
171
|
+
if (!request.workflowId) {
|
|
172
|
+
errors.push({
|
|
173
|
+
path: 'workflowId',
|
|
174
|
+
message: 'Workflow ID is required',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (request.params && typeof request.params !== 'object') {
|
|
178
|
+
errors.push({
|
|
179
|
+
path: 'params',
|
|
180
|
+
message: 'Params must be an object',
|
|
181
|
+
expected: 'object',
|
|
182
|
+
actual: typeof request.params,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
valid: errors.length === 0,
|
|
187
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create a new executor instance
|
|
193
|
+
*/
|
|
194
|
+
export function createExecutor(options) {
|
|
195
|
+
return new UnifiedWorkflowExecutor(options);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response formatters for different output contexts
|
|
3
|
+
*
|
|
4
|
+
* Transforms unified WorkflowResponse into format-specific outputs.
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkflowResponse } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Format response for CLI output
|
|
9
|
+
*/
|
|
10
|
+
export interface CliOutputOptions {
|
|
11
|
+
/** Output as JSON */
|
|
12
|
+
json?: boolean;
|
|
13
|
+
/** Include trace summary */
|
|
14
|
+
includeTrace?: boolean;
|
|
15
|
+
/** Color output */
|
|
16
|
+
color?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Format response for CLI consumption
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatCliResponse<T>(response: WorkflowResponse<T>, options?: CliOutputOptions): string;
|
|
22
|
+
/**
|
|
23
|
+
* Format response for HTTP (returns object suitable for JSON response)
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatHttpResponse<T>(response: WorkflowResponse<T>): {
|
|
26
|
+
statusCode: number;
|
|
27
|
+
body: Record<string, unknown>;
|
|
28
|
+
headers: Record<string, string>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Format response for AWS Lambda (API Gateway response format)
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatLambdaResponse<T>(response: WorkflowResponse<T>): {
|
|
34
|
+
statusCode: number;
|
|
35
|
+
headers: Record<string, string>;
|
|
36
|
+
body: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Format response for Cloudflare Workers (returns Response object constructor args)
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatCloudflareResponse<T>(response: WorkflowResponse<T>): {
|
|
42
|
+
body: string;
|
|
43
|
+
init: ResponseInit;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Format error for consistent error responses
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatError(error: unknown, context?: {
|
|
49
|
+
workflowId?: string;
|
|
50
|
+
requestId?: string;
|
|
51
|
+
production?: boolean;
|
|
52
|
+
}): {
|
|
53
|
+
message: string;
|
|
54
|
+
code: string;
|
|
55
|
+
stack?: string;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=formatters.d.ts.map
|