@synergenius/flow-weaver 0.33.1 → 0.44.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 +201 -226
- package/NOTICE +13 -0
- package/README.md +152 -244
- package/dist/agent/agent-loop.d.ts +4 -2
- package/dist/agent/cli-session.d.ts +3 -3
- package/dist/agent/cli-session.js +511 -438
- package/dist/agent/cli-spawn-config.d.ts +4 -4
- package/dist/agent/gate.d.ts +164 -0
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +174 -28
- package/dist/agent/mcp-bridge.d.ts +1 -1
- package/dist/agent/mcp-bridge.js +114 -128
- package/dist/agent/mcp-tool-server.d.ts +2 -2
- package/dist/agent/mcp-tool-server.js +147 -189
- package/dist/agent/profiles.d.ts +69 -0
- package/dist/agent/providers/anthropic.d.ts +2 -4
- package/dist/agent/providers/claude-cli.d.ts +4 -5
- package/dist/agent/providers/openai-compat.d.ts +8 -1
- package/dist/agent/streaming.d.ts +2 -2
- package/dist/agent/types.d.ts +16 -10
- package/dist/api/builder.d.ts +3 -3
- package/dist/api/compile.d.ts +9 -4
- package/dist/api/durable-validation.d.ts +15 -0
- package/dist/api/generate-in-place.d.ts +21 -19
- package/dist/api/generate.d.ts +21 -16
- package/dist/api/generated-module/local-node-functions.d.ts +24 -0
- package/dist/api/generated-module/module-format.d.ts +23 -0
- package/dist/api/generated-module/module-writer.d.ts +34 -0
- package/dist/api/generated-module/node-type-imports.d.ts +39 -0
- package/dist/api/generated-module/preamble.d.ts +16 -0
- package/dist/api/generated-module/workflow-functions.d.ts +29 -0
- package/dist/api/graph-identity.d.ts +39 -0
- package/dist/api/helpers.d.ts +4 -60
- package/dist/api/in-place/built-in-nodes.d.ts +18 -0
- package/dist/api/in-place/function-body.d.ts +21 -0
- package/dist/api/in-place/fw-imports.d.ts +30 -0
- package/dist/api/in-place/macro-coverage.d.ts +14 -0
- package/dist/api/in-place/node-type-functions.d.ts +18 -0
- package/dist/api/in-place/node-type-jsdoc.d.ts +20 -0
- package/dist/api/in-place/orphaned-node-types.d.ts +16 -0
- package/dist/api/in-place/runtime-section.d.ts +16 -0
- package/dist/api/in-place/signature.d.ts +47 -0
- package/dist/api/in-place/source-file.d.ts +19 -0
- package/dist/api/in-place/workflow-jsdoc.d.ts +19 -0
- package/dist/api/index.d.ts +18 -21
- package/dist/api/index.js +259 -53
- package/dist/api/inline-engine.generated.d.ts +3 -0
- package/dist/api/inline-runtime.d.ts +10 -2
- package/dist/api/manipulation/connections.d.ts +1 -1
- package/dist/api/manipulation/index.d.ts +8 -8
- package/dist/api/manipulation/node-types.d.ts +1 -1
- package/dist/api/manipulation/nodes.d.ts +3 -13
- package/dist/api/manipulation/ports.d.ts +1 -1
- package/dist/api/manipulation/scopes.d.ts +1 -1
- package/dist/api/manipulation/workflow.d.ts +1 -1
- package/dist/api/modify-operation.d.ts +0 -2
- package/dist/api/parse.d.ts +22 -1
- package/dist/api/port-references.d.ts +66 -0
- package/dist/api/query.d.ts +18 -2
- package/dist/api/templates.d.ts +1 -1
- package/dist/api/transform.d.ts +1 -1
- package/dist/api/validate.d.ts +1 -1
- package/dist/api/validation-registry.d.ts +2 -2
- package/dist/artifacts/brief.d.ts +43 -0
- package/dist/artifacts/index.d.ts +31 -0
- package/dist/artifacts/pdf.d.ts +19 -0
- package/dist/ast/builder.d.ts +3 -3
- package/dist/ast/index.d.ts +4 -4
- package/dist/ast/index.js +60 -5
- package/dist/ast/serialization-node.d.ts +1 -1
- package/dist/ast/serialization.d.ts +1 -1
- package/dist/ast/types.d.ts +82 -291
- package/dist/ast/workflow-utils.d.ts +4 -4
- package/dist/built-in-nodes/coercion-types.d.ts +1 -1
- package/dist/built-in-nodes/delay.d.ts +3 -1
- package/dist/built-in-nodes/generated-registry.d.ts +1 -1
- package/dist/built-in-nodes/index.d.ts +6 -5
- package/dist/built-in-nodes/index.js +79 -5
- package/dist/built-in-nodes/invoke-workflow.d.ts +2 -1
- package/dist/built-in-nodes/mock-types.d.ts +45 -14
- package/dist/built-in-nodes/sleep.d.ts +12 -0
- package/dist/built-in-nodes/wait-for-agent.d.ts +2 -1
- package/dist/built-in-nodes/wait-for-event.d.ts +2 -1
- package/dist/chevrotain-parser/coerce-parser.d.ts +1 -1
- package/dist/chevrotain-parser/connect-parser.d.ts +1 -1
- package/dist/chevrotain-parser/grammar-diagrams.d.ts +1 -1
- package/dist/chevrotain-parser/index.d.ts +20 -23
- package/dist/chevrotain-parser/node-parser.d.ts +7 -8
- package/dist/chevrotain-parser/parse-line.d.ts +54 -0
- package/dist/chevrotain-parser/tokens.d.ts +0 -17
- package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +6 -1
- package/dist/chunks/chunk-4EUSHAY6.js +298 -0
- package/dist/chunks/chunk-4KDUEOFD.js +197 -0
- package/dist/chunks/chunk-5Y3AIUWY.js +911 -0
- package/dist/chunks/chunk-6KMVP6AU.js +20 -0
- package/dist/chunks/chunk-6PNJORFL.js +128 -0
- package/dist/chunks/chunk-7AAQNGRH.js +2001 -0
- package/dist/chunks/chunk-7YYKTPJ5.js +22705 -0
- package/dist/chunks/chunk-A5MBOFVY.js +33 -0
- package/dist/chunks/chunk-AXNQRVJB.js +18 -0
- package/dist/chunks/chunk-B6HQ6YS5.js +572 -0
- package/dist/chunks/chunk-CY3RNVML.js +296 -0
- package/dist/chunks/chunk-CYHYDLV4.js +653 -0
- package/dist/chunks/chunk-CZBCCK4Y.js +82 -0
- package/dist/chunks/chunk-DCMGQP5V.js +505 -0
- package/dist/chunks/chunk-DIAA66GL.js +72 -0
- package/dist/chunks/chunk-DUO6H5PR.js +20 -0
- package/dist/chunks/chunk-E5WN7IGO.js +125 -0
- package/dist/chunks/chunk-EFGFXXQF.js +184 -0
- package/dist/chunks/chunk-F3RTZV2A.js +2811 -0
- package/dist/chunks/chunk-FMTLP5ZX.js +1397 -0
- package/dist/chunks/chunk-HKZLQJDV.js +79 -0
- package/dist/chunks/chunk-INDEVYEC.js +146 -0
- package/dist/chunks/chunk-JQTF4R5L.js +390 -0
- package/dist/chunks/chunk-KMCAYNUM.js +331 -0
- package/dist/chunks/chunk-KMWCCOUJ.js +1444 -0
- package/dist/chunks/chunk-KU3CLJI2.js +338 -0
- package/dist/chunks/chunk-NDSTGMKR.js +3300 -0
- package/dist/chunks/chunk-NQNLUAPO.js +505 -0
- package/dist/chunks/chunk-O2U2LO57.js +466 -0
- package/dist/chunks/chunk-OOQG7UPP.js +457 -0
- package/dist/chunks/chunk-OZQAW5ZG.js +112 -0
- package/dist/chunks/chunk-P2CVDGHR.js +487 -0
- package/dist/chunks/chunk-P44RIZ7C.js +592 -0
- package/dist/chunks/chunk-PEZCT37T.js +1475 -0
- package/dist/chunks/chunk-PKWSAW6O.js +152 -0
- package/dist/chunks/chunk-Q6MDDZMT.js +4373 -0
- package/dist/chunks/chunk-QDE4Z7KW.js +6 -0
- package/dist/chunks/chunk-QJDAVSNY.js +8 -0
- package/dist/chunks/chunk-QYPORSLO.js +7552 -0
- package/dist/chunks/chunk-R4QGNK34.js +183 -0
- package/dist/chunks/chunk-REEYC73I.js +3002 -0
- package/dist/chunks/chunk-SEWDMQ6Q.js +46 -0
- package/dist/chunks/chunk-TAIUWKZB.js +3057 -0
- package/dist/chunks/chunk-TN4YZ3O7.js +196 -0
- package/dist/chunks/chunk-TRMFB43C.js +143 -0
- package/dist/chunks/chunk-VO4QXG2X.js +1016 -0
- package/dist/chunks/chunk-VP2P3BPA.js +1002 -0
- package/dist/chunks/chunk-VQ7H33J4.js +2176 -0
- package/dist/chunks/chunk-VWA7MCV2.js +105 -0
- package/dist/chunks/chunk-XAV22WD7.js +253 -0
- package/dist/chunks/chunk-YSPBPZDV.js +148 -0
- package/dist/chunks/chunk-ZKEGXO73.js +282 -0
- package/dist/chunks/chunk-ZMGN6F3S.js +4256 -0
- package/dist/chunks/grammar-diagrams-AI7VDXOM.js +14 -0
- package/dist/chunks/index.min-ECJD6GZC.js +37 -0
- package/dist/chunks/manifest-EPTR5MYH.js +21 -0
- package/dist/chunks/openapi-document-6TCGVDUW.js +69 -0
- package/dist/chunks/registry-K2U5KUTY.js +23 -0
- package/dist/chunks/serialization-node-UGY6CFH6.js +38 -0
- package/dist/chunks/validate-GEKSZPIN.js +24 -0
- package/dist/chunks/validation-registry-IQZX3UE3.js +7 -0
- package/dist/chunks/validator-VXFHLPDW.js +26 -0
- package/dist/chunks/workflow-executor-KBGFKHNR.js +36 -0
- package/dist/cli/commands/agents.d.ts +16 -0
- package/dist/cli/commands/artifact.d.ts +10 -0
- package/dist/cli/commands/compile.d.ts +0 -30
- package/dist/cli/commands/console.d.ts +32 -0
- package/dist/cli/commands/context.d.ts +0 -3
- package/dist/cli/commands/describe.js +386 -352
- package/dist/cli/commands/dev.d.ts +9 -4
- package/dist/cli/commands/diagram.d.ts +3 -5
- package/dist/cli/commands/doctor.d.ts +27 -4
- package/dist/cli/commands/doctor.js +3307 -633
- package/dist/cli/commands/export.d.ts +6 -4
- package/dist/cli/commands/grammar.d.ts +0 -3
- package/dist/cli/commands/implement.d.ts +1 -1
- package/dist/cli/commands/init/agent-handoff.d.ts +28 -0
- package/dist/cli/commands/init/config.d.ts +3 -0
- package/dist/cli/commands/init/files.d.ts +12 -0
- package/dist/cli/commands/init/naming.d.ts +13 -0
- package/dist/cli/commands/init/output.d.ts +12 -0
- package/dist/cli/commands/init/setup.d.ts +21 -0
- package/dist/cli/commands/init/types.d.ts +53 -0
- package/dist/cli/commands/init-personas.d.ts +9 -1
- package/dist/cli/commands/init.d.ts +24 -88
- package/dist/cli/commands/market.d.ts +1 -1
- package/dist/cli/commands/mcp-setup.d.ts +1 -4
- package/dist/cli/commands/modify.d.ts +0 -5
- package/dist/cli/commands/openapi.d.ts +9 -11
- package/dist/cli/commands/run.d.ts +0 -4
- package/dist/cli/commands/serve.d.ts +24 -26
- package/dist/cli/commands/status.d.ts +1 -1
- package/dist/cli/exports.d.ts +3 -4
- package/dist/cli/exports.js +124 -23
- package/dist/cli/flow-weaver-agents-H653446S.mjs +81 -0
- package/dist/cli/flow-weaver-artifact-WBFYTW76.mjs +58 -0
- package/dist/cli/flow-weaver-chunk-265CEK74.mjs +2 -0
- package/dist/cli/flow-weaver-chunk-2C7PZCV5.mjs +186 -0
- package/dist/cli/flow-weaver-chunk-3BSYCWPL.mjs +3109 -0
- package/dist/cli/flow-weaver-chunk-3MKUQP3D.mjs +547 -0
- package/dist/cli/flow-weaver-chunk-3ZLMPQTH.mjs +27 -0
- package/dist/cli/flow-weaver-chunk-4DVY73ML.mjs +280 -0
- package/dist/cli/flow-weaver-chunk-54M4KNEL.mjs +200 -0
- package/dist/cli/flow-weaver-chunk-55QMUZIA.mjs +256 -0
- package/dist/cli/flow-weaver-chunk-6ZUJ7LMX.mjs +2003 -0
- package/dist/cli/flow-weaver-chunk-7ET6N32V.mjs +419 -0
- package/dist/cli/flow-weaver-chunk-7G63RR4K.mjs +8880 -0
- package/dist/cli/flow-weaver-chunk-A6M5K3W7.mjs +4418 -0
- package/dist/cli/flow-weaver-chunk-AA3NATMX.mjs +154 -0
- package/dist/cli/flow-weaver-chunk-APX6MQ5A.mjs +5652 -0
- package/dist/cli/flow-weaver-chunk-BHCC5FE5.mjs +17 -0
- package/dist/cli/flow-weaver-chunk-DM4BBRRU.mjs +35 -0
- package/dist/cli/flow-weaver-chunk-DRN7KPWY.mjs +168 -0
- package/dist/cli/flow-weaver-chunk-EKWF27G6.mjs +23 -0
- package/dist/cli/flow-weaver-chunk-EM5HWQ4R.mjs +338 -0
- package/dist/cli/flow-weaver-chunk-FPPPU2DG.mjs +226 -0
- package/dist/cli/flow-weaver-chunk-GAQXZHNO.mjs +3005 -0
- package/dist/cli/flow-weaver-chunk-GBUNNP33.mjs +1329 -0
- package/dist/cli/flow-weaver-chunk-HMAKDE55.mjs +636 -0
- package/dist/cli/flow-weaver-chunk-HQ3ZAN44.mjs +367 -0
- package/dist/cli/flow-weaver-chunk-I4APCXYN.mjs +21442 -0
- package/dist/cli/flow-weaver-chunk-IJJ4JXTL.mjs +2297 -0
- package/dist/cli/flow-weaver-chunk-J7EPZW2I.mjs +33 -0
- package/dist/cli/flow-weaver-chunk-KOEMJHLG.mjs +83 -0
- package/dist/cli/flow-weaver-chunk-M6CBWQKJ.mjs +271 -0
- package/dist/cli/flow-weaver-chunk-MHJ4N652.mjs +1580 -0
- package/dist/cli/flow-weaver-chunk-MKAFQWLP.mjs +202 -0
- package/dist/cli/flow-weaver-chunk-MMV2XGD3.mjs +3291 -0
- package/dist/cli/flow-weaver-chunk-MSI2UJES.mjs +125 -0
- package/dist/cli/flow-weaver-chunk-N767YRAI.mjs +48 -0
- package/dist/cli/flow-weaver-chunk-NQKKWDGF.mjs +56 -0
- package/dist/cli/flow-weaver-chunk-NYZDQYFU.mjs +45 -0
- package/dist/cli/flow-weaver-chunk-OMVWSNHJ.mjs +14 -0
- package/dist/cli/flow-weaver-chunk-PUWZ47H5.mjs +2188 -0
- package/dist/cli/flow-weaver-chunk-QOPRVDES.mjs +46 -0
- package/dist/cli/flow-weaver-chunk-RIWE7YTR.mjs +216 -0
- package/dist/cli/flow-weaver-chunk-S63Q3JIU.mjs +789 -0
- package/dist/cli/flow-weaver-chunk-T7X5A23H.mjs +558 -0
- package/dist/cli/flow-weaver-chunk-TLV3VZUN.mjs +2 -0
- package/dist/cli/flow-weaver-chunk-TS5P3PIN.mjs +194 -0
- package/dist/cli/flow-weaver-chunk-U3EO3X4B.mjs +649 -0
- package/dist/cli/flow-weaver-chunk-UNFS3NQP.mjs +34 -0
- package/dist/cli/flow-weaver-chunk-V6DHWFQG.mjs +2811 -0
- package/dist/cli/flow-weaver-chunk-VXWNLYQU.mjs +9 -0
- package/dist/cli/flow-weaver-chunk-W3YNK26P.mjs +149 -0
- package/dist/cli/flow-weaver-chunk-XG2WKXYZ.mjs +324 -0
- package/dist/cli/flow-weaver-chunk-YLSRZWFK.mjs +2219 -0
- package/dist/cli/flow-weaver-chunk-YVPURWS6.mjs +40 -0
- package/dist/cli/flow-weaver-chunk-Z44JK332.mjs +582 -0
- package/dist/cli/flow-weaver-chunk-Z5ZJPNSY.mjs +517 -0
- package/dist/cli/flow-weaver-chunk-ZQALO25T.mjs +594 -0
- package/dist/cli/flow-weaver-compile-A2CABDSB.mjs +37 -0
- package/dist/cli/flow-weaver-console-6EBHDBTN.mjs +71 -0
- package/dist/cli/flow-weaver-context-ECLYANFF.mjs +17 -0
- package/dist/cli/flow-weaver-context-ZRUMW2KE.mjs +69 -0
- package/dist/cli/flow-weaver-create-WIP4EFNP.mjs +124 -0
- package/dist/cli/flow-weaver-deployment-WJJRK7NO.mjs +14 -0
- package/dist/cli/flow-weaver-describe-XDIFF5LI.mjs +41 -0
- package/dist/cli/flow-weaver-dev-LG2NSQAU.mjs +196 -0
- package/dist/cli/flow-weaver-diagram-3EVQARQE.mjs +52 -0
- package/dist/cli/flow-weaver-diagram-7LR7O4M2.mjs +44 -0
- package/dist/cli/flow-weaver-diff-USF7DJLU.mjs +85 -0
- package/dist/cli/flow-weaver-docs-QU2ZOXKH.mjs +96 -0
- package/dist/cli/flow-weaver-doctor-K447YWHR.mjs +43 -0
- package/dist/cli/flow-weaver-export-LAS6N56Y.mjs +140 -0
- package/dist/cli/flow-weaver-grammar-RIRUS3Q6.mjs +49 -0
- package/dist/cli/flow-weaver-grammar-diagrams-WXRTW5SK.mjs +15 -0
- package/dist/cli/flow-weaver-implement-5JG6BCFZ.mjs +114 -0
- package/dist/cli/flow-weaver-index.min-OR5SIHXD.mjs +39 -0
- package/dist/cli/flow-weaver-init-34YZNPQX.mjs +972 -0
- package/dist/cli/flow-weaver-init-personas-NOGZTQQ2.mjs +48 -0
- package/dist/cli/flow-weaver-manifest-4JNUSEB3.mjs +18 -0
- package/dist/cli/flow-weaver-market-WA4CKHKV.mjs +444 -0
- package/dist/cli/flow-weaver-mcp-setup-O26MGXSD.mjs +22 -0
- package/dist/cli/flow-weaver-migrate-VFVEUTPH.mjs +119 -0
- package/dist/cli/flow-weaver-modify-VM3JP5K6.mjs +97 -0
- package/dist/cli/flow-weaver-openapi-IRBWI3HM.mjs +71 -0
- package/dist/cli/flow-weaver-openapi-document-7N6YMPG3.mjs +30 -0
- package/dist/cli/flow-weaver-pack-commands-OS2QRXAK.mjs +146 -0
- package/dist/cli/flow-weaver-registry-5MLFRPPT.mjs +25 -0
- package/dist/cli/flow-weaver-run-DSTLSTHR.mjs +555 -0
- package/dist/cli/flow-weaver-serialization-node-LE6PCG4M.mjs +50 -0
- package/dist/cli/flow-weaver-serve-NVLCLSOW.mjs +192 -0
- package/dist/cli/flow-weaver-server-7IERLVXE.mjs +2925 -0
- package/dist/cli/flow-weaver-server-KWF4PXYC.mjs +19112 -0
- package/dist/cli/flow-weaver-status-75W2S3YB.mjs +138 -0
- package/dist/cli/flow-weaver-strip-AZPXUYVA.mjs +79 -0
- package/dist/cli/flow-weaver-templates-DSNMB6K7.mjs +72 -0
- package/dist/cli/flow-weaver-validate-A4UWDQN6.mjs +19 -0
- package/dist/cli/flow-weaver-validate-GRBZ5W4C.mjs +296 -0
- package/dist/cli/flow-weaver-validation-registry-BINGUNXX.mjs +9 -0
- package/dist/cli/flow-weaver-validator-TY56CI42.mjs +21 -0
- package/dist/cli/flow-weaver-watch-OPPERXL6.mjs +114 -0
- package/dist/cli/flow-weaver-workflow-executor-6AHYPXAN.mjs +26 -0
- package/dist/cli/flow-weaver.mjs +3557 -89498
- package/dist/cli/index.d.ts +5 -2
- package/dist/cli/pack-commands-needed.d.ts +12 -0
- package/dist/cli/program.d.ts +14 -0
- package/dist/cli/templates/ai/mock-provider.d.ts +1 -1
- package/dist/cli/templates/index.d.ts +1 -8
- package/dist/cli/templates/nodes/agent-router.d.ts +1 -1
- package/dist/cli/templates/nodes/aggregator.d.ts +1 -1
- package/dist/cli/templates/nodes/conversation-memory.d.ts +1 -1
- package/dist/cli/templates/nodes/http.d.ts +1 -1
- package/dist/cli/templates/nodes/human-approval.d.ts +1 -1
- package/dist/cli/templates/nodes/json-extractor.d.ts +1 -1
- package/dist/cli/templates/nodes/llm-call.d.ts +1 -1
- package/dist/cli/templates/nodes/prompt-template.d.ts +1 -1
- package/dist/cli/templates/nodes/rag-retriever.d.ts +1 -1
- package/dist/cli/templates/nodes/tool-executor.d.ts +1 -1
- package/dist/cli/templates/nodes/transformer.d.ts +1 -1
- package/dist/cli/templates/nodes/validator.d.ts +1 -1
- package/dist/cli/templates/shared/approval-types.d.ts +1 -1
- package/dist/cli/templates/shared/case.d.ts +14 -0
- package/dist/cli/templates/shared/llm-types.d.ts +4 -4
- package/dist/cli/templates/workflows/aggregator.d.ts +1 -1
- package/dist/cli/templates/workflows/ai-agent.d.ts +1 -1
- package/dist/cli/templates/workflows/ai-chat.d.ts +1 -1
- package/dist/cli/templates/workflows/ai-rag.d.ts +1 -1
- package/dist/cli/templates/workflows/ai-react.d.ts +1 -1
- package/dist/cli/templates/workflows/approval.d.ts +10 -0
- package/dist/cli/templates/workflows/conditional.d.ts +2 -2
- package/dist/cli/templates/workflows/error-handler.d.ts +2 -2
- package/dist/cli/templates/workflows/foreach.d.ts +1 -1
- package/dist/cli/templates/workflows/sequential.d.ts +1 -1
- package/dist/cli/templates/workflows/webhook.d.ts +1 -1
- package/dist/cli/utils/interactive.d.ts +6 -0
- package/dist/cli/utils/json-option.d.ts +8 -0
- package/dist/cli/utils/logger.d.ts +2 -0
- package/dist/compiler/durable-source-proof.d.ts +23 -0
- package/dist/compiler/executable-artifact.d.ts +29 -0
- package/dist/compiler/index.d.ts +4 -0
- package/dist/compiler/index.js +36 -0
- package/dist/console/app.js +106 -0
- package/dist/console/assets/synergenius.svg +18 -0
- package/dist/console/author.d.ts +32 -0
- package/dist/console/cli-catalog.d.ts +21 -0
- package/dist/console/cli-run.d.ts +35 -0
- package/dist/console/cli-run.js +46 -0
- package/dist/console/debug.d.ts +67 -0
- package/dist/console/diff-view.d.ts +96 -0
- package/dist/console/export.d.ts +36 -0
- package/dist/console/git.d.ts +27 -0
- package/dist/console/index.d.ts +4 -0
- package/dist/console/index.html +16 -0
- package/dist/console/index.js +203 -0
- package/dist/console/packs.d.ts +100 -0
- package/dist/console/request-guard.d.ts +10 -0
- package/dist/console/respond.d.ts +16 -0
- package/dist/console/router.d.ts +64 -0
- package/dist/console/routes-agents.d.ts +14 -0
- package/dist/console/routes-project.d.ts +3 -0
- package/dist/console/routes-runs.d.ts +3 -0
- package/dist/console/routes-services.d.ts +7 -0
- package/dist/console/routes-tools.d.ts +3 -0
- package/dist/console/runs.d.ts +69 -0
- package/dist/console/scan.d.ts +49 -0
- package/dist/console/schema.d.ts +74 -0
- package/dist/console/server.d.ts +34 -0
- package/dist/console/server.js +43264 -0
- package/dist/console/services.d.ts +119 -0
- package/dist/console/source.d.ts +23 -0
- package/dist/console/status.d.ts +68 -0
- package/dist/console/styles.css +1023 -0
- package/dist/console/terminals.d.ts +22 -0
- package/dist/console/workflow-view.d.ts +153 -0
- package/dist/constants.d.ts +5 -1
- package/dist/constants.js +56 -167
- package/dist/context/index.d.ts +10 -0
- package/dist/context/index.js +14 -191
- package/dist/coordinator/agent-gate.d.ts +107 -0
- package/dist/coordinator/bundle-digest.d.ts +20 -0
- package/dist/coordinator/clock-tick.d.ts +4 -0
- package/dist/coordinator/effect-receipts.d.ts +10 -0
- package/dist/coordinator/errors.d.ts +31 -0
- package/dist/coordinator/file-store.d.ts +3 -0
- package/dist/coordinator/gate-labeling.d.ts +33 -0
- package/dist/coordinator/gate-resolution.d.ts +28 -0
- package/dist/coordinator/index.d.ts +12 -0
- package/dist/coordinator/index.js +107 -0
- package/dist/coordinator/memory-store.d.ts +3 -0
- package/dist/coordinator/params.d.ts +18 -0
- package/dist/coordinator/run-annotations.d.ts +6 -0
- package/dist/coordinator/run-context.d.ts +11 -0
- package/dist/coordinator/run-ending.d.ts +5 -0
- package/dist/coordinator/run-outcome.d.ts +31 -0
- package/dist/coordinator/run-resume.d.ts +6 -0
- package/dist/coordinator/run-start.d.ts +4 -0
- package/dist/coordinator/run-store.d.ts +275 -0
- package/dist/coordinator/run-trace.d.ts +41 -0
- package/dist/coordinator/run-views.d.ts +12 -0
- package/dist/coordinator/runs-dir.d.ts +26 -0
- package/dist/coordinator/store.d.ts +67 -0
- package/dist/coordinator/time.d.ts +39 -0
- package/dist/coordinator/workflow-selection.d.ts +6 -0
- package/dist/deployment/index.d.ts +11 -16
- package/dist/deployment/index.js +541 -50
- package/dist/deployment/targets/base.d.ts +11 -13
- package/dist/deployment/targets/openapi-parts.d.ts +92 -0
- package/dist/diagram/arms.d.ts +70 -0
- package/dist/diagram/ascii-renderer.d.ts +1 -1
- package/dist/diagram/geometry.d.ts +22 -29
- package/dist/diagram/graph/bounds.d.ts +30 -0
- package/dist/diagram/graph/metrics.d.ts +21 -0
- package/dist/diagram/graph/nodes.d.ts +33 -0
- package/dist/diagram/graph/placement.d.ts +22 -0
- package/dist/diagram/graph/ports.d.ts +23 -0
- package/dist/diagram/graph/routing.d.ts +40 -0
- package/dist/diagram/graph/scopes.d.ts +30 -0
- package/dist/diagram/index.d.ts +15 -23
- package/dist/diagram/index.js +632 -111
- package/dist/diagram/labels.d.ts +12 -0
- package/dist/diagram/lanes.d.ts +93 -0
- package/dist/diagram/layout.d.ts +1 -1
- package/dist/diagram/material-symbols.d.ts +7 -0
- package/dist/diagram/orthogonal-router.d.ts +15 -51
- package/dist/diagram/process-view.d.ts +79 -0
- package/dist/diagram/spine.d.ts +25 -0
- package/dist/diagram/theme.d.ts +3 -5
- package/dist/diagram/types.d.ts +6 -20
- package/dist/diff/index.js +53 -9
- package/dist/diff/types.d.ts +1 -5
- package/dist/doc-metadata/extractors/annotations.d.ts +0 -4
- package/dist/doc-metadata/extractors/cli-commands.d.ts +2 -1
- package/dist/doc-metadata/extractors/core-metadata.d.ts +19 -4
- package/dist/doc-metadata/extractors/error-codes.d.ts +1 -1
- package/dist/doc-metadata/extractors/mcp-tools.d.ts +7 -3
- package/dist/doc-metadata/index.d.ts +1 -2
- package/dist/doc-metadata/index.js +2368 -9
- package/dist/doc-metadata/types.d.ts +7 -24
- package/dist/docs/guide.d.ts +33 -0
- package/dist/docs/index.d.ts +7 -4
- package/dist/docs/index.js +298 -298
- package/dist/docs/pack-topics.d.ts +18 -0
- package/dist/editor-completions/annotationValues.d.ts +1 -1
- package/dist/editor-completions/contextParser.d.ts +3 -2
- package/dist/editor-completions/dataTypes.d.ts +1 -1
- package/dist/editor-completions/goToDefinition.d.ts +1 -1
- package/dist/editor-completions/index.d.ts +8 -8
- package/dist/editor-completions/index.js +1244 -175
- package/dist/editor-completions/jsDocAnnotations.d.ts +1 -1
- package/dist/editor-completions/modifierCompletions.d.ts +1 -1
- package/dist/export/index.d.ts +7 -1
- package/dist/generated-branding.js +8 -21
- package/dist/generated-version.d.ts +1 -1
- package/dist/generated-version.js +7 -3
- package/dist/generator/annotation-generator.d.ts +84 -0
- package/dist/generator/async-detection.d.ts +1 -1
- package/dist/{body-generator.d.ts → generator/body-generator.d.ts} +7 -3
- package/dist/generator/code-utils.d.ts +15 -60
- package/dist/generator/connection-reads.d.ts +94 -0
- package/dist/generator/control-flow-plan.d.ts +74 -0
- package/dist/generator/control-flow.d.ts +1 -1
- package/dist/generator/exit-assembly.d.ts +11 -0
- package/dist/generator/index.d.ts +4 -5
- package/dist/generator/index.js +34 -11
- package/dist/generator/input-port-values.d.ts +22 -0
- package/dist/generator/{scope-function-generator.d.ts → node-arguments.d.ts} +76 -1
- package/dist/generator/node-invocation.d.ts +74 -0
- package/dist/{node-types-generator.d.ts → generator/node-types-generator.d.ts} +3 -2
- package/dist/generator/scope-closure.d.ts +23 -0
- package/dist/generator/scoped-child.d.ts +49 -0
- package/dist/{sugar-optimizer.d.ts → generator/sugar-optimizer.d.ts} +1 -1
- package/dist/generator/unified.d.ts +14 -2
- package/dist/generator/workflow-generator.d.ts +37 -0
- package/dist/index.d.ts +29 -26
- package/dist/index.js +1322 -92
- package/dist/jsdoc-port-sync/apply-diff.d.ts +15 -0
- package/dist/jsdoc-port-sync/callback-signature.d.ts +17 -0
- package/dist/jsdoc-port-sync/diff.d.ts +5 -7
- package/dist/jsdoc-port-sync/incomplete-lines.d.ts +41 -0
- package/dist/jsdoc-port-sync/index.d.ts +11 -11
- package/dist/jsdoc-port-sync/index.js +88 -45
- package/dist/jsdoc-port-sync/jsdoc-to-signature.d.ts +66 -0
- package/dist/jsdoc-port-sync/port-parser.d.ts +6 -24
- package/dist/jsdoc-port-sync/port-tag-placement.d.ts +55 -0
- package/dist/jsdoc-port-sync/scoped-ports.d.ts +21 -0
- package/dist/jsdoc-port-sync/signature-parser.d.ts +8 -1
- package/dist/jsdoc-port-sync/signature-to-jsdoc.d.ts +77 -0
- package/dist/jsdoc-port-sync/sync.d.ts +4 -1
- package/dist/marketplace/index.d.ts +5 -3
- package/dist/marketplace/index.js +62 -10
- package/dist/marketplace/install.d.ts +24 -0
- package/dist/marketplace/manifest.d.ts +1 -1
- package/dist/marketplace/npmrc.d.ts +24 -0
- package/dist/marketplace/registry.d.ts +46 -11
- package/dist/marketplace/types.d.ts +41 -24
- package/dist/marketplace/validator.d.ts +1 -1
- package/dist/mcp/debug-session.d.ts +2 -4
- package/dist/mcp/dist-imports.d.ts +12 -0
- package/dist/mcp/response-utils.d.ts +11 -9
- package/dist/mcp/server.d.ts +0 -1
- package/dist/mcp/tools-context.d.ts +11 -0
- package/dist/mcp/tools-diagram.d.ts +1 -2
- package/dist/mcp/tools-export.d.ts +2 -2
- package/dist/mcp/tools-marketplace.d.ts +1 -1
- package/dist/mcp/tools-run.d.ts +17 -0
- package/dist/mcp/tools-workflow.d.ts +3 -0
- package/dist/mcp/types.d.ts +4 -14
- package/dist/mcp/workflow-executor.d.ts +57 -19
- package/dist/npm-packages.d.ts +1 -1
- package/dist/npm-packages.js +10 -473
- package/dist/parser/annotation-parser.d.ts +88 -0
- package/dist/parser/annotation-suggestion.d.ts +23 -0
- package/dist/parser/durable-effect-contract.d.ts +10 -0
- package/dist/parser/expression-references.d.ts +101 -0
- package/dist/parser/external-node-types.d.ts +69 -0
- package/dist/{function-like.d.ts → parser/function-like.d.ts} +10 -3
- package/dist/parser/generated-sections.d.ts +25 -0
- package/dist/parser/import-resolution.d.ts +67 -0
- package/dist/parser/import-stub.d.ts +29 -0
- package/dist/parser/jsdoc/config-types.d.ts +209 -0
- package/dist/parser/jsdoc/graph-tags.d.ts +54 -0
- package/dist/parser/jsdoc/node-type-block.d.ts +23 -0
- package/dist/parser/jsdoc/parse-line-once.d.ts +11 -0
- package/dist/parser/jsdoc/port-tags.d.ts +42 -0
- package/dist/parser/jsdoc/runtime-tags.d.ts +65 -0
- package/dist/parser/jsdoc/signature-types.d.ts +52 -0
- package/dist/parser/jsdoc/workflow-block.d.ts +22 -0
- package/dist/parser/jsdoc-parser.d.ts +23 -0
- package/dist/parser/macro-expansion.d.ts +80 -0
- package/dist/parser/module-resolution.d.ts +38 -0
- package/dist/parser/node-inference.d.ts +39 -0
- package/dist/parser/npm-node-types.d.ts +24 -0
- package/dist/parser/pack-handlers.d.ts +12 -0
- package/dist/parser/path-data-resolution.d.ts +75 -0
- package/dist/parser/port-inference.d.ts +15 -0
- package/dist/{resolve-package-types.d.ts → parser/resolve-package-types.d.ts} +4 -0
- package/dist/parser/serialize-deploy-annotations.d.ts +19 -0
- package/dist/parser/tag-registry.d.ts +22 -0
- package/dist/parser/workflow-extraction.d.ts +39 -0
- package/dist/runtime/ExecutionContext.d.ts +87 -99
- package/dist/runtime/continuation-core.d.ts +147 -0
- package/dist/runtime/continuation.d.ts +48 -0
- package/dist/runtime/debug-controller.d.ts +7 -22
- package/dist/runtime/durable-execution.d.ts +176 -0
- package/dist/runtime/events.d.ts +16 -1
- package/dist/runtime/executable-module-contract.d.ts +16 -0
- package/dist/runtime/index.d.ts +13 -10
- package/dist/runtime/index.js +947 -9
- package/dist/runtime/strict-json.d.ts +15 -0
- package/dist/server/access.d.ts +12 -0
- package/dist/server/api.d.ts +126 -0
- package/dist/server/callback-delivery.d.ts +62 -0
- package/dist/server/callback-url.d.ts +44 -0
- package/dist/server/context.d.ts +35 -0
- package/dist/server/http-error.d.ts +10 -0
- package/dist/server/index.d.ts +7 -1
- package/dist/server/index.js +125 -6
- package/dist/server/openapi-document.d.ts +33 -0
- package/dist/server/openapi.d.ts +32 -0
- package/dist/server/respond.d.ts +35 -0
- package/dist/server/route-params.d.ts +17 -0
- package/dist/server/route-plan.d.ts +41 -0
- package/dist/server/routes-catalog.d.ts +5 -0
- package/dist/server/routes-declared.d.ts +12 -0
- package/dist/server/routes-runs.d.ts +8 -0
- package/dist/server/run-driver.d.ts +58 -0
- package/dist/server/run-view.d.ts +26 -0
- package/dist/server/transport.d.ts +35 -0
- package/dist/server/types.d.ts +143 -52
- package/dist/server/webhook-server.d.ts +12 -38
- package/dist/server/workflow-registry.d.ts +7 -4
- package/dist/service-registry.d.ts +49 -0
- package/dist/service-registry.js +123 -0
- package/dist/testing/assertions.d.ts +2 -2
- package/dist/testing/index.d.ts +14 -13
- package/dist/testing/index.js +582 -24
- package/dist/testing/mock-approval.d.ts +3 -5
- package/dist/testing/mock-llm.d.ts +2 -3
- package/dist/testing/recorder.d.ts +5 -6
- package/dist/testing/replayer.d.ts +6 -7
- package/dist/testing/run-store-check.d.ts +3 -0
- package/dist/testing/token-tracker.d.ts +2 -2
- package/dist/{type-mappings.d.ts → types/type-mappings.d.ts} +13 -1
- package/dist/utils/error-utils.d.ts +4 -2
- package/dist/utils/port-ordering.d.ts +2 -2
- package/dist/utils/port-tag-utils.d.ts +1 -1
- package/dist/validation/agent-detection.d.ts +17 -5
- package/dist/validation/agent-rules.d.ts +6 -7
- package/dist/validation/core-rules.d.ts +49 -0
- package/dist/validation/design-rules.d.ts +9 -3
- package/dist/validation/rule-registry.d.ts +3 -3
- package/dist/validation/rules/connections.d.ts +27 -0
- package/dist/validation/rules/context.d.ts +11 -0
- package/dist/validation/rules/cycles.d.ts +17 -0
- package/dist/validation/rules/data-flow.d.ts +19 -0
- package/dist/validation/rules/scope-topology.d.ts +35 -0
- package/dist/validation/rules/type-compatibility.d.ts +30 -0
- package/dist/validation/type-checker.d.ts +39 -0
- package/dist/validation/validator-helpers.d.ts +31 -0
- package/dist/validation/validator.d.ts +30 -0
- package/docs/reference/advanced-annotations.md +277 -60
- package/docs/reference/built-in-nodes.md +164 -94
- package/docs/reference/cancellation.md +44 -0
- package/docs/reference/cli-reference.md +252 -234
- package/docs/reference/compilation.md +36 -109
- package/docs/reference/concepts.md +80 -63
- package/docs/reference/console.md +169 -0
- package/docs/reference/debugging.md +26 -57
- package/docs/reference/deployment.md +217 -143
- package/docs/reference/durable-gates.md +445 -0
- package/docs/reference/error-codes.md +90 -43
- package/docs/reference/export-interface.md +91 -26
- package/docs/reference/iterative-development.md +50 -28
- package/docs/reference/jsdoc-grammar.md +66 -311
- package/docs/reference/library.md +250 -0
- package/docs/reference/marketplace.md +301 -152
- package/docs/reference/mcp-tools.md +102 -0
- package/docs/reference/node-conversion.md +84 -59
- package/docs/reference/orientation.md +68 -0
- package/docs/reference/scaffold.md +5 -4
- package/docs/reference/tutorial.md +106 -166
- package/docs/reference/visual-reference.md +1 -1
- package/package.json +85 -50
- package/dist/agent/agent-loop.js +0 -156
- package/dist/agent/cli-spawn-config.js +0 -65
- package/dist/agent/device-connection.d.ts +0 -79
- package/dist/agent/device-connection.js +0 -184
- package/dist/agent/env-allowlist.js +0 -60
- package/dist/agent/providers/anthropic.js +0 -198
- package/dist/agent/providers/claude-cli.js +0 -161
- package/dist/agent/providers/openai-compat.js +0 -205
- package/dist/agent/providers/platform.d.ts +0 -23
- package/dist/agent/providers/platform.js +0 -132
- package/dist/agent/streaming.js +0 -186
- package/dist/agent/types.js +0 -20
- package/dist/annotation-generator.d.ts +0 -50
- package/dist/annotation-generator.js +0 -743
- package/dist/api/builder.js +0 -345
- package/dist/api/command-runner.js +0 -787
- package/dist/api/compile.js +0 -148
- package/dist/api/extract-types.js +0 -57
- package/dist/api/generate-in-place.js +0 -1477
- package/dist/api/generate.js +0 -514
- package/dist/api/helpers.js +0 -285
- package/dist/api/inline-runtime.js +0 -526
- package/dist/api/manipulation/connections.js +0 -151
- package/dist/api/manipulation/index.js +0 -41
- package/dist/api/manipulation/node-types.js +0 -200
- package/dist/api/manipulation/nodes.js +0 -355
- package/dist/api/manipulation/ports.js +0 -228
- package/dist/api/manipulation/scopes.js +0 -156
- package/dist/api/manipulation/workflow.js +0 -116
- package/dist/api/modify-operation.js +0 -177
- package/dist/api/parse.js +0 -115
- package/dist/api/patterns.d.ts +0 -112
- package/dist/api/patterns.js +0 -303
- package/dist/api/query.js +0 -840
- package/dist/api/templates.js +0 -117
- package/dist/api/transform.js +0 -40
- package/dist/api/validate.js +0 -64
- package/dist/api/validation-registry.js +0 -10
- package/dist/api/workflow-file-operations.js +0 -180
- package/dist/ast/builder.js +0 -395
- package/dist/ast/serialization-node.js +0 -30
- package/dist/ast/serialization.js +0 -134
- package/dist/ast/types.js +0 -2
- package/dist/ast/workflow-utils.js +0 -114
- package/dist/body-generator.js +0 -35
- package/dist/built-in-nodes/coercion-types.js +0 -61
- package/dist/built-in-nodes/delay.js +0 -29
- package/dist/built-in-nodes/generated-registry.js +0 -299
- package/dist/built-in-nodes/invoke-workflow.js +0 -36
- package/dist/built-in-nodes/mock-types.js +0 -42
- package/dist/built-in-nodes/wait-for-agent.js +0 -31
- package/dist/built-in-nodes/wait-for-event.js +0 -25
- package/dist/chevrotain-parser/coerce-parser.js +0 -103
- package/dist/chevrotain-parser/connect-parser.js +0 -136
- package/dist/chevrotain-parser/fan-parser.js +0 -149
- package/dist/chevrotain-parser/grammar-diagrams.js +0 -273
- package/dist/chevrotain-parser/index.js +0 -31
- package/dist/chevrotain-parser/map-parser.js +0 -130
- package/dist/chevrotain-parser/node-parser.js +0 -558
- package/dist/chevrotain-parser/path-parser.js +0 -140
- package/dist/chevrotain-parser/port-parser.js +0 -519
- package/dist/chevrotain-parser/position-parser.d.ts +0 -20
- package/dist/chevrotain-parser/position-parser.js +0 -83
- package/dist/chevrotain-parser/scope-parser.js +0 -104
- package/dist/chevrotain-parser/tokens.js +0 -429
- package/dist/chevrotain-parser/trigger-cancel-parser.js +0 -291
- package/dist/cli/commands/account.d.ts +0 -4
- package/dist/cli/commands/account.js +0 -50
- package/dist/cli/commands/ai-credentials.d.ts +0 -12
- package/dist/cli/commands/ai-credentials.js +0 -95
- package/dist/cli/commands/apikey.d.ts +0 -4
- package/dist/cli/commands/apikey.js +0 -64
- package/dist/cli/commands/auth.d.ts +0 -9
- package/dist/cli/commands/auth.js +0 -255
- package/dist/cli/commands/compile.js +0 -331
- package/dist/cli/commands/connect.d.ts +0 -4
- package/dist/cli/commands/connect.js +0 -163
- package/dist/cli/commands/context.js +0 -51
- package/dist/cli/commands/create.js +0 -139
- package/dist/cli/commands/deploy.d.ts +0 -6
- package/dist/cli/commands/deploy.js +0 -74
- package/dist/cli/commands/dev.js +0 -227
- package/dist/cli/commands/diagram.js +0 -39
- package/dist/cli/commands/diff.js +0 -57
- package/dist/cli/commands/docs.js +0 -74
- package/dist/cli/commands/export.js +0 -153
- package/dist/cli/commands/grammar.js +0 -40
- package/dist/cli/commands/implement.js +0 -91
- package/dist/cli/commands/init-personas.js +0 -541
- package/dist/cli/commands/init.js +0 -797
- package/dist/cli/commands/market.js +0 -440
- package/dist/cli/commands/mcp-setup.js +0 -433
- package/dist/cli/commands/migrate.js +0 -91
- package/dist/cli/commands/modify.js +0 -58
- package/dist/cli/commands/openapi.js +0 -71
- package/dist/cli/commands/org.d.ts +0 -8
- package/dist/cli/commands/org.js +0 -136
- package/dist/cli/commands/pattern.d.ts +0 -34
- package/dist/cli/commands/pattern.js +0 -186
- package/dist/cli/commands/plugin.d.ts +0 -16
- package/dist/cli/commands/plugin.js +0 -176
- package/dist/cli/commands/run.js +0 -742
- package/dist/cli/commands/serve.js +0 -93
- package/dist/cli/commands/status.js +0 -123
- package/dist/cli/commands/strip.js +0 -61
- package/dist/cli/commands/templates.js +0 -58
- package/dist/cli/commands/validate.js +0 -267
- package/dist/cli/commands/watch.js +0 -71
- package/dist/cli/config/credentials.d.ts +0 -15
- package/dist/cli/config/credentials.js +0 -43
- package/dist/cli/config/platform-client.d.ts +0 -123
- package/dist/cli/config/platform-client.js +0 -248
- package/dist/cli/env-setup.js +0 -12
- package/dist/cli/index.js +0 -850
- package/dist/cli/pack-commands.js +0 -122
- package/dist/cli/postinstall.d.ts +0 -16
- package/dist/cli/postinstall.js +0 -119
- package/dist/cli/templates/ai/mock-provider.js +0 -64
- package/dist/cli/templates/ai/types.js +0 -5
- package/dist/cli/templates/approvals/index.d.ts +0 -15
- package/dist/cli/templates/approvals/index.js +0 -241
- package/dist/cli/templates/index.js +0 -123
- package/dist/cli/templates/nodes/agent-router.js +0 -114
- package/dist/cli/templates/nodes/aggregator.js +0 -63
- package/dist/cli/templates/nodes/conversation-memory.js +0 -85
- package/dist/cli/templates/nodes/http.js +0 -80
- package/dist/cli/templates/nodes/human-approval.js +0 -109
- package/dist/cli/templates/nodes/json-extractor.js +0 -119
- package/dist/cli/templates/nodes/llm-call.js +0 -106
- package/dist/cli/templates/nodes/prompt-template.js +0 -52
- package/dist/cli/templates/nodes/rag-retriever.js +0 -128
- package/dist/cli/templates/nodes/tool-executor.js +0 -108
- package/dist/cli/templates/nodes/transformer.js +0 -68
- package/dist/cli/templates/nodes/validator.js +0 -62
- package/dist/cli/templates/pack-loader.js +0 -58
- package/dist/cli/templates/providers/index.js +0 -239
- package/dist/cli/templates/shared/approval-types.js +0 -31
- package/dist/cli/templates/shared/llm-types.js +0 -109
- package/dist/cli/templates/workflows/aggregator.js +0 -101
- package/dist/cli/templates/workflows/ai-agent.js +0 -326
- package/dist/cli/templates/workflows/ai-chat.js +0 -167
- package/dist/cli/templates/workflows/ai-rag.js +0 -184
- package/dist/cli/templates/workflows/ai-react.js +0 -293
- package/dist/cli/templates/workflows/conditional.js +0 -139
- package/dist/cli/templates/workflows/error-handler.js +0 -145
- package/dist/cli/templates/workflows/foreach.js +0 -140
- package/dist/cli/templates/workflows/sequential.js +0 -200
- package/dist/cli/templates/workflows/webhook.js +0 -158
- package/dist/cli/utils/cli-helpers.d.ts +0 -44
- package/dist/cli/utils/cli-helpers.js +0 -99
- package/dist/cli/utils/logger.js +0 -126
- package/dist/cli/utils/parse-int-strict.js +0 -17
- package/dist/cli/utils/safe-write.js +0 -54
- package/dist/deployment/config/defaults.d.ts +0 -29
- package/dist/deployment/config/defaults.js +0 -98
- package/dist/deployment/config/loader.d.ts +0 -24
- package/dist/deployment/config/loader.js +0 -237
- package/dist/deployment/config/types.d.ts +0 -117
- package/dist/deployment/config/types.js +0 -5
- package/dist/deployment/core/adapters.d.ts +0 -66
- package/dist/deployment/core/adapters.js +0 -156
- package/dist/deployment/core/executor.d.ts +0 -62
- package/dist/deployment/core/executor.js +0 -197
- package/dist/deployment/core/formatters.d.ts +0 -42
- package/dist/deployment/core/formatters.js +0 -146
- package/dist/deployment/openapi/generator.d.ts +0 -146
- package/dist/deployment/openapi/generator.js +0 -347
- package/dist/deployment/openapi/schema-converter.d.ts +0 -49
- package/dist/deployment/openapi/schema-converter.js +0 -192
- package/dist/deployment/targets/base.js +0 -855
- package/dist/deployment/types.d.ts +0 -140
- package/dist/deployment/types.js +0 -8
- package/dist/diagram/ascii-renderer.js +0 -528
- package/dist/diagram/geometry.js +0 -1267
- package/dist/diagram/html-viewer.d.ts +0 -21
- package/dist/diagram/html-viewer.js +0 -1689
- package/dist/diagram/layout.js +0 -143
- package/dist/diagram/orthogonal-router.js +0 -568
- package/dist/diagram/renderer.d.ts +0 -3
- package/dist/diagram/renderer.js +0 -266
- package/dist/diagram/theme.js +0 -282
- package/dist/diagram/types.js +0 -2
- package/dist/diff/WorkflowDiffer.js +0 -429
- package/dist/diff/formatDiff.js +0 -239
- package/dist/diff/impact.js +0 -119
- package/dist/diff/types.js +0 -35
- package/dist/doc-metadata/extractors/annotations.js +0 -638
- package/dist/doc-metadata/extractors/cli-commands.js +0 -326
- package/dist/doc-metadata/extractors/core-metadata.js +0 -61
- package/dist/doc-metadata/extractors/error-codes.js +0 -372
- package/dist/doc-metadata/extractors/grammar-rules.js +0 -51
- package/dist/doc-metadata/extractors/mcp-tools.js +0 -705
- package/dist/doc-metadata/extractors/plugin-api.d.ts +0 -19
- package/dist/doc-metadata/extractors/plugin-api.js +0 -279
- package/dist/doc-metadata/types.js +0 -5
- package/dist/editor-completions/annotationValues.js +0 -146
- package/dist/editor-completions/contextParser.js +0 -410
- package/dist/editor-completions/dataTypes.js +0 -95
- package/dist/editor-completions/goToDefinition.js +0 -112
- package/dist/editor-completions/jsDocAnnotations.js +0 -359
- package/dist/editor-completions/modifierCompletions.js +0 -197
- package/dist/editor-completions/types.js +0 -8
- package/dist/export/index.js +0 -212
- package/dist/extensions/index.d.ts +0 -16
- package/dist/extensions/index.js +0 -17
- package/dist/friendly-errors.js +0 -761
- package/dist/function-like.js +0 -84
- package/dist/generator/async-detection.js +0 -56
- package/dist/generator/code-utils.js +0 -551
- package/dist/generator/compile-target-registry.d.ts +0 -20
- package/dist/generator/compile-target-registry.js +0 -20
- package/dist/generator/control-flow.js +0 -358
- package/dist/generator/dev-mode-registry.d.ts +0 -27
- package/dist/generator/dev-mode-registry.js +0 -20
- package/dist/generator/scope-function-generator.js +0 -397
- package/dist/generator/unified.js +0 -1831
- package/dist/generator.d.ts +0 -54
- package/dist/generator.js +0 -101
- package/dist/jsdoc-parser.d.ts +0 -377
- package/dist/jsdoc-parser.js +0 -1189
- package/dist/jsdoc-port-sync/constants.js +0 -103
- package/dist/jsdoc-port-sync/diff.js +0 -319
- package/dist/jsdoc-port-sync/port-parser.js +0 -579
- package/dist/jsdoc-port-sync/rename.js +0 -256
- package/dist/jsdoc-port-sync/signature-parser.js +0 -559
- package/dist/jsdoc-port-sync/sync.js +0 -653
- package/dist/marketplace/manifest.js +0 -194
- package/dist/marketplace/registry.js +0 -198
- package/dist/marketplace/types.js +0 -9
- package/dist/marketplace/validator.js +0 -150
- package/dist/mcp/agent-channel.d.ts +0 -35
- package/dist/mcp/agent-channel.js +0 -61
- package/dist/mcp/auto-registration.d.ts +0 -3
- package/dist/mcp/auto-registration.js +0 -62
- package/dist/mcp/debug-session.js +0 -25
- package/dist/mcp/index.d.ts +0 -11
- package/dist/mcp/index.js +0 -10
- package/dist/mcp/pack-tools.js +0 -59
- package/dist/mcp/prompts.js +0 -68
- package/dist/mcp/response-utils.js +0 -97
- package/dist/mcp/run-registry.d.ts +0 -29
- package/dist/mcp/run-registry.js +0 -24
- package/dist/mcp/server.js +0 -63
- package/dist/mcp/tools-context.js +0 -51
- package/dist/mcp/tools-debug.js +0 -451
- package/dist/mcp/tools-diagram.js +0 -97
- package/dist/mcp/tools-docs.js +0 -62
- package/dist/mcp/tools-export.js +0 -222
- package/dist/mcp/tools-marketplace.js +0 -132
- package/dist/mcp/tools-model.d.ts +0 -3
- package/dist/mcp/tools-model.js +0 -279
- package/dist/mcp/tools-pattern.d.ts +0 -3
- package/dist/mcp/tools-pattern.js +0 -604
- package/dist/mcp/tools-query.js +0 -377
- package/dist/mcp/tools-resources.js +0 -41
- package/dist/mcp/tools-template.js +0 -119
- package/dist/mcp/tools-workflow-run.d.ts +0 -40
- package/dist/mcp/tools-workflow-run.js +0 -150
- package/dist/mcp/types.js +0 -2
- package/dist/mcp/workflow-executor.js +0 -242
- package/dist/migration/registry.js +0 -29
- package/dist/node-types-generator.js +0 -139
- package/dist/parser/tag-registry.js +0 -57
- package/dist/parser.d.ts +0 -232
- package/dist/parser.js +0 -2500
- package/dist/plugin/PluginPanel.d.ts +0 -12
- package/dist/plugin/PluginPanel.js +0 -5
- package/dist/plugin/index.d.ts +0 -13
- package/dist/plugin/index.js +0 -14
- package/dist/plugin/types.d.ts +0 -75
- package/dist/plugin/types.js +0 -8
- package/dist/resolve-package-types.js +0 -123
- package/dist/runtime/CancellationError.js +0 -20
- package/dist/runtime/ExecutionContext.js +0 -280
- package/dist/runtime/builtin-functions.js +0 -549
- package/dist/runtime/checkpoint.d.ts +0 -84
- package/dist/runtime/checkpoint.js +0 -225
- package/dist/runtime/debug-controller.js +0 -247
- package/dist/runtime/events.js +0 -2
- package/dist/runtime/function-registry.js +0 -66
- package/dist/runtime/parameter-resolver.js +0 -113
- package/dist/server/types.js +0 -5
- package/dist/server/webhook-server.js +0 -269
- package/dist/server/workflow-registry.js +0 -202
- package/dist/shared-project.js +0 -28
- package/dist/sugar-optimizer.js +0 -498
- package/dist/testing/assertions.js +0 -127
- package/dist/testing/mock-approval.js +0 -98
- package/dist/testing/mock-llm.js +0 -119
- package/dist/testing/recorder.js +0 -70
- package/dist/testing/replayer.js +0 -143
- package/dist/testing/token-tracker.js +0 -94
- package/dist/type-checker.d.ts +0 -42
- package/dist/type-checker.js +0 -190
- package/dist/type-mappings.js +0 -131
- package/dist/types/branded-ports.d.ts +0 -151
- package/dist/types/branded-ports.js +0 -121
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -5
- package/dist/types.d.ts +0 -139
- package/dist/types.js +0 -15
- package/dist/utils/error-utils.js +0 -27
- package/dist/utils/lru-cache.js +0 -40
- package/dist/utils/port-ordering.js +0 -81
- package/dist/utils/port-tag-utils.js +0 -41
- package/dist/utils/string-distance.js +0 -56
- package/dist/validation/agent-detection.js +0 -115
- package/dist/validation/agent-rules.js +0 -262
- package/dist/validation/design-rules.js +0 -377
- package/dist/validation/rule-registry.js +0 -37
- package/dist/validator.d.ts +0 -113
- package/dist/validator.js +0 -1631
- package/docs/reference/patterns.md +0 -159
- package/scripts/postinstall.cjs +0 -86
- /package/dist/{shared-project.d.ts → parser/shared-project.d.ts} +0 -0
- /package/dist/{friendly-errors.d.ts → validation/friendly-errors.d.ts} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,92 +1,1322 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
1
|
+
import {
|
|
2
|
+
ConnectionBuilder,
|
|
3
|
+
NodeInstanceBuilder,
|
|
4
|
+
NodeTypeBuilder,
|
|
5
|
+
WorkflowBuilder,
|
|
6
|
+
nodeInstance,
|
|
7
|
+
nodeType,
|
|
8
|
+
port,
|
|
9
|
+
portRef,
|
|
10
|
+
workflow
|
|
11
|
+
} from "./chunks/chunk-CY3RNVML.js";
|
|
12
|
+
import {
|
|
13
|
+
addConnection,
|
|
14
|
+
addConnections,
|
|
15
|
+
addNode,
|
|
16
|
+
addNodeType,
|
|
17
|
+
addNodes,
|
|
18
|
+
addToScope,
|
|
19
|
+
applyModifyOperation,
|
|
20
|
+
assertNodeExists,
|
|
21
|
+
assertNodeNotExists,
|
|
22
|
+
assertNodeTypeExists,
|
|
23
|
+
cloneWorkflow,
|
|
24
|
+
createScope,
|
|
25
|
+
createWorkflow,
|
|
26
|
+
fromAST,
|
|
27
|
+
generateNodeFromTemplate,
|
|
28
|
+
generateUniqueNodeId,
|
|
29
|
+
generateWorkflowFromTemplate,
|
|
30
|
+
getAvailableCommands,
|
|
31
|
+
getNodeType,
|
|
32
|
+
hasNodeType,
|
|
33
|
+
listNodeTemplates,
|
|
34
|
+
listNodeTypes,
|
|
35
|
+
listWorkflowTemplates,
|
|
36
|
+
moveToScope,
|
|
37
|
+
reconnect,
|
|
38
|
+
removeAllConnections,
|
|
39
|
+
removeConnection,
|
|
40
|
+
removeFromScope,
|
|
41
|
+
removeNode,
|
|
42
|
+
removeNodeType,
|
|
43
|
+
removeNodes,
|
|
44
|
+
removeScope,
|
|
45
|
+
renameNode,
|
|
46
|
+
renameNodeType,
|
|
47
|
+
renameWorkflow,
|
|
48
|
+
replaceConnections,
|
|
49
|
+
replaceNodeTypes,
|
|
50
|
+
runCommand,
|
|
51
|
+
setInstancePortConfigs,
|
|
52
|
+
setNodeConfig,
|
|
53
|
+
setNodeLabel,
|
|
54
|
+
setNodeMinimized,
|
|
55
|
+
setNodeSize,
|
|
56
|
+
setOutputFileType,
|
|
57
|
+
setStartExitPorts,
|
|
58
|
+
setWorkflowDescription,
|
|
59
|
+
setWorkflowMetadata,
|
|
60
|
+
setWorkflowPorts,
|
|
61
|
+
swapNodeInstancePortOrder,
|
|
62
|
+
swapPortOrder,
|
|
63
|
+
transformWorkflow,
|
|
64
|
+
updateNode,
|
|
65
|
+
updateNodeType,
|
|
66
|
+
validateModifyParams,
|
|
67
|
+
withMinimalValidation,
|
|
68
|
+
withValidation,
|
|
69
|
+
withoutValidation
|
|
70
|
+
} from "./chunks/chunk-7YYKTPJ5.js";
|
|
71
|
+
import {
|
|
72
|
+
validateWorkflow
|
|
73
|
+
} from "./chunks/chunk-P44RIZ7C.js";
|
|
74
|
+
import "./chunks/chunk-ZKEGXO73.js";
|
|
75
|
+
import {
|
|
76
|
+
ValidationRuleRegistry,
|
|
77
|
+
validationRuleRegistry
|
|
78
|
+
} from "./chunks/chunk-A5MBOFVY.js";
|
|
79
|
+
import {
|
|
80
|
+
IMPACT_COLORS,
|
|
81
|
+
IMPACT_DESCRIPTIONS,
|
|
82
|
+
WorkflowDiffer,
|
|
83
|
+
formatDiff,
|
|
84
|
+
getCriticalConnections,
|
|
85
|
+
getImpactReasons,
|
|
86
|
+
getNodeTypeChanges,
|
|
87
|
+
hasBreakingChanges
|
|
88
|
+
} from "./chunks/chunk-CYHYDLV4.js";
|
|
89
|
+
import {
|
|
90
|
+
formatPortsInFunctionText,
|
|
91
|
+
parsePortsFromFunctionText,
|
|
92
|
+
renamePortInCode,
|
|
93
|
+
syncCodeRenames,
|
|
94
|
+
updatePortsInFunctionText
|
|
95
|
+
} from "./chunks/chunk-FMTLP5ZX.js";
|
|
96
|
+
import {
|
|
97
|
+
GeneratedExecutionContext
|
|
98
|
+
} from "./chunks/chunk-KMCAYNUM.js";
|
|
99
|
+
import {
|
|
100
|
+
AmbiguousEffectError,
|
|
101
|
+
DurableExecution,
|
|
102
|
+
DurableGateYield,
|
|
103
|
+
createWorkflowRuntime,
|
|
104
|
+
isAmbiguousEffectError,
|
|
105
|
+
isDurableGateYield
|
|
106
|
+
} from "./chunks/chunk-OOQG7UPP.js";
|
|
107
|
+
import {
|
|
108
|
+
compileWorkflow,
|
|
109
|
+
generateCode
|
|
110
|
+
} from "./chunks/chunk-F3RTZV2A.js";
|
|
111
|
+
import {
|
|
112
|
+
addWorkflowToSource,
|
|
113
|
+
getAvailableWorkflows,
|
|
114
|
+
removeWorkflowFromSource,
|
|
115
|
+
toggleWorkflowExport
|
|
116
|
+
} from "./chunks/chunk-YSPBPZDV.js";
|
|
117
|
+
import {
|
|
118
|
+
decodeContinuation
|
|
119
|
+
} from "./chunks/chunk-DCMGQP5V.js";
|
|
120
|
+
import "./chunks/chunk-6KMVP6AU.js";
|
|
121
|
+
import {
|
|
122
|
+
COERCE_TYPE_FOR_DATA_TYPE,
|
|
123
|
+
WorkflowValidator,
|
|
124
|
+
validator
|
|
125
|
+
} from "./chunks/chunk-VQ7H33J4.js";
|
|
126
|
+
import "./chunks/chunk-HKZLQJDV.js";
|
|
127
|
+
import {
|
|
128
|
+
parseFunctionSignature,
|
|
129
|
+
parseReturnFields,
|
|
130
|
+
parseReturnTypeFields
|
|
131
|
+
} from "./chunks/chunk-NQNLUAPO.js";
|
|
132
|
+
import {
|
|
133
|
+
generateInPlace
|
|
134
|
+
} from "./chunks/chunk-TAIUWKZB.js";
|
|
135
|
+
import {
|
|
136
|
+
parseWorkflow,
|
|
137
|
+
parseWorkflowSourceAtPath
|
|
138
|
+
} from "./chunks/chunk-INDEVYEC.js";
|
|
139
|
+
import "./chunks/chunk-KU3CLJI2.js";
|
|
140
|
+
import "./chunks/chunk-5Y3AIUWY.js";
|
|
141
|
+
import "./chunks/chunk-CZBCCK4Y.js";
|
|
142
|
+
import {
|
|
143
|
+
configureGeneratedBranding,
|
|
144
|
+
getGeneratedBranding
|
|
145
|
+
} from "./chunks/chunk-AXNQRVJB.js";
|
|
146
|
+
import {
|
|
147
|
+
CONTINUATION_FORMAT_VERSION,
|
|
148
|
+
ENGINE_VERSION,
|
|
149
|
+
ENVELOPE_KEYS,
|
|
150
|
+
GENERATOR_ABI,
|
|
151
|
+
MAX_CONTINUATION_BYTES,
|
|
152
|
+
MAX_CONTINUATION_DEPTH,
|
|
153
|
+
MAX_CONTINUATION_ENTRIES,
|
|
154
|
+
MAX_CONTINUATION_STRING_BYTES,
|
|
155
|
+
WireValidationError,
|
|
156
|
+
acceptContinuation,
|
|
157
|
+
assertAcceptedContinuation,
|
|
158
|
+
canonicalWireValue,
|
|
159
|
+
cloneAndFreezeWireValue,
|
|
160
|
+
continuationChecksum,
|
|
161
|
+
createContinuationEnvelope,
|
|
162
|
+
durableGateId,
|
|
163
|
+
executionAddressKey,
|
|
164
|
+
hasExactlyTheKeys,
|
|
165
|
+
isExecutionAddress,
|
|
166
|
+
isPlainObjectRecord,
|
|
167
|
+
operationKey,
|
|
168
|
+
sha256Hex,
|
|
169
|
+
structurallyValidEnvelope,
|
|
170
|
+
utf8ByteLength,
|
|
171
|
+
validateWireValue
|
|
172
|
+
} from "./chunks/chunk-O2U2LO57.js";
|
|
173
|
+
import "./chunks/chunk-QDE4Z7KW.js";
|
|
174
|
+
import "./chunks/chunk-XAV22WD7.js";
|
|
175
|
+
import {
|
|
176
|
+
countConnections,
|
|
177
|
+
countNodeTypes,
|
|
178
|
+
countNodes,
|
|
179
|
+
findDeadEndDetails,
|
|
180
|
+
findDeadEnds,
|
|
181
|
+
findDisconnectedOutputPorts,
|
|
182
|
+
findIsolatedNodes,
|
|
183
|
+
findNodesByName,
|
|
184
|
+
findPath,
|
|
185
|
+
findUnusedNodeTypes,
|
|
186
|
+
findWorkflows,
|
|
187
|
+
formatPortReference,
|
|
188
|
+
getConnectedPorts,
|
|
189
|
+
getConnections,
|
|
190
|
+
getDataDependencies,
|
|
191
|
+
getDependencies,
|
|
192
|
+
getDependents,
|
|
193
|
+
getExecutionGroups,
|
|
194
|
+
getIncomingConnections,
|
|
195
|
+
getNode,
|
|
196
|
+
getNodes,
|
|
197
|
+
getNodesByType,
|
|
198
|
+
getNodesInScope,
|
|
199
|
+
getOutgoingConnections,
|
|
200
|
+
getTopologicalOrder,
|
|
201
|
+
getTransitiveDependencies,
|
|
202
|
+
getUnconnectedPorts,
|
|
203
|
+
hasNode,
|
|
204
|
+
isConnected,
|
|
205
|
+
portReferencesEqual,
|
|
206
|
+
validatePortReference
|
|
207
|
+
} from "./chunks/chunk-P2CVDGHR.js";
|
|
208
|
+
import {
|
|
209
|
+
AnnotationParser,
|
|
210
|
+
MARKERS,
|
|
211
|
+
hasInPlaceMarkers,
|
|
212
|
+
parser,
|
|
213
|
+
resolveNpmNodeTypes,
|
|
214
|
+
stripGeneratedSections
|
|
215
|
+
} from "./chunks/chunk-ZMGN6F3S.js";
|
|
216
|
+
import "./chunks/chunk-REEYC73I.js";
|
|
217
|
+
import "./chunks/chunk-4EUSHAY6.js";
|
|
218
|
+
import "./chunks/chunk-4KDUEOFD.js";
|
|
219
|
+
import "./chunks/chunk-DUO6H5PR.js";
|
|
220
|
+
import {
|
|
221
|
+
AnnotationGenerator,
|
|
222
|
+
TagHandlerRegistry,
|
|
223
|
+
tagHandlerRegistry
|
|
224
|
+
} from "./chunks/chunk-VP2P3BPA.js";
|
|
225
|
+
import "./chunks/chunk-B6HQ6YS5.js";
|
|
226
|
+
import {
|
|
227
|
+
PORT_TYPE_MAPPINGS,
|
|
228
|
+
getAllPortTypes,
|
|
229
|
+
getPortTypeDescription,
|
|
230
|
+
inferDataTypeFromTS,
|
|
231
|
+
isValidPortType,
|
|
232
|
+
mapToTypeScript,
|
|
233
|
+
stripOptionalUndefined
|
|
234
|
+
} from "./chunks/chunk-E5WN7IGO.js";
|
|
235
|
+
import {
|
|
236
|
+
getNodeTemplate,
|
|
237
|
+
getWorkflowTemplate,
|
|
238
|
+
nodeTemplates,
|
|
239
|
+
toCamelCase,
|
|
240
|
+
toPascalCase,
|
|
241
|
+
workflowTemplates
|
|
242
|
+
} from "./chunks/chunk-NDSTGMKR.js";
|
|
243
|
+
import "./chunks/chunk-KMWCCOUJ.js";
|
|
244
|
+
import "./chunks/chunk-QYPORSLO.js";
|
|
245
|
+
import {
|
|
246
|
+
BRANCHING_STRATEGIES,
|
|
247
|
+
EXECUTION_STRATEGIES,
|
|
248
|
+
KNOWN_NODETYPE_TAGS,
|
|
249
|
+
KNOWN_WORKFLOW_TAGS,
|
|
250
|
+
MIN_NODE_MAJOR,
|
|
251
|
+
RESERVED_NODE_NAMES,
|
|
252
|
+
RESERVED_PORT_NAMES,
|
|
253
|
+
SCOPED_PORT_NAMES,
|
|
254
|
+
STANDARD_JSDOC_TAGS,
|
|
255
|
+
VALID_NODE_COLORS,
|
|
256
|
+
getKnownWorkflowTags,
|
|
257
|
+
isControlFlowPort,
|
|
258
|
+
isExecutePort,
|
|
259
|
+
isExitNode,
|
|
260
|
+
isFailurePort,
|
|
261
|
+
isPseudoNode,
|
|
262
|
+
isReservedNodeName,
|
|
263
|
+
isReservedPortName,
|
|
264
|
+
isScopedFailurePort,
|
|
265
|
+
isScopedMandatoryPort,
|
|
266
|
+
isScopedPort,
|
|
267
|
+
isScopedStartPort,
|
|
268
|
+
isScopedSuccessPort,
|
|
269
|
+
isSpecialNode,
|
|
270
|
+
isStartNode,
|
|
271
|
+
isSuccessPort
|
|
272
|
+
} from "./chunks/chunk-R4QGNK34.js";
|
|
273
|
+
import "./chunks/chunk-SEWDMQ6Q.js";
|
|
274
|
+
|
|
275
|
+
// src/validation/friendly-errors.ts
|
|
276
|
+
function extractQuoted(message) {
|
|
277
|
+
const matches = message.match(/"([^"]+)"/g);
|
|
278
|
+
return matches ? matches.map((m) => m.replace(/"/g, "")) : [];
|
|
279
|
+
}
|
|
280
|
+
function extractTypes(message) {
|
|
281
|
+
const structuralMatch = message.match(/from (.+?) \(\w+\) to (.+?) \(\w+\)/);
|
|
282
|
+
if (structuralMatch) return { source: structuralMatch[1], target: structuralMatch[2] };
|
|
283
|
+
const fromToMatch = message.match(/from (\w+) to (\w+)/i);
|
|
284
|
+
if (fromToMatch) return { source: fromToMatch[1], target: fromToMatch[2] };
|
|
285
|
+
const structuralParenMatch = message.match(/\((.+?) \(\w+\)\) .* \((.+?) \(\w+\)\)/);
|
|
286
|
+
if (structuralParenMatch) return { source: structuralParenMatch[1], target: structuralParenMatch[2] };
|
|
287
|
+
const parenMatch = message.match(/\((\w+)\) .* \((\w+)\)/);
|
|
288
|
+
if (parenMatch) return { source: parenMatch[1], target: parenMatch[2] };
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
function buildCoerceSuggestion(message, targetType) {
|
|
292
|
+
const coerceType = COERCE_TYPE_FOR_DATA_TYPE[targetType.toUpperCase()] || targetType.toLowerCase();
|
|
293
|
+
if (!["string", "number", "boolean", "json", "object"].includes(coerceType)) return null;
|
|
294
|
+
const route = message.match(CONNECTION_ROUTE);
|
|
295
|
+
const portRefs = route ? [route[1], route[2]] : extractQuoted(message).filter((q) => PORT_REF.test(q));
|
|
296
|
+
if (portRefs.length < 2) return null;
|
|
297
|
+
return `@connect ${portRefs[0]} -> ${portRefs[1]} as ${coerceType}`;
|
|
298
|
+
}
|
|
299
|
+
var PORT_REF = /^[\w]+\.[\w]+$/;
|
|
300
|
+
var CONNECTION_ROUTE = /([\w$]+\.[\w$]+)(?: \((?:[^()]|\([^()]*\))*\))? → ([\w$]+\.[\w$]+)/;
|
|
301
|
+
function extractCyclePath(message) {
|
|
302
|
+
const match = message.match(/:\s*(.+ -> .+)/);
|
|
303
|
+
return match ? match[1] : null;
|
|
304
|
+
}
|
|
305
|
+
var errorMappers = {
|
|
306
|
+
MISSING_WORKFLOW_NAME(error) {
|
|
307
|
+
return {
|
|
308
|
+
title: "Missing Workflow Name",
|
|
309
|
+
explanation: "The workflow annotation is missing or has no name. Every workflow needs a name in the @flowWeaver workflow block.",
|
|
310
|
+
fix: "Add @flowWeaver workflow to the JSDoc block above your exported workflow function.",
|
|
311
|
+
code: error.code
|
|
312
|
+
};
|
|
313
|
+
},
|
|
314
|
+
MISSING_FUNCTION_NAME(error) {
|
|
315
|
+
return {
|
|
316
|
+
title: "Missing Function Name",
|
|
317
|
+
explanation: "The compiler found a @flowWeaver workflow annotation but the function is anonymous or not exported.",
|
|
318
|
+
fix: "Make sure your workflow is declared as `export function myWorkflowName(...)`, not anonymous or unexported.",
|
|
319
|
+
code: error.code
|
|
320
|
+
};
|
|
321
|
+
},
|
|
322
|
+
MISSING_REQUIRED_INPUT(error) {
|
|
323
|
+
const quoted = extractQuoted(error.message);
|
|
324
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
325
|
+
const portName = quoted[1] || "unknown";
|
|
326
|
+
return {
|
|
327
|
+
title: "Missing Required Input",
|
|
328
|
+
explanation: `Node '${nodeName}' needs a value for '${portName}' but nothing is connected to it.`,
|
|
329
|
+
fix: `Connect an output port from another node to '${portName}' on '${nodeName}', or mark the port as optional with @input [${portName}].`,
|
|
330
|
+
code: error.code
|
|
331
|
+
};
|
|
332
|
+
},
|
|
333
|
+
STEP_PORT_TYPE_MISMATCH(error) {
|
|
334
|
+
const stepToData = error.message.match(
|
|
335
|
+
/^STEP port "([^"]+)" on node "([^"]+)" cannot connect to non-STEP port "([^"]+)"(?: \([^)]*\))? on node "([^"]+)"/
|
|
336
|
+
);
|
|
337
|
+
const dataToStep = error.message.match(
|
|
338
|
+
/^Non-STEP port "([^"]+)"(?: \([^)]*\))? on node "([^"]+)" cannot connect to STEP port "([^"]+)" on node "([^"]+)"/
|
|
339
|
+
);
|
|
340
|
+
const fix = 'STEP ports carry control flow signals (like "go next"), not data. Connect data ports to data ports and STEP ports to STEP ports.';
|
|
341
|
+
if (stepToData) {
|
|
342
|
+
const [, fromPort, fromNode, toPort, toNode] = stepToData;
|
|
343
|
+
return {
|
|
344
|
+
title: "Wrong Port Type",
|
|
345
|
+
explanation: `'${fromNode}.${fromPort}' is a STEP port: it carries a control signal, but '${toNode}.${toPort}' is a data port. Connect '${fromNode}.${fromPort}' to a STEP input such as '${toNode}.execute'.`,
|
|
346
|
+
fix,
|
|
347
|
+
code: error.code
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
if (dataToStep) {
|
|
351
|
+
const [, fromPort, fromNode, toPort, toNode] = dataToStep;
|
|
352
|
+
return {
|
|
353
|
+
title: "Wrong Port Type",
|
|
354
|
+
explanation: `'${toNode}.${toPort}' is a STEP port: it expects a control signal, but '${fromNode}.${fromPort}' carries data. Connect '${toNode}.${toPort}' to a STEP output such as '${fromNode}.onSuccess'.`,
|
|
355
|
+
fix,
|
|
356
|
+
code: error.code
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
const quoted = extractQuoted(error.message);
|
|
360
|
+
const portName = quoted[0] || "unknown";
|
|
361
|
+
return {
|
|
362
|
+
title: "Wrong Port Type",
|
|
363
|
+
explanation: `Port '${portName}' mixes a STEP (control flow) port with a data port.`,
|
|
364
|
+
fix,
|
|
365
|
+
code: error.code
|
|
366
|
+
};
|
|
367
|
+
},
|
|
368
|
+
UNKNOWN_NODE_TYPE(error) {
|
|
369
|
+
const quoted = extractQuoted(error.message);
|
|
370
|
+
const nodeTypeName = quoted[1] || quoted[0] || "unknown";
|
|
371
|
+
return {
|
|
372
|
+
title: "Unknown Node Type",
|
|
373
|
+
explanation: `Node type '${nodeTypeName}' doesn't exist. Did you forget to add @flowWeaver nodeType above the function?`,
|
|
374
|
+
fix: `Add /** @flowWeaver nodeType */ as a JSDoc comment above the function '${nodeTypeName}', or check that the function name is spelled correctly.`,
|
|
375
|
+
code: error.code
|
|
376
|
+
};
|
|
377
|
+
},
|
|
378
|
+
UNKNOWN_SOURCE_NODE(error) {
|
|
379
|
+
const quoted = extractQuoted(error.message);
|
|
380
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
381
|
+
return {
|
|
382
|
+
title: "Missing Source Node",
|
|
383
|
+
explanation: `Connection references node '${nodeName}' which doesn't exist in this workflow.`,
|
|
384
|
+
fix: `Add a @node annotation for '${nodeName}' in the workflow JSDoc, or fix the spelling in the @connect annotation.`,
|
|
385
|
+
code: error.code
|
|
386
|
+
};
|
|
387
|
+
},
|
|
388
|
+
UNKNOWN_TARGET_NODE(error) {
|
|
389
|
+
const quoted = extractQuoted(error.message);
|
|
390
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
391
|
+
return {
|
|
392
|
+
title: "Missing Target Node",
|
|
393
|
+
explanation: `Connection references node '${nodeName}' which doesn't exist in this workflow.`,
|
|
394
|
+
fix: `Add a @node annotation for '${nodeName}' in the workflow JSDoc, or fix the spelling in the @connect annotation.`,
|
|
395
|
+
code: error.code
|
|
396
|
+
};
|
|
397
|
+
},
|
|
398
|
+
UNKNOWN_SOURCE_PORT(error) {
|
|
399
|
+
const known = error.message.match(/^(?:Node "([^"]+)"|(Start) node) does not have output port "([^"]+)"/);
|
|
400
|
+
const quoted = extractQuoted(error.message);
|
|
401
|
+
const displayNode = known ? known[1] ?? known[2] : error.node || quoted[0] || "unknown";
|
|
402
|
+
const displayPort = known ? known[3] : quoted[1] || quoted[0] || "unknown";
|
|
403
|
+
const didYouMean = error.message.match(/Did you mean "([^"]+)"/)?.[1];
|
|
404
|
+
const hint = didYouMean ? ` Did you mean '${didYouMean}'?` : "";
|
|
405
|
+
const fix = displayNode === "Start" ? `Add '@param ${displayPort}' to the workflow JSDoc and to its params object, or fix the port name in the @connect annotation.` : `Add @output ${displayPort} to the node type's JSDoc, or check the port name in the @connect annotation.`;
|
|
406
|
+
return {
|
|
407
|
+
title: "Unknown Output Port",
|
|
408
|
+
explanation: `Port '${displayPort}' doesn't exist on node '${displayNode}'.${hint} Check the spelling or add the port to the node type.`,
|
|
409
|
+
fix,
|
|
410
|
+
code: error.code
|
|
411
|
+
};
|
|
412
|
+
},
|
|
413
|
+
UNKNOWN_TARGET_PORT(error) {
|
|
414
|
+
const known = error.message.match(/^(?:Node "([^"]+)"|(Exit) node) does not have input port "([^"]+)"/);
|
|
415
|
+
const quoted = extractQuoted(error.message);
|
|
416
|
+
const displayNode = known ? known[1] ?? known[2] : error.node || "unknown";
|
|
417
|
+
const displayPort = known ? known[3] : quoted[0] || "unknown";
|
|
418
|
+
const didYouMean = error.message.match(/Did you mean "([^"]+)"/)?.[1];
|
|
419
|
+
const hint = didYouMean ? ` Did you mean '${didYouMean}'?` : "";
|
|
420
|
+
const fix = displayNode === "Exit" ? `Add '@returns ${displayPort}' to the workflow JSDoc and to its return type, or fix the port name in the @connect annotation.` : `Add @input ${displayPort} to the node type's JSDoc, or check the port name in the @connect annotation.`;
|
|
421
|
+
return {
|
|
422
|
+
title: "Unknown Input Port",
|
|
423
|
+
explanation: `Port '${displayPort}' doesn't exist on node '${displayNode}'.${hint} Check the spelling or add the port to the node type.`,
|
|
424
|
+
fix,
|
|
425
|
+
code: error.code
|
|
426
|
+
};
|
|
427
|
+
},
|
|
428
|
+
TYPE_MISMATCH(error) {
|
|
429
|
+
const types = extractTypes(error.message);
|
|
430
|
+
const source = types?.source || "unknown";
|
|
431
|
+
const target = types?.target || "unknown";
|
|
432
|
+
const coerceSuggestion = buildCoerceSuggestion(error.message, target);
|
|
433
|
+
return {
|
|
434
|
+
title: "Type Mismatch",
|
|
435
|
+
explanation: `Type mismatch: you're connecting a ${source} to a ${target}. The value will be automatically converted, but this might cause unexpected behavior.`,
|
|
436
|
+
fix: coerceSuggestion ? `Use \`${coerceSuggestion}\` for explicit coercion, change one of the port types, or use @strictTypes to turn this into an error.` : `Add \`as <type>\` to the @connect annotation (e.g. \`as string\`), change one of the port types, or use @strictTypes to turn this into an error.`,
|
|
437
|
+
code: error.code
|
|
438
|
+
};
|
|
439
|
+
},
|
|
440
|
+
CYCLE_DETECTED(error) {
|
|
441
|
+
const cyclePath = extractCyclePath(error.message);
|
|
442
|
+
const nodeName = error.node || "unknown";
|
|
443
|
+
return {
|
|
444
|
+
title: "Circular Dependency Found",
|
|
445
|
+
explanation: `Circular dependency found. Node '${nodeName}' eventually connects back to itself, creating an infinite loop.${cyclePath ? ` Path: ${cyclePath}` : ""}`,
|
|
446
|
+
// A durable-gate workflow may contain a scoped loop, but only a bounded
|
|
447
|
+
// one; point at the scope node and its limit rather than banning it.
|
|
448
|
+
fix: "Break the cycle by removing one of the connections in the loop, or use a scoped node (like forEach) for intentional iteration. Inside a workflow that pauses at a durable gate, that scope must be bounded: give it a max/limit/attempts/iterations input.",
|
|
449
|
+
code: error.code
|
|
450
|
+
};
|
|
451
|
+
},
|
|
452
|
+
UNUSED_NODE(error) {
|
|
453
|
+
const quoted = extractQuoted(error.message);
|
|
454
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
455
|
+
return {
|
|
456
|
+
title: "Unused Node",
|
|
457
|
+
explanation: `Node '${nodeName}' is defined but never used in the workflow. Consider removing it or connecting it.`,
|
|
458
|
+
fix: `Connect '${nodeName}' to other nodes with @connect, or remove the @node annotation if it's no longer needed.`,
|
|
459
|
+
code: error.code
|
|
460
|
+
};
|
|
461
|
+
},
|
|
462
|
+
NO_START_CONNECTIONS(error) {
|
|
463
|
+
return {
|
|
464
|
+
title: "No Start Connections",
|
|
465
|
+
explanation: "Your workflow has no connections from the Start node. Nothing will execute.",
|
|
466
|
+
fix: "Add a @connect Start.execute -> yourNode.execute annotation to kick off the workflow.",
|
|
467
|
+
code: error.code
|
|
468
|
+
};
|
|
469
|
+
},
|
|
470
|
+
NO_EXIT_CONNECTIONS(error) {
|
|
471
|
+
return {
|
|
472
|
+
title: "No Exit Connections",
|
|
473
|
+
explanation: "Your workflow has no connections to the Exit node. The workflow won't return any results.",
|
|
474
|
+
fix: "Add a @connect yourNode.onSuccess -> Exit.onSuccess annotation so the workflow produces output.",
|
|
475
|
+
code: error.code
|
|
476
|
+
};
|
|
477
|
+
},
|
|
478
|
+
DUPLICATE_NODE_NAME(error) {
|
|
479
|
+
const quoted = extractQuoted(error.message);
|
|
480
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
481
|
+
return {
|
|
482
|
+
title: "Duplicate Node Name",
|
|
483
|
+
explanation: `Two node types have the same name '${nodeName}'. Each node type needs a unique function name.`,
|
|
484
|
+
fix: `Rename one of the '${nodeName}' functions to give it a unique name.`,
|
|
485
|
+
code: error.code
|
|
486
|
+
};
|
|
487
|
+
},
|
|
488
|
+
RESERVED_NODE_NAME(error) {
|
|
489
|
+
const quoted = extractQuoted(error.message);
|
|
490
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
491
|
+
return {
|
|
492
|
+
title: "Reserved Name Used",
|
|
493
|
+
explanation: `'Start' and 'Exit' are reserved names. Choose a different name for your node type.`,
|
|
494
|
+
fix: `Rename '${nodeName}' to something other than 'Start' or 'Exit'. These names are used internally by the workflow engine.`,
|
|
495
|
+
code: error.code
|
|
496
|
+
};
|
|
497
|
+
},
|
|
498
|
+
RESERVED_INSTANCE_ID(error) {
|
|
499
|
+
const quoted = extractQuoted(error.message);
|
|
500
|
+
const instanceId = quoted[0] || error.node || "unknown";
|
|
501
|
+
return {
|
|
502
|
+
title: "Reserved Instance ID",
|
|
503
|
+
explanation: `Instance ID '${instanceId}' is reserved. 'Start' and 'Exit' are built-in nodes in every workflow.`,
|
|
504
|
+
fix: `Choose a different instance ID, like 'startHandler' or 'exitProcessor'.`,
|
|
505
|
+
code: error.code
|
|
506
|
+
};
|
|
507
|
+
},
|
|
508
|
+
INFERRED_NODE_TYPE(error) {
|
|
509
|
+
const quoted = extractQuoted(error.message);
|
|
510
|
+
const nodeTypeName = quoted[0] || error.node || "unknown";
|
|
511
|
+
return {
|
|
512
|
+
title: "Inferred Node Type",
|
|
513
|
+
explanation: `Node type '${nodeTypeName}' was auto-inferred from the function signature. It works, but you lose explicit control over port names, types, and ordering.`,
|
|
514
|
+
fix: `Add /** @flowWeaver nodeType @expression */ above the function for explicit port control.`,
|
|
515
|
+
code: error.code
|
|
516
|
+
};
|
|
517
|
+
},
|
|
518
|
+
INVALID_SCOPE_NAME(error) {
|
|
519
|
+
const quoted = extractQuoted(error.message);
|
|
520
|
+
const portName = quoted[0] || "unknown";
|
|
521
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
522
|
+
const scopeName = quoted[2] || "unknown";
|
|
523
|
+
return {
|
|
524
|
+
title: "Invalid Scope Name",
|
|
525
|
+
explanation: `Port '${portName}' on node type '${nodeName}' uses scope '${scopeName}', which is not a JavaScript identifier. Scope names become identifiers in the generated code.`,
|
|
526
|
+
fix: `Rename the scope in every 'scope:${scopeName}' modifier and in the matching callback parameter to letters, digits, '_' or '$', not starting with a digit.`,
|
|
527
|
+
code: error.code
|
|
528
|
+
};
|
|
529
|
+
},
|
|
530
|
+
EXPRESSION_SYNTAX(error) {
|
|
531
|
+
const quoted = extractQuoted(error.message);
|
|
532
|
+
const portName = quoted[0] || "unknown";
|
|
533
|
+
const where = quoted[1] || error.node || "unknown";
|
|
534
|
+
return {
|
|
535
|
+
title: "Expression Is Not JavaScript",
|
|
536
|
+
explanation: `The expression for '${portName}' on '${where}' does not parse as JavaScript. ${error.message.replace(/^.*?is not a JavaScript expression: /, "")}`,
|
|
537
|
+
fix: `An [expr:] value is JavaScript. Text needs quotes inside the attribute (timeout="'24h'"). An upstream port is read as node.port (agentId="prep.agentId"). See advanced-annotations.`,
|
|
538
|
+
code: error.code
|
|
539
|
+
};
|
|
540
|
+
},
|
|
541
|
+
TYPE_INCOMPATIBLE(error) {
|
|
542
|
+
const types = extractTypes(error.message);
|
|
543
|
+
const source = types?.source || "unknown";
|
|
544
|
+
const target = types?.target || "unknown";
|
|
545
|
+
const coerceSuggestion = buildCoerceSuggestion(error.message, target);
|
|
546
|
+
return {
|
|
547
|
+
title: "Type Incompatible",
|
|
548
|
+
explanation: `Type mismatch: ${source} to ${target}. With @strictTypes enabled, this is an error instead of a warning.`,
|
|
549
|
+
fix: coerceSuggestion ? `Use \`${coerceSuggestion}\` for explicit coercion, change one of the port types, or remove @strictTypes to allow implicit coercions.` : `Add \`as <type>\` to the @connect annotation (e.g. \`as number\`), change one of the port types, or remove @strictTypes to allow implicit coercions.`,
|
|
550
|
+
code: error.code
|
|
551
|
+
};
|
|
552
|
+
},
|
|
553
|
+
UNUSUAL_TYPE_COERCION(error) {
|
|
554
|
+
const types = extractTypes(error.message);
|
|
555
|
+
const source = types?.source || "unknown";
|
|
556
|
+
const target = types?.target || "unknown";
|
|
557
|
+
const coerceSuggestion = buildCoerceSuggestion(error.message, target);
|
|
558
|
+
return {
|
|
559
|
+
title: "Unusual Type Coercion",
|
|
560
|
+
explanation: `Converting ${source} to ${target} is technically valid but semantically unusual and may produce unexpected behavior.`,
|
|
561
|
+
fix: coerceSuggestion ? `If intentional, use \`${coerceSuggestion}\` for explicit coercion, or use @strictTypes to enforce type safety.` : `If intentional, add \`as <type>\` to the @connect annotation, or use @strictTypes to enforce type safety.`,
|
|
562
|
+
code: error.code
|
|
563
|
+
};
|
|
564
|
+
},
|
|
565
|
+
MULTIPLE_CONNECTIONS_TO_INPUT(error) {
|
|
566
|
+
const quoted = extractQuoted(error.message);
|
|
567
|
+
const portName = quoted[0] || "unknown";
|
|
568
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
569
|
+
return {
|
|
570
|
+
title: "Multiple Input Connections",
|
|
571
|
+
explanation: `Input port '${portName}' on node '${nodeName}' has multiple connections. A data input takes one connection unless the port declares how to combine several.`,
|
|
572
|
+
fix: `Remove extra connections to '${nodeName}.${portName}', declare a merge strategy on the port with '@input ${portName} [mergeStrategy:FIRST|LAST|COLLECT|MERGE|CONCAT]' on the node type, or add a merge node before it.`,
|
|
573
|
+
code: error.code
|
|
574
|
+
};
|
|
575
|
+
},
|
|
576
|
+
SCOPE_MISSING_REQUIRED_INPUT(error) {
|
|
577
|
+
const quoted = extractQuoted(error.message);
|
|
578
|
+
const childId = quoted[0] || error.node || "unknown";
|
|
579
|
+
const portName = quoted[1] || "unknown";
|
|
580
|
+
const scopeName = quoted[2] || "unknown";
|
|
581
|
+
const parentId = quoted[3] || "unknown";
|
|
582
|
+
return {
|
|
583
|
+
title: "Scope Child Missing Input",
|
|
584
|
+
explanation: `Child node '${childId}' inside scope '${scopeName}' of '${parentId}' has a required input '${portName}' with no connection.`,
|
|
585
|
+
fix: `Connect the parent's scoped output to '${childId}.${portName}' within the scope, or mark the port as optional.`,
|
|
586
|
+
code: error.code
|
|
587
|
+
};
|
|
588
|
+
},
|
|
589
|
+
SCOPE_UNUSED_INPUT(error) {
|
|
590
|
+
const quoted = extractQuoted(error.message);
|
|
591
|
+
const portName = quoted[0] || "unknown";
|
|
592
|
+
const parentId = quoted[1] || error.node || "unknown";
|
|
593
|
+
const scopeName = quoted[2] || "unknown";
|
|
594
|
+
return {
|
|
595
|
+
title: "Scope Input Unused",
|
|
596
|
+
explanation: `Scoped input '${portName}' on '${parentId}' expects data back from inner nodes, but nothing connects to it within scope '${scopeName}'.`,
|
|
597
|
+
fix: `Connect an inner node's output to '${parentId}.${portName}:${scopeName}' to return data from the scope.`,
|
|
598
|
+
code: error.code
|
|
599
|
+
};
|
|
600
|
+
},
|
|
601
|
+
SCOPE_WRONG_SCOPE_NAME(error) {
|
|
602
|
+
const quoted = extractQuoted(error.message);
|
|
603
|
+
const portRef2 = quoted[0] || "unknown";
|
|
604
|
+
const nodeName = quoted[2] || "unknown";
|
|
605
|
+
return {
|
|
606
|
+
title: "Invalid Scope Qualifier",
|
|
607
|
+
explanation: `A connection at '${portRef2}' uses an invalid scope name. Node '${nodeName}' doesn't define that scope.`,
|
|
608
|
+
fix: `Check the scope names defined on the node type. Fix the :scopeName qualifier in the @connect annotation to match an existing scope.`,
|
|
609
|
+
code: error.code
|
|
610
|
+
};
|
|
611
|
+
},
|
|
612
|
+
SCOPE_CONNECTION_OUTSIDE(error) {
|
|
613
|
+
return {
|
|
614
|
+
title: "Scope Connection Leak",
|
|
615
|
+
explanation: `A scoped connection references a node that is outside the scope boundary. Scoped connections must stay within the scope.`,
|
|
616
|
+
fix: `Move the target node inside the scope (declare it with the scope parent in @node), or remove the scope qualifier from the connection.`,
|
|
617
|
+
code: error.code
|
|
618
|
+
};
|
|
619
|
+
},
|
|
620
|
+
SCOPE_PORT_TYPE_MISMATCH(error) {
|
|
621
|
+
const quoted = extractQuoted(error.message);
|
|
622
|
+
return {
|
|
623
|
+
title: "Scope Port Type Mismatch",
|
|
624
|
+
explanation: `Type mismatch within scope '${quoted[0] || "unknown"}'. The parent's scoped port and the child's port have incompatible types.`,
|
|
625
|
+
fix: `Change one of the port types to match, or add a transformation node inside the scope.`,
|
|
626
|
+
code: error.code
|
|
627
|
+
};
|
|
628
|
+
},
|
|
629
|
+
SCOPE_UNKNOWN_PORT(error) {
|
|
630
|
+
const quoted = extractQuoted(error.message);
|
|
631
|
+
const portName = quoted[0] || "unknown";
|
|
632
|
+
return {
|
|
633
|
+
title: "Unknown Scoped Port",
|
|
634
|
+
explanation: `Port '${portName}' is referenced in a scoped connection but doesn't exist as a scoped port on that node, or belongs to a different scope.`,
|
|
635
|
+
fix: `Add the port as a scoped port with @output ${portName} scope:scopeName, or fix the port name in the @connect annotation.`,
|
|
636
|
+
code: error.code
|
|
637
|
+
};
|
|
638
|
+
},
|
|
639
|
+
SCOPE_ORPHANED_CHILD(error) {
|
|
640
|
+
const quoted = extractQuoted(error.message);
|
|
641
|
+
const childId = quoted[0] || error.node || "unknown";
|
|
642
|
+
const scopeName = quoted[1] || "unknown";
|
|
643
|
+
const parentId = quoted[2] || "unknown";
|
|
644
|
+
return {
|
|
645
|
+
title: "Orphaned Scope Child",
|
|
646
|
+
explanation: `Node '${childId}' is declared inside scope '${scopeName}' of '${parentId}' but has no scoped connections. It won't receive data from or return data to the scope.`,
|
|
647
|
+
fix: `Connect the parent's scoped output ports to '${childId}' inputs, and connect '${childId}' outputs back to the parent's scoped input ports.`,
|
|
648
|
+
code: error.code
|
|
649
|
+
};
|
|
650
|
+
},
|
|
651
|
+
OBJECT_TYPE_MISMATCH(error) {
|
|
652
|
+
const quoted = extractQuoted(error.message);
|
|
653
|
+
const sourceType = quoted[0] || "unknown";
|
|
654
|
+
const targetType = quoted[1] || "unknown";
|
|
655
|
+
return {
|
|
656
|
+
title: "Object Shape Mismatch",
|
|
657
|
+
explanation: `The object shapes don't match. The source provides '${sourceType}' but the target expects '${targetType}'.`,
|
|
658
|
+
fix: "Verify the object structures are compatible. Add a transformation node if you need to reshape the data.",
|
|
659
|
+
code: error.code
|
|
660
|
+
};
|
|
661
|
+
},
|
|
662
|
+
MUTABLE_NODE_TYPE_BINDING(error) {
|
|
663
|
+
const quoted = extractQuoted(error.message);
|
|
664
|
+
const nodeName = quoted[0] || error.node || "unknown";
|
|
665
|
+
const bindingKind = quoted[1] || "let";
|
|
666
|
+
return {
|
|
667
|
+
title: "Mutable Node Binding",
|
|
668
|
+
explanation: `Node type '${nodeName}' is declared with '${bindingKind}' which allows accidental reassignment at runtime.`,
|
|
669
|
+
fix: `Use 'function ${nodeName}(...)' or 'const ${nodeName} = ...' instead. Node types must be immutable.`,
|
|
670
|
+
code: error.code
|
|
671
|
+
};
|
|
672
|
+
},
|
|
673
|
+
UNUSED_OUTPUT_PORT(error) {
|
|
674
|
+
const quoted = extractQuoted(error.message);
|
|
675
|
+
const portName = quoted[0] || "unknown";
|
|
676
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
677
|
+
return {
|
|
678
|
+
title: "Unused Output Port",
|
|
679
|
+
explanation: `Output port '${portName}' on node '${nodeName}' is not connected to anything. Its data will be discarded.`,
|
|
680
|
+
fix: `Connect '${nodeName}.${portName}' to another node's input, or remove the @output annotation if it's not needed.`,
|
|
681
|
+
code: error.code
|
|
682
|
+
};
|
|
683
|
+
},
|
|
684
|
+
UNREACHABLE_EXIT_PORT(error) {
|
|
685
|
+
const quoted = extractQuoted(error.message);
|
|
686
|
+
const portName = quoted[0] || "unknown";
|
|
687
|
+
return {
|
|
688
|
+
title: "Unreachable Exit Port",
|
|
689
|
+
explanation: `Exit port '${portName}' has no incoming data. The workflow will return undefined for this output.`,
|
|
690
|
+
fix: `Add a @connect annotation to send data to Exit.${portName}, or remove the @returns ${portName} annotation.`,
|
|
691
|
+
code: error.code
|
|
692
|
+
};
|
|
693
|
+
},
|
|
694
|
+
HTTP_PARAM_UNKNOWN(error) {
|
|
695
|
+
const quoted = extractQuoted(error.message);
|
|
696
|
+
const param = (quoted[0] || ":param").replace(/^:/, "");
|
|
697
|
+
return {
|
|
698
|
+
title: "Route Parameter Is Not a Workflow Parameter",
|
|
699
|
+
explanation: `The @http route has a ':${param}' segment, but the workflow has no @param named '${param}', so there is nothing for the path to bind to.`,
|
|
700
|
+
fix: `Name a segment after one of the workflow's @param entries, or add '@param ${param}' to the workflow and connect it.`,
|
|
701
|
+
code: error.code
|
|
702
|
+
};
|
|
703
|
+
},
|
|
704
|
+
MULTIPLE_EXIT_CONNECTIONS(error) {
|
|
705
|
+
const quoted = extractQuoted(error.message);
|
|
706
|
+
const portName = quoted[0] || "unknown";
|
|
707
|
+
return {
|
|
708
|
+
title: "Multiple Exit Connections",
|
|
709
|
+
explanation: `Exit port '${portName}' receives data from multiple nodes. Only one value will be used, which may lead to unpredictable results.`,
|
|
710
|
+
fix: `Use separate Exit ports for each source, or add a merge node to combine the values before connecting to Exit.${portName}.`,
|
|
711
|
+
code: error.code
|
|
712
|
+
};
|
|
713
|
+
},
|
|
714
|
+
ANNOTATION_SIGNATURE_MISMATCH(error) {
|
|
715
|
+
const quoted = extractQuoted(error.message);
|
|
716
|
+
const portName = quoted[0] || "unknown";
|
|
717
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
718
|
+
return {
|
|
719
|
+
title: "Optional Port Mismatch",
|
|
720
|
+
explanation: `Port '${portName}' on '${nodeName}' is optional in the TypeScript signature but required in the annotation.`,
|
|
721
|
+
fix: `Use @input [${portName}] (with brackets) to mark the port as optional in the annotation, matching the TypeScript signature.`,
|
|
722
|
+
code: error.code
|
|
723
|
+
};
|
|
724
|
+
},
|
|
725
|
+
ANNOTATION_SIGNATURE_TYPE_MISMATCH(error) {
|
|
726
|
+
const quoted = extractQuoted(error.message);
|
|
727
|
+
const portName = quoted[0] || "unknown";
|
|
728
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
729
|
+
const annotationType = quoted[2] || "unknown";
|
|
730
|
+
const sigType = quoted[3] || "unknown";
|
|
731
|
+
return {
|
|
732
|
+
title: "Annotation Type Mismatch",
|
|
733
|
+
explanation: `Port '${portName}' on '${nodeName}' has type '${annotationType}' in the annotation but '${sigType}' in the TypeScript signature.`,
|
|
734
|
+
fix: `Update the @input/@output annotation type to match the function signature, or change the signature type. The annotation and TypeScript types should agree.`,
|
|
735
|
+
code: error.code
|
|
736
|
+
};
|
|
737
|
+
},
|
|
738
|
+
// ── Agent-specific rules ──────────────────────────────────────────────
|
|
739
|
+
AGENT_LLM_MISSING_ERROR_HANDLER(error) {
|
|
740
|
+
const nodeName = error.node || "unknown";
|
|
741
|
+
return {
|
|
742
|
+
title: "LLM Missing Error Handler",
|
|
743
|
+
explanation: `LLM node '${nodeName}' has no error handler. LLM calls can fail due to rate limits, timeouts, or model errors, and failures will be silently swallowed.`,
|
|
744
|
+
fix: `Connect ${nodeName}.onFailure to a retry node, fallback handler, or Exit.onFailure to handle LLM errors gracefully.`,
|
|
745
|
+
code: error.code
|
|
746
|
+
};
|
|
747
|
+
},
|
|
748
|
+
AGENT_UNGUARDED_TOOL_EXECUTOR(error) {
|
|
749
|
+
const nodeName = error.node || "unknown";
|
|
750
|
+
return {
|
|
751
|
+
title: "Unguarded Tool Executor",
|
|
752
|
+
explanation: `Tool executor '${nodeName}' has no human approval gate upstream. If it performs destructive actions (writes, deletes, sends), this could be unsafe.`,
|
|
753
|
+
fix: `Add a human-approval node before '${nodeName}' to gate destructive tool calls. If this tool is read-only, you can safely ignore this warning.`,
|
|
754
|
+
code: error.code
|
|
755
|
+
};
|
|
756
|
+
},
|
|
757
|
+
AGENT_MISSING_MEMORY_IN_LOOP(error) {
|
|
758
|
+
const quoted = extractQuoted(error.message);
|
|
759
|
+
const scopeName = quoted[0] || "the loop";
|
|
760
|
+
return {
|
|
761
|
+
title: "No Memory in Agent Loop",
|
|
762
|
+
explanation: `Loop scope '${scopeName}' contains an LLM node but no conversation memory. The LLM will lose context between loop iterations.`,
|
|
763
|
+
fix: `Add a conversation-memory node inside the loop to persist messages between iterations, so the LLM retains context across loop cycles.`,
|
|
764
|
+
code: error.code
|
|
765
|
+
};
|
|
766
|
+
},
|
|
767
|
+
AGENT_LLM_NO_FALLBACK(error) {
|
|
768
|
+
const nodeName = error.node || "unknown";
|
|
769
|
+
return {
|
|
770
|
+
title: "LLM Failure Goes to Exit",
|
|
771
|
+
explanation: `LLM node '${nodeName}' routes failures directly to Exit, meaning any LLM error immediately aborts the entire workflow.`,
|
|
772
|
+
fix: `Add a retry node or fallback LLM provider between ${nodeName}.onFailure and Exit to improve resilience against transient LLM failures.`,
|
|
773
|
+
code: error.code
|
|
774
|
+
};
|
|
775
|
+
},
|
|
776
|
+
AGENT_TOOL_NO_OUTPUT_HANDLING(error) {
|
|
777
|
+
const nodeName = error.node || "unknown";
|
|
778
|
+
return {
|
|
779
|
+
title: "Tool Results Discarded",
|
|
780
|
+
explanation: `Tool executor '${nodeName}' computes results but none of its data output ports are connected. Tool results are being thrown away.`,
|
|
781
|
+
fix: `Connect the data output ports of '${nodeName}' (e.g., result, resultMessage) to downstream nodes, or remove this tool executor if its results aren't needed.`,
|
|
782
|
+
code: error.code
|
|
783
|
+
};
|
|
784
|
+
},
|
|
785
|
+
// ── Design quality rules ─────────────────────────────────────────────
|
|
786
|
+
DESIGN_ASYNC_NO_ERROR_PATH(error) {
|
|
787
|
+
const nodeName = error.node || "unknown";
|
|
788
|
+
return {
|
|
789
|
+
title: "Async Node Missing Error Path",
|
|
790
|
+
explanation: `Async node '${nodeName}' has no failure handling. Async operations (network calls, file I/O, AI calls) can fail. A normal-mode node's onFailure is silently lost. An @expression node's throw aborts the run with the error.`,
|
|
791
|
+
fix: `For a normal-mode node, connect ${nodeName}.onFailure to an error handler, retry node, or Exit.onFailure. For an @expression node, wiring onFailure does nothing about a throw: to route the failure, write the node in normal mode and return onFailure, or suppress this warning if aborting is intended.`,
|
|
792
|
+
code: error.code
|
|
793
|
+
};
|
|
794
|
+
},
|
|
795
|
+
DESIGN_SCOPE_NO_FAILURE_EXIT(error) {
|
|
796
|
+
const nodeName = error.node || "unknown";
|
|
797
|
+
return {
|
|
798
|
+
title: "Scope Missing Failure Exit",
|
|
799
|
+
explanation: `Scope node '${nodeName}' has no failure path out. If all iterations fail, execution stalls with no error surfaced upstream.`,
|
|
800
|
+
fix: `Connect ${nodeName}.onFailure to an error handler or Exit.onFailure so scope failures propagate.`,
|
|
801
|
+
code: error.code
|
|
802
|
+
};
|
|
803
|
+
},
|
|
804
|
+
DESIGN_UNBOUNDED_RETRY(error) {
|
|
805
|
+
const nodeName = error.node || "unknown";
|
|
806
|
+
return {
|
|
807
|
+
title: "Unbounded Retry Loop",
|
|
808
|
+
explanation: `Scope node '${nodeName}' looks like a retry loop but has no visible attempt limit input. This could loop indefinitely on persistent failures.`,
|
|
809
|
+
fix: `Add a maxAttempts or retries input port to the node type, or use a counter to break out of the loop after N attempts.`,
|
|
810
|
+
code: error.code
|
|
811
|
+
};
|
|
812
|
+
},
|
|
813
|
+
DESIGN_FANOUT_NO_FANIN(error) {
|
|
814
|
+
const nodeName = error.node || "unknown";
|
|
815
|
+
return {
|
|
816
|
+
title: "Fan-Out Without Fan-In",
|
|
817
|
+
explanation: `Node '${nodeName}' fans out to multiple step targets, but those paths never merge back to a shared downstream node. Data from parallel branches may be lost.`,
|
|
818
|
+
fix: `Add a merge node downstream where the parallel branches converge, or wire them to a shared node before Exit.`,
|
|
819
|
+
code: error.code
|
|
820
|
+
};
|
|
821
|
+
},
|
|
822
|
+
DESIGN_EXIT_DATA_UNREACHABLE(error) {
|
|
823
|
+
const quoted = extractQuoted(error.message);
|
|
824
|
+
const portName = quoted[0] || "unknown";
|
|
825
|
+
return {
|
|
826
|
+
title: "Exit Data Unreachable",
|
|
827
|
+
explanation: `Exit port '${portName}' has no incoming data connection and no pull-execution node provides it. The workflow will return undefined for this output.`,
|
|
828
|
+
fix: `Connect a node's data output to Exit.${portName}, or add a pull-execution node that computes this value on demand.`,
|
|
829
|
+
code: error.code
|
|
830
|
+
};
|
|
831
|
+
},
|
|
832
|
+
DESIGN_PULL_CANDIDATE(error) {
|
|
833
|
+
const nodeName = error.node || "unknown";
|
|
834
|
+
return {
|
|
835
|
+
title: "Pull Execution Candidate",
|
|
836
|
+
explanation: `Node '${nodeName}' has no incoming step connection but its data outputs are consumed downstream. Without a step trigger or pullExecution, this node may never execute.`,
|
|
837
|
+
fix: `Add [pullExecution: execute] to the @node annotation so the node runs on demand when downstream nodes read its output.`,
|
|
838
|
+
code: error.code
|
|
839
|
+
};
|
|
840
|
+
},
|
|
841
|
+
DESIGN_PULL_UNUSED(error) {
|
|
842
|
+
const nodeName = error.node || "unknown";
|
|
843
|
+
return {
|
|
844
|
+
title: "Unused Pull Execution",
|
|
845
|
+
explanation: `Node '${nodeName}' is marked with pullExecution but no downstream node reads its data output. The node will never execute since pull execution requires a consumer.`,
|
|
846
|
+
fix: `Connect a data output from '${nodeName}' to a downstream node, or remove the pullExecution config if the node isn't needed.`,
|
|
847
|
+
code: error.code
|
|
848
|
+
};
|
|
849
|
+
},
|
|
850
|
+
DURABLE_CLOSURE_INVALID(error) {
|
|
851
|
+
const message = error.message;
|
|
852
|
+
let fix = "Keep each gate/effect in one branch region reading only from its immediate predecessor. Thread shared values through the chain rather than wiring them around a gate. See the durable-gates topic.";
|
|
853
|
+
if (message.includes("needs a visible attempt limit")) {
|
|
854
|
+
fix = "A loop inside a durable workflow is allowed once it is bounded: give the scope node a max/limit/attempts/iterations input (like the maxSteps on the ReAct agent) so a resumed run has a finite, inspectable iteration space. The iteration ordinal is reconstructed from committed state on resume, so the bound is all that is missing. See the durable-gates topic.";
|
|
855
|
+
} else if (message.includes("do not support pull or lazy execution")) {
|
|
856
|
+
fix = "Remove pullExecution from the named nodes, or give them a step connection so they run in order. A yielded continuation needs every predecessor already compiled into it. See the durable-gates topic.";
|
|
857
|
+
} else if (message.includes("Durable classification errors")) {
|
|
858
|
+
fix = "Give every reachable node exactly one of @durablePure, @durableGate or @durableEffect. An @expression node is pure automatically; a normal-mode node that only computes needs @durablePure. See the durable-gates topic.";
|
|
859
|
+
} else if (message.includes("effect contract")) {
|
|
860
|
+
fix = "A @durableEffect node takes an operationKey parameter and returns { result, receipt }, so the engine can replay the receipt instead of running it twice. See the durable-gates topic.";
|
|
861
|
+
}
|
|
862
|
+
return { title: "Invalid Durable Closure", explanation: message, fix, code: error.code };
|
|
863
|
+
},
|
|
864
|
+
STUB_NODE(error) {
|
|
865
|
+
const nodeName = error.node || "unknown";
|
|
866
|
+
const typeMatch = error.message.match(/stub type "([^"]+)"/);
|
|
867
|
+
const typeName = typeMatch?.[1] || "unknown";
|
|
868
|
+
return {
|
|
869
|
+
title: "Stub Node",
|
|
870
|
+
explanation: `Node '${nodeName}' uses node type '${typeName}', which has no implementation yet. The workflow cannot run until it is implemented.`,
|
|
871
|
+
fix: `Implement '${typeName}' as a @flowWeaver nodeType function, or validate with draft mode (fw_validate draft: true) to check structure while it is still a stub.`,
|
|
872
|
+
code: error.code
|
|
873
|
+
};
|
|
874
|
+
},
|
|
875
|
+
CROSS_SCOPE_CONNECTION(error) {
|
|
876
|
+
const ends = error.message.match(/from "([^"]+)" \(in ([^)]+)\) to "([^"]+)" \(in ([^)]+)\)/);
|
|
877
|
+
const from = ends?.[1] || "unknown";
|
|
878
|
+
const fromCtx = ends?.[2] || "one scope";
|
|
879
|
+
const to = ends?.[3] || "unknown";
|
|
880
|
+
const toCtx = ends?.[4] || "another scope";
|
|
881
|
+
return {
|
|
882
|
+
title: "Cross-Scope Connection",
|
|
883
|
+
explanation: `Connection '${from}' \u2192 '${to}' links a node in ${fromCtx} to a node in ${toCtx}. Nodes in different scopes cannot connect directly. Data crosses a scope boundary only through the scope owner's scoped ports.`,
|
|
884
|
+
fix: `Route the value through the scope owner: connect '${from}' to one of the owner's scoped output ports, and read it inside the scope from there. Or move both nodes into the same scope.`,
|
|
885
|
+
code: error.code
|
|
886
|
+
};
|
|
887
|
+
},
|
|
888
|
+
SUPPRESS_UNKNOWN_CODE(error) {
|
|
889
|
+
const nodeName = error.node || "unknown";
|
|
890
|
+
const codeMatch = error.message.match(/suppresses '([^']+)'/);
|
|
891
|
+
const bad = codeMatch?.[1] || "unknown";
|
|
892
|
+
const corrected = bad.includes(",") ? `[suppress: ${bad.split(",").map((c) => `"${c.trim()}"`).join(", ")}]` : `[suppress: "<CODE>"]`;
|
|
893
|
+
return {
|
|
894
|
+
title: "Unknown Suppress Code",
|
|
895
|
+
explanation: `Node '${nodeName}' lists '${bad}' in [suppress: ...], but that cannot be a validation code, so nothing is suppressed. Codes are separate string literals, not one comma-joined string.`,
|
|
896
|
+
fix: `Write each code as its own string: ${corrected}.`,
|
|
897
|
+
code: error.code
|
|
898
|
+
};
|
|
899
|
+
},
|
|
900
|
+
COERCE_TYPE_MISMATCH(error) {
|
|
901
|
+
const coerceMatch = error.message.match(/`as (\w+)`/);
|
|
902
|
+
const coerceType = coerceMatch?.[1] || "unknown";
|
|
903
|
+
const expectsMatch = error.message.match(/expects (\w+)/);
|
|
904
|
+
const expectedType = expectsMatch?.[1] || "unknown";
|
|
905
|
+
const suggestedType = COERCE_TYPE_FOR_DATA_TYPE[expectedType.toUpperCase()] || expectedType.toLowerCase();
|
|
906
|
+
return {
|
|
907
|
+
title: "Wrong Coercion Type",
|
|
908
|
+
explanation: `The \`as ${coerceType}\` coercion produces the wrong type for the target port. The target expects ${expectedType}.`,
|
|
909
|
+
fix: `Change \`as ${coerceType}\` to \`as ${suggestedType}\` in the @connect annotation.`,
|
|
910
|
+
code: error.code
|
|
911
|
+
};
|
|
912
|
+
},
|
|
913
|
+
REDUNDANT_COERCE(error) {
|
|
914
|
+
const coerceMatch = error.message.match(/`as (\w+)`/);
|
|
915
|
+
const coerceType = coerceMatch?.[1] || "unknown";
|
|
916
|
+
const bothMatch = error.message.match(/both (\w+)/);
|
|
917
|
+
const dataType = bothMatch?.[1] || "the same type";
|
|
918
|
+
return {
|
|
919
|
+
title: "Redundant Coercion",
|
|
920
|
+
explanation: `The \`as ${coerceType}\` coercion is unnecessary because both the source and target ports are already ${dataType}.`,
|
|
921
|
+
fix: `Remove \`as ${coerceType}\` from the @connect annotation. No coercion is needed.`,
|
|
922
|
+
code: error.code
|
|
923
|
+
};
|
|
924
|
+
},
|
|
925
|
+
COERCE_ON_FUNCTION_PORT(error) {
|
|
926
|
+
const coerceMatch = error.message.match(/`as (\w+)`/);
|
|
927
|
+
const coerceType = coerceMatch?.[1] || "unknown";
|
|
928
|
+
return {
|
|
929
|
+
title: "Coercion on Function Port",
|
|
930
|
+
explanation: `The \`as ${coerceType}\` coercion cannot be applied to FUNCTION ports. Function values are callable references and cannot be meaningfully converted to other types.`,
|
|
931
|
+
fix: `Remove \`as ${coerceType}\` from the @connect annotation. If you need to convert the function's return value, add a transformation node.`,
|
|
932
|
+
code: error.code
|
|
933
|
+
};
|
|
934
|
+
},
|
|
935
|
+
LOSSY_TYPE_COERCION(error) {
|
|
936
|
+
const types = extractTypes(error.message);
|
|
937
|
+
const source = types?.source || "unknown";
|
|
938
|
+
const target = types?.target || "unknown";
|
|
939
|
+
const coerceSuggestion = buildCoerceSuggestion(error.message, target);
|
|
940
|
+
return {
|
|
941
|
+
title: "Lossy Type Conversion",
|
|
942
|
+
explanation: `Converting ${source} to ${target} may lose data or produce unexpected results (e.g., NaN, truncation).`,
|
|
943
|
+
fix: coerceSuggestion ? `Use \`${coerceSuggestion}\` for explicit coercion, or use @strictTypes to enforce type safety.` : `Add \`as <type>\` to the @connect annotation for explicit conversion, or use @strictTypes to enforce type safety.`,
|
|
944
|
+
code: error.code
|
|
945
|
+
};
|
|
946
|
+
},
|
|
947
|
+
INVALID_EXIT_PORT_TYPE(error) {
|
|
948
|
+
const portName = error.message.match(/Exit port '([^']+)'/)?.[1] || extractQuoted(error.message)[0] || "onSuccess";
|
|
949
|
+
return {
|
|
950
|
+
title: "Invalid Exit Port Type",
|
|
951
|
+
explanation: `Exit port '${portName}' must be STEP type (control flow signal), but a different type was found. onSuccess and onFailure are control flow ports, not data ports.`,
|
|
952
|
+
fix: `Connect a STEP-type output (like onSuccess or onFailure) to Exit.${portName}. Don't connect data ports to control flow ports.`,
|
|
953
|
+
code: error.code
|
|
954
|
+
};
|
|
955
|
+
},
|
|
956
|
+
// ── Annotation validation rules ──────────────────────────────────────
|
|
957
|
+
DUPLICATE_INSTANCE_ID(error) {
|
|
958
|
+
const quoted = extractQuoted(error.message);
|
|
959
|
+
const instanceId = quoted[0] || error.node || "unknown";
|
|
960
|
+
return {
|
|
961
|
+
title: "Duplicate Instance ID",
|
|
962
|
+
explanation: `Two @node declarations use the same ID '${instanceId}'. Each node instance needs a unique ID within its workflow.`,
|
|
963
|
+
fix: `Rename one of the '${instanceId}' instances to give it a unique ID.`,
|
|
964
|
+
code: error.code
|
|
965
|
+
};
|
|
966
|
+
},
|
|
967
|
+
DUPLICATE_CONNECTION(error) {
|
|
968
|
+
return {
|
|
969
|
+
title: "Duplicate Connection",
|
|
970
|
+
explanation: `The same connection is declared twice. ${error.message}`,
|
|
971
|
+
fix: `Remove the duplicate @connect annotation.`,
|
|
972
|
+
code: error.code
|
|
973
|
+
};
|
|
974
|
+
},
|
|
975
|
+
INVALID_COLOR(error) {
|
|
976
|
+
const quoted = extractQuoted(error.message);
|
|
977
|
+
const color = quoted[1] || quoted[0] || "unknown";
|
|
978
|
+
return {
|
|
979
|
+
title: "Invalid Color",
|
|
980
|
+
explanation: `Color '${color}' is not a recognized node color. Check the spelling or use a valid color name.`,
|
|
981
|
+
fix: `Use one of the valid colors: blue, purple, cyan, orange, pink, green, red, yellow, teal.`,
|
|
982
|
+
code: error.code
|
|
983
|
+
};
|
|
984
|
+
},
|
|
985
|
+
INVALID_ICON(error) {
|
|
986
|
+
const quoted = extractQuoted(error.message);
|
|
987
|
+
const icon = quoted[1] || quoted[0] || "unknown";
|
|
988
|
+
return {
|
|
989
|
+
title: "Invalid Icon",
|
|
990
|
+
explanation: `Icon '${icon}' is not a Material Symbols name. Check the spelling.`,
|
|
991
|
+
fix: `Use a Material Symbols name (fonts.google.com/icons), in snake_case or camelCase: flag, database, swap_horiz, smart_toy.`,
|
|
992
|
+
code: error.code
|
|
993
|
+
};
|
|
994
|
+
},
|
|
995
|
+
INVALID_PORT_TYPE(error) {
|
|
996
|
+
const quoted = extractQuoted(error.message);
|
|
997
|
+
const portName = quoted[0] || "unknown";
|
|
998
|
+
const typeName = quoted[2] || quoted[1] || "unknown";
|
|
999
|
+
return {
|
|
1000
|
+
title: "Invalid Port Type",
|
|
1001
|
+
explanation: `Port '${portName}' has an unrecognized type '${typeName}'.`,
|
|
1002
|
+
fix: `Use a valid port type: STRING, NUMBER, BOOLEAN, ARRAY, OBJECT, FUNCTION, ANY, or STEP.`,
|
|
1003
|
+
code: error.code
|
|
1004
|
+
};
|
|
1005
|
+
},
|
|
1006
|
+
INVALID_PORT_CONFIG_REF(error) {
|
|
1007
|
+
const quoted = extractQuoted(error.message);
|
|
1008
|
+
const instanceId = quoted[0] || error.node || "unknown";
|
|
1009
|
+
const portName = quoted[1] || "unknown";
|
|
1010
|
+
return {
|
|
1011
|
+
title: "Invalid Port Config Reference",
|
|
1012
|
+
explanation: `Instance '${instanceId}' references port '${portName}' in a portOrder or portLabel annotation, but this port doesn't exist on the node type.`,
|
|
1013
|
+
fix: `Check the port name spelling, or remove the port configuration if the port was renamed or removed.`,
|
|
1014
|
+
code: error.code
|
|
1015
|
+
};
|
|
1016
|
+
},
|
|
1017
|
+
INVALID_EXECUTE_WHEN(error) {
|
|
1018
|
+
const quoted = extractQuoted(error.message);
|
|
1019
|
+
const value = quoted[1] || quoted[0] || "unknown";
|
|
1020
|
+
return {
|
|
1021
|
+
title: "Invalid Execution Strategy",
|
|
1022
|
+
explanation: `@executeWhen value '${value}' is not recognized.`,
|
|
1023
|
+
fix: `Use one of: CONJUNCTION (all inputs), DISJUNCTION (any input), or CUSTOM (custom logic).`,
|
|
1024
|
+
code: error.code
|
|
1025
|
+
};
|
|
1026
|
+
},
|
|
1027
|
+
SCOPE_EMPTY(error) {
|
|
1028
|
+
const quoted = extractQuoted(error.message);
|
|
1029
|
+
const scopeName = quoted[0] || "unknown";
|
|
1030
|
+
const nodeName = quoted[1] || error.node || "unknown";
|
|
1031
|
+
return {
|
|
1032
|
+
title: "Empty Scope",
|
|
1033
|
+
explanation: `Scope '${scopeName}' on node '${nodeName}' has no child nodes declared inside it. The scope won't iterate over anything.`,
|
|
1034
|
+
fix: `Add child nodes to the scope with @scope ${scopeName} [childId1, childId2], or remove the scope if it's not needed.`,
|
|
1035
|
+
code: error.code
|
|
1036
|
+
};
|
|
1037
|
+
},
|
|
1038
|
+
SCOPE_INCONSISTENT(error) {
|
|
1039
|
+
const quoted = extractQuoted(error.message);
|
|
1040
|
+
const instanceId = quoted[0] || error.node || "unknown";
|
|
1041
|
+
return {
|
|
1042
|
+
title: "Scope Conflict",
|
|
1043
|
+
explanation: `Instance '${instanceId}' is assigned to multiple scopes. A node can only belong to one scope at a time.`,
|
|
1044
|
+
fix: `Remove '${instanceId}' from one of the conflicting @scope declarations.`,
|
|
1045
|
+
code: error.code
|
|
1046
|
+
};
|
|
1047
|
+
}
|
|
1048
|
+
};
|
|
1049
|
+
function getFriendlyError(error) {
|
|
1050
|
+
const mapper = errorMappers[error.code];
|
|
1051
|
+
if (!mapper) return null;
|
|
1052
|
+
return mapper(error);
|
|
1053
|
+
}
|
|
1054
|
+
function formatFriendlyDiagnostics(errors) {
|
|
1055
|
+
if (errors.length === 0) return "";
|
|
1056
|
+
const lines = [];
|
|
1057
|
+
for (const error of errors) {
|
|
1058
|
+
const friendly = getFriendlyError(error);
|
|
1059
|
+
const severity = error.type === "error" ? "ERROR" : "WARNING";
|
|
1060
|
+
if (friendly) {
|
|
1061
|
+
lines.push(`[${severity}] ${friendly.title}`);
|
|
1062
|
+
lines.push(` ${friendly.explanation}`);
|
|
1063
|
+
lines.push(` How to fix: ${friendly.fix}`);
|
|
1064
|
+
lines.push(` Code: ${friendly.code}`);
|
|
1065
|
+
} else {
|
|
1066
|
+
lines.push(`[${severity}] ${error.code}`);
|
|
1067
|
+
lines.push(` ${error.message}`);
|
|
1068
|
+
}
|
|
1069
|
+
lines.push("");
|
|
1070
|
+
}
|
|
1071
|
+
return lines.join("\n");
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
// src/generator/workflow-generator.ts
|
|
1075
|
+
import * as path from "node:path";
|
|
1076
|
+
var WorkflowGenerator = class {
|
|
1077
|
+
async generate(filePath, workflowName, options = {}) {
|
|
1078
|
+
const { production = false, sourceMap = false } = options;
|
|
1079
|
+
const parseResult = await this.parse(filePath, workflowName);
|
|
1080
|
+
this.validate(parseResult.ast);
|
|
1081
|
+
if (sourceMap) {
|
|
1082
|
+
return generateCode(parseResult.ast, { production, sourceMap: true, allWorkflows: parseResult.allWorkflows });
|
|
1083
|
+
}
|
|
1084
|
+
return generateCode(parseResult.ast, { production, allWorkflows: parseResult.allWorkflows });
|
|
1085
|
+
}
|
|
1086
|
+
async parse(filePath, workflowName) {
|
|
1087
|
+
const parseResult = await parseWorkflow(filePath, { workflowName, projectDir: path.dirname(filePath) });
|
|
1088
|
+
if (parseResult.errors.length > 0) {
|
|
1089
|
+
throw new Error(
|
|
1090
|
+
`Workflow parsing failed with ${parseResult.errors.length} error(s):
|
|
1091
|
+
${parseResult.errors.map((e) => ` - ${e}`).join("\n")}`
|
|
1092
|
+
);
|
|
1093
|
+
}
|
|
1094
|
+
return parseResult;
|
|
1095
|
+
}
|
|
1096
|
+
validate(ast) {
|
|
1097
|
+
const validation = validateWorkflow(ast);
|
|
1098
|
+
if (!validation.valid) {
|
|
1099
|
+
const lines = validation.errors.map((error) => ` - ${error.message}${error.node ? ` (node: ${error.node})` : ""}`);
|
|
1100
|
+
throw new Error(`Workflow validation failed with ${validation.errors.length} error(s):
|
|
1101
|
+
${lines.join("\n")}`);
|
|
1102
|
+
}
|
|
1103
|
+
return validation;
|
|
1104
|
+
}
|
|
1105
|
+
};
|
|
1106
|
+
var generator = new WorkflowGenerator();
|
|
1107
|
+
export {
|
|
1108
|
+
AmbiguousEffectError,
|
|
1109
|
+
AnnotationGenerator,
|
|
1110
|
+
AnnotationParser,
|
|
1111
|
+
BRANCHING_STRATEGIES,
|
|
1112
|
+
CONTINUATION_FORMAT_VERSION,
|
|
1113
|
+
ConnectionBuilder,
|
|
1114
|
+
DurableExecution,
|
|
1115
|
+
DurableGateYield,
|
|
1116
|
+
ENGINE_VERSION,
|
|
1117
|
+
ENVELOPE_KEYS,
|
|
1118
|
+
EXECUTION_STRATEGIES,
|
|
1119
|
+
GENERATOR_ABI,
|
|
1120
|
+
GeneratedExecutionContext,
|
|
1121
|
+
IMPACT_COLORS,
|
|
1122
|
+
IMPACT_DESCRIPTIONS,
|
|
1123
|
+
KNOWN_NODETYPE_TAGS,
|
|
1124
|
+
KNOWN_WORKFLOW_TAGS,
|
|
1125
|
+
MARKERS,
|
|
1126
|
+
MAX_CONTINUATION_BYTES,
|
|
1127
|
+
MAX_CONTINUATION_DEPTH,
|
|
1128
|
+
MAX_CONTINUATION_ENTRIES,
|
|
1129
|
+
MAX_CONTINUATION_STRING_BYTES,
|
|
1130
|
+
MIN_NODE_MAJOR,
|
|
1131
|
+
NodeInstanceBuilder,
|
|
1132
|
+
NodeTypeBuilder,
|
|
1133
|
+
PORT_TYPE_MAPPINGS,
|
|
1134
|
+
RESERVED_NODE_NAMES,
|
|
1135
|
+
RESERVED_PORT_NAMES,
|
|
1136
|
+
SCOPED_PORT_NAMES,
|
|
1137
|
+
STANDARD_JSDOC_TAGS,
|
|
1138
|
+
TagHandlerRegistry,
|
|
1139
|
+
VALID_NODE_COLORS,
|
|
1140
|
+
ValidationRuleRegistry,
|
|
1141
|
+
WireValidationError,
|
|
1142
|
+
WorkflowBuilder,
|
|
1143
|
+
WorkflowDiffer,
|
|
1144
|
+
WorkflowGenerator,
|
|
1145
|
+
WorkflowValidator,
|
|
1146
|
+
acceptContinuation,
|
|
1147
|
+
addConnection,
|
|
1148
|
+
addConnections,
|
|
1149
|
+
addNode,
|
|
1150
|
+
addNodeType,
|
|
1151
|
+
addNodes,
|
|
1152
|
+
addToScope,
|
|
1153
|
+
addWorkflowToSource,
|
|
1154
|
+
applyModifyOperation,
|
|
1155
|
+
assertAcceptedContinuation,
|
|
1156
|
+
assertNodeExists,
|
|
1157
|
+
assertNodeNotExists,
|
|
1158
|
+
assertNodeTypeExists,
|
|
1159
|
+
canonicalWireValue,
|
|
1160
|
+
cloneAndFreezeWireValue,
|
|
1161
|
+
cloneWorkflow,
|
|
1162
|
+
compileWorkflow,
|
|
1163
|
+
configureGeneratedBranding,
|
|
1164
|
+
continuationChecksum,
|
|
1165
|
+
countConnections,
|
|
1166
|
+
countNodeTypes,
|
|
1167
|
+
countNodes,
|
|
1168
|
+
createContinuationEnvelope,
|
|
1169
|
+
createScope,
|
|
1170
|
+
createWorkflow,
|
|
1171
|
+
createWorkflowRuntime,
|
|
1172
|
+
decodeContinuation,
|
|
1173
|
+
durableGateId,
|
|
1174
|
+
executionAddressKey,
|
|
1175
|
+
findDeadEndDetails,
|
|
1176
|
+
findDeadEnds,
|
|
1177
|
+
findDisconnectedOutputPorts,
|
|
1178
|
+
findIsolatedNodes,
|
|
1179
|
+
findNodesByName,
|
|
1180
|
+
findPath,
|
|
1181
|
+
findUnusedNodeTypes,
|
|
1182
|
+
findWorkflows,
|
|
1183
|
+
formatDiff,
|
|
1184
|
+
formatFriendlyDiagnostics,
|
|
1185
|
+
formatPortReference,
|
|
1186
|
+
formatPortsInFunctionText,
|
|
1187
|
+
fromAST,
|
|
1188
|
+
generateCode,
|
|
1189
|
+
generateInPlace,
|
|
1190
|
+
generateNodeFromTemplate,
|
|
1191
|
+
generateUniqueNodeId,
|
|
1192
|
+
generateWorkflowFromTemplate,
|
|
1193
|
+
generator,
|
|
1194
|
+
getAllPortTypes,
|
|
1195
|
+
getAvailableCommands,
|
|
1196
|
+
getAvailableWorkflows,
|
|
1197
|
+
getConnectedPorts,
|
|
1198
|
+
getConnections,
|
|
1199
|
+
getCriticalConnections,
|
|
1200
|
+
getDataDependencies,
|
|
1201
|
+
getDependencies,
|
|
1202
|
+
getDependents,
|
|
1203
|
+
getExecutionGroups,
|
|
1204
|
+
getFriendlyError,
|
|
1205
|
+
getGeneratedBranding,
|
|
1206
|
+
getImpactReasons,
|
|
1207
|
+
getIncomingConnections,
|
|
1208
|
+
getKnownWorkflowTags,
|
|
1209
|
+
getNode,
|
|
1210
|
+
getNodeTemplate,
|
|
1211
|
+
getNodeType,
|
|
1212
|
+
getNodeTypeChanges,
|
|
1213
|
+
getNodes,
|
|
1214
|
+
getNodesByType,
|
|
1215
|
+
getNodesInScope,
|
|
1216
|
+
getOutgoingConnections,
|
|
1217
|
+
getPortTypeDescription,
|
|
1218
|
+
getTopologicalOrder,
|
|
1219
|
+
getTransitiveDependencies,
|
|
1220
|
+
getUnconnectedPorts,
|
|
1221
|
+
getWorkflowTemplate,
|
|
1222
|
+
hasBreakingChanges,
|
|
1223
|
+
hasExactlyTheKeys,
|
|
1224
|
+
hasInPlaceMarkers,
|
|
1225
|
+
hasNode,
|
|
1226
|
+
hasNodeType,
|
|
1227
|
+
inferDataTypeFromTS,
|
|
1228
|
+
isAmbiguousEffectError,
|
|
1229
|
+
isConnected,
|
|
1230
|
+
isControlFlowPort,
|
|
1231
|
+
isDurableGateYield,
|
|
1232
|
+
isExecutePort,
|
|
1233
|
+
isExecutionAddress,
|
|
1234
|
+
isExitNode,
|
|
1235
|
+
isFailurePort,
|
|
1236
|
+
isPlainObjectRecord,
|
|
1237
|
+
isPseudoNode,
|
|
1238
|
+
isReservedNodeName,
|
|
1239
|
+
isReservedPortName,
|
|
1240
|
+
isScopedFailurePort,
|
|
1241
|
+
isScopedMandatoryPort,
|
|
1242
|
+
isScopedPort,
|
|
1243
|
+
isScopedStartPort,
|
|
1244
|
+
isScopedSuccessPort,
|
|
1245
|
+
isSpecialNode,
|
|
1246
|
+
isStartNode,
|
|
1247
|
+
isSuccessPort,
|
|
1248
|
+
isValidPortType,
|
|
1249
|
+
listNodeTemplates,
|
|
1250
|
+
listNodeTypes,
|
|
1251
|
+
listWorkflowTemplates,
|
|
1252
|
+
mapToTypeScript,
|
|
1253
|
+
moveToScope,
|
|
1254
|
+
nodeInstance,
|
|
1255
|
+
nodeTemplates,
|
|
1256
|
+
nodeType,
|
|
1257
|
+
operationKey,
|
|
1258
|
+
parseFunctionSignature,
|
|
1259
|
+
parsePortsFromFunctionText,
|
|
1260
|
+
parseReturnFields,
|
|
1261
|
+
parseReturnTypeFields,
|
|
1262
|
+
parseWorkflow,
|
|
1263
|
+
parseWorkflowSourceAtPath,
|
|
1264
|
+
parser,
|
|
1265
|
+
port,
|
|
1266
|
+
portRef,
|
|
1267
|
+
portReferencesEqual,
|
|
1268
|
+
reconnect,
|
|
1269
|
+
removeAllConnections,
|
|
1270
|
+
removeConnection,
|
|
1271
|
+
removeFromScope,
|
|
1272
|
+
removeNode,
|
|
1273
|
+
removeNodeType,
|
|
1274
|
+
removeNodes,
|
|
1275
|
+
removeScope,
|
|
1276
|
+
removeWorkflowFromSource,
|
|
1277
|
+
renameNode,
|
|
1278
|
+
renameNodeType,
|
|
1279
|
+
renamePortInCode,
|
|
1280
|
+
renameWorkflow,
|
|
1281
|
+
replaceConnections,
|
|
1282
|
+
replaceNodeTypes,
|
|
1283
|
+
resolveNpmNodeTypes,
|
|
1284
|
+
runCommand,
|
|
1285
|
+
setInstancePortConfigs,
|
|
1286
|
+
setNodeConfig,
|
|
1287
|
+
setNodeLabel,
|
|
1288
|
+
setNodeMinimized,
|
|
1289
|
+
setNodeSize,
|
|
1290
|
+
setOutputFileType,
|
|
1291
|
+
setStartExitPorts,
|
|
1292
|
+
setWorkflowDescription,
|
|
1293
|
+
setWorkflowMetadata,
|
|
1294
|
+
setWorkflowPorts,
|
|
1295
|
+
sha256Hex,
|
|
1296
|
+
stripGeneratedSections,
|
|
1297
|
+
stripOptionalUndefined,
|
|
1298
|
+
structurallyValidEnvelope,
|
|
1299
|
+
swapNodeInstancePortOrder,
|
|
1300
|
+
swapPortOrder,
|
|
1301
|
+
syncCodeRenames,
|
|
1302
|
+
tagHandlerRegistry,
|
|
1303
|
+
toCamelCase,
|
|
1304
|
+
toPascalCase,
|
|
1305
|
+
toggleWorkflowExport,
|
|
1306
|
+
transformWorkflow,
|
|
1307
|
+
updateNode,
|
|
1308
|
+
updateNodeType,
|
|
1309
|
+
updatePortsInFunctionText,
|
|
1310
|
+
utf8ByteLength,
|
|
1311
|
+
validateModifyParams,
|
|
1312
|
+
validatePortReference,
|
|
1313
|
+
validateWireValue,
|
|
1314
|
+
validateWorkflow,
|
|
1315
|
+
validationRuleRegistry,
|
|
1316
|
+
validator,
|
|
1317
|
+
withMinimalValidation,
|
|
1318
|
+
withValidation,
|
|
1319
|
+
withoutValidation,
|
|
1320
|
+
workflow,
|
|
1321
|
+
workflowTemplates
|
|
1322
|
+
};
|