@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,114 @@
|
|
|
1
|
+
import { toPascalCase } from '../index.js';
|
|
2
|
+
export const agentRouterNodeTemplate = {
|
|
3
|
+
id: 'agent-router',
|
|
4
|
+
name: 'Agent Router',
|
|
5
|
+
description: 'Route to different handlers based on a classification result',
|
|
6
|
+
category: 'ai',
|
|
7
|
+
generate: (name) => {
|
|
8
|
+
const funcName = name || 'agentRouter';
|
|
9
|
+
const label = toPascalCase(funcName);
|
|
10
|
+
return `
|
|
11
|
+
// ============================================================
|
|
12
|
+
// ROUTE DEFINITIONS
|
|
13
|
+
// ============================================================
|
|
14
|
+
//
|
|
15
|
+
// Define your routes here. The router matches the 'category' input
|
|
16
|
+
// (from an upstream LLM call) against route names using case-insensitive
|
|
17
|
+
// comparison. The last route is used as a default/fallback.
|
|
18
|
+
//
|
|
19
|
+
// Example wiring in a workflow:
|
|
20
|
+
// llmCall.content → agentRouter.category
|
|
21
|
+
// agentRouter.selectedRoute → (use for downstream branching)
|
|
22
|
+
|
|
23
|
+
interface Route {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const DEFAULT_ROUTES: Route[] = [
|
|
29
|
+
{ name: 'billing', description: 'Billing inquiries, invoices, payments' },
|
|
30
|
+
{ name: 'technical', description: 'Technical support, bugs, troubleshooting' },
|
|
31
|
+
{ name: 'general', description: 'General questions (default fallback)' },
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Route to different handlers based on a classification result.
|
|
36
|
+
* Matches the category string against route names (case-insensitive).
|
|
37
|
+
* Falls back to the last route if no match is found.
|
|
38
|
+
*
|
|
39
|
+
* @flowWeaver nodeType
|
|
40
|
+
* @label ${label}
|
|
41
|
+
* @color blue
|
|
42
|
+
* @icon altRoute
|
|
43
|
+
* @input execute [order:0] - Execute
|
|
44
|
+
* @input category [order:1] - Classification result (from upstream LLM call)
|
|
45
|
+
* @input routes [order:2] - Available routes with name and description (optional)
|
|
46
|
+
* @output onSuccess [order:0] - On Success
|
|
47
|
+
* @output onFailure [order:1] - On Failure (no routes provided)
|
|
48
|
+
* @output selectedRoute [order:2] - Name of the matched route
|
|
49
|
+
* @output routeDescription [order:3] - Description of the matched route
|
|
50
|
+
* @output isDefault [order:4] - Whether the default/fallback route was used
|
|
51
|
+
*/
|
|
52
|
+
function ${funcName}(
|
|
53
|
+
execute: boolean,
|
|
54
|
+
category: string,
|
|
55
|
+
routes?: Route[]
|
|
56
|
+
): {
|
|
57
|
+
onSuccess: boolean;
|
|
58
|
+
onFailure: boolean;
|
|
59
|
+
selectedRoute: string;
|
|
60
|
+
routeDescription: string;
|
|
61
|
+
isDefault: boolean;
|
|
62
|
+
} {
|
|
63
|
+
if (!execute) {
|
|
64
|
+
return {
|
|
65
|
+
onSuccess: false,
|
|
66
|
+
onFailure: false,
|
|
67
|
+
selectedRoute: '',
|
|
68
|
+
routeDescription: '',
|
|
69
|
+
isDefault: false,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const activeRoutes = routes && routes.length > 0 ? routes : DEFAULT_ROUTES;
|
|
74
|
+
|
|
75
|
+
if (activeRoutes.length === 0) {
|
|
76
|
+
return {
|
|
77
|
+
onSuccess: false,
|
|
78
|
+
onFailure: true,
|
|
79
|
+
selectedRoute: '',
|
|
80
|
+
routeDescription: '',
|
|
81
|
+
isDefault: false,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Case-insensitive match against route names
|
|
86
|
+
const normalized = (category || '').trim().toLowerCase();
|
|
87
|
+
const matched = activeRoutes.find(
|
|
88
|
+
(r) => r.name.toLowerCase() === normalized
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
if (matched) {
|
|
92
|
+
return {
|
|
93
|
+
onSuccess: true,
|
|
94
|
+
onFailure: false,
|
|
95
|
+
selectedRoute: matched.name,
|
|
96
|
+
routeDescription: matched.description,
|
|
97
|
+
isDefault: false,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Fallback to last route as default
|
|
102
|
+
const fallback = activeRoutes[activeRoutes.length - 1];
|
|
103
|
+
return {
|
|
104
|
+
onSuccess: true,
|
|
105
|
+
onFailure: false,
|
|
106
|
+
selectedRoute: fallback.name,
|
|
107
|
+
routeDescription: fallback.description,
|
|
108
|
+
isDefault: true,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
`.trim();
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=agent-router.js.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregator Node Template
|
|
3
|
+
* Combine multiple inputs into a single output
|
|
4
|
+
*/
|
|
5
|
+
import { toPascalCase } from "../index.js";
|
|
6
|
+
export const aggregatorNodeTemplate = {
|
|
7
|
+
id: "aggregator",
|
|
8
|
+
name: "Aggregator",
|
|
9
|
+
description: "Combine multiple inputs into a single output",
|
|
10
|
+
category: "data",
|
|
11
|
+
generate: (name) => {
|
|
12
|
+
const pascalName = toPascalCase(name);
|
|
13
|
+
return `
|
|
14
|
+
/**
|
|
15
|
+
* Combines multiple inputs into a single output
|
|
16
|
+
*
|
|
17
|
+
* @flowWeaver nodeType
|
|
18
|
+
* @label ${pascalName}
|
|
19
|
+
* @color orange
|
|
20
|
+
* @icon callMerge
|
|
21
|
+
* @input inputA [order:1] - First input
|
|
22
|
+
* @input inputB [order:2] - Second input
|
|
23
|
+
* @input inputC [order:3] - Third input (optional)
|
|
24
|
+
* @input execute [order:0] - Execute
|
|
25
|
+
* @output combined [order:2] - Combined result
|
|
26
|
+
* @output count [order:3] - Number of non-null inputs combined
|
|
27
|
+
* @output onSuccess [order:0] - On Success
|
|
28
|
+
* @output onFailure [order:1] - On Failure
|
|
29
|
+
*/
|
|
30
|
+
function ${name}(
|
|
31
|
+
execute: boolean,
|
|
32
|
+
inputA: any,
|
|
33
|
+
inputB: any,
|
|
34
|
+
inputC: any
|
|
35
|
+
): { onSuccess: boolean; onFailure: boolean; combined: any; count: number } {
|
|
36
|
+
if (!execute) {
|
|
37
|
+
return { onSuccess: false, onFailure: false, combined: null, count: 0 };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// TODO: Customize aggregation logic based on your data types
|
|
41
|
+
const inputs = [inputA, inputB, inputC].filter(x => x !== null && x !== undefined);
|
|
42
|
+
const count = inputs.length;
|
|
43
|
+
|
|
44
|
+
// Default: merge arrays or objects, or collect into array
|
|
45
|
+
let combined: any;
|
|
46
|
+
|
|
47
|
+
if (inputs.every(Array.isArray)) {
|
|
48
|
+
// Merge arrays
|
|
49
|
+
combined = inputs.flat();
|
|
50
|
+
} else if (inputs.every(x => typeof x === "object" && x !== null && !Array.isArray(x))) {
|
|
51
|
+
// Merge objects
|
|
52
|
+
combined = Object.assign({}, ...inputs);
|
|
53
|
+
} else {
|
|
54
|
+
// Collect as array
|
|
55
|
+
combined = inputs;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { onSuccess: true, onFailure: false, combined, count };
|
|
59
|
+
}
|
|
60
|
+
`.trim();
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=aggregator.js.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export const conversationMemoryNodeTemplate = {
|
|
2
|
+
id: 'conversation-memory',
|
|
3
|
+
name: 'Conversation Memory',
|
|
4
|
+
description: 'Stores and retrieves conversation history',
|
|
5
|
+
category: 'ai',
|
|
6
|
+
generate: (name) => {
|
|
7
|
+
const funcName = name || 'conversationMemory';
|
|
8
|
+
return `
|
|
9
|
+
// LLM Types
|
|
10
|
+
interface LLMMessage { role: 'system' | 'user' | 'assistant' | 'tool'; content: string; toolCallId?: string; }
|
|
11
|
+
|
|
12
|
+
// In-memory store (replace with Redis, database, etc. for production)
|
|
13
|
+
const conversations: Map<string, LLMMessage[]> = new Map();
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Manages conversation history for stateful chat
|
|
17
|
+
*
|
|
18
|
+
* @flowWeaver nodeType
|
|
19
|
+
* @label ${funcName}
|
|
20
|
+
* @color blue
|
|
21
|
+
* @icon database
|
|
22
|
+
* @input conversationId [order:1] - Unique conversation identifier
|
|
23
|
+
* @input newMessage [order:2] - New message to add (optional)
|
|
24
|
+
* @input maxMessages [order:3] - Max messages to retain (optional, default 50)
|
|
25
|
+
* @input execute [order:0] - Execute
|
|
26
|
+
* @output messages [order:2] - Full conversation history
|
|
27
|
+
* @output messageCount [order:3] - Number of messages
|
|
28
|
+
* @output onSuccess [order:0] - On Success
|
|
29
|
+
* @output onFailure [order:1] - On Failure
|
|
30
|
+
*/
|
|
31
|
+
function ${funcName}(
|
|
32
|
+
execute: boolean,
|
|
33
|
+
conversationId: string,
|
|
34
|
+
newMessage?: LLMMessage,
|
|
35
|
+
maxMessages?: number
|
|
36
|
+
): {
|
|
37
|
+
onSuccess: boolean;
|
|
38
|
+
onFailure: boolean;
|
|
39
|
+
messages: LLMMessage[];
|
|
40
|
+
messageCount: number;
|
|
41
|
+
} {
|
|
42
|
+
if (!execute) {
|
|
43
|
+
return {
|
|
44
|
+
onSuccess: false,
|
|
45
|
+
onFailure: false,
|
|
46
|
+
messages: [],
|
|
47
|
+
messageCount: 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const limit = maxMessages ?? 50;
|
|
52
|
+
|
|
53
|
+
// Get or create conversation
|
|
54
|
+
if (!conversations.has(conversationId)) {
|
|
55
|
+
conversations.set(conversationId, []);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const history = conversations.get(conversationId)!;
|
|
59
|
+
|
|
60
|
+
// Add new message if provided
|
|
61
|
+
if (newMessage) {
|
|
62
|
+
history.push(newMessage);
|
|
63
|
+
|
|
64
|
+
// Trim to max length (keep system message if present)
|
|
65
|
+
while (history.length > limit) {
|
|
66
|
+
const firstNonSystem = history.findIndex(m => m.role !== 'system');
|
|
67
|
+
if (firstNonSystem > 0) {
|
|
68
|
+
history.splice(firstNonSystem, 1);
|
|
69
|
+
} else {
|
|
70
|
+
history.shift();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
onSuccess: true,
|
|
77
|
+
onFailure: false,
|
|
78
|
+
messages: [...history],
|
|
79
|
+
messageCount: history.length
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
`.trim();
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=conversation-memory.js.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Node Template
|
|
3
|
+
* HTTP request with configurable method, headers, body
|
|
4
|
+
*/
|
|
5
|
+
import { toPascalCase } from "../index.js";
|
|
6
|
+
export const httpNodeTemplate = {
|
|
7
|
+
id: "http",
|
|
8
|
+
name: "HTTP Request",
|
|
9
|
+
description: "Make HTTP requests to external APIs",
|
|
10
|
+
category: "integration",
|
|
11
|
+
generate: (name) => {
|
|
12
|
+
const pascalName = toPascalCase(name);
|
|
13
|
+
return `
|
|
14
|
+
/**
|
|
15
|
+
* Makes an HTTP request
|
|
16
|
+
*
|
|
17
|
+
* @flowWeaver nodeType
|
|
18
|
+
* @label ${pascalName}
|
|
19
|
+
* @color blue
|
|
20
|
+
* @icon api
|
|
21
|
+
* @input url [order:1] - Request URL
|
|
22
|
+
* @input method [order:2] - HTTP method (GET, POST, PUT, DELETE)
|
|
23
|
+
* @input headers [order:3] - Request headers
|
|
24
|
+
* @input body [order:4] - Request body
|
|
25
|
+
* @input execute [order:0] - Execute
|
|
26
|
+
* @output response [order:2] - Response data
|
|
27
|
+
* @output statusCode [order:3] - HTTP status code
|
|
28
|
+
* @output onSuccess [order:0] - On Success
|
|
29
|
+
* @output onFailure [order:1] - On Failure
|
|
30
|
+
*/
|
|
31
|
+
async function ${name}(
|
|
32
|
+
execute: boolean,
|
|
33
|
+
url: string,
|
|
34
|
+
method: "GET" | "POST" | "PUT" | "DELETE",
|
|
35
|
+
headers: Record<string, string>,
|
|
36
|
+
body: any
|
|
37
|
+
): Promise<{ onSuccess: boolean; onFailure: boolean; response: any; statusCode: number }> {
|
|
38
|
+
if (!execute) {
|
|
39
|
+
return { onSuccess: false, onFailure: false, response: null, statusCode: 0 };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const options: RequestInit = {
|
|
44
|
+
method,
|
|
45
|
+
headers: {
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
...headers
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
if (method !== "GET" && body) {
|
|
52
|
+
options.body = JSON.stringify(body);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const res = await fetch(url, options);
|
|
56
|
+
const statusCode = res.status;
|
|
57
|
+
|
|
58
|
+
let response;
|
|
59
|
+
const contentType = res.headers.get("content-type");
|
|
60
|
+
if (contentType?.includes("application/json")) {
|
|
61
|
+
response = await res.json();
|
|
62
|
+
} else {
|
|
63
|
+
response = await res.text();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!res.ok) {
|
|
67
|
+
console.error("[${pascalName}] HTTP error:", statusCode, response);
|
|
68
|
+
return { onSuccess: false, onFailure: true, response, statusCode };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return { onSuccess: true, onFailure: false, response, statusCode };
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.error("[${pascalName}] Request failed:", err);
|
|
74
|
+
return { onSuccess: false, onFailure: true, response: null, statusCode: 0 };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
`.trim();
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { toPascalCase } from '../index.js';
|
|
2
|
+
import { APPROVAL_TYPES } from '../shared/approval-types.js';
|
|
3
|
+
import { getApprovalCode } from '../approvals/index.js';
|
|
4
|
+
const configSchema = {
|
|
5
|
+
strategy: {
|
|
6
|
+
type: 'select',
|
|
7
|
+
label: 'Approval Strategy',
|
|
8
|
+
description: 'How approval requests are handled',
|
|
9
|
+
default: 'mock',
|
|
10
|
+
options: [
|
|
11
|
+
{ value: 'mock', label: 'Mock (Testing)' },
|
|
12
|
+
{ value: 'callback', label: 'Callback (Promise-based)' },
|
|
13
|
+
{ value: 'webhook', label: 'Webhook (HTTP handler)' },
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export const humanApprovalNodeTemplate = {
|
|
18
|
+
id: 'human-approval',
|
|
19
|
+
name: 'Human Approval',
|
|
20
|
+
description: 'Pause workflow and wait for human approval',
|
|
21
|
+
category: 'workflow',
|
|
22
|
+
configSchema,
|
|
23
|
+
generate: (name, config) => {
|
|
24
|
+
const funcName = name || 'humanApproval';
|
|
25
|
+
const label = toPascalCase(funcName);
|
|
26
|
+
const strategy = config?.strategy || 'mock';
|
|
27
|
+
const approvalCode = getApprovalCode(strategy);
|
|
28
|
+
return `
|
|
29
|
+
// ============================================================
|
|
30
|
+
// APPROVAL TYPES
|
|
31
|
+
// ============================================================
|
|
32
|
+
//
|
|
33
|
+
// On Inngest targets, consider using the built-in waitForEvent node instead —
|
|
34
|
+
// it maps to step.waitForEvent() for zero-cost durable pauses.
|
|
35
|
+
// See: https://www.inngest.com/docs/reference/functions/step-wait-for-event
|
|
36
|
+
|
|
37
|
+
${APPROVAL_TYPES}
|
|
38
|
+
|
|
39
|
+
// ============================================================
|
|
40
|
+
// APPROVAL PROVIDER
|
|
41
|
+
// ============================================================
|
|
42
|
+
|
|
43
|
+
${approvalCode}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Pause workflow and wait for human approval.
|
|
47
|
+
* Returns whether the request was approved, along with the reviewer's response.
|
|
48
|
+
*
|
|
49
|
+
* @flowWeaver nodeType
|
|
50
|
+
* @label ${label}
|
|
51
|
+
* @color orange
|
|
52
|
+
* @icon verified
|
|
53
|
+
* @input execute [order:0] - Execute
|
|
54
|
+
* @input prompt [order:1] - Approval prompt shown to reviewer
|
|
55
|
+
* @input context [order:2] - Additional context for the reviewer (optional)
|
|
56
|
+
* @input timeout [order:3] - Timeout duration e.g. "7d", "1h" (optional)
|
|
57
|
+
* @output onSuccess [order:0] - On Success
|
|
58
|
+
* @output onFailure [order:1] - On Failure (timeout or error)
|
|
59
|
+
* @output approved [order:2] - Whether the request was approved
|
|
60
|
+
* @output response [order:3] - Reviewer's response text
|
|
61
|
+
* @output reviewer [order:4] - Reviewer identifier
|
|
62
|
+
*/
|
|
63
|
+
async function ${funcName}(
|
|
64
|
+
execute: boolean,
|
|
65
|
+
prompt: string,
|
|
66
|
+
context?: Record<string, unknown>,
|
|
67
|
+
timeout?: string
|
|
68
|
+
): Promise<{
|
|
69
|
+
onSuccess: boolean;
|
|
70
|
+
onFailure: boolean;
|
|
71
|
+
approved: boolean;
|
|
72
|
+
response?: string;
|
|
73
|
+
reviewer?: string;
|
|
74
|
+
}> {
|
|
75
|
+
if (!execute) {
|
|
76
|
+
return {
|
|
77
|
+
onSuccess: false,
|
|
78
|
+
onFailure: false,
|
|
79
|
+
approved: false,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
const result = await approvalProvider.requestApproval({
|
|
85
|
+
id: crypto.randomUUID(),
|
|
86
|
+
prompt,
|
|
87
|
+
context,
|
|
88
|
+
timeout,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
onSuccess: true,
|
|
93
|
+
onFailure: false,
|
|
94
|
+
approved: result.approved,
|
|
95
|
+
response: result.response,
|
|
96
|
+
reviewer: result.reviewer,
|
|
97
|
+
};
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error('Approval request failed:', error);
|
|
100
|
+
return {
|
|
101
|
+
onSuccess: false,
|
|
102
|
+
onFailure: true,
|
|
103
|
+
approved: false,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
`.trim();
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=human-approval.js.map
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { toPascalCase } from '../index.js';
|
|
2
|
+
export const jsonExtractorNodeTemplate = {
|
|
3
|
+
id: 'json-extractor',
|
|
4
|
+
name: 'JSON Extractor',
|
|
5
|
+
description: 'Extract structured JSON from LLM text output',
|
|
6
|
+
category: 'ai',
|
|
7
|
+
generate: (name) => {
|
|
8
|
+
const funcName = name || 'jsonExtractor';
|
|
9
|
+
const label = toPascalCase(funcName);
|
|
10
|
+
return `
|
|
11
|
+
/**
|
|
12
|
+
* Extract structured JSON from LLM text output.
|
|
13
|
+
* Handles markdown code fences, leading/trailing text, and optional schema validation.
|
|
14
|
+
*
|
|
15
|
+
* Strips \\\`\\\`\\\`json ... \\\`\\\`\\\` fences, finds the first valid JSON object or array,
|
|
16
|
+
* and optionally validates that expected field names are present.
|
|
17
|
+
*
|
|
18
|
+
* @flowWeaver nodeType
|
|
19
|
+
* @expression
|
|
20
|
+
* @label ${label}
|
|
21
|
+
* @color cyan
|
|
22
|
+
* @icon dataObject
|
|
23
|
+
* @input text [order:0] - Raw text potentially containing JSON
|
|
24
|
+
* @input schema [order:1] - Expected field names for validation (optional)
|
|
25
|
+
* @output extracted [order:0] - Parsed JSON object (null if extraction failed)
|
|
26
|
+
* @output valid [order:1] - Whether extraction and validation succeeded
|
|
27
|
+
* @output raw [order:2] - The raw JSON string that was found
|
|
28
|
+
*/
|
|
29
|
+
function ${funcName}(
|
|
30
|
+
text: string,
|
|
31
|
+
schema?: string[]
|
|
32
|
+
): {
|
|
33
|
+
extracted: Record<string, unknown> | null;
|
|
34
|
+
valid: boolean;
|
|
35
|
+
raw: string;
|
|
36
|
+
} {
|
|
37
|
+
if (!text || typeof text !== 'string') {
|
|
38
|
+
return { extracted: null, valid: false, raw: '' };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Strip markdown code fences
|
|
42
|
+
let cleaned = text;
|
|
43
|
+
const fenceMatch = cleaned.match(/\\\`\\\`\\\`(?:json)?\\s*([\\s\\S]*?)\\\`\\\`\\\`/);
|
|
44
|
+
if (fenceMatch) {
|
|
45
|
+
cleaned = fenceMatch[1].trim();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Find first JSON object or array via brace/bracket matching
|
|
49
|
+
const startChar = cleaned.indexOf('{') !== -1 && (cleaned.indexOf('[') === -1 || cleaned.indexOf('{') < cleaned.indexOf('['))
|
|
50
|
+
? '{'
|
|
51
|
+
: '[';
|
|
52
|
+
const endChar = startChar === '{' ? '}' : ']';
|
|
53
|
+
const startIdx = cleaned.indexOf(startChar);
|
|
54
|
+
|
|
55
|
+
if (startIdx === -1) {
|
|
56
|
+
return { extracted: null, valid: false, raw: '' };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Walk forward to find the matching closing brace/bracket
|
|
60
|
+
let depth = 0;
|
|
61
|
+
let inString = false;
|
|
62
|
+
let escape = false;
|
|
63
|
+
let endIdx = -1;
|
|
64
|
+
|
|
65
|
+
for (let i = startIdx; i < cleaned.length; i++) {
|
|
66
|
+
const ch = cleaned[i];
|
|
67
|
+
|
|
68
|
+
if (escape) {
|
|
69
|
+
escape = false;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (ch === '\\\\') {
|
|
74
|
+
escape = true;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (ch === '"') {
|
|
79
|
+
inString = !inString;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (inString) continue;
|
|
84
|
+
|
|
85
|
+
if (ch === startChar) depth++;
|
|
86
|
+
if (ch === endChar) depth--;
|
|
87
|
+
|
|
88
|
+
if (depth === 0) {
|
|
89
|
+
endIdx = i;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (endIdx === -1) {
|
|
95
|
+
return { extracted: null, valid: false, raw: '' };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const raw = cleaned.slice(startIdx, endIdx + 1);
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
const parsed = JSON.parse(raw);
|
|
102
|
+
|
|
103
|
+
// Validate schema if provided
|
|
104
|
+
if (schema && schema.length > 0 && typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
105
|
+
const missingFields = schema.filter(field => !(field in parsed));
|
|
106
|
+
if (missingFields.length > 0) {
|
|
107
|
+
return { extracted: parsed, valid: false, raw };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return { extracted: parsed, valid: true, raw };
|
|
112
|
+
} catch {
|
|
113
|
+
return { extracted: null, valid: false, raw };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
`.trim();
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=json-extractor.js.map
|