@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,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile command - compiles workflow files to TypeScript
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { glob } from 'glob';
|
|
7
|
+
import { parseWorkflow } from '../../api/index.js';
|
|
8
|
+
import { generateInPlace } from '../../api/generate-in-place.js';
|
|
9
|
+
import { generateCode } from '../../api/generate.js';
|
|
10
|
+
import { validator } from '../../validator.js';
|
|
11
|
+
import { logger } from '../utils/logger.js';
|
|
12
|
+
import { getErrorMessage } from '../../utils/error-utils.js';
|
|
13
|
+
import { getFriendlyError } from '../../friendly-errors.js';
|
|
14
|
+
import { detectProjectModuleFormat } from './doctor.js';
|
|
15
|
+
import { generateInngestFunction } from '../../generator/inngest.js';
|
|
16
|
+
import { AnnotationParser } from '../../parser.js';
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the module format to use for compilation.
|
|
19
|
+
* If 'auto' or not specified, detect from the project's package.json.
|
|
20
|
+
*/
|
|
21
|
+
function resolveModuleFormat(format, cwd) {
|
|
22
|
+
if (format === 'esm' || format === 'cjs') {
|
|
23
|
+
return format;
|
|
24
|
+
}
|
|
25
|
+
// Auto-detect from project
|
|
26
|
+
const detection = detectProjectModuleFormat(cwd);
|
|
27
|
+
return detection.format;
|
|
28
|
+
}
|
|
29
|
+
export async function compileCommand(input, options = {}) {
|
|
30
|
+
const { production = false, sourceMap = false, strict = false, verbose = false, workflowName, dryRun = false, format, inlineRuntime = false, clean = false, target } = options;
|
|
31
|
+
// Handle Inngest target compilation
|
|
32
|
+
if (target === 'inngest') {
|
|
33
|
+
return compileInngestTarget(input, { production, verbose, workflowName, dryRun });
|
|
34
|
+
}
|
|
35
|
+
// Resolve module format (auto-detect if not specified)
|
|
36
|
+
const cwd = process.cwd();
|
|
37
|
+
const moduleFormat = resolveModuleFormat(format, cwd);
|
|
38
|
+
try {
|
|
39
|
+
// If input is a directory, expand to all .ts files recursively
|
|
40
|
+
let pattern = input;
|
|
41
|
+
try {
|
|
42
|
+
if (fs.existsSync(input) && fs.statSync(input).isDirectory()) {
|
|
43
|
+
pattern = path.join(input, '**/*.ts');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Not a valid path, use as glob pattern
|
|
48
|
+
}
|
|
49
|
+
// Find files matching the pattern, filter to actual files only
|
|
50
|
+
const allFiles = await glob(pattern, { absolute: true });
|
|
51
|
+
const files = allFiles.filter((f) => {
|
|
52
|
+
try {
|
|
53
|
+
return fs.statSync(f).isFile();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
if (files.length === 0) {
|
|
60
|
+
throw new Error(`No files found matching pattern: ${input}`);
|
|
61
|
+
}
|
|
62
|
+
logger.section('Compiling Workflows');
|
|
63
|
+
logger.info(`Found ${files.length} file(s)`);
|
|
64
|
+
logger.info(`Module format: ${moduleFormat.toUpperCase()}`);
|
|
65
|
+
if (sourceMap) {
|
|
66
|
+
logger.info('Source maps: enabled');
|
|
67
|
+
}
|
|
68
|
+
if (verbose) {
|
|
69
|
+
files.forEach((file) => logger.info(` - ${file}`));
|
|
70
|
+
}
|
|
71
|
+
logger.newline();
|
|
72
|
+
let successCount = 0;
|
|
73
|
+
let errorCount = 0;
|
|
74
|
+
for (let i = 0; i < files.length; i++) {
|
|
75
|
+
const file = files[i];
|
|
76
|
+
const fileName = path.basename(file);
|
|
77
|
+
logger.progress(i + 1, files.length, fileName);
|
|
78
|
+
try {
|
|
79
|
+
// Skip files without @flowWeaver annotations before parsing
|
|
80
|
+
const rawSource = fs.readFileSync(file, 'utf8');
|
|
81
|
+
if (!rawSource.includes('@flowWeaver')) {
|
|
82
|
+
if (verbose) {
|
|
83
|
+
logger.info(` Skipped ${fileName} (no @flowWeaver annotations)`);
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Parse the workflow
|
|
88
|
+
const parseResult = await parseWorkflow(file, { workflowName });
|
|
89
|
+
if (parseResult.warnings.length > 0) {
|
|
90
|
+
parseResult.warnings.forEach((w) => logger.warn(` ${w}`));
|
|
91
|
+
}
|
|
92
|
+
if (parseResult.errors.length > 0) {
|
|
93
|
+
// Skip non-workflow files silently (only error is "No workflows found")
|
|
94
|
+
const isNonWorkflowFile = parseResult.errors.length === 1 &&
|
|
95
|
+
typeof parseResult.errors[0] === 'string' &&
|
|
96
|
+
parseResult.errors[0].startsWith('No workflows found');
|
|
97
|
+
if (isNonWorkflowFile) {
|
|
98
|
+
if (verbose) {
|
|
99
|
+
logger.info(` Skipped ${fileName} (no workflow)`);
|
|
100
|
+
}
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
logger.error(`Failed to parse ${fileName}:`);
|
|
104
|
+
parseResult.errors.forEach((err) => logger.error(` ${err}`));
|
|
105
|
+
errorCount++;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// Validate the AST (especially for --strict mode)
|
|
109
|
+
if (strict) {
|
|
110
|
+
const validation = validator.validate(parseResult.ast, { strictMode: true });
|
|
111
|
+
if (validation.errors.length > 0) {
|
|
112
|
+
logger.error(`Validation errors in ${fileName}:`);
|
|
113
|
+
validation.errors.forEach((err) => {
|
|
114
|
+
const friendly = getFriendlyError(err);
|
|
115
|
+
if (friendly) {
|
|
116
|
+
const loc = err.location ? `[line ${err.location.line}] ` : '';
|
|
117
|
+
logger.error(` ${loc}${friendly.title}: ${friendly.explanation}`);
|
|
118
|
+
logger.info(` How to fix: ${friendly.fix}`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
let msg = ` - ${err.message}`;
|
|
122
|
+
if (err.node) {
|
|
123
|
+
msg += ` (node: ${err.node})`;
|
|
124
|
+
}
|
|
125
|
+
logger.error(msg);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
errorCount++;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (validation.warnings.length > 0 && verbose) {
|
|
132
|
+
validation.warnings.forEach((warn) => {
|
|
133
|
+
const friendly = getFriendlyError(warn);
|
|
134
|
+
if (friendly) {
|
|
135
|
+
const loc = warn.location ? `[line ${warn.location.line}] ` : '';
|
|
136
|
+
logger.warn(` ${loc}${friendly.title}: ${friendly.explanation}`);
|
|
137
|
+
logger.info(` How to fix: ${friendly.fix}`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
logger.warn(` ${warn.message}`);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Read original source
|
|
146
|
+
const sourceCode = fs.readFileSync(file, 'utf8');
|
|
147
|
+
// Generate code in-place (preserves types, interfaces, etc.)
|
|
148
|
+
const result = generateInPlace(sourceCode, parseResult.ast, { production, moduleFormat, inlineRuntime, sourceFile: file, skipParamReturns: clean });
|
|
149
|
+
// Write back to original file (skip in dry-run mode)
|
|
150
|
+
if (!dryRun) {
|
|
151
|
+
fs.writeFileSync(file, result.code, 'utf8');
|
|
152
|
+
// Generate source map if requested
|
|
153
|
+
if (sourceMap) {
|
|
154
|
+
const mapResult = generateCode(parseResult.ast, {
|
|
155
|
+
production,
|
|
156
|
+
sourceMap: true,
|
|
157
|
+
moduleFormat,
|
|
158
|
+
});
|
|
159
|
+
if (mapResult.sourceMap) {
|
|
160
|
+
const mapPath = file + '.map';
|
|
161
|
+
fs.writeFileSync(mapPath, mapResult.sourceMap, 'utf8');
|
|
162
|
+
// Append sourceMappingURL comment to the compiled file
|
|
163
|
+
const sourceMappingComment = `\n//# sourceMappingURL=${path.basename(mapPath)}\n`;
|
|
164
|
+
if (!result.code.includes('//# sourceMappingURL=')) {
|
|
165
|
+
fs.appendFileSync(file, sourceMappingComment, 'utf8');
|
|
166
|
+
}
|
|
167
|
+
if (verbose) {
|
|
168
|
+
logger.info(` Source map: ${mapPath}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (dryRun) {
|
|
174
|
+
if (result.hasChanges) {
|
|
175
|
+
logger.success(` Would compile: ${file}`);
|
|
176
|
+
}
|
|
177
|
+
else if (verbose) {
|
|
178
|
+
logger.info(` No changes: ${file}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (result.hasChanges) {
|
|
182
|
+
logger.success(` Compiled: ${file}`);
|
|
183
|
+
}
|
|
184
|
+
else if (verbose) {
|
|
185
|
+
logger.info(` No changes: ${file}`);
|
|
186
|
+
}
|
|
187
|
+
successCount++;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
logger.error(`Failed to compile ${fileName}: ${getErrorMessage(error)}`);
|
|
191
|
+
errorCount++;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Summary
|
|
195
|
+
logger.newline();
|
|
196
|
+
logger.section('Summary');
|
|
197
|
+
logger.success(`${successCount} file(s) compiled successfully`);
|
|
198
|
+
if (errorCount > 0) {
|
|
199
|
+
throw new Error(`${errorCount} file(s) failed to compile`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (error instanceof Error && error.message.includes('file(s) failed')) {
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
throw new Error(`Compilation failed: ${getErrorMessage(error)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Compile a workflow file to Inngest function code with per-node step.run().
|
|
211
|
+
*/
|
|
212
|
+
export async function compileInngestTarget(input, options) {
|
|
213
|
+
const filePath = path.resolve(input);
|
|
214
|
+
if (!fs.existsSync(filePath)) {
|
|
215
|
+
throw new Error(`File not found: ${filePath}`);
|
|
216
|
+
}
|
|
217
|
+
logger.section('Compiling to Inngest');
|
|
218
|
+
logger.info(`Input: ${filePath}`);
|
|
219
|
+
logger.info(`Target: Inngest (per-node step.run)`);
|
|
220
|
+
logger.newline();
|
|
221
|
+
const parser = new AnnotationParser();
|
|
222
|
+
const parseResult = parser.parse(filePath);
|
|
223
|
+
if (parseResult.errors.length > 0) {
|
|
224
|
+
const msgs = parseResult.errors.map((e) => ` ${e}`).join('\n');
|
|
225
|
+
throw new Error(`Parse errors:\n${msgs}`);
|
|
226
|
+
}
|
|
227
|
+
if (parseResult.workflows.length === 0) {
|
|
228
|
+
throw new Error('No workflows found in file');
|
|
229
|
+
}
|
|
230
|
+
const workflow = options.workflowName
|
|
231
|
+
? parseResult.workflows.find((w) => w.name === options.workflowName || w.functionName === options.workflowName)
|
|
232
|
+
: parseResult.workflows[0];
|
|
233
|
+
if (!workflow) {
|
|
234
|
+
const available = parseResult.workflows.map((w) => w.name).join(', ');
|
|
235
|
+
throw new Error(`Workflow "${options.workflowName}" not found. Available: ${available}`);
|
|
236
|
+
}
|
|
237
|
+
const allNodeTypes = [...(workflow.nodeTypes || [])];
|
|
238
|
+
// CLI overrides for workflow options
|
|
239
|
+
if (options.cron) {
|
|
240
|
+
workflow.options = workflow.options || {};
|
|
241
|
+
workflow.options.trigger = { ...workflow.options.trigger, cron: options.cron };
|
|
242
|
+
}
|
|
243
|
+
if (options.retries !== undefined) {
|
|
244
|
+
workflow.options = workflow.options || {};
|
|
245
|
+
workflow.options.retries = options.retries;
|
|
246
|
+
}
|
|
247
|
+
if (options.timeout) {
|
|
248
|
+
workflow.options = workflow.options || {};
|
|
249
|
+
workflow.options.timeout = options.timeout;
|
|
250
|
+
}
|
|
251
|
+
const code = generateInngestFunction(workflow, allNodeTypes, {
|
|
252
|
+
production: options.production,
|
|
253
|
+
typedEvents: options.typedEvents,
|
|
254
|
+
serveHandler: options.serve,
|
|
255
|
+
framework: options.framework,
|
|
256
|
+
});
|
|
257
|
+
const outputPath = filePath.replace(/\.ts$/, '.inngest.ts');
|
|
258
|
+
if (options.dryRun) {
|
|
259
|
+
logger.success(`Would generate: ${outputPath}`);
|
|
260
|
+
logger.newline();
|
|
261
|
+
logger.section('Preview');
|
|
262
|
+
const lines = code.split('\n');
|
|
263
|
+
const preview = lines.slice(0, 50).join('\n');
|
|
264
|
+
logger.log(preview);
|
|
265
|
+
if (lines.length > 50) {
|
|
266
|
+
logger.info(`... (${lines.length - 50} more lines)`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
fs.writeFileSync(outputPath, code, 'utf8');
|
|
271
|
+
logger.success(`Compiled: ${outputPath}`);
|
|
272
|
+
}
|
|
273
|
+
logger.newline();
|
|
274
|
+
logger.section('Summary');
|
|
275
|
+
logger.success(`Workflow "${workflow.name}" compiled to Inngest function`);
|
|
276
|
+
logger.info('Each node is wrapped in step.run() for per-node durability');
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create command - scaffolds workflows and nodes from templates
|
|
3
|
+
*/
|
|
4
|
+
export interface CreateWorkflowOptions {
|
|
5
|
+
line?: number;
|
|
6
|
+
async?: boolean;
|
|
7
|
+
preview?: boolean;
|
|
8
|
+
provider?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
config?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
nodes?: string;
|
|
13
|
+
input?: string;
|
|
14
|
+
output?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateNodeOptions {
|
|
17
|
+
line?: number;
|
|
18
|
+
preview?: boolean;
|
|
19
|
+
config?: string;
|
|
20
|
+
strategy?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a workflow from a template
|
|
24
|
+
*/
|
|
25
|
+
export declare function createWorkflowCommand(template: string, file: string, options?: CreateWorkflowOptions): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Create a node type from a template
|
|
28
|
+
* Uses processor template by default
|
|
29
|
+
*/
|
|
30
|
+
export declare function createNodeCommand(name: string, file: string, options?: CreateNodeOptions & {
|
|
31
|
+
template?: string;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* Create command - scaffolds workflows and nodes from templates
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { getWorkflowTemplate, getNodeTemplate, toCamelCase } from '../templates/index.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { getErrorMessage } from '../../utils/error-utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Insert content at a specific line or append to end of file
|
|
12
|
+
*/
|
|
13
|
+
function insertIntoFile(filePath, content, line) {
|
|
14
|
+
// Create file if it doesn't exist
|
|
15
|
+
if (!fs.existsSync(filePath)) {
|
|
16
|
+
const dir = path.dirname(filePath);
|
|
17
|
+
if (!fs.existsSync(dir)) {
|
|
18
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
fs.writeFileSync(filePath, content + '\n');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingContent = fs.readFileSync(filePath, 'utf8');
|
|
24
|
+
const lines = existingContent.split('\n');
|
|
25
|
+
if (line !== undefined && line > 0) {
|
|
26
|
+
// Insert AFTER specific line (1-indexed)
|
|
27
|
+
// Line 3 means insert after line 3, so at index 3
|
|
28
|
+
const insertIndex = Math.min(line, lines.length);
|
|
29
|
+
lines.splice(insertIndex, 0, content);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Append to end
|
|
33
|
+
lines.push('', content);
|
|
34
|
+
}
|
|
35
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a workflow from a template
|
|
39
|
+
*/
|
|
40
|
+
export async function createWorkflowCommand(template, file, options = {}) {
|
|
41
|
+
const { line, async: isAsync = false, preview = false, provider, model, config: configJson, } = options;
|
|
42
|
+
const templateDef = getWorkflowTemplate(template);
|
|
43
|
+
if (!templateDef) {
|
|
44
|
+
logger.error(`Unknown workflow template: ${template}`);
|
|
45
|
+
logger.info("Run 'flow-weaver templates' to see available templates");
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// Resolve to absolute path
|
|
49
|
+
const filePath = path.resolve(file);
|
|
50
|
+
// Derive workflow name from filename (or use --name override)
|
|
51
|
+
const baseName = path.basename(filePath, path.extname(filePath));
|
|
52
|
+
const workflowName = options.name || toCamelCase(baseName);
|
|
53
|
+
// Build config object from options
|
|
54
|
+
const config = {};
|
|
55
|
+
if (provider)
|
|
56
|
+
config.provider = provider;
|
|
57
|
+
if (model)
|
|
58
|
+
config.model = model;
|
|
59
|
+
if (options.nodes)
|
|
60
|
+
config.nodes = options.nodes.split(',').map((n) => n.trim());
|
|
61
|
+
if (options.input)
|
|
62
|
+
config.input = options.input;
|
|
63
|
+
if (options.output)
|
|
64
|
+
config.output = options.output;
|
|
65
|
+
if (configJson) {
|
|
66
|
+
try {
|
|
67
|
+
Object.assign(config, JSON.parse(configJson));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
logger.error('Invalid --config JSON');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Generate the template code
|
|
75
|
+
const code = templateDef.generate({
|
|
76
|
+
workflowName,
|
|
77
|
+
async: isAsync,
|
|
78
|
+
config: Object.keys(config).length > 0 ? config : undefined,
|
|
79
|
+
});
|
|
80
|
+
// Preview mode: just output the code
|
|
81
|
+
if (preview) {
|
|
82
|
+
console.log(code);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
insertIntoFile(filePath, code, line);
|
|
87
|
+
logger.success(`Created ${templateDef.name} workflow in ${file}`);
|
|
88
|
+
if (line) {
|
|
89
|
+
logger.info(` Inserted at line ${line}`);
|
|
90
|
+
}
|
|
91
|
+
logger.info(` Workflow function: ${workflowName}`);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.error(`Failed to create workflow: ${getErrorMessage(error)}`);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a node type from a template
|
|
100
|
+
* Uses processor template by default
|
|
101
|
+
*/
|
|
102
|
+
export async function createNodeCommand(name, file, options = {}) {
|
|
103
|
+
const { line, template = 'processor', preview = false, strategy, config: configJson } = options;
|
|
104
|
+
const templateDef = getNodeTemplate(template);
|
|
105
|
+
if (!templateDef) {
|
|
106
|
+
logger.error(`Unknown node template: ${template}`);
|
|
107
|
+
logger.info("Run 'flow-weaver templates' to see available templates");
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Resolve to absolute path
|
|
111
|
+
const filePath = path.resolve(file);
|
|
112
|
+
// Build config object from options
|
|
113
|
+
const config = {};
|
|
114
|
+
if (strategy)
|
|
115
|
+
config.strategy = strategy;
|
|
116
|
+
if (configJson) {
|
|
117
|
+
try {
|
|
118
|
+
Object.assign(config, JSON.parse(configJson));
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
logger.error('Invalid --config JSON');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Generate the template code with provided name and optional config
|
|
126
|
+
const nodeName = toCamelCase(name);
|
|
127
|
+
const nodeConfig = Object.keys(config).length > 0 ? config : undefined;
|
|
128
|
+
const code = templateDef.generate(nodeName, nodeConfig);
|
|
129
|
+
// Preview mode: just output the code
|
|
130
|
+
if (preview) {
|
|
131
|
+
console.log(code);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
insertIntoFile(filePath, code, line);
|
|
136
|
+
logger.success(`Created ${templateDef.name} node in ${file}`);
|
|
137
|
+
if (line) {
|
|
138
|
+
logger.info(` Inserted at line ${line}`);
|
|
139
|
+
}
|
|
140
|
+
logger.info(` Node function: ${nodeName}`);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
logger.error(`Failed to create node: ${getErrorMessage(error)}`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describe command - outputs workflow structure in LLM-friendly formats
|
|
3
|
+
*/
|
|
4
|
+
import type { TWorkflowAST, TNodeInstanceAST, TNodeTypeAST } from '../../ast/types.js';
|
|
5
|
+
export interface DescribeOptions {
|
|
6
|
+
format?: 'json' | 'text' | 'mermaid' | 'paths';
|
|
7
|
+
node?: string;
|
|
8
|
+
workflowName?: string;
|
|
9
|
+
compile?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface NodeInfo {
|
|
12
|
+
id: string;
|
|
13
|
+
type: string;
|
|
14
|
+
inputs: string[];
|
|
15
|
+
outputs: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface ConnectionInfo {
|
|
18
|
+
from: string;
|
|
19
|
+
to: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DescribeOutput {
|
|
22
|
+
name: string;
|
|
23
|
+
description: string | null;
|
|
24
|
+
nodes: NodeInfo[];
|
|
25
|
+
connections: ConnectionInfo[];
|
|
26
|
+
graph: string;
|
|
27
|
+
validation: {
|
|
28
|
+
valid: boolean;
|
|
29
|
+
errors: string[];
|
|
30
|
+
warnings: string[];
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface FocusedNodeOutput {
|
|
34
|
+
focusNode: string;
|
|
35
|
+
node: NodeInfo;
|
|
36
|
+
incoming: ConnectionInfo[];
|
|
37
|
+
outgoing: ConnectionInfo[];
|
|
38
|
+
validation: {
|
|
39
|
+
valid: boolean;
|
|
40
|
+
errors: string[];
|
|
41
|
+
warnings: string[];
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export declare function buildNodeInfo(instance: TNodeInstanceAST, nodeType: TNodeTypeAST | undefined): NodeInfo;
|
|
45
|
+
/**
|
|
46
|
+
* Enumerate all Start-to-Exit paths via DFS.
|
|
47
|
+
* Returns an array of path arrays (each path is string[] including Start and Exit).
|
|
48
|
+
*/
|
|
49
|
+
export declare function enumeratePaths(ast: TWorkflowAST): string[][];
|
|
50
|
+
export declare function buildGraph(ast: TWorkflowAST): string;
|
|
51
|
+
export declare function formatPaths(ast: TWorkflowAST): string;
|
|
52
|
+
export declare function generateMermaid(ast: TWorkflowAST): string;
|
|
53
|
+
/**
|
|
54
|
+
* Pure function to describe a workflow - no I/O, returns data
|
|
55
|
+
*/
|
|
56
|
+
export declare function describeWorkflow(ast: TWorkflowAST, options?: {
|
|
57
|
+
node?: string;
|
|
58
|
+
}): DescribeOutput | FocusedNodeOutput;
|
|
59
|
+
/**
|
|
60
|
+
* Generate structured human-readable text output
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatTextOutput(ast: TWorkflowAST, output: DescribeOutput | FocusedNodeOutput): string;
|
|
63
|
+
/**
|
|
64
|
+
* Format the describe output based on format option
|
|
65
|
+
*/
|
|
66
|
+
export declare function formatDescribeOutput(ast: TWorkflowAST, output: DescribeOutput | FocusedNodeOutput, format: 'json' | 'text' | 'mermaid' | 'paths'): string;
|
|
67
|
+
export declare function describeCommand(input: string, options?: DescribeOptions): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=describe.d.ts.map
|