@wootsup/mcp 0.1.0 → 0.4.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/CHANGELOG.md +157 -83
- package/README.md +31 -27
- package/SECURITY.md +15 -6
- package/dist/auth/keychain.d.ts +27 -1
- package/dist/auth/keychain.js +48 -2
- package/dist/auth/keychain.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +31 -0
- package/dist/catalog/build-catalog.js +68 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.js +129 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/auto-layout.d.ts +21 -0
- package/dist/modules/apimapper/auto-layout.js +54 -0
- package/dist/modules/apimapper/auto-layout.js.map +1 -0
- package/dist/modules/apimapper/cache.js +25 -17
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +115 -4
- package/dist/modules/apimapper/client.js +699 -304
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +31 -1
- package/dist/modules/apimapper/connections-format.js +97 -5
- package/dist/modules/apimapper/connections-format.js.map +1 -1
- package/dist/modules/apimapper/connections.d.ts +9 -7
- package/dist/modules/apimapper/connections.js +449 -127
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
- package/dist/modules/apimapper/credential-sanitizer.js +60 -1
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
- package/dist/modules/apimapper/credentials.js +105 -61
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.js +21 -2
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +29 -0
- package/dist/modules/apimapper/elicitation.js +62 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -1
- package/dist/modules/apimapper/example-extract.d.ts +13 -0
- package/dist/modules/apimapper/example-extract.js +111 -0
- package/dist/modules/apimapper/example-extract.js.map +1 -0
- package/dist/modules/apimapper/filter-operators.d.ts +24 -0
- package/dist/modules/apimapper/filter-operators.js +103 -0
- package/dist/modules/apimapper/filter-operators.js.map +1 -0
- package/dist/modules/apimapper/flows-format.js +92 -22
- package/dist/modules/apimapper/flows-format.js.map +1 -1
- package/dist/modules/apimapper/flows.d.ts +8 -7
- package/dist/modules/apimapper/flows.js +275 -120
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-read-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js +172 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +66 -106
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -1
- package/dist/modules/apimapper/gateway/collect-module-tools.d.ts +17 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js +44 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +1 -1
- package/dist/modules/apimapper/gateway/essentials.js +21 -2
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -1
- package/dist/modules/apimapper/gateway/gateway-shared.d.ts +21 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js +124 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +1 -17
- package/dist/modules/apimapper/gateway/test-support.js +4 -33
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -1
- package/dist/modules/apimapper/get-skill-cores.d.ts +4 -0
- package/dist/modules/apimapper/get-skill-cores.js +220 -0
- package/dist/modules/apimapper/get-skill-cores.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +1 -1
- package/dist/modules/apimapper/get-skill.js +74 -9
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.d.ts +85 -2
- package/dist/modules/apimapper/graph-builder.js +151 -15
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.js +152 -48
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.js +27 -13
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/jmespath-test.d.ts +4 -0
- package/dist/modules/apimapper/jmespath-test.js +152 -0
- package/dist/modules/apimapper/jmespath-test.js.map +1 -0
- package/dist/modules/apimapper/library.js +553 -88
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license.js +12 -36
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/list-footer.d.ts +27 -0
- package/dist/modules/apimapper/list-footer.js +57 -0
- package/dist/modules/apimapper/list-footer.js.map +1 -0
- package/dist/modules/apimapper/local-sources.js +100 -57
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/mcp-client-identity.d.ts +32 -0
- package/dist/modules/apimapper/mcp-client-identity.js +70 -0
- package/dist/modules/apimapper/mcp-client-identity.js.map +1 -0
- package/dist/modules/apimapper/merge-constants.d.ts +6 -0
- package/dist/modules/apimapper/merge-constants.js +26 -0
- package/dist/modules/apimapper/merge-constants.js.map +1 -0
- package/dist/modules/apimapper/misc.js +13 -27
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -2
- package/dist/modules/apimapper/node-schema.js +95 -4
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +59 -1
- package/dist/modules/apimapper/onboarding.js +231 -28
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +16 -3
- package/dist/modules/apimapper/read-cache.js +59 -4
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/index.js +26 -5
- package/dist/modules/apimapper/render/index.js.map +1 -1
- package/dist/modules/apimapper/resource-id.d.ts +13 -0
- package/dist/modules/apimapper/resource-id.js +69 -0
- package/dist/modules/apimapper/resource-id.js.map +1 -0
- package/dist/modules/apimapper/schema.js +9 -18
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings.js +49 -52
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/sites-tools.d.ts +29 -0
- package/dist/modules/apimapper/sites-tools.js +165 -0
- package/dist/modules/apimapper/sites-tools.js.map +1 -0
- package/dist/modules/apimapper/tool-result.d.ts +66 -0
- package/dist/modules/apimapper/tool-result.js +125 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +12 -11
- package/dist/modules/apimapper/toolslist-size.js +34 -21
- package/dist/modules/apimapper/toolslist-size.js.map +1 -1
- package/dist/modules/apimapper/types.d.ts +34 -0
- package/dist/modules/apimapper/types.js +1 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +375 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.js +302 -58
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
- package/dist/modules/apimapper/yootheme-binding.js +267 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +158 -2
- package/dist/platform/index.js.map +1 -1
- package/dist/proxy/bridge.d.ts +35 -0
- package/dist/proxy/bridge.js +129 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +9 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/setup/detect-clients.d.ts +40 -1
- package/dist/setup/detect-clients.js +148 -1
- package/dist/setup/detect-clients.js.map +1 -1
- package/dist/setup/probe-auth.d.ts +51 -0
- package/dist/setup/probe-auth.js +141 -0
- package/dist/setup/probe-auth.js.map +1 -0
- package/dist/setup/probe-handshake.js +40 -7
- package/dist/setup/probe-handshake.js.map +1 -1
- package/dist/setup/remove-config.d.ts +8 -0
- package/dist/setup/remove-config.js +145 -0
- package/dist/setup/remove-config.js.map +1 -0
- package/dist/setup/uninstall.d.ts +34 -0
- package/dist/setup/uninstall.js +147 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup-cli.d.ts +16 -0
- package/dist/setup-cli.js +63 -1
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +48 -0
- package/dist/sites/loader.js +134 -0
- package/dist/sites/loader.js.map +1 -0
- package/dist/sites/schema.d.ts +69 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +47 -0
- package/dist/sites/secret-resolver.js +150 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/skill-instructions.d.ts +14 -1
- package/dist/skill-instructions.js +35 -6
- package/dist/skill-instructions.js.map +1 -1
- package/dist/transports/stdio.js +4 -4
- package/dist/transports/stdio.js.map +1 -1
- package/dist/uninstall-skill.d.ts +27 -0
- package/dist/uninstall-skill.js +89 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/docs/architecture.md +21 -21
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -79
- package/package.json +69 -65
- package/skills/apimapper/SKILL.md +128 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/dynamize-existing-layout.md +158 -0
- package/skills/apimapper/reference/jmespath-cookbook.md +241 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +189 -0
- package/skills/apimapper/reference/joomla.md +1 -1
- package/skills/apimapper/reference/library-template-discovery.md +65 -0
- package/skills/apimapper/reference/merge-two-sources-on-key.md +204 -0
- package/skills/apimapper/reference/oauth.md +143 -52
- package/skills/apimapper/reference/troubleshooting.md +22 -2
- package/skills/apimapper/reference/yootheme-source-to-builder-handoff.md +348 -0
- package/skills/apimapper/reference/yootheme.md +75 -44
- package/dist/auth/oauth-provider.d.ts +0 -68
- package/dist/auth/oauth-provider.js +0 -232
- package/dist/auth/oauth-provider.js.map +0 -1
- package/dist/server-http.d.ts +0 -22
- package/dist/server-http.js +0 -159
- package/dist/server-http.js.map +0 -1
- package/dist/transports/http.d.ts +0 -29
- package/dist/transports/http.js +0 -267
- package/dist/transports/http.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-sources.js","sourceRoot":"","sources":["../../../src/modules/apimapper/local-sources.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-sources.js","sourceRoot":"","sources":["../../../src/modules/apimapper/local-sources.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAE/D,qEAAqE;AACrE,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,+DAA+D;AAC/D,+EAA+E;AAC/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,sBAAsB,GAC1B,wGAAwG;IACxG,kFAAkF;IAClF,6DAA6D,CAAC;AAEhE,SAAS,qBAAqB;IAC5B,OAAO,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,KAAK,CACJ,oBAAoB,EACpB,uGAAuG,CACxG,CAAC;AACN,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,6EAA6E;AAC7E,qEAAqE;AACrE,0EAA0E;AAC1E,iFAAiF;AACjF,yEAAyE;AACzE,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAE5E,MAAM,UAAU,wBAAwB,CAAC,MAAqB;IAC5D,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,6GAA6G;YAC7G,6EAA6E;YAC7E,kDAAkD;QACpD,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC7E,EACD,KAAK,IAAI,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,OAAO,CAAwB,sBAAsB,CAAC,CAAC;QACvE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,4EAA4E;IAC5E,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,qEAAqE;YAClF,wEAAwE;YACxE,8EAA8E;QAC9E,WAAW,EAAE;YACX,gEAAgE;YAChE,qEAAqE;YACrE,4CAA4C;YAC5C,OAAO,EAAE,qBAAqB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5E,uEAAuE;YACvE,+DAA+D;YAC/D,uEAAuE;YACvE,oEAAoE;YACpE,iEAAiE;YACjE,YAAY,EAAE,qBAAqB,EAAE;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,mGAAmG,CAAC;SACjH;QACD,WAAW,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE;QAClC,MAAM,cAAc,GAAG,OAAO,IAAI,YAAY,CAAC;QAC/C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1D,OAAO,WAAW,CAAC;gBACjB,OAAO,EAAE,yGAAyG;gBAClH,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,8DAA8D;gBAC1E,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAU,yBAAyB,2BAA2B,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,uCAAuC,EACvC;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,0FAA0F;YAC1F,+GAA+G;QACjH,WAAW,EAAE;YACX,mEAAmE;YACnE,gCAAgC;YAChC,OAAO,EAAE,qBAAqB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5E,6DAA6D;YAC7D,oEAAoE;YACpE,YAAY,EAAE,qBAAqB,EAAE;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,mGAAmG,CAAC;YAChH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC;iBACxD,QAAQ,CAAC,uDAAuD,CAAC;SACrE;QACD,WAAW,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACrF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE;QAC/C,MAAM,cAAc,GAAG,OAAO,IAAI,YAAY,CAAC;QAC/C,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1D,OAAO,WAAW,CAAC;gBACjB,OAAO,EAAE,yGAAyG;gBAClH,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,8DAA8D;gBAC1E,OAAO,EAAE,EAAE,WAAW,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,OAAO,CACrB,iCAAiC,2BAA2B,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAClH,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,eAAe,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,sEAAsE;IACtE,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,yBAAyB;QAChC,kEAAkE;QAClE,mEAAmE;QACnE,mEAAmE;QACnE,WAAW,EACT,4FAA4F;YAC5F,4FAA4F;YAC5F,sFAAsF;YACtF,4DAA4D;YAC5D,+FAA+F;QACjG,WAAW,EAAE;YACX,kEAAkE;YAClE,gEAAgE;YAChE,uEAAuE;YACvE,sEAAsE;YACtE,mEAAmE;YACnE,uEAAuE;YACvE,YAAY,EAAE,qBAAqB,EAAE,CAAC,QAAQ,CAC5C,wFAAwF;gBACtF,mFAAmF;gBACnF,sFAAsF;gBACtF,wDAAwD;gBACxD,kFAAkF,CACrF;YACD,OAAO,EAAE,CAAC;iBACP,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,EAAE;iBACV,QAAQ,CAAC,8DAA8D,CAAC;YAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CACpD,wGAAwG,CACzG;YACD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAC3C,uLAAuL,CACxL;YACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC7E,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAC3E;QACD,WAAW,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACxE,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QACjE,0EAA0E;QAC1E,kEAAkE;QAClE,yEAAyE;QACzE,wEAAwE;QACxE,+CAA+C;QAC/C,MAAM,IAAI,GAA4B;YACpC,WAAW,EAAE,YAAY,EAAE,4BAA4B;YACvD,KAAK;YACL,MAAM;YACN,aAAa,EAAE,KAAK;SACrB,CAAC;QACF,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACjC,MAAM,CAAC,GAAG,MAAM,OAAO,CAMrB,sBAAsB,EACtB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/C,CAAC;QACF,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,yEAAyE;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,gBAAgB;YAChB,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YAClC,OAAO,eAAe,CAAC,CAAC,EAAE;gBACtB,YAAY;gBACZ,KAAK;gBACL,MAAM;gBACN,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,YAAY,CACjB;YACE,EAAE,EAAE,IAAI;YACR,YAAY;YACZ,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM;YACpC,QAAQ,EAAE,KAAK,CAAC,MAAM;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACzB,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,SAAS;SACnF,EACD,KAAK,EACL,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize a raw `name/version` identity into a header-safe string.
|
|
3
|
+
*
|
|
4
|
+
* - Strips CR/LF and other ASCII control chars (header-injection defense).
|
|
5
|
+
* - Collapses runs of whitespace to single spaces and trims.
|
|
6
|
+
* - Caps the length to {@link MAX_CLIENT_LEN}.
|
|
7
|
+
* - Returns `null` for empty / whitespace-only input.
|
|
8
|
+
*
|
|
9
|
+
* @param raw the candidate identity string (may be undefined)
|
|
10
|
+
* @returns a sanitized non-empty string, or null
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizeMcpClient(raw: string | undefined | null): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Build a `name/version` identity from the SDK `Implementation` shape and
|
|
15
|
+
* stash it for the outbound chokepoint. Called once after the stdio handshake.
|
|
16
|
+
*
|
|
17
|
+
* Empty / missing clientInfo → the slot stays null and no header is attached.
|
|
18
|
+
*
|
|
19
|
+
* @param info the connecting client's implementation info (name+version),
|
|
20
|
+
* or undefined when the SDK could not determine it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function setMcpClient(info: {
|
|
23
|
+
name?: string;
|
|
24
|
+
version?: string;
|
|
25
|
+
} | undefined): void;
|
|
26
|
+
/**
|
|
27
|
+
* The sanitized connected-client identity, or null when no client info was
|
|
28
|
+
* available. Read by `performFetch` to attach the `X-MCP-Client` header.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getMcpClient(): string | null;
|
|
31
|
+
/** Test-only reset of the module-scoped slot. */
|
|
32
|
+
export declare function __resetMcpClientForTests(): void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// src/modules/apimapper/mcp-client-identity.ts
|
|
2
|
+
//
|
|
3
|
+
// Connected-client identity carrier (Task Q1).
|
|
4
|
+
//
|
|
5
|
+
// The MCP SDK exposes the connecting AI client's name+version via
|
|
6
|
+
// `server.server.getClientVersion()` AFTER the stdio handshake completes.
|
|
7
|
+
// We stash a sanitized `name/version` string in a module-scoped slot here so
|
|
8
|
+
// the outbound REST chokepoint (`performFetch` in client.ts) can attach it as
|
|
9
|
+
// the `X-MCP-Client` header on every request — WITHOUT a circular import
|
|
10
|
+
// between `index.ts` (which owns the server) and `client.ts` (which owns the
|
|
11
|
+
// fetch). `index.ts` calls `setMcpClient()` once post-connect; `client.ts`
|
|
12
|
+
// calls `getMcpClient()` per request.
|
|
13
|
+
//
|
|
14
|
+
// The value is attacker-INFLUENCEABLE (any MCP client picks its own
|
|
15
|
+
// clientInfo), so we treat it as untrusted: strip CR/LF (header-injection
|
|
16
|
+
// defense), collapse internal control chars, and cap the length. The REST
|
|
17
|
+
// side maps it to a known provider slug and NEVER renders the raw string.
|
|
18
|
+
/** Max wire length for the X-MCP-Client header value. Generous but bounded. */
|
|
19
|
+
const MAX_CLIENT_LEN = 128;
|
|
20
|
+
let currentClient = null;
|
|
21
|
+
/**
|
|
22
|
+
* Sanitize a raw `name/version` identity into a header-safe string.
|
|
23
|
+
*
|
|
24
|
+
* - Strips CR/LF and other ASCII control chars (header-injection defense).
|
|
25
|
+
* - Collapses runs of whitespace to single spaces and trims.
|
|
26
|
+
* - Caps the length to {@link MAX_CLIENT_LEN}.
|
|
27
|
+
* - Returns `null` for empty / whitespace-only input.
|
|
28
|
+
*
|
|
29
|
+
* @param raw the candidate identity string (may be undefined)
|
|
30
|
+
* @returns a sanitized non-empty string, or null
|
|
31
|
+
*/
|
|
32
|
+
export function sanitizeMcpClient(raw) {
|
|
33
|
+
if (typeof raw !== "string")
|
|
34
|
+
return null;
|
|
35
|
+
// eslint-disable-next-line no-control-regex -- intentional: strip ASCII control chars (CR/LF header injection)
|
|
36
|
+
const stripped = raw.replace(/[\u0000-\u001f\u007f]/g, " ").replace(/\s+/g, " ").trim();
|
|
37
|
+
if (stripped.length === 0)
|
|
38
|
+
return null;
|
|
39
|
+
return stripped.slice(0, MAX_CLIENT_LEN);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build a `name/version` identity from the SDK `Implementation` shape and
|
|
43
|
+
* stash it for the outbound chokepoint. Called once after the stdio handshake.
|
|
44
|
+
*
|
|
45
|
+
* Empty / missing clientInfo → the slot stays null and no header is attached.
|
|
46
|
+
*
|
|
47
|
+
* @param info the connecting client's implementation info (name+version),
|
|
48
|
+
* or undefined when the SDK could not determine it.
|
|
49
|
+
*/
|
|
50
|
+
export function setMcpClient(info) {
|
|
51
|
+
const name = typeof info?.name === "string" ? info.name.trim() : "";
|
|
52
|
+
if (!name) {
|
|
53
|
+
currentClient = null;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const version = typeof info?.version === "string" && info.version.trim() ? info.version.trim() : "unknown";
|
|
57
|
+
currentClient = sanitizeMcpClient(`${name}/${version}`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The sanitized connected-client identity, or null when no client info was
|
|
61
|
+
* available. Read by `performFetch` to attach the `X-MCP-Client` header.
|
|
62
|
+
*/
|
|
63
|
+
export function getMcpClient() {
|
|
64
|
+
return currentClient;
|
|
65
|
+
}
|
|
66
|
+
/** Test-only reset of the module-scoped slot. */
|
|
67
|
+
export function __resetMcpClientForTests() {
|
|
68
|
+
currentClient = null;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=mcp-client-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client-identity.js","sourceRoot":"","sources":["../../../src/modules/apimapper/mcp-client-identity.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,sCAAsC;AACtC,EAAE;AACF,oEAAoE;AACpE,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAE1E,+EAA+E;AAC/E,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAA8B;IAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,+GAA+G;IAC/G,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAqD;IAChF,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,aAAa,GAAG,IAAI,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3G,aAAa,GAAG,iBAAiB,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,wBAAwB;IACtC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const MERGE_STRATEGIES: readonly ["concat", "join"];
|
|
2
|
+
export type MergeStrategyCanonical = (typeof MERGE_STRATEGIES)[number];
|
|
3
|
+
export declare const MERGE_STRATEGIES_INPUT: readonly ["join", "concat", "append"];
|
|
4
|
+
export type MergeStrategyInput = (typeof MERGE_STRATEGIES_INPUT)[number];
|
|
5
|
+
export declare const MERGE_JOIN_TYPES: readonly ["left", "right", "inner", "outer"];
|
|
6
|
+
export type MergeJoinType = (typeof MERGE_JOIN_TYPES)[number];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/modules/apimapper/merge-constants.ts — single source of merge enums.
|
|
2
|
+
//
|
|
3
|
+
// F156 — before this module the merge `strategy` + `joinType` enums were
|
|
4
|
+
// declared THREE times with divergent values:
|
|
5
|
+
// • node-schema.ts mergeNodeSchema: strategy ['concat','join'],
|
|
6
|
+
// joinType ['left','right','inner','outer'] (the raw-graph write path)
|
|
7
|
+
// • workflows.ts MergeSpec / flow_change_merge_strategy: strategy
|
|
8
|
+
// ['join','concat','append'], joinType ['left','inner'] (composite path)
|
|
9
|
+
// A cold agent that learned `joinType:'outer'` from one path got a hard Zod
|
|
10
|
+
// reject on the other, and `append` was accepted in one place but not the
|
|
11
|
+
// other. Centralising the enums here removes that drift.
|
|
12
|
+
//
|
|
13
|
+
// Wire contract (ground truth — MergeNodeExecutor.php:50 + the FlowCompiler
|
|
14
|
+
// normaliser): the backend persists only 'concat' / 'join'. 'append' is a
|
|
15
|
+
// customer-facing UI alias that normalizeMergeStrategy() folds to 'concat'.
|
|
16
|
+
//
|
|
17
|
+
// - MERGE_STRATEGIES = the CANONICAL set the raw node schema enforces.
|
|
18
|
+
// - MERGE_STRATEGIES_INPUT = the canonical set PLUS the 'append' alias, for
|
|
19
|
+
// the agent-facing composite tools that accept it
|
|
20
|
+
// and normalize down to 'concat'.
|
|
21
|
+
// - MERGE_JOIN_TYPES = the full SQL-style join kinds the executor
|
|
22
|
+
// supports (left/right/inner/outer).
|
|
23
|
+
export const MERGE_STRATEGIES = ["concat", "join"];
|
|
24
|
+
export const MERGE_STRATEGIES_INPUT = ["join", "concat", "append"];
|
|
25
|
+
export const MERGE_JOIN_TYPES = ["left", "right", "inner", "outer"];
|
|
26
|
+
//# sourceMappingURL=merge-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-constants.js","sourceRoot":"","sources":["../../../src/modules/apimapper/merge-constants.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,yEAAyE;AACzE,8CAA8C;AAC9C,kEAAkE;AAClE,4EAA4E;AAC5E,oEAAoE;AACpE,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,yDAAyD;AACzD,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,gEAAgE;AAChE,2EAA2E;AAC3E,mEAAmE;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AAG5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC"}
|
|
@@ -10,6 +10,7 @@ import { randomUUID } from "node:crypto";
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { formatResult, tableResult, detailResult, errorResult, readOnly, mutating, } from "@getimo/mcp-toolkit";
|
|
12
12
|
import { request, hintFor } from "./client.js";
|
|
13
|
+
import { restErrorResult } from "./tool-result.js";
|
|
13
14
|
// rc.13 Welle 3 (2026-05-20) — heavy read tools migrated to the toolkit's
|
|
14
15
|
// structuredContent builders. Migration is purely additive (text `content`
|
|
15
16
|
// block preserved, `_meta.ui` added).
|
|
@@ -48,12 +49,7 @@ export function registerMiscTools(server) {
|
|
|
48
49
|
}, async ({ limit }) => {
|
|
49
50
|
const r = await request("/releases");
|
|
50
51
|
if (!r.success) {
|
|
51
|
-
return
|
|
52
|
-
message: r.error ?? "release list failed",
|
|
53
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
54
|
-
suggestion: hintFor(r.errorCode),
|
|
55
|
-
details: { limit },
|
|
56
|
-
});
|
|
52
|
+
return restErrorResult(r, { limit }, { message: "release list failed" });
|
|
57
53
|
}
|
|
58
54
|
const allReleases = Array.isArray(r.data?.releases) ? r.data.releases : [];
|
|
59
55
|
const releases = allReleases.slice(0, limit);
|
|
@@ -95,12 +91,7 @@ export function registerMiscTools(server) {
|
|
|
95
91
|
body: JSON.stringify({ version, product }),
|
|
96
92
|
});
|
|
97
93
|
if (!r.success) {
|
|
98
|
-
return
|
|
99
|
-
message: r.error ?? "release download failed",
|
|
100
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
101
|
-
suggestion: hintFor(r.errorCode),
|
|
102
|
-
details: { version, product },
|
|
103
|
-
});
|
|
94
|
+
return restErrorResult(r, { version, product }, { message: "release download failed" });
|
|
104
95
|
}
|
|
105
96
|
// Defensive read: PHP currently returns flat `{success, download_url}`
|
|
106
97
|
// (post Wave 1B), but older shape wrapped under `data.download_url`.
|
|
@@ -137,12 +128,7 @@ export function registerMiscTools(server) {
|
|
|
137
128
|
}, async ({ domain }) => {
|
|
138
129
|
const r = await request(`/brandfetch/${encodeURIComponent(domain)}`);
|
|
139
130
|
if (!r.success) {
|
|
140
|
-
return
|
|
141
|
-
message: r.error ?? "brandfetch failed",
|
|
142
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
143
|
-
suggestion: hintFor(r.errorCode),
|
|
144
|
-
details: { domain },
|
|
145
|
-
});
|
|
131
|
+
return restErrorResult(r, { domain }, { message: "brandfetch failed" });
|
|
146
132
|
}
|
|
147
133
|
// Defensive read: tolerate both flat (Wave 1B) and wrapped (legacy) shapes.
|
|
148
134
|
const svg = r.data?.data?.svg ?? r.data?.svg;
|
|
@@ -221,18 +207,18 @@ export function registerMiscTools(server) {
|
|
|
221
207
|
}),
|
|
222
208
|
}, { unwrapInnerSuccess: true });
|
|
223
209
|
if (!r.success) {
|
|
224
|
-
return
|
|
225
|
-
|
|
226
|
-
|
|
210
|
+
return restErrorResult(r, {
|
|
211
|
+
type,
|
|
212
|
+
subject_len: subject.length,
|
|
213
|
+
idempotency_key: key,
|
|
214
|
+
payloadFailed: r.payloadFailed,
|
|
215
|
+
}, {
|
|
216
|
+
message: "feedback submission failed",
|
|
217
|
+
// Per-site nuance: 200 + success:false (payloadFailed) → proxy
|
|
218
|
+
// delivery hint; otherwise fall back to the error-code hint.
|
|
227
219
|
suggestion: r.payloadFailed
|
|
228
220
|
? "Server accepted the request but the proxy did not deliver it. Reason in error field."
|
|
229
221
|
: hintFor(r.errorCode),
|
|
230
|
-
details: {
|
|
231
|
-
type,
|
|
232
|
-
subject_len: subject.length,
|
|
233
|
-
idempotency_key: key,
|
|
234
|
-
payloadFailed: r.payloadFailed,
|
|
235
|
-
},
|
|
236
222
|
});
|
|
237
223
|
}
|
|
238
224
|
// unwrapInnerSuccess already caught success:false, so here success is true.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/modules/apimapper/misc.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,kFAAkF;AAClF,kBAAkB;AAClB,2EAA2E;AAC3E,kFAAkF;AAClF,2EAA2E;AAC3E,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,QAAQ,GAGT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/modules/apimapper/misc.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,13 @@ export declare const filterNodeSchema: z.ZodObject<{
|
|
|
35
35
|
y: z.ZodNumber;
|
|
36
36
|
}, z.core.$strip>;
|
|
37
37
|
data: z.ZodObject<{
|
|
38
|
-
conditions: z.ZodArray<z.
|
|
38
|
+
conditions: z.ZodArray<z.ZodObject<{
|
|
39
|
+
field: z.ZodString;
|
|
40
|
+
operator: z.ZodEnum<{
|
|
41
|
+
[x: string]: string;
|
|
42
|
+
}>;
|
|
43
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
44
|
+
}, z.core.$loose>>;
|
|
39
45
|
logic: z.ZodOptional<z.ZodEnum<{
|
|
40
46
|
or: "or";
|
|
41
47
|
and: "and";
|
|
@@ -75,6 +81,16 @@ export declare const mergeNodeSchema: z.ZodObject<{
|
|
|
75
81
|
}>>;
|
|
76
82
|
}, z.core.$loose>;
|
|
77
83
|
}, z.core.$strip>;
|
|
84
|
+
export declare const OUTPUT_NODE_TYPES: readonly ["output", "output-yootheme", "output-shortcode"];
|
|
85
|
+
export type OutputNodeType = (typeof OUTPUT_NODE_TYPES)[number];
|
|
86
|
+
/**
|
|
87
|
+
* True when a node is any kind of terminal output node. Mirrors
|
|
88
|
+
* FlowCompiler::isOutputNodeType (PHP). Accepts a minimal `{ type }` shape so
|
|
89
|
+
* it works on both strict FlowNodes and loose wire objects.
|
|
90
|
+
*/
|
|
91
|
+
export declare function isOutputNode(node: {
|
|
92
|
+
type?: unknown;
|
|
93
|
+
} | null | undefined): boolean;
|
|
78
94
|
export declare const outputNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
79
95
|
id: z.ZodString;
|
|
80
96
|
type: z.ZodLiteral<"output">;
|
|
@@ -143,7 +159,13 @@ export declare const nodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
143
159
|
y: z.ZodNumber;
|
|
144
160
|
}, z.core.$strip>;
|
|
145
161
|
data: z.ZodObject<{
|
|
146
|
-
conditions: z.ZodArray<z.
|
|
162
|
+
conditions: z.ZodArray<z.ZodObject<{
|
|
163
|
+
field: z.ZodString;
|
|
164
|
+
operator: z.ZodEnum<{
|
|
165
|
+
[x: string]: string;
|
|
166
|
+
}>;
|
|
167
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
168
|
+
}, z.core.$loose>>;
|
|
147
169
|
logic: z.ZodOptional<z.ZodEnum<{
|
|
148
170
|
or: "or";
|
|
149
171
|
and: "and";
|
|
@@ -240,6 +262,34 @@ export declare const edgeSchema: z.ZodObject<{
|
|
|
240
262
|
targetHandle: z.ZodOptional<z.ZodString>;
|
|
241
263
|
}, z.core.$strip>;
|
|
242
264
|
export type FlowEdge = z.infer<typeof edgeSchema>;
|
|
265
|
+
/**
|
|
266
|
+
* Stamp a stable `id` on every edge that lacks one, at the create/update wire
|
|
267
|
+
* boundary (flow_create / flow_update / graph_preview / graph_validate).
|
|
268
|
+
*
|
|
269
|
+
* Why this exists (F5, 2026-06-09): `edgeSchema` marks `id` OPTIONAL — the AI
|
|
270
|
+
* legitimately omits it — but the React-Flow runtime + the backend graph
|
|
271
|
+
* validator key edges by `id` and reject an id-less edge with a misleading
|
|
272
|
+
* "connectivity" error. Rather than make `id` required at the schema (which
|
|
273
|
+
* would force every caller to invent ids), we generate a deterministic one
|
|
274
|
+
* here so BOTH the schema and the runtime accept id-less edges. `buildFlowGraph`
|
|
275
|
+
* already emits ids for its synthetic graphs; this closes the gap for
|
|
276
|
+
* hand-authored `flow_create` / `flow_update` graphs.
|
|
277
|
+
*
|
|
278
|
+
* Id shape: `e-<source>-<target>` (matches the convention `buildFlowGraph`
|
|
279
|
+
* already uses). Parallel edges between the same node pair — e.g. the two
|
|
280
|
+
* inputs of a merge node — get a `-2`, `-3`, … suffix. A generated id never
|
|
281
|
+
* collides with a caller-supplied id (or an already-generated one): the suffix
|
|
282
|
+
* search skips any id already taken in this batch.
|
|
283
|
+
*
|
|
284
|
+
* Pure + non-mutating: returns a NEW array of NEW edge objects; the input is
|
|
285
|
+
* left untouched. A non-array input yields `[]` (defensive — the wire boundary
|
|
286
|
+
* already validated, but a direct programmatic caller might not have).
|
|
287
|
+
*/
|
|
288
|
+
export declare function ensureEdgeIds<E extends {
|
|
289
|
+
id?: unknown;
|
|
290
|
+
source?: unknown;
|
|
291
|
+
target?: unknown;
|
|
292
|
+
}>(edges: E[]): E[];
|
|
243
293
|
/**
|
|
244
294
|
* W1.18 (F-32): case-insensitive substring filter applied in-memory after
|
|
245
295
|
* the upstream list fetch.
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
// 3. Discriminated union on `type` gives the agent a clean error like
|
|
27
27
|
// `Invalid discriminator value. Expected 'source' | 'transform' | ...`.
|
|
28
28
|
import { z } from "zod";
|
|
29
|
+
import { MERGE_STRATEGIES, MERGE_JOIN_TYPES } from "./merge-constants.js";
|
|
30
|
+
import { FILTER_OPERATORS } from "./filter-operators.js";
|
|
29
31
|
/** React-Flow node position. */
|
|
30
32
|
const positionSchema = z
|
|
31
33
|
.object({ x: z.number(), y: z.number() })
|
|
@@ -83,6 +85,23 @@ export const localSourceNodeSchema = z
|
|
|
83
85
|
})
|
|
84
86
|
.describe("Local-source node (CMS-native content)");
|
|
85
87
|
// ── filter ───────────────────────────────────────────────────────────────
|
|
88
|
+
// F53 (2026-06-10): `operator` is a CLOSED enum (mirrors FilterOperators::ALL
|
|
89
|
+
// in PHP). Before this, conditions were `z.record(z.string(), z.unknown())`,
|
|
90
|
+
// so a raw-graph edit (flow_create / flow_update) carrying
|
|
91
|
+
// `operator:"greater_than"` / ">" passed validation, landed in the flow, and
|
|
92
|
+
// silently yielded 0 rows at render time. We still `.passthrough()` the
|
|
93
|
+
// condition object so admin-UI helper keys (e.g. the frontend-only `id` React
|
|
94
|
+
// key) round-trip untouched — only `field` + `operator` are enforced.
|
|
95
|
+
const filterConditionSchema = z
|
|
96
|
+
.object({
|
|
97
|
+
field: z.string().min(1).describe("Field path to filter on"),
|
|
98
|
+
operator: z
|
|
99
|
+
.enum(FILTER_OPERATORS)
|
|
100
|
+
.describe("Comparison operator (gt/gte/lt/lte for numbers; equals/contains/etc. " +
|
|
101
|
+
'for text). Symbolic operators (">", "<") are NOT accepted — use "gt"/"lt".'),
|
|
102
|
+
value: z.unknown().optional().describe("Value to compare (omit for exists/empty operators)"),
|
|
103
|
+
})
|
|
104
|
+
.passthrough();
|
|
86
105
|
export const filterNodeSchema = z
|
|
87
106
|
.object({
|
|
88
107
|
id: z.string(),
|
|
@@ -91,7 +110,7 @@ export const filterNodeSchema = z
|
|
|
91
110
|
data: z
|
|
92
111
|
.object({
|
|
93
112
|
conditions: z
|
|
94
|
-
.array(
|
|
113
|
+
.array(filterConditionSchema)
|
|
95
114
|
.describe("Array of filter conditions ({field, operator, value})"),
|
|
96
115
|
logic: z
|
|
97
116
|
.enum(["and", "or"])
|
|
@@ -134,8 +153,11 @@ export const mergeNodeSchema = z
|
|
|
134
153
|
position: positionSchema,
|
|
135
154
|
data: z
|
|
136
155
|
.object({
|
|
156
|
+
// F156 — strategy + joinType from the shared merge-constants. The raw
|
|
157
|
+
// node schema enforces ONLY the canonical set (no 'append' alias here);
|
|
158
|
+
// the agent-facing composite tools accept 'append' and normalize it.
|
|
137
159
|
strategy: z
|
|
138
|
-
.enum(
|
|
160
|
+
.enum(MERGE_STRATEGIES)
|
|
139
161
|
.describe("'concat' = stack items from both inputs; 'join' = relational join on key. " +
|
|
140
162
|
"Strategies 'append', 'chronological', etc. are NOT valid here."),
|
|
141
163
|
joinKey: z.string().optional().describe("Field on input-0 (required if strategy='join')"),
|
|
@@ -144,7 +166,7 @@ export const mergeNodeSchema = z
|
|
|
144
166
|
.optional()
|
|
145
167
|
.describe("Field on input-1 (defaults to joinKey when omitted)"),
|
|
146
168
|
joinType: z
|
|
147
|
-
.enum(
|
|
169
|
+
.enum(MERGE_JOIN_TYPES)
|
|
148
170
|
.optional()
|
|
149
171
|
.describe("SQL-style join kind; defaults to 'left'"),
|
|
150
172
|
})
|
|
@@ -154,7 +176,26 @@ export const mergeNodeSchema = z
|
|
|
154
176
|
.describe("Merge node (combines two upstream inputs)");
|
|
155
177
|
// ── output (terminal: output / output-yootheme / output-shortcode) ───────
|
|
156
178
|
//
|
|
157
|
-
// Mirrored from FlowCompiler.php OUTPUT_NODE_TYPES const
|
|
179
|
+
// Mirrored from FlowCompiler.php OUTPUT_NODE_TYPES const
|
|
180
|
+
// (src/modules/core/src/Flow/FlowCompiler.php:26). The three literals are
|
|
181
|
+
// reused below as the zod discriminator members — this const is the single
|
|
182
|
+
// canonical list every consumer (yootheme-binding, graph hydration, ...)
|
|
183
|
+
// probes against so the set can never drift from the discriminated union.
|
|
184
|
+
export const OUTPUT_NODE_TYPES = [
|
|
185
|
+
"output",
|
|
186
|
+
"output-yootheme",
|
|
187
|
+
"output-shortcode",
|
|
188
|
+
];
|
|
189
|
+
/**
|
|
190
|
+
* True when a node is any kind of terminal output node. Mirrors
|
|
191
|
+
* FlowCompiler::isOutputNodeType (PHP). Accepts a minimal `{ type }` shape so
|
|
192
|
+
* it works on both strict FlowNodes and loose wire objects.
|
|
193
|
+
*/
|
|
194
|
+
export function isOutputNode(node) {
|
|
195
|
+
return (!!node &&
|
|
196
|
+
typeof node.type === "string" &&
|
|
197
|
+
OUTPUT_NODE_TYPES.includes(node.type));
|
|
198
|
+
}
|
|
158
199
|
const outputDataSchema = z
|
|
159
200
|
.object({
|
|
160
201
|
name: z.string().optional().describe("Display name in the YOOtheme source dropdown"),
|
|
@@ -252,6 +293,56 @@ export const edgeSchema = z
|
|
|
252
293
|
'flows should use the canonical zero-indexed form.'),
|
|
253
294
|
})
|
|
254
295
|
.describe("Flow edge connecting two nodes. Shape: {id?, source, target, sourceHandle?, targetHandle?}");
|
|
296
|
+
// ── edge-id auto-generation (F5) ──────────────────────────────────────────
|
|
297
|
+
/**
|
|
298
|
+
* Stamp a stable `id` on every edge that lacks one, at the create/update wire
|
|
299
|
+
* boundary (flow_create / flow_update / graph_preview / graph_validate).
|
|
300
|
+
*
|
|
301
|
+
* Why this exists (F5, 2026-06-09): `edgeSchema` marks `id` OPTIONAL — the AI
|
|
302
|
+
* legitimately omits it — but the React-Flow runtime + the backend graph
|
|
303
|
+
* validator key edges by `id` and reject an id-less edge with a misleading
|
|
304
|
+
* "connectivity" error. Rather than make `id` required at the schema (which
|
|
305
|
+
* would force every caller to invent ids), we generate a deterministic one
|
|
306
|
+
* here so BOTH the schema and the runtime accept id-less edges. `buildFlowGraph`
|
|
307
|
+
* already emits ids for its synthetic graphs; this closes the gap for
|
|
308
|
+
* hand-authored `flow_create` / `flow_update` graphs.
|
|
309
|
+
*
|
|
310
|
+
* Id shape: `e-<source>-<target>` (matches the convention `buildFlowGraph`
|
|
311
|
+
* already uses). Parallel edges between the same node pair — e.g. the two
|
|
312
|
+
* inputs of a merge node — get a `-2`, `-3`, … suffix. A generated id never
|
|
313
|
+
* collides with a caller-supplied id (or an already-generated one): the suffix
|
|
314
|
+
* search skips any id already taken in this batch.
|
|
315
|
+
*
|
|
316
|
+
* Pure + non-mutating: returns a NEW array of NEW edge objects; the input is
|
|
317
|
+
* left untouched. A non-array input yields `[]` (defensive — the wire boundary
|
|
318
|
+
* already validated, but a direct programmatic caller might not have).
|
|
319
|
+
*/
|
|
320
|
+
export function ensureEdgeIds(edges) {
|
|
321
|
+
if (!Array.isArray(edges))
|
|
322
|
+
return [];
|
|
323
|
+
// Seed the taken-set with every non-empty caller-supplied id so a generated
|
|
324
|
+
// id can never shadow one the caller already chose.
|
|
325
|
+
const taken = new Set();
|
|
326
|
+
for (const e of edges) {
|
|
327
|
+
if (e && typeof e.id === "string" && e.id !== "")
|
|
328
|
+
taken.add(e.id);
|
|
329
|
+
}
|
|
330
|
+
return edges.map((e) => {
|
|
331
|
+
if (e && typeof e.id === "string" && e.id !== "")
|
|
332
|
+
return { ...e };
|
|
333
|
+
const source = typeof e?.source === "string" ? e.source : "node";
|
|
334
|
+
const target = typeof e?.target === "string" ? e.target : "node";
|
|
335
|
+
const base = `e-${source}-${target}`;
|
|
336
|
+
let id = base;
|
|
337
|
+
let n = 2;
|
|
338
|
+
while (taken.has(id)) {
|
|
339
|
+
id = `${base}-${n}`;
|
|
340
|
+
n += 1;
|
|
341
|
+
}
|
|
342
|
+
taken.add(id);
|
|
343
|
+
return { ...e, id };
|
|
344
|
+
});
|
|
345
|
+
}
|
|
255
346
|
// ── name_query filter helper ─────────────────────────────────────────────
|
|
256
347
|
/**
|
|
257
348
|
* W1.18 (F-32): case-insensitive substring filter applied in-memory after
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/node-schema.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,oEAAoE;AACpE,EAAE;AACF,6DAA6D;AAC7D,kDAAkD;AAClD,wEAAwE;AACxE,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,oFAAoF;AACpF,yEAAyE;AACzE,mFAAmF;AACnF,EAAE;AACF,kBAAkB;AAClB,yEAAyE;AACzE,oEAAoE;AACpE,2EAA2E;AAC3E,4BAA4B;AAC5B,2EAA2E;AAC3E,oEAAoE;AACpE,wEAAwE;AACxE,6EAA6E;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"node-schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/node-schema.ts"],"names":[],"mappings":"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"}
|