@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,436 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* Marketplace commands — init, pack, publish, install, search, list
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { generateManifest, writeManifest, readManifest, validatePackage, searchPackages, listInstalledPackages, } from '../../marketplace/index.js';
|
|
10
|
+
import { getErrorMessage } from '../../utils/error-utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Scaffold a new marketplace package project.
|
|
13
|
+
*/
|
|
14
|
+
export async function marketInitCommand(name, options = {}) {
|
|
15
|
+
// Validate name
|
|
16
|
+
if (!name.startsWith('flowweaver-pack-')) {
|
|
17
|
+
const suggested = `flowweaver-pack-${name}`;
|
|
18
|
+
logger.warn(`Name should follow "flowweaver-pack-*" convention, using "${suggested}"`);
|
|
19
|
+
name = suggested;
|
|
20
|
+
}
|
|
21
|
+
const targetDir = path.resolve(name);
|
|
22
|
+
if (fs.existsSync(targetDir)) {
|
|
23
|
+
const stat = fs.statSync(targetDir);
|
|
24
|
+
if (stat.isDirectory()) {
|
|
25
|
+
const contents = fs.readdirSync(targetDir);
|
|
26
|
+
if (contents.length > 0) {
|
|
27
|
+
logger.error(`Directory "${name}" already exists and is not empty`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
logger.error(`"${name}" already exists and is not a directory`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
logger.section('Creating Marketplace Package');
|
|
37
|
+
logger.info(`Package: ${name}`);
|
|
38
|
+
logger.newline();
|
|
39
|
+
// Create directory structure
|
|
40
|
+
const dirs = [
|
|
41
|
+
targetDir,
|
|
42
|
+
path.join(targetDir, 'src'),
|
|
43
|
+
path.join(targetDir, 'src', 'node-types'),
|
|
44
|
+
path.join(targetDir, 'src', 'workflows'),
|
|
45
|
+
path.join(targetDir, 'src', 'patterns'),
|
|
46
|
+
];
|
|
47
|
+
for (const dir of dirs) {
|
|
48
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
// package.json
|
|
51
|
+
const shortName = name.replace(/^flowweaver-pack-/, '');
|
|
52
|
+
const pkg = {
|
|
53
|
+
name,
|
|
54
|
+
version: '1.0.0',
|
|
55
|
+
description: options.description ?? `Flow Weaver marketplace pack: ${shortName}`,
|
|
56
|
+
type: 'module',
|
|
57
|
+
main: './dist/index.js',
|
|
58
|
+
types: './dist/index.d.ts',
|
|
59
|
+
keywords: ['flowweaver-marketplace-pack', 'flow-weaver', shortName],
|
|
60
|
+
flowWeaver: {
|
|
61
|
+
type: 'marketplace-pack',
|
|
62
|
+
engineVersion: '>=0.1.0',
|
|
63
|
+
},
|
|
64
|
+
scripts: {
|
|
65
|
+
build: 'tsc',
|
|
66
|
+
pack: 'flow-weaver market pack',
|
|
67
|
+
prepublishOnly: 'npm run build && npm run pack',
|
|
68
|
+
},
|
|
69
|
+
...(options.author && { author: options.author }),
|
|
70
|
+
license: 'MIT',
|
|
71
|
+
peerDependencies: {
|
|
72
|
+
'@synergenius/flow-weaver': '>=0.1.0',
|
|
73
|
+
},
|
|
74
|
+
devDependencies: {
|
|
75
|
+
'@synergenius/flow-weaver': '^0.1.0',
|
|
76
|
+
typescript: '^5.3.0',
|
|
77
|
+
},
|
|
78
|
+
files: ['dist', 'flowweaver.manifest.json', 'README.md', 'LICENSE'],
|
|
79
|
+
};
|
|
80
|
+
fs.writeFileSync(path.join(targetDir, 'package.json'), JSON.stringify(pkg, null, 2) + '\n');
|
|
81
|
+
// tsconfig.json
|
|
82
|
+
const tsconfig = {
|
|
83
|
+
compilerOptions: {
|
|
84
|
+
target: 'ES2022',
|
|
85
|
+
module: 'NodeNext',
|
|
86
|
+
moduleResolution: 'NodeNext',
|
|
87
|
+
declaration: true,
|
|
88
|
+
outDir: './dist',
|
|
89
|
+
rootDir: './src',
|
|
90
|
+
strict: true,
|
|
91
|
+
esModuleInterop: true,
|
|
92
|
+
skipLibCheck: true,
|
|
93
|
+
},
|
|
94
|
+
include: ['src'],
|
|
95
|
+
exclude: ['node_modules', 'dist'],
|
|
96
|
+
};
|
|
97
|
+
fs.writeFileSync(path.join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\n');
|
|
98
|
+
// Sample node type
|
|
99
|
+
const sampleNodeType = `/**
|
|
100
|
+
* @flowWeaver nodeType
|
|
101
|
+
* @name Sample
|
|
102
|
+
* @description A sample node type for your marketplace pack
|
|
103
|
+
* @input data - Input data
|
|
104
|
+
* @output result - Processed result
|
|
105
|
+
* @visual color blue
|
|
106
|
+
* @visual icon box
|
|
107
|
+
* @visual tag ${shortName}
|
|
108
|
+
*/
|
|
109
|
+
export function sample(execute: () => void, data: string): { result: string } {
|
|
110
|
+
execute();
|
|
111
|
+
return { result: data.toUpperCase() };
|
|
112
|
+
}
|
|
113
|
+
`;
|
|
114
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'node-types', 'sample.ts'), sampleNodeType);
|
|
115
|
+
// Barrel exports
|
|
116
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'node-types', 'index.ts'), "export { sample } from './sample.js';\n");
|
|
117
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'workflows', 'index.ts'), '// Export workflows here\n');
|
|
118
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'patterns', 'index.ts'), '// Export patterns here\n');
|
|
119
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'index.ts'), [
|
|
120
|
+
"export * from './node-types/index.js';",
|
|
121
|
+
"export * from './workflows/index.js';",
|
|
122
|
+
"export * from './patterns/index.js';",
|
|
123
|
+
'',
|
|
124
|
+
].join('\n'));
|
|
125
|
+
// README.md
|
|
126
|
+
const readme = `# ${name}
|
|
127
|
+
|
|
128
|
+
A [Flow Weaver](https://github.com/synergenius-fw/flow-weaver) marketplace pack.
|
|
129
|
+
|
|
130
|
+
## Installation
|
|
131
|
+
|
|
132
|
+
\`\`\`bash
|
|
133
|
+
flow-weaver market install ${name}
|
|
134
|
+
\`\`\`
|
|
135
|
+
|
|
136
|
+
## Contents
|
|
137
|
+
|
|
138
|
+
### Node Types
|
|
139
|
+
|
|
140
|
+
- **Sample** — A sample node type
|
|
141
|
+
|
|
142
|
+
## Development
|
|
143
|
+
|
|
144
|
+
\`\`\`bash
|
|
145
|
+
npm install
|
|
146
|
+
npm run build
|
|
147
|
+
npm run pack # Generate flowweaver.manifest.json
|
|
148
|
+
npm publish # Publish to npm
|
|
149
|
+
\`\`\`
|
|
150
|
+
`;
|
|
151
|
+
fs.writeFileSync(path.join(targetDir, 'README.md'), readme);
|
|
152
|
+
// .gitignore
|
|
153
|
+
fs.writeFileSync(path.join(targetDir, '.gitignore'), ['node_modules', 'dist', '*.tgz', ''].join('\n'));
|
|
154
|
+
logger.success('Created package.json');
|
|
155
|
+
logger.success('Created tsconfig.json');
|
|
156
|
+
logger.success('Created src/node-types/sample.ts');
|
|
157
|
+
logger.success('Created src/index.ts');
|
|
158
|
+
logger.success('Created README.md');
|
|
159
|
+
logger.success('.gitignore');
|
|
160
|
+
logger.newline();
|
|
161
|
+
logger.section('Next Steps');
|
|
162
|
+
logger.log(` cd ${name}`);
|
|
163
|
+
logger.log(' npm install');
|
|
164
|
+
logger.log(' # Add your node types, workflows, and patterns to src/');
|
|
165
|
+
logger.log(' npm run build');
|
|
166
|
+
logger.log(' flow-weaver market pack');
|
|
167
|
+
logger.log(' npm publish');
|
|
168
|
+
logger.newline();
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Parse source files, validate, and generate flowweaver.manifest.json.
|
|
172
|
+
*/
|
|
173
|
+
export async function marketPackCommand(directory, options = {}) {
|
|
174
|
+
const dir = path.resolve(directory ?? '.');
|
|
175
|
+
const { json = false, verbose = false } = options;
|
|
176
|
+
if (!json) {
|
|
177
|
+
logger.section('Packing Marketplace Package');
|
|
178
|
+
}
|
|
179
|
+
// 1. Generate manifest from source files
|
|
180
|
+
const { manifest, parsedFiles, errors: parseErrors } = await generateManifest({ directory: dir });
|
|
181
|
+
if (parseErrors.length > 0 && verbose) {
|
|
182
|
+
for (const err of parseErrors) {
|
|
183
|
+
logger.warn(err);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// 2. Validate
|
|
187
|
+
const validation = await validatePackage(dir, manifest);
|
|
188
|
+
if (json) {
|
|
189
|
+
console.log(JSON.stringify({
|
|
190
|
+
manifest,
|
|
191
|
+
validation,
|
|
192
|
+
parsedFiles: parsedFiles.length,
|
|
193
|
+
}, null, 2));
|
|
194
|
+
if (!validation.valid)
|
|
195
|
+
process.exit(1);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// Display results
|
|
199
|
+
logger.info(`Parsed ${parsedFiles.length} file(s)`);
|
|
200
|
+
logger.info(`Found ${manifest.nodeTypes.length} node type(s), ${manifest.workflows.length} workflow(s), ${manifest.patterns.length} pattern(s)`);
|
|
201
|
+
logger.newline();
|
|
202
|
+
// Show validation issues
|
|
203
|
+
const errors = validation.issues.filter((i) => i.severity === 'error');
|
|
204
|
+
const warnings = validation.issues.filter((i) => i.severity === 'warning');
|
|
205
|
+
for (const err of errors) {
|
|
206
|
+
logger.error(`[${err.code}] ${err.message}`);
|
|
207
|
+
}
|
|
208
|
+
for (const warn of warnings) {
|
|
209
|
+
logger.warn(`[${warn.code}] ${warn.message}`);
|
|
210
|
+
}
|
|
211
|
+
if (!validation.valid) {
|
|
212
|
+
logger.newline();
|
|
213
|
+
logger.error('Package validation failed. Fix errors above before publishing.');
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
// 3. Write manifest
|
|
217
|
+
const outPath = writeManifest(dir, manifest);
|
|
218
|
+
logger.newline();
|
|
219
|
+
logger.success(`Manifest written to ${path.relative(dir, outPath)}`);
|
|
220
|
+
if (warnings.length > 0) {
|
|
221
|
+
logger.warn(`${warnings.length} warning(s) — consider fixing before publishing`);
|
|
222
|
+
}
|
|
223
|
+
logger.newline();
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Pack + pre-publish checks + npm publish.
|
|
227
|
+
*/
|
|
228
|
+
export async function marketPublishCommand(directory, options = {}) {
|
|
229
|
+
const dir = path.resolve(directory ?? '.');
|
|
230
|
+
const { dryRun = false, tag } = options;
|
|
231
|
+
logger.section('Publishing Marketplace Package');
|
|
232
|
+
// 1. Run pack first
|
|
233
|
+
await marketPackCommand(dir, { json: false });
|
|
234
|
+
// 2. Pre-publish checks
|
|
235
|
+
if (!fs.existsSync(path.join(dir, 'LICENSE'))) {
|
|
236
|
+
logger.warn('LICENSE file not found — consider adding one');
|
|
237
|
+
}
|
|
238
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
|
|
239
|
+
logger.info(`Publishing ${pkg.name}@${pkg.version}`);
|
|
240
|
+
// 3. npm publish
|
|
241
|
+
const npmArgs = ['publish'];
|
|
242
|
+
if (dryRun)
|
|
243
|
+
npmArgs.push('--dry-run');
|
|
244
|
+
if (tag)
|
|
245
|
+
npmArgs.push('--tag', tag);
|
|
246
|
+
try {
|
|
247
|
+
logger.newline();
|
|
248
|
+
execSync(`npm ${npmArgs.join(' ')}`, { cwd: dir, stdio: 'inherit' });
|
|
249
|
+
if (!dryRun) {
|
|
250
|
+
logger.newline();
|
|
251
|
+
logger.success(`Published ${pkg.name}@${pkg.version} to npm`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
logger.error(`npm publish failed: ${getErrorMessage(err)}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Install a marketplace package and display its contents.
|
|
261
|
+
*/
|
|
262
|
+
export async function marketInstallCommand(packageSpec, options = {}) {
|
|
263
|
+
const { json = false } = options;
|
|
264
|
+
if (!json) {
|
|
265
|
+
logger.section('Installing Marketplace Package');
|
|
266
|
+
logger.info(`Installing ${packageSpec}...`);
|
|
267
|
+
logger.newline();
|
|
268
|
+
}
|
|
269
|
+
// 1. npm install
|
|
270
|
+
try {
|
|
271
|
+
execSync(`npm install ${packageSpec}`, { stdio: json ? 'pipe' : 'inherit' });
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
if (json) {
|
|
275
|
+
console.log(JSON.stringify({ success: false, error: getErrorMessage(err) }));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
logger.error(`npm install failed: ${getErrorMessage(err)}`);
|
|
279
|
+
}
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
// 2. Read manifest from installed package
|
|
283
|
+
// Resolve the package name from the spec (could be a tarball path or name@version)
|
|
284
|
+
const packageName = resolvePackageName(packageSpec);
|
|
285
|
+
const manifest = readManifest(path.join(process.cwd(), 'node_modules', packageName));
|
|
286
|
+
if (json) {
|
|
287
|
+
console.log(JSON.stringify({
|
|
288
|
+
success: true,
|
|
289
|
+
package: packageName,
|
|
290
|
+
manifest: manifest ?? 'no manifest found',
|
|
291
|
+
}, null, 2));
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
logger.newline();
|
|
295
|
+
logger.success(`Installed ${packageName}`);
|
|
296
|
+
logger.newline();
|
|
297
|
+
if (manifest) {
|
|
298
|
+
displayManifestSummary(manifest);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
logger.warn('No flowweaver.manifest.json found in package');
|
|
302
|
+
logger.info('The package may need to run "flow-weaver market pack" before publishing');
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Search npm for marketplace packages.
|
|
307
|
+
*/
|
|
308
|
+
export async function marketSearchCommand(query, options = {}) {
|
|
309
|
+
const { limit = 20, json = false, registry } = options;
|
|
310
|
+
if (!json) {
|
|
311
|
+
logger.section('Marketplace Search');
|
|
312
|
+
if (query)
|
|
313
|
+
logger.info(`Query: ${query}`);
|
|
314
|
+
if (registry)
|
|
315
|
+
logger.info(`Registry: ${registry}`);
|
|
316
|
+
logger.newline();
|
|
317
|
+
}
|
|
318
|
+
try {
|
|
319
|
+
const results = await searchPackages({ query, limit, registryUrl: registry });
|
|
320
|
+
if (json) {
|
|
321
|
+
console.log(JSON.stringify(results, null, 2));
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
if (results.length === 0) {
|
|
325
|
+
logger.info('No packages found');
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
for (const pkg of results) {
|
|
329
|
+
const badge = pkg.official ? ' [official]' : '';
|
|
330
|
+
logger.log(` ${pkg.name}@${pkg.version}${badge}`);
|
|
331
|
+
if (pkg.description) {
|
|
332
|
+
logger.log(` ${pkg.description}`);
|
|
333
|
+
}
|
|
334
|
+
logger.newline();
|
|
335
|
+
}
|
|
336
|
+
logger.info(`${results.length} package(s) found`);
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
if (json) {
|
|
340
|
+
console.log(JSON.stringify({ error: getErrorMessage(err) }));
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
logger.error(`Search failed: ${getErrorMessage(err)}`);
|
|
344
|
+
}
|
|
345
|
+
process.exit(1);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* List installed marketplace packages.
|
|
350
|
+
*/
|
|
351
|
+
export async function marketListCommand(options = {}) {
|
|
352
|
+
const { json = false } = options;
|
|
353
|
+
if (!json) {
|
|
354
|
+
logger.section('Installed Marketplace Packages');
|
|
355
|
+
logger.newline();
|
|
356
|
+
}
|
|
357
|
+
const packages = await listInstalledPackages(process.cwd());
|
|
358
|
+
if (json) {
|
|
359
|
+
console.log(JSON.stringify(packages.map((p) => ({
|
|
360
|
+
name: p.name,
|
|
361
|
+
version: p.version,
|
|
362
|
+
nodeTypes: p.manifest.nodeTypes.length,
|
|
363
|
+
workflows: p.manifest.workflows.length,
|
|
364
|
+
patterns: p.manifest.patterns.length,
|
|
365
|
+
})), null, 2));
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (packages.length === 0) {
|
|
369
|
+
logger.info('No marketplace packages installed');
|
|
370
|
+
logger.info('Use "flow-weaver market search" to find packages');
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
for (const pkg of packages) {
|
|
374
|
+
displayInstalledPackage(pkg);
|
|
375
|
+
}
|
|
376
|
+
logger.info(`${packages.length} package(s) installed`);
|
|
377
|
+
}
|
|
378
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
379
|
+
function resolvePackageName(spec) {
|
|
380
|
+
// Handle tarball paths: ./foo-1.0.0.tgz → read name from the tarball
|
|
381
|
+
if (spec.endsWith('.tgz') || spec.endsWith('.tar.gz')) {
|
|
382
|
+
// For local tarballs, try to extract the package name
|
|
383
|
+
const base = path.basename(spec, spec.endsWith('.tar.gz') ? '.tar.gz' : '.tgz');
|
|
384
|
+
// flowweaver-pack-test-1.0.0 → flowweaver-pack-test
|
|
385
|
+
const match = base.match(/^(.+)-\d+\.\d+\.\d+/);
|
|
386
|
+
return match ? match[1] : base;
|
|
387
|
+
}
|
|
388
|
+
// Handle name@version
|
|
389
|
+
if (spec.startsWith('@')) {
|
|
390
|
+
// Scoped: @scope/name@version
|
|
391
|
+
const atIndex = spec.indexOf('@', 1);
|
|
392
|
+
return atIndex > 0 ? spec.slice(0, atIndex) : spec;
|
|
393
|
+
}
|
|
394
|
+
const atIndex = spec.indexOf('@');
|
|
395
|
+
return atIndex > 0 ? spec.slice(0, atIndex) : spec;
|
|
396
|
+
}
|
|
397
|
+
function displayManifestSummary(manifest) {
|
|
398
|
+
if (manifest.nodeTypes.length > 0) {
|
|
399
|
+
logger.log(' Node Types:');
|
|
400
|
+
for (const nt of manifest.nodeTypes) {
|
|
401
|
+
const desc = nt.description ? ` — ${nt.description}` : '';
|
|
402
|
+
logger.log(` - ${nt.name}${desc}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (manifest.workflows.length > 0) {
|
|
406
|
+
logger.log(' Workflows:');
|
|
407
|
+
for (const wf of manifest.workflows) {
|
|
408
|
+
const desc = wf.description ? ` — ${wf.description}` : '';
|
|
409
|
+
logger.log(` - ${wf.name}${desc}`);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (manifest.patterns.length > 0) {
|
|
413
|
+
logger.log(' Patterns:');
|
|
414
|
+
for (const pat of manifest.patterns) {
|
|
415
|
+
const desc = pat.description ? ` — ${pat.description}` : '';
|
|
416
|
+
logger.log(` - ${pat.name}${desc}`);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
logger.newline();
|
|
420
|
+
}
|
|
421
|
+
function displayInstalledPackage(pkg) {
|
|
422
|
+
const m = pkg.manifest;
|
|
423
|
+
logger.log(` ${pkg.name}@${pkg.version}`);
|
|
424
|
+
const counts = [];
|
|
425
|
+
if (m.nodeTypes.length > 0)
|
|
426
|
+
counts.push(`${m.nodeTypes.length} node type(s)`);
|
|
427
|
+
if (m.workflows.length > 0)
|
|
428
|
+
counts.push(`${m.workflows.length} workflow(s)`);
|
|
429
|
+
if (m.patterns.length > 0)
|
|
430
|
+
counts.push(`${m.patterns.length} pattern(s)`);
|
|
431
|
+
if (counts.length > 0) {
|
|
432
|
+
logger.log(` ${counts.join(', ')}`);
|
|
433
|
+
}
|
|
434
|
+
logger.newline();
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=market.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate command - upgrades workflow files to current syntax
|
|
3
|
+
*
|
|
4
|
+
* Uses the parse → generate round-trip as the primary migration mechanism:
|
|
5
|
+
* the parser adds defaults for missing fields, edge-case migrations transform
|
|
6
|
+
* the AST, and generateInPlace writes current syntax back.
|
|
7
|
+
*/
|
|
8
|
+
export interface MigrateOptions {
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
diff?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function migrateCommand(globPattern: string, options?: MigrateOptions): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate command - upgrades workflow files to current syntax
|
|
3
|
+
*
|
|
4
|
+
* Uses the parse → generate round-trip as the primary migration mechanism:
|
|
5
|
+
* the parser adds defaults for missing fields, edge-case migrations transform
|
|
6
|
+
* the AST, and generateInPlace writes current syntax back.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import { globSync } from 'glob';
|
|
11
|
+
import { parseWorkflow } from '../../api/index.js';
|
|
12
|
+
import { generateInPlace } from '../../api/generate-in-place.js';
|
|
13
|
+
import { WorkflowDiffer, formatDiff } from '../../diff/index.js';
|
|
14
|
+
import { applyMigrations, getRegisteredMigrations } from '../../migration/registry.js';
|
|
15
|
+
import { logger } from '../utils/logger.js';
|
|
16
|
+
import { getErrorMessage } from '../../utils/error-utils.js';
|
|
17
|
+
export async function migrateCommand(globPattern, options = {}) {
|
|
18
|
+
const { dryRun = false, diff = false } = options;
|
|
19
|
+
const files = globSync(globPattern, { ignore: ['**/node_modules/**', '**/*.generated.ts'] });
|
|
20
|
+
if (files.length === 0) {
|
|
21
|
+
logger.warn(`No files matched pattern: ${globPattern}`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const registeredMigrations = getRegisteredMigrations();
|
|
25
|
+
if (registeredMigrations.length > 0) {
|
|
26
|
+
logger.info(`Registered edge-case migrations: ${registeredMigrations.map((m) => m.name).join(', ')}`);
|
|
27
|
+
}
|
|
28
|
+
let migratedCount = 0;
|
|
29
|
+
let skippedCount = 0;
|
|
30
|
+
let errorCount = 0;
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
const filePath = path.resolve(file);
|
|
33
|
+
try {
|
|
34
|
+
const sourceCode = fs.readFileSync(filePath, 'utf8');
|
|
35
|
+
// Parse with current parser (backward-compatible — adds defaults for missing fields)
|
|
36
|
+
const parseResult = await parseWorkflow(filePath);
|
|
37
|
+
if (parseResult.errors.length > 0) {
|
|
38
|
+
logger.error(` ${file}: parse errors — skipping`);
|
|
39
|
+
parseResult.errors.forEach((err) => logger.error(` ${err}`));
|
|
40
|
+
errorCount++;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
// Apply edge-case migrations (if any registered)
|
|
44
|
+
let ast = parseResult.ast;
|
|
45
|
+
ast = applyMigrations(ast);
|
|
46
|
+
// Regenerate annotations in-place using current syntax
|
|
47
|
+
const genResult = generateInPlace(sourceCode, ast, {
|
|
48
|
+
allWorkflows: parseResult.allWorkflows,
|
|
49
|
+
});
|
|
50
|
+
if (!genResult.hasChanges) {
|
|
51
|
+
skippedCount++;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (diff) {
|
|
55
|
+
// Show semantic diff before/after
|
|
56
|
+
const reparsed = await parseWorkflow(filePath);
|
|
57
|
+
if (reparsed.errors.length === 0) {
|
|
58
|
+
const semanticDiff = WorkflowDiffer.compare(parseResult.ast, ast);
|
|
59
|
+
if (!semanticDiff.identical) {
|
|
60
|
+
logger.info(`\n${file}:`);
|
|
61
|
+
// eslint-disable-next-line no-console
|
|
62
|
+
console.log(formatDiff(semanticDiff, 'text'));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (dryRun) {
|
|
67
|
+
logger.info(` ${file}: would be updated`);
|
|
68
|
+
migratedCount++;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
fs.writeFileSync(filePath, genResult.code, 'utf8');
|
|
72
|
+
logger.success(` ${file}: migrated`);
|
|
73
|
+
migratedCount++;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
logger.error(` ${file}: ${getErrorMessage(error)}`);
|
|
77
|
+
errorCount++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Summary
|
|
81
|
+
logger.newline();
|
|
82
|
+
if (dryRun) {
|
|
83
|
+
logger.info(`Dry run complete: ${migratedCount} file(s) would be updated, ${skippedCount} already current, ${errorCount} error(s)`);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
logger.info(`Migration complete: ${migratedCount} file(s) updated, ${skippedCount} already current, ${errorCount} error(s)`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI command - generate OpenAPI specification from workflow files
|
|
3
|
+
*/
|
|
4
|
+
export interface OpenAPIOptions {
|
|
5
|
+
/** Output file path */
|
|
6
|
+
output?: string;
|
|
7
|
+
/** API title */
|
|
8
|
+
title?: string;
|
|
9
|
+
/** API version */
|
|
10
|
+
version?: string;
|
|
11
|
+
/** API description */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** Output format: json or yaml */
|
|
14
|
+
format?: 'json' | 'yaml';
|
|
15
|
+
/** Server URL */
|
|
16
|
+
server?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate OpenAPI specification from workflows in a directory.
|
|
20
|
+
*
|
|
21
|
+
* @param dir - Directory containing workflow files
|
|
22
|
+
* @param options - Generation options
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```bash
|
|
26
|
+
* # Generate JSON spec to stdout
|
|
27
|
+
* flow-weaver openapi ./workflows
|
|
28
|
+
*
|
|
29
|
+
* # Generate YAML spec to file
|
|
30
|
+
* flow-weaver openapi ./workflows --format yaml --output api-spec.yaml
|
|
31
|
+
*
|
|
32
|
+
* # With custom title and version
|
|
33
|
+
* flow-weaver openapi ./workflows --title "My API" --version "2.0.0"
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function openapiCommand(dir: string, options: OpenAPIOptions): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI command - generate OpenAPI specification from workflow files
|
|
3
|
+
*/
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import { WorkflowRegistry } from '../../server/workflow-registry.js';
|
|
7
|
+
import { generateOpenAPIJson, generateOpenAPIYaml } from '../../deployment/openapi/generator.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate OpenAPI specification from workflows in a directory.
|
|
11
|
+
*
|
|
12
|
+
* @param dir - Directory containing workflow files
|
|
13
|
+
* @param options - Generation options
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```bash
|
|
17
|
+
* # Generate JSON spec to stdout
|
|
18
|
+
* flow-weaver openapi ./workflows
|
|
19
|
+
*
|
|
20
|
+
* # Generate YAML spec to file
|
|
21
|
+
* flow-weaver openapi ./workflows --format yaml --output api-spec.yaml
|
|
22
|
+
*
|
|
23
|
+
* # With custom title and version
|
|
24
|
+
* flow-weaver openapi ./workflows --title "My API" --version "2.0.0"
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export async function openapiCommand(dir, options) {
|
|
28
|
+
const workflowDir = path.resolve(dir);
|
|
29
|
+
// Validate directory exists
|
|
30
|
+
if (!fs.existsSync(workflowDir)) {
|
|
31
|
+
throw new Error(`Directory not found: ${workflowDir}`);
|
|
32
|
+
}
|
|
33
|
+
if (!fs.statSync(workflowDir).isDirectory()) {
|
|
34
|
+
throw new Error(`Not a directory: ${workflowDir}`);
|
|
35
|
+
}
|
|
36
|
+
// Initialize registry to discover workflows
|
|
37
|
+
const registry = new WorkflowRegistry(workflowDir);
|
|
38
|
+
await registry.initialize();
|
|
39
|
+
const endpoints = registry.getAllEndpoints();
|
|
40
|
+
if (endpoints.length === 0) {
|
|
41
|
+
throw new Error(`No workflows found in ${workflowDir}`);
|
|
42
|
+
}
|
|
43
|
+
logger.info(`Found ${endpoints.length} workflow(s)`);
|
|
44
|
+
// Generate options
|
|
45
|
+
const generatorOptions = {
|
|
46
|
+
title: options.title || 'Flow Weaver API',
|
|
47
|
+
version: options.version || '1.0.0',
|
|
48
|
+
description: options.description || 'API generated from Flow Weaver workflows',
|
|
49
|
+
servers: options.server ? [{ url: options.server }] : undefined,
|
|
50
|
+
};
|
|
51
|
+
// Generate spec
|
|
52
|
+
const format = options.format || 'json';
|
|
53
|
+
const spec = format === 'yaml'
|
|
54
|
+
? generateOpenAPIYaml(endpoints, generatorOptions)
|
|
55
|
+
: generateOpenAPIJson(endpoints, generatorOptions);
|
|
56
|
+
// Output
|
|
57
|
+
if (options.output) {
|
|
58
|
+
const outputPath = path.resolve(options.output);
|
|
59
|
+
fs.writeFileSync(outputPath, spec);
|
|
60
|
+
logger.success(`OpenAPI specification written to ${outputPath}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Output to stdout
|
|
64
|
+
process.stdout.write(spec + '\n');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=openapi.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI pattern commands
|
|
3
|
+
* - list: Find patterns in files/directories
|
|
4
|
+
* - apply: Merge pattern into workflow
|
|
5
|
+
* - extract: Create pattern from workflow nodes
|
|
6
|
+
*/
|
|
7
|
+
interface ListOptions {
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface ApplyOptions {
|
|
11
|
+
preview?: boolean;
|
|
12
|
+
prefix?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
interface ExtractOptions {
|
|
16
|
+
nodes: string;
|
|
17
|
+
output: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
preview?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find patterns in a file or directory
|
|
23
|
+
*/
|
|
24
|
+
export declare function patternListCommand(inputPath: string, options: ListOptions): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Apply a pattern to a workflow file
|
|
27
|
+
*/
|
|
28
|
+
export declare function patternApplyCommand(patternFile: string, targetFile: string, options: ApplyOptions): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Extract a pattern from workflow nodes
|
|
31
|
+
*/
|
|
32
|
+
export declare function patternExtractCommand(sourceFile: string, options: ExtractOptions): Promise<void>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=pattern.d.ts.map
|