@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,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node instance operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import { produce } from "immer";
|
|
5
|
+
import { withoutValidation, assertNodeExists, assertNodeNotExists, } from "../helpers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Add a node instance to the workflow
|
|
8
|
+
*
|
|
9
|
+
* @param ast - Workflow to modify
|
|
10
|
+
* @param node - Node instance to add
|
|
11
|
+
* @returns Modified workflow
|
|
12
|
+
* @throws {Error} If node ID already exists or node type doesn't exist
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const ast = addNode(workflow, {
|
|
17
|
+
* type: 'NodeInstance',
|
|
18
|
+
* id: 'processor1',
|
|
19
|
+
* nodeType: 'dataProcessor'
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function addNode(ast, node) {
|
|
24
|
+
// Check for duplicate ID
|
|
25
|
+
assertNodeNotExists(ast, node.id);
|
|
26
|
+
// Note: We don't check if node type exists here (eventual consistency model).
|
|
27
|
+
// Diagnostics will catch INVALID_NODE_TYPE if the type doesn't exist.
|
|
28
|
+
// Use produce directly with simplified type to avoid excessive type instantiation
|
|
29
|
+
return produce(ast, (draft) => {
|
|
30
|
+
draft.instances.push(node);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Remove a node instance from the workflow.
|
|
35
|
+
* Uses minimal validation (only checks node exists) to allow deletion
|
|
36
|
+
* even when the workflow has other validation errors.
|
|
37
|
+
*
|
|
38
|
+
* @param ast - Workflow to modify
|
|
39
|
+
* @param nodeId - ID of node to remove
|
|
40
|
+
* @param options - Remove options
|
|
41
|
+
* @returns Modified workflow
|
|
42
|
+
* @throws {Error} If node doesn't exist
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Remove node and all its connections
|
|
47
|
+
* const ast = removeNode(workflow, 'processor1');
|
|
48
|
+
*
|
|
49
|
+
* // Remove node, keep connections (will fail validation)
|
|
50
|
+
* const ast = removeNode(workflow, 'processor1', { removeConnections: false });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function removeNode(ast, nodeId, options = {}) {
|
|
54
|
+
const { removeConnections = true, } = options;
|
|
55
|
+
// First, verify node exists (fail fast with clear error)
|
|
56
|
+
assertNodeExists(ast, nodeId);
|
|
57
|
+
return withoutValidation(ast, (draft) => {
|
|
58
|
+
// Remove node instance
|
|
59
|
+
const nodeIndex = draft.instances.findIndex((n) => n.id === nodeId);
|
|
60
|
+
draft.instances.splice(nodeIndex, 1);
|
|
61
|
+
// Remove connections if requested
|
|
62
|
+
if (removeConnections) {
|
|
63
|
+
draft.connections = draft.connections.filter((conn) => conn.from.node !== nodeId && conn.to.node !== nodeId);
|
|
64
|
+
}
|
|
65
|
+
// Remove from scopes
|
|
66
|
+
if (draft.scopes) {
|
|
67
|
+
Object.keys(draft.scopes).forEach((scopeName) => {
|
|
68
|
+
draft.scopes[scopeName] = draft.scopes[scopeName].filter((id) => id !== nodeId);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Clean up macros referencing the deleted node
|
|
72
|
+
if (draft.macros) {
|
|
73
|
+
draft.macros = draft.macros.filter((macro) => {
|
|
74
|
+
if (macro.type === 'map') {
|
|
75
|
+
return macro.instanceId !== nodeId && macro.childId !== nodeId;
|
|
76
|
+
}
|
|
77
|
+
if (macro.type === 'path') {
|
|
78
|
+
return !macro.steps.some(s => s.node === nodeId);
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
});
|
|
82
|
+
if (draft.macros.length === 0) {
|
|
83
|
+
delete draft.macros;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Rename a node instance (updates all connections)
|
|
90
|
+
*
|
|
91
|
+
* @param ast - Workflow to modify
|
|
92
|
+
* @param oldId - Current node ID
|
|
93
|
+
* @param newId - New node ID
|
|
94
|
+
* @returns Modified workflow
|
|
95
|
+
* @throws {Error} If old ID doesn't exist or new ID already exists
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const ast = renameNode(workflow, 'processor1', 'dataProcessor');
|
|
100
|
+
* // All connections updated automatically
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export function renameNode(ast, oldId, newId) {
|
|
104
|
+
assertNodeExists(ast, oldId);
|
|
105
|
+
assertNodeNotExists(ast, newId);
|
|
106
|
+
return withoutValidation(ast, (draft) => {
|
|
107
|
+
// Update node instance ID
|
|
108
|
+
const node = draft.instances.find((n) => n.id === oldId);
|
|
109
|
+
node.id = newId;
|
|
110
|
+
// Update all connections
|
|
111
|
+
draft.connections.forEach((conn) => {
|
|
112
|
+
if (conn.from.node === oldId) {
|
|
113
|
+
conn.from.node = newId;
|
|
114
|
+
}
|
|
115
|
+
if (conn.to.node === oldId) {
|
|
116
|
+
conn.to.node = newId;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// Update scopes
|
|
120
|
+
if (draft.scopes) {
|
|
121
|
+
Object.keys(draft.scopes).forEach((scopeName) => {
|
|
122
|
+
draft.scopes[scopeName] = draft.scopes[scopeName].map((id) => id === oldId ? newId : id);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Update macro references
|
|
126
|
+
if (draft.macros) {
|
|
127
|
+
for (const macro of draft.macros) {
|
|
128
|
+
if (macro.type === 'map') {
|
|
129
|
+
if (macro.instanceId === oldId)
|
|
130
|
+
macro.instanceId = newId;
|
|
131
|
+
if (macro.childId === oldId)
|
|
132
|
+
macro.childId = newId;
|
|
133
|
+
}
|
|
134
|
+
else if (macro.type === 'path') {
|
|
135
|
+
macro.steps = macro.steps.map(s => s.node === oldId ? { ...s, node: newId } : s);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Update a node instance
|
|
143
|
+
*
|
|
144
|
+
* @param ast - Workflow to modify
|
|
145
|
+
* @param nodeId - ID of node to update
|
|
146
|
+
* @param updates - Partial node instance to merge
|
|
147
|
+
* @returns Modified workflow
|
|
148
|
+
* @throws {Error} If node doesn't exist
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const ast = updateNode(workflow, 'processor1', {
|
|
153
|
+
* config: { x: 100, y: 200, label: 'Main Processor' }
|
|
154
|
+
* });
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function updateNode(ast, nodeId, updates) {
|
|
158
|
+
assertNodeExists(ast, nodeId);
|
|
159
|
+
return withoutValidation(ast, (draft) => {
|
|
160
|
+
const node = draft.instances.find((n) => n.id === nodeId);
|
|
161
|
+
Object.assign(node, updates);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Add multiple nodes at once.
|
|
166
|
+
* Uses no validation to allow adding even when workflow has other errors.
|
|
167
|
+
*
|
|
168
|
+
* @param ast - Workflow to modify
|
|
169
|
+
* @param nodes - Array of node instances to add
|
|
170
|
+
* @returns Modified workflow
|
|
171
|
+
*/
|
|
172
|
+
export function addNodes(ast, nodes) {
|
|
173
|
+
// Check for duplicate IDs only (eventual consistency model)
|
|
174
|
+
nodes.forEach((node) => {
|
|
175
|
+
assertNodeNotExists(ast, node.id);
|
|
176
|
+
});
|
|
177
|
+
// Use produce directly with simplified type to avoid excessive type instantiation
|
|
178
|
+
return produce(ast, (draft) => {
|
|
179
|
+
nodes.forEach((node) => {
|
|
180
|
+
draft.instances.push(node);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Remove multiple nodes at once.
|
|
186
|
+
* Uses minimal validation (only checks nodes exist) to allow deletion
|
|
187
|
+
* even when the workflow has other validation errors.
|
|
188
|
+
*
|
|
189
|
+
* @param ast - Workflow to modify
|
|
190
|
+
* @param nodeIds - Array of node IDs to remove
|
|
191
|
+
* @returns Modified workflow
|
|
192
|
+
*/
|
|
193
|
+
export function removeNodes(ast, nodeIds) {
|
|
194
|
+
// First, verify all nodes exist (fail fast with clear error)
|
|
195
|
+
nodeIds.forEach((nodeId) => {
|
|
196
|
+
assertNodeExists(ast, nodeId);
|
|
197
|
+
});
|
|
198
|
+
return withoutValidation(ast, (draft) => {
|
|
199
|
+
// Remove all nodes
|
|
200
|
+
draft.instances = draft.instances.filter((n) => !nodeIds.includes(n.id));
|
|
201
|
+
// Remove all connections
|
|
202
|
+
draft.connections = draft.connections.filter((conn) => !nodeIds.includes(conn.from.node) &&
|
|
203
|
+
!nodeIds.includes(conn.to.node));
|
|
204
|
+
// Remove from scopes
|
|
205
|
+
if (draft.scopes) {
|
|
206
|
+
Object.keys(draft.scopes).forEach((scopeName) => {
|
|
207
|
+
draft.scopes[scopeName] = draft.scopes[scopeName].filter((id) => !nodeIds.includes(id));
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Set node configuration
|
|
214
|
+
*
|
|
215
|
+
* @param ast - Workflow to modify
|
|
216
|
+
* @param nodeId - ID of node to configure
|
|
217
|
+
* @param config - Configuration to set
|
|
218
|
+
* @returns Modified workflow
|
|
219
|
+
*/
|
|
220
|
+
export function setNodeConfig(ast, nodeId, config) {
|
|
221
|
+
return updateNode(ast, nodeId, { config });
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Set node position (UI coordinates)
|
|
225
|
+
*
|
|
226
|
+
* @param ast - Workflow to modify
|
|
227
|
+
* @param nodeId - ID of node to position (including virtual nodes "Start" and "Exit")
|
|
228
|
+
* @param x - X coordinate
|
|
229
|
+
* @param y - Y coordinate
|
|
230
|
+
* @returns Modified workflow
|
|
231
|
+
*/
|
|
232
|
+
export function setNodePosition(ast, nodeId, x, y) {
|
|
233
|
+
// Validate before mutation to avoid type instantiation issues inside callback
|
|
234
|
+
if (nodeId !== "Start" && nodeId !== "Exit") {
|
|
235
|
+
assertNodeExists(ast, nodeId);
|
|
236
|
+
}
|
|
237
|
+
return withoutValidation(ast, (draft) => {
|
|
238
|
+
// Handle Start/Exit virtual nodes
|
|
239
|
+
if (nodeId === "Start" || nodeId === "Exit") {
|
|
240
|
+
const uiField = nodeId === "Start" ? "startNode" : "exitNode";
|
|
241
|
+
draft.ui = {
|
|
242
|
+
...draft.ui,
|
|
243
|
+
[uiField]: {
|
|
244
|
+
...draft.ui?.[uiField],
|
|
245
|
+
x,
|
|
246
|
+
y,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
// Regular nodes - find and update
|
|
252
|
+
const node = draft.instances.find((n) => n.id === nodeId);
|
|
253
|
+
if (!node)
|
|
254
|
+
return; // Already validated above
|
|
255
|
+
if (!node.config) {
|
|
256
|
+
node.config = {};
|
|
257
|
+
}
|
|
258
|
+
node.config.x = x;
|
|
259
|
+
node.config.y = y;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Set node minimized state (UI state)
|
|
264
|
+
*
|
|
265
|
+
* @param ast - Workflow to modify
|
|
266
|
+
* @param nodeId - ID of node to minimize/expand
|
|
267
|
+
* @param minimized - Whether the node is minimized
|
|
268
|
+
* @returns Modified workflow
|
|
269
|
+
*/
|
|
270
|
+
export function setNodeMinimized(ast, nodeId, minimized) {
|
|
271
|
+
// Validate before mutation to avoid type instantiation issues inside callback
|
|
272
|
+
assertNodeExists(ast, nodeId);
|
|
273
|
+
return withoutValidation(ast, (draft) => {
|
|
274
|
+
const node = draft.instances.find((n) => n.id === nodeId);
|
|
275
|
+
if (!node)
|
|
276
|
+
return; // Already validated above
|
|
277
|
+
if (!node.config) {
|
|
278
|
+
node.config = {};
|
|
279
|
+
}
|
|
280
|
+
node.config.minimized = minimized;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Set node label (UI display name)
|
|
285
|
+
*
|
|
286
|
+
* @param ast - Workflow to modify
|
|
287
|
+
* @param nodeId - ID of node to label
|
|
288
|
+
* @param label - Label to set (empty string or undefined clears the label)
|
|
289
|
+
* @returns Modified workflow
|
|
290
|
+
*/
|
|
291
|
+
export function setNodeLabel(ast, nodeId, label) {
|
|
292
|
+
// Validate before mutation to avoid type instantiation issues inside callback
|
|
293
|
+
assertNodeExists(ast, nodeId);
|
|
294
|
+
return withoutValidation(ast, (draft) => {
|
|
295
|
+
const node = draft.instances.find((n) => n.id === nodeId);
|
|
296
|
+
if (!node)
|
|
297
|
+
return; // Already validated above
|
|
298
|
+
if (!node.config) {
|
|
299
|
+
node.config = {};
|
|
300
|
+
}
|
|
301
|
+
// Set or clear the label
|
|
302
|
+
if (label) {
|
|
303
|
+
node.config.label = label;
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
delete node.config.label;
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Set node size (UI state)
|
|
312
|
+
*
|
|
313
|
+
* @param ast - Workflow to modify
|
|
314
|
+
* @param nodeId - ID of node to resize
|
|
315
|
+
* @param width - Node width
|
|
316
|
+
* @param height - Node height
|
|
317
|
+
* @returns Modified workflow
|
|
318
|
+
*/
|
|
319
|
+
export function setNodeSize(ast, nodeId, width, height) {
|
|
320
|
+
// Validate before mutation to avoid type instantiation issues inside callback
|
|
321
|
+
assertNodeExists(ast, nodeId);
|
|
322
|
+
return withoutValidation(ast, (draft) => {
|
|
323
|
+
const node = draft.instances.find((n) => n.id === nodeId);
|
|
324
|
+
if (!node)
|
|
325
|
+
return; // Already validated above
|
|
326
|
+
if (!node.config) {
|
|
327
|
+
node.config = {};
|
|
328
|
+
}
|
|
329
|
+
node.config.width = width;
|
|
330
|
+
node.config.height = height;
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=nodes.js.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import type { TWorkflowAST } from "../../ast/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Swap the order of two ports on a node type (Start/Exit only)
|
|
7
|
+
* For regular instances, use swapNodeInstancePortOrder()
|
|
8
|
+
*
|
|
9
|
+
* @param ast - Workflow to modify
|
|
10
|
+
* @param nodeTypeName - Name of the node type ("Start" or "Exit" only)
|
|
11
|
+
* @param portName1 - Name of first port
|
|
12
|
+
* @param portName2 - Name of second port
|
|
13
|
+
* @returns Modified workflow
|
|
14
|
+
* @throws {Error} If used with non-Start/Exit nodes or ports are invalid
|
|
15
|
+
*/
|
|
16
|
+
export declare function swapPortOrder(ast: TWorkflowAST, nodeTypeName: string, portName1: string, portName2: string): TWorkflowAST;
|
|
17
|
+
/**
|
|
18
|
+
* Swap the order of two ports on a specific node instance (instance-level only)
|
|
19
|
+
*
|
|
20
|
+
* @param ast - Workflow to modify
|
|
21
|
+
* @param instanceId - ID of the node instance
|
|
22
|
+
* @param portName1 - Name of first port
|
|
23
|
+
* @param portName2 - Name of second port
|
|
24
|
+
* @returns Modified workflow
|
|
25
|
+
* @throws {Error} If instance doesn't exist or ports are invalid
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const ast = swapNodeInstancePortOrder(workflow, 'doubler1', 'value', 'execute');
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function swapNodeInstancePortOrder(ast: TWorkflowAST, instanceId: string, portName1: string, portName2: string): TWorkflowAST;
|
|
33
|
+
/**
|
|
34
|
+
* Set Start or Exit node ports directly.
|
|
35
|
+
* Used by worker to persist port configuration changes on virtual nodes.
|
|
36
|
+
*
|
|
37
|
+
* @param ast - Workflow to modify
|
|
38
|
+
* @param nodeType - "Start" or "Exit"
|
|
39
|
+
* @param ports - The ports object to set
|
|
40
|
+
* @returns Modified workflow
|
|
41
|
+
* @throws {Error} If nodeType is not "Start" or "Exit"
|
|
42
|
+
*/
|
|
43
|
+
export declare function setStartExitPorts(ast: TWorkflowAST, nodeType: "Start" | "Exit", ports: Record<string, unknown>): TWorkflowAST;
|
|
44
|
+
/**
|
|
45
|
+
* Set instance port configs directly.
|
|
46
|
+
* Used by worker to persist port configuration changes.
|
|
47
|
+
*
|
|
48
|
+
* @param ast - Workflow to modify
|
|
49
|
+
* @param instanceId - ID of the node instance
|
|
50
|
+
* @param portConfigs - The port configs array to set
|
|
51
|
+
* @returns Modified workflow
|
|
52
|
+
* @throws {Error} If instance doesn't exist
|
|
53
|
+
*/
|
|
54
|
+
export declare function setInstancePortConfigs(ast: TWorkflowAST, instanceId: string, portConfigs: Array<{
|
|
55
|
+
portName: string;
|
|
56
|
+
direction: "INPUT" | "OUTPUT";
|
|
57
|
+
order?: number;
|
|
58
|
+
}>): TWorkflowAST;
|
|
59
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import { produce } from "immer";
|
|
5
|
+
import { withoutValidation } from "../helpers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Swap the order of two ports on a node type
|
|
8
|
+
*
|
|
9
|
+
* @param ast - Workflow to modify
|
|
10
|
+
* @param nodeTypeName - Name of the node type (or "Start"/"Exit" for workflow interface)
|
|
11
|
+
* @param portName1 - Name of first port
|
|
12
|
+
* @param portName2 - Name of second port
|
|
13
|
+
* @returns Modified workflow
|
|
14
|
+
* @throws {Error} If node type doesn't exist or ports are invalid
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const ast = swapPortOrder(workflow, 'MyNode', 'input1', 'input2');
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Helper function to compute implicit port order based on position in the ports object
|
|
23
|
+
*/
|
|
24
|
+
function getImplicitOrder(ports, portName) {
|
|
25
|
+
const portNames = Object.keys(ports);
|
|
26
|
+
return portNames.indexOf(portName);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Swap the order of two ports on a node type (Start/Exit only)
|
|
30
|
+
* For regular instances, use swapNodeInstancePortOrder()
|
|
31
|
+
*
|
|
32
|
+
* @param ast - Workflow to modify
|
|
33
|
+
* @param nodeTypeName - Name of the node type ("Start" or "Exit" only)
|
|
34
|
+
* @param portName1 - Name of first port
|
|
35
|
+
* @param portName2 - Name of second port
|
|
36
|
+
* @returns Modified workflow
|
|
37
|
+
* @throws {Error} If used with non-Start/Exit nodes or ports are invalid
|
|
38
|
+
*/
|
|
39
|
+
export function swapPortOrder(ast, nodeTypeName, portName1, portName2) {
|
|
40
|
+
if (nodeTypeName !== "Start" && nodeTypeName !== "Exit") {
|
|
41
|
+
throw new Error(`swapPortOrder() only supports Start/Exit nodes. ` +
|
|
42
|
+
`Use swapNodeInstancePortOrder() for instance "${nodeTypeName}".`);
|
|
43
|
+
}
|
|
44
|
+
return withoutValidation(ast, (draft) => {
|
|
45
|
+
// Handle Start/Exit nodes specially
|
|
46
|
+
if (nodeTypeName === "Start") {
|
|
47
|
+
if (!draft.startPorts) {
|
|
48
|
+
throw new Error("Start ports not found");
|
|
49
|
+
}
|
|
50
|
+
const port1 = draft.startPorts[portName1];
|
|
51
|
+
const port2 = draft.startPorts[portName2];
|
|
52
|
+
if (!port1)
|
|
53
|
+
throw new Error(`Port "${portName1}" not found on Start node`);
|
|
54
|
+
if (!port2)
|
|
55
|
+
throw new Error(`Port "${portName2}" not found on Start node`);
|
|
56
|
+
// Use explicit order if present, otherwise compute from position
|
|
57
|
+
const order1 = port1.metadata?.order ?? getImplicitOrder(draft.startPorts, portName1);
|
|
58
|
+
const order2 = port2.metadata?.order ?? getImplicitOrder(draft.startPorts, portName2);
|
|
59
|
+
// Swap orders for all ports (including system ports)
|
|
60
|
+
port1.metadata = { ...port1.metadata, order: order2 };
|
|
61
|
+
port2.metadata = { ...port2.metadata, order: order1 };
|
|
62
|
+
}
|
|
63
|
+
else if (nodeTypeName === "Exit") {
|
|
64
|
+
if (!draft.exitPorts) {
|
|
65
|
+
throw new Error("Exit ports not found");
|
|
66
|
+
}
|
|
67
|
+
const port1 = draft.exitPorts[portName1];
|
|
68
|
+
const port2 = draft.exitPorts[portName2];
|
|
69
|
+
if (!port1)
|
|
70
|
+
throw new Error(`Port "${portName1}" not found on Exit node`);
|
|
71
|
+
if (!port2)
|
|
72
|
+
throw new Error(`Port "${portName2}" not found on Exit node`);
|
|
73
|
+
// Use explicit order if present, otherwise compute from position
|
|
74
|
+
const order1 = port1.metadata?.order ?? getImplicitOrder(draft.exitPorts, portName1);
|
|
75
|
+
const order2 = port2.metadata?.order ?? getImplicitOrder(draft.exitPorts, portName2);
|
|
76
|
+
// Swap orders for all ports (including system ports)
|
|
77
|
+
port1.metadata = { ...port1.metadata, order: order2 };
|
|
78
|
+
port2.metadata = { ...port2.metadata, order: order1 };
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Swap the order of two ports on a specific node instance (instance-level only)
|
|
84
|
+
*
|
|
85
|
+
* @param ast - Workflow to modify
|
|
86
|
+
* @param instanceId - ID of the node instance
|
|
87
|
+
* @param portName1 - Name of first port
|
|
88
|
+
* @param portName2 - Name of second port
|
|
89
|
+
* @returns Modified workflow
|
|
90
|
+
* @throws {Error} If instance doesn't exist or ports are invalid
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const ast = swapNodeInstancePortOrder(workflow, 'doubler1', 'value', 'execute');
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export function swapNodeInstancePortOrder(ast, instanceId, portName1, portName2) {
|
|
98
|
+
return withoutValidation(ast, (draft) => {
|
|
99
|
+
const instance = draft.instances.find(inst => inst.id === instanceId);
|
|
100
|
+
if (!instance) {
|
|
101
|
+
throw new Error(`Instance "${instanceId}" not found`);
|
|
102
|
+
}
|
|
103
|
+
// Find node type by matching either name or functionName
|
|
104
|
+
const nodeType = draft.nodeTypes.find(nt => nt.name === instance.nodeType || nt.functionName === instance.nodeType);
|
|
105
|
+
if (!nodeType) {
|
|
106
|
+
throw new Error(`Node type "${instance.nodeType}" not found`);
|
|
107
|
+
}
|
|
108
|
+
// Helper to get the EFFECTIVE visual order (what user sees in UI)
|
|
109
|
+
// This calculates order by: explicit order first, then implicit position as tiebreaker
|
|
110
|
+
const getEffectiveOrder = (portName) => {
|
|
111
|
+
const isInput = portName in nodeType.inputs;
|
|
112
|
+
const isOutput = portName in nodeType.outputs;
|
|
113
|
+
if (!isInput && !isOutput) {
|
|
114
|
+
throw new Error(`Port "${portName}" not found on node type "${instance.nodeType}"`);
|
|
115
|
+
}
|
|
116
|
+
const direction = isInput ? "INPUT" : "OUTPUT";
|
|
117
|
+
const ports = isInput ? nodeType.inputs : nodeType.outputs;
|
|
118
|
+
// Get all ports in this direction with their orders
|
|
119
|
+
const portsWithOrders = Object.keys(ports).map((pName, implicitIndex) => {
|
|
120
|
+
// Check instance config first
|
|
121
|
+
const instanceConfig = instance.config?.portConfigs?.find(pc => pc.portName === pName && (pc.direction == null || pc.direction === direction));
|
|
122
|
+
if (instanceConfig?.order !== undefined) {
|
|
123
|
+
return { name: pName, explicitOrder: instanceConfig.order, implicitOrder: implicitIndex };
|
|
124
|
+
}
|
|
125
|
+
// Check node type metadata
|
|
126
|
+
const port = ports[pName];
|
|
127
|
+
const metadataOrder = port?.metadata?.order;
|
|
128
|
+
if (typeof metadataOrder === "number") {
|
|
129
|
+
return { name: pName, explicitOrder: metadataOrder, implicitOrder: implicitIndex };
|
|
130
|
+
}
|
|
131
|
+
// No explicit order
|
|
132
|
+
return { name: pName, explicitOrder: undefined, implicitOrder: implicitIndex };
|
|
133
|
+
});
|
|
134
|
+
// Sort by: explicit order first, then implicit order as tiebreaker
|
|
135
|
+
const sorted = portsWithOrders.sort((a, b) => {
|
|
136
|
+
const aExplicit = a.explicitOrder ?? Infinity;
|
|
137
|
+
const bExplicit = b.explicitOrder ?? Infinity;
|
|
138
|
+
if (aExplicit !== bExplicit) {
|
|
139
|
+
return aExplicit - bExplicit;
|
|
140
|
+
}
|
|
141
|
+
// Same explicit order (or both undefined) - use implicit as tiebreaker
|
|
142
|
+
return a.implicitOrder - b.implicitOrder;
|
|
143
|
+
});
|
|
144
|
+
// Find the visual position (index in sorted array)
|
|
145
|
+
const visualPosition = sorted.findIndex(p => p.name === portName);
|
|
146
|
+
return { order: visualPosition, direction };
|
|
147
|
+
};
|
|
148
|
+
const port1Info = getEffectiveOrder(portName1);
|
|
149
|
+
const port2Info = getEffectiveOrder(portName2);
|
|
150
|
+
// Initialize config if needed
|
|
151
|
+
if (!instance.config) {
|
|
152
|
+
instance.config = {};
|
|
153
|
+
}
|
|
154
|
+
if (!instance.config.portConfigs) {
|
|
155
|
+
instance.config.portConfigs = [];
|
|
156
|
+
}
|
|
157
|
+
// Helper to update or add a port config
|
|
158
|
+
const updatePortConfig = (portName, direction, order) => {
|
|
159
|
+
const existingIndex = instance.config.portConfigs.findIndex(pc => pc.portName === portName && (pc.direction == null || pc.direction === direction));
|
|
160
|
+
if (existingIndex >= 0) {
|
|
161
|
+
// Update existing config
|
|
162
|
+
instance.config.portConfigs[existingIndex] = {
|
|
163
|
+
...instance.config.portConfigs[existingIndex],
|
|
164
|
+
order,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// Add new config
|
|
169
|
+
instance.config.portConfigs.push({ portName, direction, order });
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
// Swap the orders
|
|
173
|
+
updatePortConfig(portName1, port1Info.direction, port2Info.order);
|
|
174
|
+
updatePortConfig(portName2, port2Info.direction, port1Info.order);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Set Start or Exit node ports directly.
|
|
179
|
+
* Used by worker to persist port configuration changes on virtual nodes.
|
|
180
|
+
*
|
|
181
|
+
* @param ast - Workflow to modify
|
|
182
|
+
* @param nodeType - "Start" or "Exit"
|
|
183
|
+
* @param ports - The ports object to set
|
|
184
|
+
* @returns Modified workflow
|
|
185
|
+
* @throws {Error} If nodeType is not "Start" or "Exit"
|
|
186
|
+
*/
|
|
187
|
+
export function setStartExitPorts(ast, nodeType, ports) {
|
|
188
|
+
if (nodeType !== "Start" && nodeType !== "Exit") {
|
|
189
|
+
throw new Error(`nodeType must be "Start" or "Exit", got "${nodeType}"`);
|
|
190
|
+
}
|
|
191
|
+
// Use produce directly with simplified type to avoid excessive type instantiation
|
|
192
|
+
return produce(ast, (draft) => {
|
|
193
|
+
if (nodeType === "Start") {
|
|
194
|
+
draft.startPorts = ports;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
draft.exitPorts = ports;
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Set instance port configs directly.
|
|
203
|
+
* Used by worker to persist port configuration changes.
|
|
204
|
+
*
|
|
205
|
+
* @param ast - Workflow to modify
|
|
206
|
+
* @param instanceId - ID of the node instance
|
|
207
|
+
* @param portConfigs - The port configs array to set
|
|
208
|
+
* @returns Modified workflow
|
|
209
|
+
* @throws {Error} If instance doesn't exist
|
|
210
|
+
*/
|
|
211
|
+
export function setInstancePortConfigs(ast, instanceId, portConfigs) {
|
|
212
|
+
// Validate before mutation to avoid type instantiation issues inside callback
|
|
213
|
+
const instance = ast.instances.find(inst => inst.id === instanceId);
|
|
214
|
+
if (!instance) {
|
|
215
|
+
throw new Error(`Instance "${instanceId}" not found`);
|
|
216
|
+
}
|
|
217
|
+
// Use produce directly with simplified type to avoid excessive type instantiation
|
|
218
|
+
return produce(ast, (draft) => {
|
|
219
|
+
const draftInstance = draft.instances.find(inst => inst.id === instanceId);
|
|
220
|
+
if (!draftInstance)
|
|
221
|
+
return; // Already validated above
|
|
222
|
+
if (!draftInstance.config) {
|
|
223
|
+
draftInstance.config = {};
|
|
224
|
+
}
|
|
225
|
+
draftInstance.config.portConfigs = portConfigs;
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=ports.js.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import type { TWorkflowAST } from "../../ast/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Create a new scope
|
|
7
|
+
*
|
|
8
|
+
* @param ast - Workflow to modify
|
|
9
|
+
* @param scopeName - Name of scope
|
|
10
|
+
* @param nodeIds - Node IDs in scope
|
|
11
|
+
* @returns Modified workflow
|
|
12
|
+
* @throws {Error} If scope already exists
|
|
13
|
+
*/
|
|
14
|
+
export declare function createScope(ast: TWorkflowAST, scopeName: string, nodeIds: string[]): TWorkflowAST;
|
|
15
|
+
/**
|
|
16
|
+
* Remove a scope.
|
|
17
|
+
* Uses no validation to allow deletion even when workflow has other errors.
|
|
18
|
+
*
|
|
19
|
+
* @param ast - Workflow to modify
|
|
20
|
+
* @param scopeName - Name of scope to remove
|
|
21
|
+
* @returns Modified workflow
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeScope(ast: TWorkflowAST, scopeName: string): TWorkflowAST;
|
|
24
|
+
/**
|
|
25
|
+
* Add node to existing scope
|
|
26
|
+
*
|
|
27
|
+
* @param ast - Workflow to modify
|
|
28
|
+
* @param scopeName - Name of scope
|
|
29
|
+
* @param nodeId - Node ID to add
|
|
30
|
+
* @returns Modified workflow
|
|
31
|
+
*/
|
|
32
|
+
export declare function addToScope(ast: TWorkflowAST, scopeName: string, nodeId: string): TWorkflowAST;
|
|
33
|
+
/**
|
|
34
|
+
* Remove node from scope.
|
|
35
|
+
* Uses no validation to allow deletion even when workflow has other errors.
|
|
36
|
+
*
|
|
37
|
+
* @param ast - Workflow to modify
|
|
38
|
+
* @param scopeName - Name of scope
|
|
39
|
+
* @param nodeId - Node ID to remove
|
|
40
|
+
* @returns Modified workflow
|
|
41
|
+
*/
|
|
42
|
+
export declare function removeFromScope(ast: TWorkflowAST, scopeName: string, nodeId: string): TWorkflowAST;
|
|
43
|
+
/**
|
|
44
|
+
* Move node to different scope
|
|
45
|
+
*
|
|
46
|
+
* @param ast - Workflow to modify
|
|
47
|
+
* @param nodeId - Node ID to move
|
|
48
|
+
* @param targetScope - Target scope name
|
|
49
|
+
* @returns Modified workflow
|
|
50
|
+
*/
|
|
51
|
+
export declare function moveToScope(ast: TWorkflowAST, nodeId: string, targetScope: string): TWorkflowAST;
|
|
52
|
+
//# sourceMappingURL=scopes.d.ts.map
|