@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,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Context Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses the current line to detect what type of completion is expected.
|
|
5
|
+
*/
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Patterns for detecting completion context
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Match @ at start of word (for annotation completions)
|
|
10
|
+
const ANNOTATION_PATTERN = /@(\w*)$/;
|
|
11
|
+
// Match @input or @output followed by { and optional partial type
|
|
12
|
+
const DATA_TYPE_PATTERN = /@(?:input|output)\s+\{(\w*)$/;
|
|
13
|
+
// Match @node followed by nodeId and space (for nodeType completions)
|
|
14
|
+
const NODE_TYPE_PATTERN = /@node\s+(\w+)\s+(\w*)$/;
|
|
15
|
+
// Match @connect followed by nodeId (before the dot)
|
|
16
|
+
const CONNECT_NODE_PATTERN = /@connect\s+(\w*)$/;
|
|
17
|
+
// Match @connect nodeId. (after the dot, for source port)
|
|
18
|
+
const CONNECT_SOURCE_PORT_PATTERN = /@connect\s+(\w+)\.(\w*)$/;
|
|
19
|
+
// Match @connect nodeId.port -> (for target node)
|
|
20
|
+
const CONNECT_TARGET_NODE_PATTERN = /@connect\s+\w+\.\w+\s*->\s*(\w*)$/;
|
|
21
|
+
// Match @connect nodeId.port -> nodeId. (for target port)
|
|
22
|
+
const CONNECT_TARGET_PORT_PATTERN = /@connect\s+\w+\.\w+\s*->\s*(\w+)\.(\w*)$/;
|
|
23
|
+
// Annotation value patterns (checked before generic annotation pattern)
|
|
24
|
+
const EXECUTE_WHEN_VALUE_PATTERN = /@executeWhen\s+(\w*)$/;
|
|
25
|
+
const FLOW_WEAVER_VALUE_PATTERN = /@flowWeaver\s+(\w*)$/;
|
|
26
|
+
const COLOR_VALUE_PATTERN = /@color\s+(\w*)$/;
|
|
27
|
+
// Sugar annotation patterns — node ID completions
|
|
28
|
+
// @path ... -> | (after arrow in path chain)
|
|
29
|
+
const PATH_NODE_PATTERN = /@path\s+(?:\w+(?::\w+)?\s*->\s*)+(\w*)$/;
|
|
30
|
+
// @position |
|
|
31
|
+
const POSITION_NODE_PATTERN = /@position\s+(\w*)$/;
|
|
32
|
+
// @scope name [... , | (node IDs inside brackets)
|
|
33
|
+
const SCOPE_NODE_PATTERN = /@scope\s+\w+\s*\[(?:\w+\s*,\s*)*(\w*)$/;
|
|
34
|
+
// @map id type over node.| (output port on source)
|
|
35
|
+
const MAP_PORT_PATTERN = /@map\s+\w+\s+\w+\s+over\s+(\w+)\.(\w*)$/;
|
|
36
|
+
// @map id type over | (source node)
|
|
37
|
+
const MAP_OVER_NODE_PATTERN = /@map\s+\w+\s+\w+\s+over\s+(\w*)$/;
|
|
38
|
+
// @map id | (node type after instance id)
|
|
39
|
+
const MAP_TYPE_PATTERN = /@map\s+\w+\s+(\w*)$/;
|
|
40
|
+
// @map | (instance id = node id)
|
|
41
|
+
const MAP_NODE_PATTERN = /@map\s+(\w*)$/;
|
|
42
|
+
// Bracket modifier patterns
|
|
43
|
+
const MODIFIER_NAME_PATTERN = /\[(\w*)$/;
|
|
44
|
+
const MODIFIER_VALUE_PATTERN = /\[(\w+):\s*(\w*)$/;
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Block Type Detection
|
|
47
|
+
// =============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Detect whether we're inside a @flowWeaver workflow or nodeType block.
|
|
50
|
+
* Scans preceding lines in the JSDoc block for the @flowWeaver annotation.
|
|
51
|
+
*/
|
|
52
|
+
export function detectBlockType(precedingBlockLines) {
|
|
53
|
+
for (const line of precedingBlockLines) {
|
|
54
|
+
const match = line.match(/@flowWeaver\s+(nodeType|workflow)\b/);
|
|
55
|
+
if (match) {
|
|
56
|
+
return match[1];
|
|
57
|
+
}
|
|
58
|
+
// Bare @flowWeaver (no qualifier) defaults to workflow
|
|
59
|
+
if (/@flowWeaver\s*$/.test(line.trim()) || /@flowWeaver\s+(?!nodeType|workflow)\w/.test(line)) {
|
|
60
|
+
return 'workflow';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Detect the annotation on the current line (for modifier context).
|
|
67
|
+
* Returns the annotation name if the line contains one (e.g., "@input", "@node").
|
|
68
|
+
*/
|
|
69
|
+
function detectLineAnnotation(lineText) {
|
|
70
|
+
const match = lineText.match(/@(\w+)/);
|
|
71
|
+
return match ? '@' + match[1] : null;
|
|
72
|
+
}
|
|
73
|
+
// =============================================================================
|
|
74
|
+
// Main Parser
|
|
75
|
+
// =============================================================================
|
|
76
|
+
/**
|
|
77
|
+
* Parse the current line to detect completion context.
|
|
78
|
+
*
|
|
79
|
+
* @param lineText - The full text of the current line
|
|
80
|
+
* @param cursorOffset - Cursor position within the line (0-based)
|
|
81
|
+
* @param isInJSDoc - Whether the cursor is inside a JSDoc block
|
|
82
|
+
* @param precedingBlockLines - Optional lines from /** to cursor for block type detection
|
|
83
|
+
* @returns Completion context or null if no completion should be shown
|
|
84
|
+
*/
|
|
85
|
+
export function parseCompletionContext(lineText, cursorOffset, isInJSDoc, precedingBlockLines) {
|
|
86
|
+
// Only provide completions inside JSDoc blocks
|
|
87
|
+
if (!isInJSDoc) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
// Get text from start of line to cursor
|
|
91
|
+
const textBeforeCursor = lineText.slice(0, cursorOffset);
|
|
92
|
+
// Detect block type from preceding lines
|
|
93
|
+
const blockType = precedingBlockLines ? detectBlockType(precedingBlockLines) : null;
|
|
94
|
+
// Try each pattern in priority order
|
|
95
|
+
let match;
|
|
96
|
+
// 0a. Check for @map port: @map id type over node.|
|
|
97
|
+
match = textBeforeCursor.match(MAP_PORT_PATTERN);
|
|
98
|
+
if (match) {
|
|
99
|
+
return {
|
|
100
|
+
type: 'port',
|
|
101
|
+
lineText,
|
|
102
|
+
cursorOffset,
|
|
103
|
+
prefix: match[2],
|
|
104
|
+
nodeId: match[1],
|
|
105
|
+
portDirection: 'output',
|
|
106
|
+
blockType,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// 0b. Check for @map over node: @map id type over |
|
|
110
|
+
match = textBeforeCursor.match(MAP_OVER_NODE_PATTERN);
|
|
111
|
+
if (match) {
|
|
112
|
+
return {
|
|
113
|
+
type: 'nodeId',
|
|
114
|
+
lineText,
|
|
115
|
+
cursorOffset,
|
|
116
|
+
prefix: match[1],
|
|
117
|
+
blockType,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// 0c. Check for @map type: @map id |
|
|
121
|
+
match = textBeforeCursor.match(MAP_TYPE_PATTERN);
|
|
122
|
+
if (match) {
|
|
123
|
+
return {
|
|
124
|
+
type: 'nodeType',
|
|
125
|
+
lineText,
|
|
126
|
+
cursorOffset,
|
|
127
|
+
prefix: match[1],
|
|
128
|
+
blockType,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// 0d. Check for @map node: @map |
|
|
132
|
+
match = textBeforeCursor.match(MAP_NODE_PATTERN);
|
|
133
|
+
if (match) {
|
|
134
|
+
return {
|
|
135
|
+
type: 'nodeId',
|
|
136
|
+
lineText,
|
|
137
|
+
cursorOffset,
|
|
138
|
+
prefix: match[1],
|
|
139
|
+
blockType,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// 0e. Check for @path node: @path ... -> |
|
|
143
|
+
match = textBeforeCursor.match(PATH_NODE_PATTERN);
|
|
144
|
+
if (match) {
|
|
145
|
+
return {
|
|
146
|
+
type: 'nodeId',
|
|
147
|
+
lineText,
|
|
148
|
+
cursorOffset,
|
|
149
|
+
prefix: match[1],
|
|
150
|
+
blockType,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// 0h. Check for @position node: @position |
|
|
154
|
+
match = textBeforeCursor.match(POSITION_NODE_PATTERN);
|
|
155
|
+
if (match) {
|
|
156
|
+
return {
|
|
157
|
+
type: 'nodeId',
|
|
158
|
+
lineText,
|
|
159
|
+
cursorOffset,
|
|
160
|
+
prefix: match[1],
|
|
161
|
+
blockType,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// 0i. Check for @scope node inside brackets: @scope name [a, |
|
|
165
|
+
match = textBeforeCursor.match(SCOPE_NODE_PATTERN);
|
|
166
|
+
if (match) {
|
|
167
|
+
return {
|
|
168
|
+
type: 'nodeId',
|
|
169
|
+
lineText,
|
|
170
|
+
cursorOffset,
|
|
171
|
+
prefix: match[1],
|
|
172
|
+
blockType,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// 1. Check for @connect target port: @connect a.out -> b.|
|
|
176
|
+
match = textBeforeCursor.match(CONNECT_TARGET_PORT_PATTERN);
|
|
177
|
+
if (match) {
|
|
178
|
+
return {
|
|
179
|
+
type: 'port',
|
|
180
|
+
lineText,
|
|
181
|
+
cursorOffset,
|
|
182
|
+
prefix: match[2],
|
|
183
|
+
nodeId: match[1],
|
|
184
|
+
portDirection: 'input', // Target receives, so needs input port
|
|
185
|
+
blockType,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// 2. Check for @connect target node: @connect a.out -> |
|
|
189
|
+
match = textBeforeCursor.match(CONNECT_TARGET_NODE_PATTERN);
|
|
190
|
+
if (match) {
|
|
191
|
+
return {
|
|
192
|
+
type: 'nodeId',
|
|
193
|
+
lineText,
|
|
194
|
+
cursorOffset,
|
|
195
|
+
prefix: match[1],
|
|
196
|
+
blockType,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// 3. Check for @connect source port: @connect a.|
|
|
200
|
+
match = textBeforeCursor.match(CONNECT_SOURCE_PORT_PATTERN);
|
|
201
|
+
if (match) {
|
|
202
|
+
return {
|
|
203
|
+
type: 'port',
|
|
204
|
+
lineText,
|
|
205
|
+
cursorOffset,
|
|
206
|
+
prefix: match[2],
|
|
207
|
+
nodeId: match[1],
|
|
208
|
+
portDirection: 'output', // Source sends, so needs output port
|
|
209
|
+
blockType,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// 4. Check for @connect node: @connect |
|
|
213
|
+
match = textBeforeCursor.match(CONNECT_NODE_PATTERN);
|
|
214
|
+
if (match) {
|
|
215
|
+
return {
|
|
216
|
+
type: 'nodeId',
|
|
217
|
+
lineText,
|
|
218
|
+
cursorOffset,
|
|
219
|
+
prefix: match[1],
|
|
220
|
+
blockType,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
// 5. Check for @node nodeType: @node myNode |
|
|
224
|
+
match = textBeforeCursor.match(NODE_TYPE_PATTERN);
|
|
225
|
+
if (match) {
|
|
226
|
+
return {
|
|
227
|
+
type: 'nodeType',
|
|
228
|
+
lineText,
|
|
229
|
+
cursorOffset,
|
|
230
|
+
prefix: match[2],
|
|
231
|
+
blockType,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
// 6. Check for data type in braces: @input {|
|
|
235
|
+
match = textBeforeCursor.match(DATA_TYPE_PATTERN);
|
|
236
|
+
if (match) {
|
|
237
|
+
return {
|
|
238
|
+
type: 'dataType',
|
|
239
|
+
lineText,
|
|
240
|
+
cursorOffset,
|
|
241
|
+
prefix: match[1],
|
|
242
|
+
blockType,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// 7. Check for bracket modifier value: [placement:|
|
|
246
|
+
match = textBeforeCursor.match(MODIFIER_VALUE_PATTERN);
|
|
247
|
+
if (match) {
|
|
248
|
+
return {
|
|
249
|
+
type: 'modifierValue',
|
|
250
|
+
lineText,
|
|
251
|
+
cursorOffset,
|
|
252
|
+
prefix: match[2],
|
|
253
|
+
modifier: match[1],
|
|
254
|
+
blockType,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// 8. Check for bracket modifier name: [|
|
|
258
|
+
match = textBeforeCursor.match(MODIFIER_NAME_PATTERN);
|
|
259
|
+
if (match) {
|
|
260
|
+
const lineAnnotation = detectLineAnnotation(lineText);
|
|
261
|
+
return {
|
|
262
|
+
type: 'modifier',
|
|
263
|
+
lineText,
|
|
264
|
+
cursorOffset,
|
|
265
|
+
prefix: match[1],
|
|
266
|
+
annotation: lineAnnotation ?? undefined,
|
|
267
|
+
blockType,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// 9. Check for annotation values (before generic annotation)
|
|
271
|
+
match = textBeforeCursor.match(EXECUTE_WHEN_VALUE_PATTERN);
|
|
272
|
+
if (match) {
|
|
273
|
+
return {
|
|
274
|
+
type: 'annotationValue',
|
|
275
|
+
lineText,
|
|
276
|
+
cursorOffset,
|
|
277
|
+
prefix: match[1],
|
|
278
|
+
annotation: '@executeWhen',
|
|
279
|
+
blockType,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
match = textBeforeCursor.match(FLOW_WEAVER_VALUE_PATTERN);
|
|
283
|
+
if (match) {
|
|
284
|
+
return {
|
|
285
|
+
type: 'annotationValue',
|
|
286
|
+
lineText,
|
|
287
|
+
cursorOffset,
|
|
288
|
+
prefix: match[1],
|
|
289
|
+
annotation: '@flowWeaver',
|
|
290
|
+
blockType,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
match = textBeforeCursor.match(COLOR_VALUE_PATTERN);
|
|
294
|
+
if (match) {
|
|
295
|
+
return {
|
|
296
|
+
type: 'annotationValue',
|
|
297
|
+
lineText,
|
|
298
|
+
cursorOffset,
|
|
299
|
+
prefix: match[1],
|
|
300
|
+
annotation: '@color',
|
|
301
|
+
blockType,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// 10. Check for annotation: @|
|
|
305
|
+
match = textBeforeCursor.match(ANNOTATION_PATTERN);
|
|
306
|
+
if (match) {
|
|
307
|
+
// Extract existing annotations from preceding block lines
|
|
308
|
+
let existingAnnotations;
|
|
309
|
+
if (precedingBlockLines) {
|
|
310
|
+
const annotations = [];
|
|
311
|
+
for (const line of precedingBlockLines) {
|
|
312
|
+
const annoMatch = line.match(/@(\w+)/);
|
|
313
|
+
if (annoMatch) {
|
|
314
|
+
annotations.push(annoMatch[1]);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (annotations.length > 0) {
|
|
318
|
+
existingAnnotations = annotations;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
type: 'annotation',
|
|
323
|
+
lineText,
|
|
324
|
+
cursorOffset,
|
|
325
|
+
prefix: match[1],
|
|
326
|
+
blockType,
|
|
327
|
+
existingAnnotations,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Get the word at the given position in the line.
|
|
334
|
+
* Useful for go-to-definition to find what word was clicked.
|
|
335
|
+
*/
|
|
336
|
+
export function getWordAtPosition(lineText, offset) {
|
|
337
|
+
// Check if cursor is on a word character
|
|
338
|
+
const charAtOffset = lineText[offset];
|
|
339
|
+
// If not on a word char, return null (cursor is on whitespace/punctuation)
|
|
340
|
+
if (!/\w/.test(charAtOffset || '')) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
// Find word boundaries
|
|
344
|
+
let start = offset;
|
|
345
|
+
let end = offset;
|
|
346
|
+
// Expand left to find start of word
|
|
347
|
+
while (start > 0 && /\w/.test(lineText[start - 1])) {
|
|
348
|
+
start--;
|
|
349
|
+
}
|
|
350
|
+
// Expand right to find end of word
|
|
351
|
+
while (end < lineText.length && /\w/.test(lineText[end])) {
|
|
352
|
+
end++;
|
|
353
|
+
}
|
|
354
|
+
if (start === end) {
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
word: lineText.slice(start, end),
|
|
359
|
+
start,
|
|
360
|
+
end,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Detect what kind of symbol is at the given position.
|
|
365
|
+
* Used for go-to-definition to determine navigation target.
|
|
366
|
+
*/
|
|
367
|
+
export function detectSymbolType(lineText, offset) {
|
|
368
|
+
const wordInfo = getWordAtPosition(lineText, offset);
|
|
369
|
+
if (!wordInfo) {
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
const { word, start } = wordInfo;
|
|
373
|
+
const textBefore = lineText.slice(0, start);
|
|
374
|
+
// Check if this is a nodeType in @node declaration
|
|
375
|
+
// Pattern: @node nodeId NodeType
|
|
376
|
+
const nodeTypeMatch = textBefore.match(/@node\s+\w+\s+$/);
|
|
377
|
+
if (nodeTypeMatch) {
|
|
378
|
+
return { type: 'nodeType', name: word };
|
|
379
|
+
}
|
|
380
|
+
// Check if this is a nodeId in @connect (before dot)
|
|
381
|
+
// Pattern: @connect nodeId.port
|
|
382
|
+
const connectNodeMatch = textBefore.match(/@connect\s+$/);
|
|
383
|
+
if (connectNodeMatch) {
|
|
384
|
+
return { type: 'nodeId', name: word };
|
|
385
|
+
}
|
|
386
|
+
// Check if this is a port after nodeId.
|
|
387
|
+
// Pattern: @connect nodeId.port or nodeId.port ->
|
|
388
|
+
const portMatch = textBefore.match(/@connect\s+(\w+)\.$/);
|
|
389
|
+
if (portMatch) {
|
|
390
|
+
return { type: 'port', name: word, nodeId: portMatch[1] };
|
|
391
|
+
}
|
|
392
|
+
// Check if target nodeId after ->
|
|
393
|
+
const targetNodeMatch = textBefore.match(/@connect\s+\w+\.\w+\s*->\s*$/);
|
|
394
|
+
if (targetNodeMatch) {
|
|
395
|
+
return { type: 'nodeId', name: word };
|
|
396
|
+
}
|
|
397
|
+
// Check if target port after -> nodeId.
|
|
398
|
+
const targetPortMatch = textBefore.match(/@connect\s+\w+\.\w+\s*->\s*(\w+)\.$/);
|
|
399
|
+
if (targetPortMatch) {
|
|
400
|
+
return { type: 'port', name: word, nodeId: targetPortMatch[1] };
|
|
401
|
+
}
|
|
402
|
+
// Check if this is a nodeId in sugar annotations (@path)
|
|
403
|
+
// Matches identifiers separated by arrows, with optional :ok/:fail suffixes
|
|
404
|
+
const sugarNodeMatch = textBefore.match(/@path\s+(?:(?:\w+(?::\w+)?\s*(?:->|,)\s*)*)$/);
|
|
405
|
+
if (sugarNodeMatch) {
|
|
406
|
+
return { type: 'nodeId', name: word };
|
|
407
|
+
}
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=contextParser.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Data Types
|
|
3
|
+
*
|
|
4
|
+
* Port data types for autocompletion inside {braces}.
|
|
5
|
+
*/
|
|
6
|
+
import type { FlowWeaverCompletion } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Common data types for port definitions.
|
|
9
|
+
* These appear when typing inside {braces} after @input or @output.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DATA_TYPES: FlowWeaverCompletion[];
|
|
12
|
+
/**
|
|
13
|
+
* Get data type completions filtered by prefix.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getDataTypeCompletions(prefix: string): FlowWeaverCompletion[];
|
|
16
|
+
//# sourceMappingURL=dataTypes.d.ts.map
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Data Types
|
|
3
|
+
*
|
|
4
|
+
* Port data types for autocompletion inside {braces}.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Common data types for port definitions.
|
|
8
|
+
* These appear when typing inside {braces} after @input or @output.
|
|
9
|
+
*/
|
|
10
|
+
export const DATA_TYPES = [
|
|
11
|
+
// Control flow
|
|
12
|
+
{
|
|
13
|
+
label: "STEP",
|
|
14
|
+
detail: "Control flow port",
|
|
15
|
+
documentation: "A control flow port that triggers execution. Used for sequencing nodes.",
|
|
16
|
+
insertText: "STEP}",
|
|
17
|
+
insertTextFormat: "plain",
|
|
18
|
+
kind: "type",
|
|
19
|
+
sortOrder: 0,
|
|
20
|
+
},
|
|
21
|
+
// Primitive types
|
|
22
|
+
{
|
|
23
|
+
label: "String",
|
|
24
|
+
detail: "Text value",
|
|
25
|
+
documentation: "A string/text value.",
|
|
26
|
+
insertText: "String}",
|
|
27
|
+
insertTextFormat: "plain",
|
|
28
|
+
kind: "type",
|
|
29
|
+
sortOrder: 10,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
label: "Number",
|
|
33
|
+
detail: "Numeric value",
|
|
34
|
+
documentation: "A numeric value (integer or floating point).",
|
|
35
|
+
insertText: "Number}",
|
|
36
|
+
insertTextFormat: "plain",
|
|
37
|
+
kind: "type",
|
|
38
|
+
sortOrder: 11,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: "Boolean",
|
|
42
|
+
detail: "True/false value",
|
|
43
|
+
documentation: "A boolean true/false value.",
|
|
44
|
+
insertText: "Boolean}",
|
|
45
|
+
insertTextFormat: "plain",
|
|
46
|
+
kind: "type",
|
|
47
|
+
sortOrder: 12,
|
|
48
|
+
},
|
|
49
|
+
// Complex types
|
|
50
|
+
{
|
|
51
|
+
label: "Array",
|
|
52
|
+
detail: "List of values",
|
|
53
|
+
documentation: "An array/list of values.",
|
|
54
|
+
insertText: "Array}",
|
|
55
|
+
insertTextFormat: "plain",
|
|
56
|
+
kind: "type",
|
|
57
|
+
sortOrder: 20,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: "Object",
|
|
61
|
+
detail: "Key-value object",
|
|
62
|
+
documentation: "A JavaScript object with key-value pairs.",
|
|
63
|
+
insertText: "Object}",
|
|
64
|
+
insertTextFormat: "plain",
|
|
65
|
+
kind: "type",
|
|
66
|
+
sortOrder: 21,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "Function",
|
|
70
|
+
detail: "Callable function",
|
|
71
|
+
documentation: "A function reference.",
|
|
72
|
+
insertText: "Function}",
|
|
73
|
+
insertTextFormat: "plain",
|
|
74
|
+
kind: "type",
|
|
75
|
+
sortOrder: 22,
|
|
76
|
+
},
|
|
77
|
+
// Generic
|
|
78
|
+
{
|
|
79
|
+
label: "Any",
|
|
80
|
+
detail: "Any type",
|
|
81
|
+
documentation: "Accepts any type of value.",
|
|
82
|
+
insertText: "Any}",
|
|
83
|
+
insertTextFormat: "plain",
|
|
84
|
+
kind: "type",
|
|
85
|
+
sortOrder: 30,
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
/**
|
|
89
|
+
* Get data type completions filtered by prefix.
|
|
90
|
+
*/
|
|
91
|
+
export function getDataTypeCompletions(prefix) {
|
|
92
|
+
const lowerPrefix = prefix.toLowerCase();
|
|
93
|
+
return DATA_TYPES.filter((c) => c.label.toLowerCase().startsWith(lowerPrefix));
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=dataTypes.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Go To Definition
|
|
3
|
+
*
|
|
4
|
+
* Find definition locations for Flow Weaver symbols.
|
|
5
|
+
*/
|
|
6
|
+
import type { DefinitionLocation, WorkflowContext } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Find the definition location for a symbol at the given position.
|
|
9
|
+
*
|
|
10
|
+
* @param lineText - The full text of the current line
|
|
11
|
+
* @param offset - Cursor position within the line (0-based)
|
|
12
|
+
* @param context - Workflow context with nodeTypes and instances
|
|
13
|
+
* @returns Definition location or null if not found
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // User Cmd+clicks on "MyAdder" in "@node add1 MyAdder"
|
|
18
|
+
* const location = getDefinitionLocation(
|
|
19
|
+
* " * @node add1 MyAdder",
|
|
20
|
+
* 18, // position of 'M' in MyAdder
|
|
21
|
+
* { nodeTypes: { MyAdder: { filePath: "/src/nodes.ts", line: 42 } } }
|
|
22
|
+
* );
|
|
23
|
+
* // Returns: { type: "nodeType", name: "MyAdder", filePath: "/src/nodes.ts", line: 42 }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function getDefinitionLocation(lineText: string, offset: number, context: WorkflowContext): DefinitionLocation | null;
|
|
27
|
+
//# sourceMappingURL=goToDefinition.d.ts.map
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Go To Definition
|
|
3
|
+
*
|
|
4
|
+
* Find definition locations for Flow Weaver symbols.
|
|
5
|
+
*/
|
|
6
|
+
import { detectSymbolType } from "./contextParser.js";
|
|
7
|
+
/**
|
|
8
|
+
* Find the definition location for a symbol at the given position.
|
|
9
|
+
*
|
|
10
|
+
* @param lineText - The full text of the current line
|
|
11
|
+
* @param offset - Cursor position within the line (0-based)
|
|
12
|
+
* @param context - Workflow context with nodeTypes and instances
|
|
13
|
+
* @returns Definition location or null if not found
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // User Cmd+clicks on "MyAdder" in "@node add1 MyAdder"
|
|
18
|
+
* const location = getDefinitionLocation(
|
|
19
|
+
* " * @node add1 MyAdder",
|
|
20
|
+
* 18, // position of 'M' in MyAdder
|
|
21
|
+
* { nodeTypes: { MyAdder: { filePath: "/src/nodes.ts", line: 42 } } }
|
|
22
|
+
* );
|
|
23
|
+
* // Returns: { type: "nodeType", name: "MyAdder", filePath: "/src/nodes.ts", line: 42 }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function getDefinitionLocation(lineText, offset, context) {
|
|
27
|
+
// Detect what kind of symbol this is based on context
|
|
28
|
+
const symbolInfo = detectSymbolType(lineText, offset);
|
|
29
|
+
if (!symbolInfo) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
switch (symbolInfo.type) {
|
|
33
|
+
case "nodeType":
|
|
34
|
+
return findNodeTypeDefinition(symbolInfo.name, context);
|
|
35
|
+
case "nodeId":
|
|
36
|
+
return findNodeDefinition(symbolInfo.name, context);
|
|
37
|
+
case "port":
|
|
38
|
+
return findPortDefinition(symbolInfo.name, symbolInfo.nodeId, context);
|
|
39
|
+
default:
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find definition for a nodeType name.
|
|
45
|
+
*/
|
|
46
|
+
function findNodeTypeDefinition(name, context) {
|
|
47
|
+
const nodeType = context.nodeTypes[name];
|
|
48
|
+
if (!nodeType) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
type: "nodeType",
|
|
53
|
+
name,
|
|
54
|
+
filePath: nodeType.filePath,
|
|
55
|
+
line: nodeType.line,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Find definition for a node instance ID.
|
|
60
|
+
* This navigates to the @node declaration in the current file.
|
|
61
|
+
*/
|
|
62
|
+
function findNodeDefinition(id, context) {
|
|
63
|
+
const instance = context.instances?.find((inst) => inst.id === id);
|
|
64
|
+
if (!instance) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
// For node instances, we return the node type location
|
|
68
|
+
// since instances are defined inline in JSDoc
|
|
69
|
+
const nodeType = context.nodeTypes[instance.nodeType];
|
|
70
|
+
if (nodeType) {
|
|
71
|
+
return {
|
|
72
|
+
type: "node",
|
|
73
|
+
name: id,
|
|
74
|
+
filePath: nodeType.filePath,
|
|
75
|
+
line: nodeType.line,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
type: "node",
|
|
80
|
+
name: id,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Find definition for a port on a node.
|
|
85
|
+
*/
|
|
86
|
+
function findPortDefinition(portName, nodeId, context) {
|
|
87
|
+
if (!nodeId) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
// Find the node instance
|
|
91
|
+
const instance = context.instances?.find((inst) => inst.id === nodeId);
|
|
92
|
+
if (!instance) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// Find the node type
|
|
96
|
+
const nodeType = context.nodeTypes[instance.nodeType];
|
|
97
|
+
if (!nodeType) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
// Find the port
|
|
101
|
+
const port = nodeType.ports.find((p) => p.name === portName);
|
|
102
|
+
if (!port) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
type: "port",
|
|
107
|
+
name: portName,
|
|
108
|
+
filePath: nodeType.filePath,
|
|
109
|
+
line: nodeType.line, // Ideally we'd have per-port line numbers
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=goToDefinition.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Completions - Public API
|
|
3
|
+
*
|
|
4
|
+
* Editor-agnostic completion utilities for Flow Weaver.
|
|
5
|
+
* Use these with any editor (CodeMirror, VS Code, Monaco, etc.)
|
|
6
|
+
*/
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export { parseCompletionContext, getWordAtPosition, detectSymbolType, detectBlockType, } from './contextParser.js';
|
|
9
|
+
export { getAnnotationCompletions, JSDOC_ANNOTATIONS } from './jsDocAnnotations.js';
|
|
10
|
+
export { getDataTypeCompletions, DATA_TYPES } from './dataTypes.js';
|
|
11
|
+
export { getDefinitionLocation } from './goToDefinition.js';
|
|
12
|
+
export { getAnnotationValueCompletions } from './annotationValues.js';
|
|
13
|
+
export { getModifierCompletions, getModifierValueCompletions } from './modifierCompletions.js';
|
|
14
|
+
import type { FlowWeaverCompletion, WorkflowContext } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Get Flow Weaver completions for the current cursor position.
|
|
17
|
+
*
|
|
18
|
+
* This is the main entry point for editor integrations.
|
|
19
|
+
*
|
|
20
|
+
* @param lineText - The full text of the current line
|
|
21
|
+
* @param cursorOffset - Cursor position within the line (0-based)
|
|
22
|
+
* @param isInJSDoc - Whether the cursor is inside a JSDoc block
|
|
23
|
+
* @param context - Optional workflow context for nodeType/port completions
|
|
24
|
+
* @param precedingBlockLines - Optional lines from start of JSDoc block to cursor line
|
|
25
|
+
* @returns Array of completion suggestions
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* // In a CodeMirror completion source:
|
|
30
|
+
* const completions = getFlowWeaverCompletions(
|
|
31
|
+
* " * @inp",
|
|
32
|
+
* 7,
|
|
33
|
+
* true
|
|
34
|
+
* );
|
|
35
|
+
* // Returns: [{ label: "@input", ... }]
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function getFlowWeaverCompletions(lineText: string, cursorOffset: number, isInJSDoc: boolean, context?: WorkflowContext, precedingBlockLines?: string[]): FlowWeaverCompletion[];
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|