@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,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import { withoutValidation, validatePortReference, portReferencesEqual, } from "../helpers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Add a connection between two ports
|
|
7
|
+
*
|
|
8
|
+
* @param ast - Workflow to modify
|
|
9
|
+
* @param from - Source port reference (string "node.port" or object)
|
|
10
|
+
* @param to - Target port reference (string "node.port" or object)
|
|
11
|
+
* @returns Modified workflow
|
|
12
|
+
* @throws {Error} If connection already exists
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Using string format
|
|
17
|
+
* const ast = addConnection(workflow, 'Start.input', 'processor.input');
|
|
18
|
+
*
|
|
19
|
+
* // Using object format
|
|
20
|
+
* const ast = addConnection(
|
|
21
|
+
* workflow,
|
|
22
|
+
* { node: 'Start', port: 'input' },
|
|
23
|
+
* { node: 'processor', port: 'input' }
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function addConnection(ast, from, to) {
|
|
28
|
+
const fromRef = validatePortReference(from);
|
|
29
|
+
const toRef = validatePortReference(to);
|
|
30
|
+
// Check for duplicate connection
|
|
31
|
+
const exists = ast.connections.some((conn) => portReferencesEqual(conn.from, fromRef) &&
|
|
32
|
+
portReferencesEqual(conn.to, toRef));
|
|
33
|
+
if (exists) {
|
|
34
|
+
throw new Error(`Connection already exists: ${fromRef.node}.${fromRef.port} → ${toRef.node}.${toRef.port}`);
|
|
35
|
+
}
|
|
36
|
+
return withoutValidation(ast, (draft) => {
|
|
37
|
+
draft.connections.push({
|
|
38
|
+
type: "Connection",
|
|
39
|
+
from: fromRef,
|
|
40
|
+
to: toRef,
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Remove a connection.
|
|
46
|
+
* Uses no validation to allow deletion even when workflow has other errors.
|
|
47
|
+
*
|
|
48
|
+
* @param ast - Workflow to modify
|
|
49
|
+
* @param from - Source port reference
|
|
50
|
+
* @param to - Target port reference
|
|
51
|
+
* @returns Modified workflow
|
|
52
|
+
* @throws {Error} If connection doesn't exist
|
|
53
|
+
*/
|
|
54
|
+
export function removeConnection(ast, from, to) {
|
|
55
|
+
const fromRef = validatePortReference(from);
|
|
56
|
+
const toRef = validatePortReference(to);
|
|
57
|
+
// Verify connection exists first
|
|
58
|
+
const connIndex = ast.connections.findIndex((conn) => portReferencesEqual(conn.from, fromRef) &&
|
|
59
|
+
portReferencesEqual(conn.to, toRef));
|
|
60
|
+
if (connIndex === -1) {
|
|
61
|
+
throw new Error(`Connection not found: ${fromRef.node}.${fromRef.port} → ${toRef.node}.${toRef.port}`);
|
|
62
|
+
}
|
|
63
|
+
return withoutValidation(ast, (draft) => {
|
|
64
|
+
const idx = draft.connections.findIndex((conn) => portReferencesEqual(conn.from, fromRef) &&
|
|
65
|
+
portReferencesEqual(conn.to, toRef));
|
|
66
|
+
draft.connections.splice(idx, 1);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Remove all connections for a node (or specific port).
|
|
71
|
+
* Uses no validation to allow deletion even when workflow has other errors.
|
|
72
|
+
*
|
|
73
|
+
* @param ast - Workflow to modify
|
|
74
|
+
* @param nodeId - Node ID
|
|
75
|
+
* @param portName - Optional port name to filter
|
|
76
|
+
* @returns Modified workflow
|
|
77
|
+
*/
|
|
78
|
+
export function removeAllConnections(ast, nodeId, portName) {
|
|
79
|
+
return withoutValidation(ast, (draft) => {
|
|
80
|
+
draft.connections = draft.connections.filter((conn) => {
|
|
81
|
+
const matchesFrom = conn.from.node === nodeId &&
|
|
82
|
+
(!portName || conn.from.port === portName);
|
|
83
|
+
const matchesTo = conn.to.node === nodeId && (!portName || conn.to.port === portName);
|
|
84
|
+
return !matchesFrom && !matchesTo;
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Reconnect (change target of existing connection).
|
|
90
|
+
* Uses no validation to allow reconnecting even when workflow has other errors.
|
|
91
|
+
*
|
|
92
|
+
* @param ast - Workflow to modify
|
|
93
|
+
* @param from - Source port reference (identifies connection)
|
|
94
|
+
* @param oldTo - Old target port reference
|
|
95
|
+
* @param newTo - New target port reference
|
|
96
|
+
* @returns Modified workflow
|
|
97
|
+
*/
|
|
98
|
+
export function reconnect(ast, from, oldTo, newTo) {
|
|
99
|
+
const fromRef = validatePortReference(from);
|
|
100
|
+
const oldToRef = validatePortReference(oldTo);
|
|
101
|
+
const newToRef = validatePortReference(newTo);
|
|
102
|
+
// Verify connection exists
|
|
103
|
+
const connExists = ast.connections.find((c) => portReferencesEqual(c.from, fromRef) &&
|
|
104
|
+
portReferencesEqual(c.to, oldToRef));
|
|
105
|
+
if (!connExists) {
|
|
106
|
+
throw new Error(`Connection not found: ${fromRef.node}.${fromRef.port} → ${oldToRef.node}.${oldToRef.port}`);
|
|
107
|
+
}
|
|
108
|
+
return withoutValidation(ast, (draft) => {
|
|
109
|
+
const conn = draft.connections.find((c) => portReferencesEqual(c.from, fromRef) &&
|
|
110
|
+
portReferencesEqual(c.to, oldToRef));
|
|
111
|
+
conn.to = newToRef;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Add multiple connections at once.
|
|
116
|
+
* Uses no validation to allow adding even when workflow has other errors.
|
|
117
|
+
*
|
|
118
|
+
* @param ast - Workflow to modify
|
|
119
|
+
* @param connections - Array of connections to add
|
|
120
|
+
* @returns Modified workflow
|
|
121
|
+
*/
|
|
122
|
+
export function addConnections(ast, connections) {
|
|
123
|
+
return withoutValidation(ast, (draft) => {
|
|
124
|
+
connections.forEach((conn) => {
|
|
125
|
+
// Check for duplicates
|
|
126
|
+
const exists = draft.connections.some((c) => portReferencesEqual(c.from, conn.from) &&
|
|
127
|
+
portReferencesEqual(c.to, conn.to));
|
|
128
|
+
if (!exists) {
|
|
129
|
+
draft.connections.push(conn);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Replace all connections for a node.
|
|
136
|
+
* Uses no validation to allow replacing even when workflow has other errors.
|
|
137
|
+
*
|
|
138
|
+
* @param ast - Workflow to modify
|
|
139
|
+
* @param nodeId - Node ID
|
|
140
|
+
* @param connections - New connections
|
|
141
|
+
* @returns Modified workflow
|
|
142
|
+
*/
|
|
143
|
+
export function replaceConnections(ast, nodeId, connections) {
|
|
144
|
+
return withoutValidation(ast, (draft) => {
|
|
145
|
+
// Remove existing connections
|
|
146
|
+
draft.connections = draft.connections.filter((conn) => conn.from.node !== nodeId && conn.to.node !== nodeId);
|
|
147
|
+
// Add new connections
|
|
148
|
+
draft.connections.push(...connections);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=connections.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module api/manipulation
|
|
3
|
+
*
|
|
4
|
+
* # Manipulation API
|
|
5
|
+
*
|
|
6
|
+
* Immutable operations for programmatic workflow modification.
|
|
7
|
+
* All functions return a new AST (never mutate the original).
|
|
8
|
+
*
|
|
9
|
+
* ## Operation Categories
|
|
10
|
+
*
|
|
11
|
+
* | Category | Functions |
|
|
12
|
+
* |-------------|-----------|
|
|
13
|
+
* | Workflow | `cloneWorkflow`, `renameWorkflow`, `setWorkflowPorts` |
|
|
14
|
+
* | Node Types | `addNodeType`, `removeNodeType`, `updateNodeType` |
|
|
15
|
+
* | Nodes | `addNode`, `removeNode`, `renameNode`, `setNodePosition` |
|
|
16
|
+
* | Connections | `addConnection`, `removeConnection`, `reconnect` |
|
|
17
|
+
* | Ports | `swapPortOrder`, `swapNodeInstancePortOrder` |
|
|
18
|
+
* | Scopes | `createScope`, `removeScope`, `addToScope` |
|
|
19
|
+
*
|
|
20
|
+
* ## Validation Options
|
|
21
|
+
*
|
|
22
|
+
* Operations validate by default. Use wrappers for control:
|
|
23
|
+
* - `withValidation(workflow)` - Full validation (default)
|
|
24
|
+
* - `withMinimalValidation(workflow)` - Skip expensive checks
|
|
25
|
+
* - `withoutValidation(workflow)` - No validation (use with caution)
|
|
26
|
+
*/
|
|
27
|
+
export { withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeExists, assertNodeNotExists, } from "./validation.js";
|
|
28
|
+
export { cloneWorkflow, setWorkflowDescription, setWorkflowMetadata, setOutputFileType, renameWorkflow, setWorkflowPorts, } from "./workflow.js";
|
|
29
|
+
export { addNodeType, removeNodeType, updateNodeType, getNodeType, hasNodeType, listNodeTypes, renameNodeType, replaceNodeTypes, } from "./node-types.js";
|
|
30
|
+
export { addNode, removeNode, renameNode, updateNode, addNodes, removeNodes, setNodeConfig, setNodePosition, setNodeMinimized, setNodeSize, setNodeLabel, } from "./nodes.js";
|
|
31
|
+
export { addConnection, removeConnection, removeAllConnections, reconnect, addConnections, replaceConnections, } from "./connections.js";
|
|
32
|
+
export { swapPortOrder, swapNodeInstancePortOrder, setStartExitPorts, setInstancePortConfigs, } from "./ports.js";
|
|
33
|
+
export { createScope, removeScope, addToScope, removeFromScope, moveToScope, } from "./scopes.js";
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module api/manipulation
|
|
3
|
+
*
|
|
4
|
+
* # Manipulation API
|
|
5
|
+
*
|
|
6
|
+
* Immutable operations for programmatic workflow modification.
|
|
7
|
+
* All functions return a new AST (never mutate the original).
|
|
8
|
+
*
|
|
9
|
+
* ## Operation Categories
|
|
10
|
+
*
|
|
11
|
+
* | Category | Functions |
|
|
12
|
+
* |-------------|-----------|
|
|
13
|
+
* | Workflow | `cloneWorkflow`, `renameWorkflow`, `setWorkflowPorts` |
|
|
14
|
+
* | Node Types | `addNodeType`, `removeNodeType`, `updateNodeType` |
|
|
15
|
+
* | Nodes | `addNode`, `removeNode`, `renameNode`, `setNodePosition` |
|
|
16
|
+
* | Connections | `addConnection`, `removeConnection`, `reconnect` |
|
|
17
|
+
* | Ports | `swapPortOrder`, `swapNodeInstancePortOrder` |
|
|
18
|
+
* | Scopes | `createScope`, `removeScope`, `addToScope` |
|
|
19
|
+
*
|
|
20
|
+
* ## Validation Options
|
|
21
|
+
*
|
|
22
|
+
* Operations validate by default. Use wrappers for control:
|
|
23
|
+
* - `withValidation(workflow)` - Full validation (default)
|
|
24
|
+
* - `withMinimalValidation(workflow)` - Skip expensive checks
|
|
25
|
+
* - `withoutValidation(workflow)` - No validation (use with caution)
|
|
26
|
+
*/
|
|
27
|
+
// Re-export validation utilities
|
|
28
|
+
export { withoutValidation, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeExists, assertNodeNotExists, } from "./validation.js";
|
|
29
|
+
// Re-export workflow-level operations
|
|
30
|
+
export { cloneWorkflow, setWorkflowDescription, setWorkflowMetadata, setOutputFileType, renameWorkflow, setWorkflowPorts, } from "./workflow.js";
|
|
31
|
+
// Re-export node type operations
|
|
32
|
+
export { addNodeType, removeNodeType, updateNodeType, getNodeType, hasNodeType, listNodeTypes, renameNodeType, replaceNodeTypes, } from "./node-types.js";
|
|
33
|
+
// Re-export node instance operations
|
|
34
|
+
export { addNode, removeNode, renameNode, updateNode, addNodes, removeNodes, setNodeConfig, setNodePosition, setNodeMinimized, setNodeSize, setNodeLabel, } from "./nodes.js";
|
|
35
|
+
// Re-export connection operations
|
|
36
|
+
export { addConnection, removeConnection, removeAllConnections, reconnect, addConnections, replaceConnections, } from "./connections.js";
|
|
37
|
+
// Re-export port operations
|
|
38
|
+
export { swapPortOrder, swapNodeInstancePortOrder, setStartExitPorts, setInstancePortConfigs, } from "./ports.js";
|
|
39
|
+
// Re-export scope operations
|
|
40
|
+
export { createScope, removeScope, addToScope, removeFromScope, moveToScope, } from "./scopes.js";
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node type operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import type { TWorkflowAST, TNodeTypeAST } from "../../ast/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Add a node type definition to the workflow (idempotent).
|
|
7
|
+
* Uses no validation to allow adding even when workflow has other errors.
|
|
8
|
+
*
|
|
9
|
+
* If a node type with the same name already exists, returns the AST unchanged
|
|
10
|
+
* without throwing an error. This handles state desync between server and client,
|
|
11
|
+
* race conditions, double-clicks, and server restarts gracefully.
|
|
12
|
+
*
|
|
13
|
+
* @param ast - Workflow to modify
|
|
14
|
+
* @param nodeType - Node type to add
|
|
15
|
+
* @returns Modified workflow (or unchanged if node type already exists)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const ast = addNodeType(workflow, {
|
|
20
|
+
* type: 'NodeType',
|
|
21
|
+
* name: 'double',
|
|
22
|
+
* functionName: 'double',
|
|
23
|
+
* inputs: { x: { dataType: 'NUMBER' } },
|
|
24
|
+
* outputs: { result: { dataType: 'NUMBER' } },
|
|
25
|
+
* hasSuccessPort: true,
|
|
26
|
+
* hasFailurePort: true,
|
|
27
|
+
* executeWhen: 'CONJUNCTION'
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function addNodeType(ast: TWorkflowAST, nodeType: TNodeTypeAST): TWorkflowAST;
|
|
32
|
+
/**
|
|
33
|
+
* Remove a node type from the workflow.
|
|
34
|
+
* Uses minimal validation (only checks type exists and has no instances)
|
|
35
|
+
* to allow deletion even when the workflow has other validation errors.
|
|
36
|
+
*
|
|
37
|
+
* @param ast - Workflow to modify
|
|
38
|
+
* @param typeName - Name of node type to remove
|
|
39
|
+
* @returns Modified workflow
|
|
40
|
+
* @throws {Error} If node type doesn't exist or instances reference it
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const ast = removeNodeType(workflow, 'obsoleteType');
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function removeNodeType(ast: TWorkflowAST, typeName: string): TWorkflowAST;
|
|
48
|
+
/**
|
|
49
|
+
* Update an existing node type.
|
|
50
|
+
* Uses no validation to allow updates even when workflow has other errors.
|
|
51
|
+
*
|
|
52
|
+
* @param ast - Workflow to modify
|
|
53
|
+
* @param typeName - Name of node type to update
|
|
54
|
+
* @param updates - Partial node type to merge
|
|
55
|
+
* @returns Modified workflow
|
|
56
|
+
* @throws {Error} If node type doesn't exist
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const ast = updateNodeType(workflow, 'processor', {
|
|
61
|
+
* label: 'Data Processor',
|
|
62
|
+
* description: 'Processes incoming data'
|
|
63
|
+
* });
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function updateNodeType(ast: TWorkflowAST, typeName: string, updates: Partial<Omit<TNodeTypeAST, "type" | "name">>): TWorkflowAST;
|
|
67
|
+
/**
|
|
68
|
+
* Get a node type by name
|
|
69
|
+
*
|
|
70
|
+
* @param ast - Workflow to query
|
|
71
|
+
* @param typeName - Name of node type
|
|
72
|
+
* @returns Node type or undefined
|
|
73
|
+
*/
|
|
74
|
+
export declare function getNodeType(ast: TWorkflowAST, typeName: string): TNodeTypeAST | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Check if node type exists
|
|
77
|
+
*
|
|
78
|
+
* @param ast - Workflow to query
|
|
79
|
+
* @param typeName - Name of node type
|
|
80
|
+
* @returns True if exists
|
|
81
|
+
*/
|
|
82
|
+
export declare function hasNodeType(ast: TWorkflowAST, typeName: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* List all node types
|
|
85
|
+
*
|
|
86
|
+
* @param ast - Workflow to query
|
|
87
|
+
* @returns Array of node types
|
|
88
|
+
*/
|
|
89
|
+
export declare function listNodeTypes(ast: TWorkflowAST): TNodeTypeAST[];
|
|
90
|
+
/**
|
|
91
|
+
* Rename a node type and update all instances that reference it.
|
|
92
|
+
* Uses no validation to allow renames even when workflow has other errors.
|
|
93
|
+
*
|
|
94
|
+
* @param ast - Workflow to modify
|
|
95
|
+
* @param oldTypeName - Current name of the node type
|
|
96
|
+
* @param newTypeName - New name for the node type
|
|
97
|
+
* @returns Modified workflow
|
|
98
|
+
* @throws {Error} If node type doesn't exist or new name already exists
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const ast = renameNodeType(workflow, 'OldTypeName', 'NewTypeName');
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare function renameNodeType(ast: TWorkflowAST, oldTypeName: string, newTypeName: string): TWorkflowAST;
|
|
106
|
+
/**
|
|
107
|
+
* Replace all node types in workflow.
|
|
108
|
+
* Uses no validation to allow replacement even when workflow has other errors.
|
|
109
|
+
*
|
|
110
|
+
* @param ast - Workflow to modify
|
|
111
|
+
* @param nodeTypes - New array of node types
|
|
112
|
+
* @returns Modified workflow
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const ast = replaceNodeTypes(workflow, [
|
|
117
|
+
* { type: 'NodeType', name: 'type1', ... },
|
|
118
|
+
* { type: 'NodeType', name: 'type2', ... }
|
|
119
|
+
* ]);
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function replaceNodeTypes(ast: TWorkflowAST, nodeTypes: TNodeTypeAST[]): TWorkflowAST;
|
|
123
|
+
//# sourceMappingURL=node-types.d.ts.map
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node type operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import { produce } from "immer";
|
|
5
|
+
import { withoutValidation } from "../helpers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Add a node type definition to the workflow (idempotent).
|
|
8
|
+
* Uses no validation to allow adding even when workflow has other errors.
|
|
9
|
+
*
|
|
10
|
+
* If a node type with the same name already exists, returns the AST unchanged
|
|
11
|
+
* without throwing an error. This handles state desync between server and client,
|
|
12
|
+
* race conditions, double-clicks, and server restarts gracefully.
|
|
13
|
+
*
|
|
14
|
+
* @param ast - Workflow to modify
|
|
15
|
+
* @param nodeType - Node type to add
|
|
16
|
+
* @returns Modified workflow (or unchanged if node type already exists)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const ast = addNodeType(workflow, {
|
|
21
|
+
* type: 'NodeType',
|
|
22
|
+
* name: 'double',
|
|
23
|
+
* functionName: 'double',
|
|
24
|
+
* inputs: { x: { dataType: 'NUMBER' } },
|
|
25
|
+
* outputs: { result: { dataType: 'NUMBER' } },
|
|
26
|
+
* hasSuccessPort: true,
|
|
27
|
+
* hasFailurePort: true,
|
|
28
|
+
* executeWhen: 'CONJUNCTION'
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function addNodeType(ast, nodeType) {
|
|
33
|
+
const existingIndex = ast.nodeTypes.findIndex((nt) => nt.name === nodeType.name);
|
|
34
|
+
// If node type already exists, check if we need to update it with new properties
|
|
35
|
+
// (e.g., importSource for npm types that were parsed without @import annotation)
|
|
36
|
+
if (existingIndex >= 0) {
|
|
37
|
+
const existing = ast.nodeTypes[existingIndex];
|
|
38
|
+
const newImportSource = nodeType.importSource;
|
|
39
|
+
const existingImportSource = existing.importSource;
|
|
40
|
+
// If the new type has importSource but the existing one doesn't, update it
|
|
41
|
+
if (newImportSource && !existingImportSource) {
|
|
42
|
+
return produce(ast, (draft) => {
|
|
43
|
+
draft.nodeTypes[existingIndex].importSource = newImportSource;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// Otherwise, return unchanged (idempotent)
|
|
47
|
+
return ast;
|
|
48
|
+
}
|
|
49
|
+
// Add new node type
|
|
50
|
+
return produce(ast, (draft) => {
|
|
51
|
+
draft.nodeTypes.push(nodeType);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Remove a node type from the workflow.
|
|
56
|
+
* Uses minimal validation (only checks type exists and has no instances)
|
|
57
|
+
* to allow deletion even when the workflow has other validation errors.
|
|
58
|
+
*
|
|
59
|
+
* @param ast - Workflow to modify
|
|
60
|
+
* @param typeName - Name of node type to remove
|
|
61
|
+
* @returns Modified workflow
|
|
62
|
+
* @throws {Error} If node type doesn't exist or instances reference it
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const ast = removeNodeType(workflow, 'obsoleteType');
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export function removeNodeType(ast, typeName) {
|
|
70
|
+
// First, verify node type exists
|
|
71
|
+
const typeIndex = ast.nodeTypes.findIndex((nt) => nt.name === typeName);
|
|
72
|
+
if (typeIndex === -1) {
|
|
73
|
+
throw new Error(`Node type "${typeName}" not found`);
|
|
74
|
+
}
|
|
75
|
+
// Check if any instances reference this type
|
|
76
|
+
const functionName = ast.nodeTypes[typeIndex].functionName;
|
|
77
|
+
const referencingInstances = ast.instances.filter((inst) => inst.nodeType === functionName);
|
|
78
|
+
if (referencingInstances.length > 0) {
|
|
79
|
+
throw new Error(`Cannot remove node type "${typeName}": ${referencingInstances.length} instance(s) still reference it (${referencingInstances.map((i) => i.id).join(", ")})`);
|
|
80
|
+
}
|
|
81
|
+
return withoutValidation(ast, (draft) => {
|
|
82
|
+
const idx = draft.nodeTypes.findIndex((nt) => nt.name === typeName);
|
|
83
|
+
draft.nodeTypes.splice(idx, 1);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Update an existing node type.
|
|
88
|
+
* Uses no validation to allow updates even when workflow has other errors.
|
|
89
|
+
*
|
|
90
|
+
* @param ast - Workflow to modify
|
|
91
|
+
* @param typeName - Name of node type to update
|
|
92
|
+
* @param updates - Partial node type to merge
|
|
93
|
+
* @returns Modified workflow
|
|
94
|
+
* @throws {Error} If node type doesn't exist
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const ast = updateNodeType(workflow, 'processor', {
|
|
99
|
+
* label: 'Data Processor',
|
|
100
|
+
* description: 'Processes incoming data'
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export function updateNodeType(ast, typeName, updates) {
|
|
105
|
+
// Verify node type exists
|
|
106
|
+
if (!ast.nodeTypes.find((nt) => nt.name === typeName)) {
|
|
107
|
+
throw new Error(`Node type "${typeName}" not found`);
|
|
108
|
+
}
|
|
109
|
+
return withoutValidation(ast, (draft) => {
|
|
110
|
+
const nodeType = draft.nodeTypes.find((nt) => nt.name === typeName);
|
|
111
|
+
Object.assign(nodeType, updates);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get a node type by name
|
|
116
|
+
*
|
|
117
|
+
* @param ast - Workflow to query
|
|
118
|
+
* @param typeName - Name of node type
|
|
119
|
+
* @returns Node type or undefined
|
|
120
|
+
*/
|
|
121
|
+
export function getNodeType(ast, typeName) {
|
|
122
|
+
return ast.nodeTypes.find((nt) => nt.name === typeName);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if node type exists
|
|
126
|
+
*
|
|
127
|
+
* @param ast - Workflow to query
|
|
128
|
+
* @param typeName - Name of node type
|
|
129
|
+
* @returns True if exists
|
|
130
|
+
*/
|
|
131
|
+
export function hasNodeType(ast, typeName) {
|
|
132
|
+
return ast.nodeTypes.some((nt) => nt.name === typeName);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* List all node types
|
|
136
|
+
*
|
|
137
|
+
* @param ast - Workflow to query
|
|
138
|
+
* @returns Array of node types
|
|
139
|
+
*/
|
|
140
|
+
export function listNodeTypes(ast) {
|
|
141
|
+
return [...ast.nodeTypes];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Rename a node type and update all instances that reference it.
|
|
145
|
+
* Uses no validation to allow renames even when workflow has other errors.
|
|
146
|
+
*
|
|
147
|
+
* @param ast - Workflow to modify
|
|
148
|
+
* @param oldTypeName - Current name of the node type
|
|
149
|
+
* @param newTypeName - New name for the node type
|
|
150
|
+
* @returns Modified workflow
|
|
151
|
+
* @throws {Error} If node type doesn't exist or new name already exists
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const ast = renameNodeType(workflow, 'OldTypeName', 'NewTypeName');
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export function renameNodeType(ast, oldTypeName, newTypeName) {
|
|
159
|
+
// Check if new name already exists
|
|
160
|
+
if (ast.nodeTypes.some((nt) => nt.name === newTypeName)) {
|
|
161
|
+
throw new Error(`Node type "${newTypeName}" already exists`);
|
|
162
|
+
}
|
|
163
|
+
return withoutValidation(ast, (draft) => {
|
|
164
|
+
// Find the node type in nodeTypes array
|
|
165
|
+
const nodeTypeIndex = draft.nodeTypes.findIndex((nt) => nt.name === oldTypeName);
|
|
166
|
+
// Rename the node type if it exists in nodeTypes array
|
|
167
|
+
if (nodeTypeIndex >= 0) {
|
|
168
|
+
draft.nodeTypes[nodeTypeIndex].name = newTypeName;
|
|
169
|
+
}
|
|
170
|
+
// Update all instances that reference this node type
|
|
171
|
+
draft.instances.forEach((instance) => {
|
|
172
|
+
if (instance.nodeType === oldTypeName) {
|
|
173
|
+
instance.nodeType = newTypeName;
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Replace all node types in workflow.
|
|
180
|
+
* Uses no validation to allow replacement even when workflow has other errors.
|
|
181
|
+
*
|
|
182
|
+
* @param ast - Workflow to modify
|
|
183
|
+
* @param nodeTypes - New array of node types
|
|
184
|
+
* @returns Modified workflow
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const ast = replaceNodeTypes(workflow, [
|
|
189
|
+
* { type: 'NodeType', name: 'type1', ... },
|
|
190
|
+
* { type: 'NodeType', name: 'type2', ... }
|
|
191
|
+
* ]);
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export function replaceNodeTypes(ast, nodeTypes) {
|
|
195
|
+
// Use produce directly with simplified type to avoid excessive type instantiation
|
|
196
|
+
return produce(ast, (draft) => {
|
|
197
|
+
draft.nodeTypes = nodeTypes;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=node-types.js.map
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node instance operations for workflow manipulation
|
|
3
|
+
*/
|
|
4
|
+
import type { TWorkflowAST, TNodeInstanceAST, TNodeInstanceConfig } from "../../ast/types.js";
|
|
5
|
+
import { type RemoveOptions } 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 declare function addNode(ast: TWorkflowAST, node: TNodeInstanceAST): TWorkflowAST;
|
|
24
|
+
/**
|
|
25
|
+
* Remove a node instance from the workflow.
|
|
26
|
+
* Uses minimal validation (only checks node exists) to allow deletion
|
|
27
|
+
* even when the workflow has other validation errors.
|
|
28
|
+
*
|
|
29
|
+
* @param ast - Workflow to modify
|
|
30
|
+
* @param nodeId - ID of node to remove
|
|
31
|
+
* @param options - Remove options
|
|
32
|
+
* @returns Modified workflow
|
|
33
|
+
* @throws {Error} If node doesn't exist
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Remove node and all its connections
|
|
38
|
+
* const ast = removeNode(workflow, 'processor1');
|
|
39
|
+
*
|
|
40
|
+
* // Remove node, keep connections (will fail validation)
|
|
41
|
+
* const ast = removeNode(workflow, 'processor1', { removeConnections: false });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function removeNode(ast: TWorkflowAST, nodeId: string, options?: RemoveOptions): TWorkflowAST;
|
|
45
|
+
/**
|
|
46
|
+
* Rename a node instance (updates all connections)
|
|
47
|
+
*
|
|
48
|
+
* @param ast - Workflow to modify
|
|
49
|
+
* @param oldId - Current node ID
|
|
50
|
+
* @param newId - New node ID
|
|
51
|
+
* @returns Modified workflow
|
|
52
|
+
* @throws {Error} If old ID doesn't exist or new ID already exists
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const ast = renameNode(workflow, 'processor1', 'dataProcessor');
|
|
57
|
+
* // All connections updated automatically
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function renameNode(ast: TWorkflowAST, oldId: string, newId: string): TWorkflowAST;
|
|
61
|
+
/**
|
|
62
|
+
* Update a node instance
|
|
63
|
+
*
|
|
64
|
+
* @param ast - Workflow to modify
|
|
65
|
+
* @param nodeId - ID of node to update
|
|
66
|
+
* @param updates - Partial node instance to merge
|
|
67
|
+
* @returns Modified workflow
|
|
68
|
+
* @throws {Error} If node doesn't exist
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const ast = updateNode(workflow, 'processor1', {
|
|
73
|
+
* config: { x: 100, y: 200, label: 'Main Processor' }
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function updateNode(ast: TWorkflowAST, nodeId: string, updates: Partial<Omit<TNodeInstanceAST, "type" | "id">>): TWorkflowAST;
|
|
78
|
+
/**
|
|
79
|
+
* Add multiple nodes at once.
|
|
80
|
+
* Uses no validation to allow adding even when workflow has other errors.
|
|
81
|
+
*
|
|
82
|
+
* @param ast - Workflow to modify
|
|
83
|
+
* @param nodes - Array of node instances to add
|
|
84
|
+
* @returns Modified workflow
|
|
85
|
+
*/
|
|
86
|
+
export declare function addNodes(ast: TWorkflowAST, nodes: TNodeInstanceAST[]): TWorkflowAST;
|
|
87
|
+
/**
|
|
88
|
+
* Remove multiple nodes at once.
|
|
89
|
+
* Uses minimal validation (only checks nodes exist) to allow deletion
|
|
90
|
+
* even when the workflow has other validation errors.
|
|
91
|
+
*
|
|
92
|
+
* @param ast - Workflow to modify
|
|
93
|
+
* @param nodeIds - Array of node IDs to remove
|
|
94
|
+
* @returns Modified workflow
|
|
95
|
+
*/
|
|
96
|
+
export declare function removeNodes(ast: TWorkflowAST, nodeIds: string[]): TWorkflowAST;
|
|
97
|
+
/**
|
|
98
|
+
* Set node configuration
|
|
99
|
+
*
|
|
100
|
+
* @param ast - Workflow to modify
|
|
101
|
+
* @param nodeId - ID of node to configure
|
|
102
|
+
* @param config - Configuration to set
|
|
103
|
+
* @returns Modified workflow
|
|
104
|
+
*/
|
|
105
|
+
export declare function setNodeConfig(ast: TWorkflowAST, nodeId: string, config: TNodeInstanceConfig): TWorkflowAST;
|
|
106
|
+
/**
|
|
107
|
+
* Set node position (UI coordinates)
|
|
108
|
+
*
|
|
109
|
+
* @param ast - Workflow to modify
|
|
110
|
+
* @param nodeId - ID of node to position (including virtual nodes "Start" and "Exit")
|
|
111
|
+
* @param x - X coordinate
|
|
112
|
+
* @param y - Y coordinate
|
|
113
|
+
* @returns Modified workflow
|
|
114
|
+
*/
|
|
115
|
+
export declare function setNodePosition(ast: TWorkflowAST, nodeId: string, x: number, y: number): TWorkflowAST;
|
|
116
|
+
/**
|
|
117
|
+
* Set node minimized state (UI state)
|
|
118
|
+
*
|
|
119
|
+
* @param ast - Workflow to modify
|
|
120
|
+
* @param nodeId - ID of node to minimize/expand
|
|
121
|
+
* @param minimized - Whether the node is minimized
|
|
122
|
+
* @returns Modified workflow
|
|
123
|
+
*/
|
|
124
|
+
export declare function setNodeMinimized(ast: TWorkflowAST, nodeId: string, minimized: boolean): TWorkflowAST;
|
|
125
|
+
/**
|
|
126
|
+
* Set node label (UI display name)
|
|
127
|
+
*
|
|
128
|
+
* @param ast - Workflow to modify
|
|
129
|
+
* @param nodeId - ID of node to label
|
|
130
|
+
* @param label - Label to set (empty string or undefined clears the label)
|
|
131
|
+
* @returns Modified workflow
|
|
132
|
+
*/
|
|
133
|
+
export declare function setNodeLabel(ast: TWorkflowAST, nodeId: string, label: string | undefined): TWorkflowAST;
|
|
134
|
+
/**
|
|
135
|
+
* Set node size (UI state)
|
|
136
|
+
*
|
|
137
|
+
* @param ast - Workflow to modify
|
|
138
|
+
* @param nodeId - ID of node to resize
|
|
139
|
+
* @param width - Node width
|
|
140
|
+
* @param height - Node height
|
|
141
|
+
* @returns Modified workflow
|
|
142
|
+
*/
|
|
143
|
+
export declare function setNodeSize(ast: TWorkflowAST, nodeId: string, width: number, height: number): TWorkflowAST;
|
|
144
|
+
//# sourceMappingURL=nodes.d.ts.map
|