@wootsup/yt-builder-mcp 1.1.6 → 1.1.7
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/dist/auth.d.ts +119 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +226 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +84 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +151 -0
- package/dist/client.js.map +1 -0
- package/dist/clients/claude-code.d.ts +18 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +53 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/claude-desktop.d.ts +19 -0
- package/dist/clients/claude-desktop.d.ts.map +1 -0
- package/dist/clients/claude-desktop.js +56 -0
- package/dist/clients/claude-desktop.js.map +1 -0
- package/dist/clients/cline.d.ts +26 -0
- package/dist/clients/cline.d.ts.map +1 -0
- package/dist/clients/cline.js +80 -0
- package/dist/clients/cline.js.map +1 -0
- package/dist/clients/codex-cli.d.ts +42 -0
- package/dist/clients/codex-cli.d.ts.map +1 -0
- package/dist/clients/codex-cli.js +194 -0
- package/dist/clients/codex-cli.js.map +1 -0
- package/dist/clients/continue.d.ts +13 -0
- package/dist/clients/continue.d.ts.map +1 -0
- package/dist/clients/continue.js +52 -0
- package/dist/clients/continue.js.map +1 -0
- package/dist/clients/cursor.d.ts +12 -0
- package/dist/clients/cursor.d.ts.map +1 -0
- package/dist/clients/cursor.js +38 -0
- package/dist/clients/cursor.js.map +1 -0
- package/dist/clients/gemini-cli.d.ts +18 -0
- package/dist/clients/gemini-cli.d.ts.map +1 -0
- package/dist/clients/gemini-cli.js +44 -0
- package/dist/clients/gemini-cli.js.map +1 -0
- package/dist/clients/home.d.ts +14 -0
- package/dist/clients/home.d.ts.map +1 -0
- package/dist/clients/home.js +20 -0
- package/dist/clients/home.js.map +1 -0
- package/dist/clients/index.d.ts +52 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +72 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/roo-code.d.ts +23 -0
- package/dist/clients/roo-code.d.ts.map +1 -0
- package/dist/clients/roo-code.js +69 -0
- package/dist/clients/roo-code.js.map +1 -0
- package/dist/clients/zed.d.ts +12 -0
- package/dist/clients/zed.d.ts.map +1 -0
- package/dist/clients/zed.js +41 -0
- package/dist/clients/zed.js.map +1 -0
- package/dist/errors/hints.d.ts +51 -0
- package/dist/errors/hints.d.ts.map +1 -0
- package/dist/errors/hints.js +95 -0
- package/dist/errors/hints.js.map +1 -0
- package/dist/errors/mask.d.ts +35 -0
- package/dist/errors/mask.d.ts.map +1 -0
- package/dist/errors/mask.js +49 -0
- package/dist/errors/mask.js.map +1 -0
- package/dist/errors/sanitize.d.ts +31 -0
- package/dist/errors/sanitize.d.ts.map +1 -0
- package/dist/errors/sanitize.js +100 -0
- package/dist/errors/sanitize.js.map +1 -0
- package/dist/errors.d.ts +42 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +61 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
- package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/discovery.js +53 -0
- package/dist/gateway/advanced-tool/discovery.js.map +1 -0
- package/dist/gateway/advanced-tool/domains.d.ts +47 -0
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/domains.js +94 -0
- package/dist/gateway/advanced-tool/domains.js.map +1 -0
- package/dist/gateway/advanced-tool/execute.d.ts +29 -0
- package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/execute.js +54 -0
- package/dist/gateway/advanced-tool/execute.js.map +1 -0
- package/dist/gateway/advanced-tool/index.d.ts +36 -0
- package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/index.js +39 -0
- package/dist/gateway/advanced-tool/index.js.map +1 -0
- package/dist/gateway/advanced-tool/register.d.ts +18 -0
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/register.js +69 -0
- package/dist/gateway/advanced-tool/register.js.map +1 -0
- package/dist/gateway/advanced-tool.d.ts +13 -0
- package/dist/gateway/advanced-tool.d.ts.map +1 -0
- package/dist/gateway/advanced-tool.js +13 -0
- package/dist/gateway/advanced-tool.js.map +1 -0
- package/dist/gateway/capturing-server.d.ts +117 -0
- package/dist/gateway/capturing-server.d.ts.map +1 -0
- package/dist/gateway/capturing-server.js +103 -0
- package/dist/gateway/capturing-server.js.map +1 -0
- package/dist/gateway/essentials.d.ts +50 -0
- package/dist/gateway/essentials.d.ts.map +1 -0
- package/dist/gateway/essentials.js +94 -0
- package/dist/gateway/essentials.js.map +1 -0
- package/dist/gateway/test-support.d.ts +41 -0
- package/dist/gateway/test-support.d.ts.map +1 -0
- package/dist/gateway/test-support.js +60 -0
- package/dist/gateway/test-support.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +111 -0
- package/dist/index.js.map +1 -0
- package/dist/install-skill.d.ts +43 -0
- package/dist/install-skill.d.ts.map +1 -0
- package/dist/install-skill.js +118 -0
- package/dist/install-skill.js.map +1 -0
- package/dist/platform/detect.d.ts +64 -0
- package/dist/platform/detect.d.ts.map +1 -0
- package/dist/platform/detect.js +98 -0
- package/dist/platform/detect.js.map +1 -0
- package/dist/platform/index.d.ts +121 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +176 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/joomla.d.ts +44 -0
- package/dist/platform/joomla.d.ts.map +1 -0
- package/dist/platform/joomla.js +46 -0
- package/dist/platform/joomla.js.map +1 -0
- package/dist/server.d.ts +110 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +274 -0
- package/dist/server.js.map +1 -0
- package/dist/setup-cli-confirm.d.ts +36 -0
- package/dist/setup-cli-confirm.d.ts.map +1 -0
- package/dist/setup-cli-confirm.js +59 -0
- package/dist/setup-cli-confirm.js.map +1 -0
- package/dist/setup-cli.d.ts +152 -0
- package/dist/setup-cli.d.ts.map +1 -0
- package/dist/setup-cli.js +870 -0
- package/dist/setup-cli.js.map +1 -0
- package/dist/setup-prompts.d.ts +41 -0
- package/dist/setup-prompts.d.ts.map +1 -0
- package/dist/setup-prompts.js +146 -0
- package/dist/setup-prompts.js.map +1 -0
- package/dist/setup-token.d.ts +38 -0
- package/dist/setup-token.d.ts.map +1 -0
- package/dist/setup-token.js +106 -0
- package/dist/setup-token.js.map +1 -0
- package/dist/setup-wizard-defaults.d.ts +43 -0
- package/dist/setup-wizard-defaults.d.ts.map +1 -0
- package/dist/setup-wizard-defaults.js +160 -0
- package/dist/setup-wizard-defaults.js.map +1 -0
- package/dist/setup-wizard-handshake.d.ts +25 -0
- package/dist/setup-wizard-handshake.d.ts.map +1 -0
- package/dist/setup-wizard-handshake.js +103 -0
- package/dist/setup-wizard-handshake.js.map +1 -0
- package/dist/setup-wizard-types.d.ts +164 -0
- package/dist/setup-wizard-types.d.ts.map +1 -0
- package/dist/setup-wizard-types.js +11 -0
- package/dist/setup-wizard-types.js.map +1 -0
- package/dist/setup-wizard.d.ts +33 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +199 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/setup.d.ts +17 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +33 -0
- package/dist/setup.js.map +1 -0
- package/dist/sites/cli/add-site.d.ts +106 -0
- package/dist/sites/cli/add-site.d.ts.map +1 -0
- package/dist/sites/cli/add-site.js +185 -0
- package/dist/sites/cli/add-site.js.map +1 -0
- package/dist/sites/cli/list-sites.d.ts +40 -0
- package/dist/sites/cli/list-sites.d.ts.map +1 -0
- package/dist/sites/cli/list-sites.js +116 -0
- package/dist/sites/cli/list-sites.js.map +1 -0
- package/dist/sites/cli/remove-site.d.ts +60 -0
- package/dist/sites/cli/remove-site.d.ts.map +1 -0
- package/dist/sites/cli/remove-site.js +120 -0
- package/dist/sites/cli/remove-site.js.map +1 -0
- package/dist/sites/cli/set-default.d.ts +47 -0
- package/dist/sites/cli/set-default.d.ts.map +1 -0
- package/dist/sites/cli/set-default.js +69 -0
- package/dist/sites/cli/set-default.js.map +1 -0
- package/dist/sites/cli/test-site.d.ts +77 -0
- package/dist/sites/cli/test-site.d.ts.map +1 -0
- package/dist/sites/cli/test-site.js +146 -0
- package/dist/sites/cli/test-site.js.map +1 -0
- package/dist/sites/client-pool.d.ts +124 -0
- package/dist/sites/client-pool.d.ts.map +1 -0
- package/dist/sites/client-pool.js +172 -0
- package/dist/sites/client-pool.js.map +1 -0
- package/dist/sites/env-bridge.d.ts +55 -0
- package/dist/sites/env-bridge.d.ts.map +1 -0
- package/dist/sites/env-bridge.js +94 -0
- package/dist/sites/env-bridge.js.map +1 -0
- package/dist/sites/paths.d.ts +21 -0
- package/dist/sites/paths.d.ts.map +1 -0
- package/dist/sites/paths.js +37 -0
- package/dist/sites/paths.js.map +1 -0
- package/dist/sites/probe.d.ts +60 -0
- package/dist/sites/probe.d.ts.map +1 -0
- package/dist/sites/probe.js +112 -0
- package/dist/sites/probe.js.map +1 -0
- package/dist/sites/registry.d.ts +142 -0
- package/dist/sites/registry.d.ts.map +1 -0
- package/dist/sites/registry.js +163 -0
- package/dist/sites/registry.js.map +1 -0
- package/dist/sites/schema.d.ts +90 -0
- package/dist/sites/schema.d.ts.map +1 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +115 -0
- package/dist/sites/secret-resolver.d.ts.map +1 -0
- package/dist/sites/secret-resolver.js +225 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/sites/store.d.ts +82 -0
- package/dist/sites/store.d.ts.map +1 -0
- package/dist/sites/store.js +198 -0
- package/dist/sites/store.js.map +1 -0
- package/dist/sites/tools/index.d.ts +28 -0
- package/dist/sites/tools/index.d.ts.map +1 -0
- package/dist/sites/tools/index.js +30 -0
- package/dist/sites/tools/index.js.map +1 -0
- package/dist/sites/tools/sites-list.d.ts +48 -0
- package/dist/sites/tools/sites-list.d.ts.map +1 -0
- package/dist/sites/tools/sites-list.js +137 -0
- package/dist/sites/tools/sites-list.js.map +1 -0
- package/dist/sites/tools/sites-test.d.ts +47 -0
- package/dist/sites/tools/sites-test.d.ts.map +1 -0
- package/dist/sites/tools/sites-test.js +148 -0
- package/dist/sites/tools/sites-test.js.map +1 -0
- package/dist/skill-loader.d.ts +111 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +191 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/tools/elements/builders.d.ts +24 -0
- package/dist/tools/elements/builders.d.ts.map +1 -0
- package/dist/tools/elements/builders.js +199 -0
- package/dist/tools/elements/builders.js.map +1 -0
- package/dist/tools/elements/handlers-write.d.ts +49 -0
- package/dist/tools/elements/handlers-write.d.ts.map +1 -0
- package/dist/tools/elements/handlers-write.js +148 -0
- package/dist/tools/elements/handlers-write.js.map +1 -0
- package/dist/tools/elements/handlers.d.ts +70 -0
- package/dist/tools/elements/handlers.d.ts.map +1 -0
- package/dist/tools/elements/handlers.js +292 -0
- package/dist/tools/elements/handlers.js.map +1 -0
- package/dist/tools/elements/index.d.ts +28 -0
- package/dist/tools/elements/index.d.ts.map +1 -0
- package/dist/tools/elements/index.js +27 -0
- package/dist/tools/elements/index.js.map +1 -0
- package/dist/tools/elements.d.ts +13 -0
- package/dist/tools/elements.d.ts.map +1 -0
- package/dist/tools/elements.js +13 -0
- package/dist/tools/elements.js.map +1 -0
- package/dist/tools/elicitation.d.ts +87 -0
- package/dist/tools/elicitation.d.ts.map +1 -0
- package/dist/tools/elicitation.js +100 -0
- package/dist/tools/elicitation.js.map +1 -0
- package/dist/tools/format/elements-format.d.ts +40 -0
- package/dist/tools/format/elements-format.d.ts.map +1 -0
- package/dist/tools/format/elements-format.js +194 -0
- package/dist/tools/format/elements-format.js.map +1 -0
- package/dist/tools/format/health-format.d.ts +79 -0
- package/dist/tools/format/health-format.d.ts.map +1 -0
- package/dist/tools/format/health-format.js +181 -0
- package/dist/tools/format/health-format.js.map +1 -0
- package/dist/tools/format/inspection-format.d.ts +59 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -0
- package/dist/tools/format/inspection-format.js +303 -0
- package/dist/tools/format/inspection-format.js.map +1 -0
- package/dist/tools/format/pages-format.d.ts +57 -0
- package/dist/tools/format/pages-format.d.ts.map +1 -0
- package/dist/tools/format/pages-format.js +157 -0
- package/dist/tools/format/pages-format.js.map +1 -0
- package/dist/tools/format/sources-format.d.ts +44 -0
- package/dist/tools/format/sources-format.d.ts.map +1 -0
- package/dist/tools/format/sources-format.js +242 -0
- package/dist/tools/format/sources-format.js.map +1 -0
- package/dist/tools/health.d.ts +22 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +220 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/index.d.ts +30 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +39 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inspection.d.ts +14 -0
- package/dist/tools/inspection.d.ts.map +1 -0
- package/dist/tools/inspection.js +208 -0
- package/dist/tools/inspection.js.map +1 -0
- package/dist/tools/layout-flatten.d.ts +75 -0
- package/dist/tools/layout-flatten.d.ts.map +1 -0
- package/dist/tools/layout-flatten.js +107 -0
- package/dist/tools/layout-flatten.js.map +1 -0
- package/dist/tools/multi-items/builders.d.ts +23 -0
- package/dist/tools/multi-items/builders.d.ts.map +1 -0
- package/dist/tools/multi-items/builders.js +78 -0
- package/dist/tools/multi-items/builders.js.map +1 -0
- package/dist/tools/multi-items/clean-implode-handler.d.ts +36 -0
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -0
- package/dist/tools/multi-items/clean-implode-handler.js +57 -0
- package/dist/tools/multi-items/clean-implode-handler.js.map +1 -0
- package/dist/tools/multi-items/index.d.ts +18 -0
- package/dist/tools/multi-items/index.d.ts.map +1 -0
- package/dist/tools/multi-items/index.js +18 -0
- package/dist/tools/multi-items/index.js.map +1 -0
- package/dist/tools/multi-items/inspect-handler.d.ts +41 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
- package/dist/tools/multi-items/inspect-handler.js +50 -0
- package/dist/tools/multi-items/inspect-handler.js.map +1 -0
- package/dist/tools/multi-items/item-container-map.d.ts +41 -0
- package/dist/tools/multi-items/item-container-map.d.ts.map +1 -0
- package/dist/tools/multi-items/item-container-map.js +73 -0
- package/dist/tools/multi-items/item-container-map.js.map +1 -0
- package/dist/tools/pages/builders.d.ts +14 -0
- package/dist/tools/pages/builders.d.ts.map +1 -0
- package/dist/tools/pages/builders.js +136 -0
- package/dist/tools/pages/builders.js.map +1 -0
- package/dist/tools/pages/handlers-read.d.ts +33 -0
- package/dist/tools/pages/handlers-read.d.ts.map +1 -0
- package/dist/tools/pages/handlers-read.js +203 -0
- package/dist/tools/pages/handlers-read.js.map +1 -0
- package/dist/tools/pages/handlers-write.d.ts +21 -0
- package/dist/tools/pages/handlers-write.d.ts.map +1 -0
- package/dist/tools/pages/handlers-write.js +52 -0
- package/dist/tools/pages/handlers-write.js.map +1 -0
- package/dist/tools/pages/index.d.ts +17 -0
- package/dist/tools/pages/index.d.ts.map +1 -0
- package/dist/tools/pages/index.js +17 -0
- package/dist/tools/pages/index.js.map +1 -0
- package/dist/tools/pages/schemas.d.ts +45 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -0
- package/dist/tools/pages/schemas.js +82 -0
- package/dist/tools/pages/schemas.js.map +1 -0
- package/dist/tools/pages.d.ts +13 -0
- package/dist/tools/pages.d.ts.map +1 -0
- package/dist/tools/pages.js +13 -0
- package/dist/tools/pages.js.map +1 -0
- package/dist/tools/pool-resolve-helper.d.ts +83 -0
- package/dist/tools/pool-resolve-helper.d.ts.map +1 -0
- package/dist/tools/pool-resolve-helper.js +148 -0
- package/dist/tools/pool-resolve-helper.js.map +1 -0
- package/dist/tools/progress-phases.d.ts +46 -0
- package/dist/tools/progress-phases.d.ts.map +1 -0
- package/dist/tools/progress-phases.js +48 -0
- package/dist/tools/progress-phases.js.map +1 -0
- package/dist/tools/shared-schemas.d.ts +25 -0
- package/dist/tools/shared-schemas.d.ts.map +1 -0
- package/dist/tools/shared-schemas.js +59 -0
- package/dist/tools/shared-schemas.js.map +1 -0
- package/dist/tools/sources/builders.d.ts +13 -0
- package/dist/tools/sources/builders.d.ts.map +1 -0
- package/dist/tools/sources/builders.js +118 -0
- package/dist/tools/sources/builders.js.map +1 -0
- package/dist/tools/sources/handlers-bind.d.ts +28 -0
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
- package/dist/tools/sources/handlers-bind.js +129 -0
- package/dist/tools/sources/handlers-bind.js.map +1 -0
- package/dist/tools/sources/handlers.d.ts +47 -0
- package/dist/tools/sources/handlers.d.ts.map +1 -0
- package/dist/tools/sources/handlers.js +108 -0
- package/dist/tools/sources/handlers.js.map +1 -0
- package/dist/tools/sources/index.d.ts +19 -0
- package/dist/tools/sources/index.d.ts.map +1 -0
- package/dist/tools/sources/index.js +18 -0
- package/dist/tools/sources/index.js.map +1 -0
- package/dist/tools/sources.d.ts +14 -0
- package/dist/tools/sources.d.ts.map +1 -0
- package/dist/tools/sources.js +14 -0
- package/dist/tools/sources.js.map +1 -0
- package/dist/tools/sparse-fields.d.ts +106 -0
- package/dist/tools/sparse-fields.d.ts.map +1 -0
- package/dist/tools/sparse-fields.js +165 -0
- package/dist/tools/sparse-fields.js.map +1 -0
- package/dist/tools/tool-builder/annotations.d.ts +55 -0
- package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
- package/dist/tools/tool-builder/annotations.js +86 -0
- package/dist/tools/tool-builder/annotations.js.map +1 -0
- package/dist/tools/tool-builder/define.d.ts +31 -0
- package/dist/tools/tool-builder/define.d.ts.map +1 -0
- package/dist/tools/tool-builder/define.js +31 -0
- package/dist/tools/tool-builder/define.js.map +1 -0
- package/dist/tools/tool-builder/index.d.ts +28 -0
- package/dist/tools/tool-builder/index.d.ts.map +1 -0
- package/dist/tools/tool-builder/index.js +27 -0
- package/dist/tools/tool-builder/index.js.map +1 -0
- package/dist/tools/tool-builder/results.d.ts +104 -0
- package/dist/tools/tool-builder/results.d.ts.map +1 -0
- package/dist/tools/tool-builder/results.js +224 -0
- package/dist/tools/tool-builder/results.js.map +1 -0
- package/dist/tools/tool-builder/types.d.ts +97 -0
- package/dist/tools/tool-builder/types.d.ts.map +1 -0
- package/dist/tools/tool-builder/types.js +9 -0
- package/dist/tools/tool-builder/types.js.map +1 -0
- package/dist/tools/tool-builder.d.ts +16 -0
- package/dist/tools/tool-builder.d.ts.map +1 -0
- package/dist/tools/tool-builder.js +16 -0
- package/dist/tools/tool-builder.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret-masking helpers — Wave G.6.2.
|
|
3
|
+
*
|
|
4
|
+
* `maskBearerToken` rewrites any `Bearer <token>` substring to
|
|
5
|
+
* `Bearer ***masked***`. `sanitizeForLogs` additionally truncates very
|
|
6
|
+
* long strings so a paste of a multi-MB stack trace can't blow the
|
|
7
|
+
* context budget.
|
|
8
|
+
*
|
|
9
|
+
* Defense-in-depth: this is the single choke-point for any string
|
|
10
|
+
* (error message, response body excerpt, log line) that crosses the
|
|
11
|
+
* MCP boundary into the LLM's view.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
/** Maximum length for a sanitised log string. Anything longer is truncated. */
|
|
16
|
+
export const LOG_TRUNCATION_LIMIT = 2000;
|
|
17
|
+
/**
|
|
18
|
+
* Replace every `Bearer <opaque-token>` substring with `Bearer ***masked***`.
|
|
19
|
+
*
|
|
20
|
+
* Token-shape is intentionally permissive — we'd rather over-mask than
|
|
21
|
+
* leak. Any non-whitespace run following the literal `Bearer ` is treated
|
|
22
|
+
* as the token and replaced.
|
|
23
|
+
*/
|
|
24
|
+
export function maskBearerToken(input) {
|
|
25
|
+
if (input === '')
|
|
26
|
+
return '';
|
|
27
|
+
// The `g` flag handles repeated occurrences in one string.
|
|
28
|
+
return input.replace(/Bearer\s+\S+/g, 'Bearer ***masked***');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sanitise a string before it joins the LLM-visible output:
|
|
32
|
+
* 1. mask any Bearer tokens
|
|
33
|
+
* 2. truncate to `LOG_TRUNCATION_LIMIT` chars with a clear suffix
|
|
34
|
+
*
|
|
35
|
+
* Non-string inputs (null / undefined) collapse to an empty string —
|
|
36
|
+
* caller code typically passes `error?.message` and `?? ''` is a common
|
|
37
|
+
* upstream pattern.
|
|
38
|
+
*/
|
|
39
|
+
export function sanitizeForLogs(input) {
|
|
40
|
+
if (input === null || input === undefined)
|
|
41
|
+
return '';
|
|
42
|
+
if (input === '')
|
|
43
|
+
return '';
|
|
44
|
+
const masked = maskBearerToken(input);
|
|
45
|
+
if (masked.length <= LOG_TRUNCATION_LIMIT)
|
|
46
|
+
return masked;
|
|
47
|
+
return masked.slice(0, LOG_TRUNCATION_LIMIT) + '... [truncated]';
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=mask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask.js","sourceRoot":"","sources":["../../src/errors/mask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,2DAA2D;IAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,IAAI,oBAAoB;QAAE,OAAO,MAAM,CAAC;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sanitizeSecrets` — recursive value-walker that swaps any value at a
|
|
3
|
+
* known-secret key for the sentinel `[REDACTED]`.
|
|
4
|
+
*
|
|
5
|
+
* Wave G.6.4. Pattern ported verbatim from
|
|
6
|
+
* `apimapper-mcp/src/modules/apimapper/credential-sanitizer.ts` because
|
|
7
|
+
* it's the same defense-in-depth shape and the apimapper version is
|
|
8
|
+
* audit-hardened (A4 round 1 + 2).
|
|
9
|
+
*
|
|
10
|
+
* Used on both the error-path (RestError.body excerpts) AND the
|
|
11
|
+
* success-path (jsonResult / structuredResult payloads in
|
|
12
|
+
* `tool-builder.ts`) so a regressing REST handler — or a logging path —
|
|
13
|
+
* can never leak `oauth_refresh_token` / `auth_data` / `bearer` etc.
|
|
14
|
+
* into the LLM's context.
|
|
15
|
+
*
|
|
16
|
+
* Key-list intentionally mirrors apimapper-mcp; review both together
|
|
17
|
+
* when extending.
|
|
18
|
+
*
|
|
19
|
+
* @license MIT
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Recursively walk any JSON-serialisable value and redact any nested
|
|
23
|
+
* value whose key matches a known-secret name. Returns a fresh tree —
|
|
24
|
+
* the input is never mutated.
|
|
25
|
+
*
|
|
26
|
+
* Primitives (string / number / boolean / null / undefined) pass through
|
|
27
|
+
* unchanged. Arrays are mapped element-wise. Objects are reconstructed
|
|
28
|
+
* with `[REDACTED]` substituted at any secret key.
|
|
29
|
+
*/
|
|
30
|
+
export declare function sanitizeSecrets<T>(input: T): T;
|
|
31
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/errors/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAuDH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAgB9C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sanitizeSecrets` — recursive value-walker that swaps any value at a
|
|
3
|
+
* known-secret key for the sentinel `[REDACTED]`.
|
|
4
|
+
*
|
|
5
|
+
* Wave G.6.4. Pattern ported verbatim from
|
|
6
|
+
* `apimapper-mcp/src/modules/apimapper/credential-sanitizer.ts` because
|
|
7
|
+
* it's the same defense-in-depth shape and the apimapper version is
|
|
8
|
+
* audit-hardened (A4 round 1 + 2).
|
|
9
|
+
*
|
|
10
|
+
* Used on both the error-path (RestError.body excerpts) AND the
|
|
11
|
+
* success-path (jsonResult / structuredResult payloads in
|
|
12
|
+
* `tool-builder.ts`) so a regressing REST handler — or a logging path —
|
|
13
|
+
* can never leak `oauth_refresh_token` / `auth_data` / `bearer` etc.
|
|
14
|
+
* into the LLM's context.
|
|
15
|
+
*
|
|
16
|
+
* Key-list intentionally mirrors apimapper-mcp; review both together
|
|
17
|
+
* when extending.
|
|
18
|
+
*
|
|
19
|
+
* @license MIT
|
|
20
|
+
*/
|
|
21
|
+
const SECRET_KEYS = new Set([
|
|
22
|
+
// Generic auth tokens
|
|
23
|
+
'token',
|
|
24
|
+
'bearer',
|
|
25
|
+
'bearer_token',
|
|
26
|
+
'bearerToken',
|
|
27
|
+
// Plugin-internal auth blob
|
|
28
|
+
'auth_data',
|
|
29
|
+
'authData',
|
|
30
|
+
// OAuth flows
|
|
31
|
+
'oauth_refresh_token',
|
|
32
|
+
'oauthRefreshToken',
|
|
33
|
+
'refresh_token',
|
|
34
|
+
'refreshToken',
|
|
35
|
+
'access_token',
|
|
36
|
+
'accessToken',
|
|
37
|
+
// App-secret pairs
|
|
38
|
+
'client_secret',
|
|
39
|
+
'clientSecret',
|
|
40
|
+
'api_key',
|
|
41
|
+
'apiKey',
|
|
42
|
+
'password',
|
|
43
|
+
'secret',
|
|
44
|
+
'secrets',
|
|
45
|
+
'raw_secret',
|
|
46
|
+
'rawSecret',
|
|
47
|
+
// Defense-in-depth additions (cf. apimapper A4 audit round 2)
|
|
48
|
+
'private_key',
|
|
49
|
+
'privateKey',
|
|
50
|
+
'signing_key',
|
|
51
|
+
'signingKey',
|
|
52
|
+
'webhook_secret',
|
|
53
|
+
'webhookSecret',
|
|
54
|
+
'consumer_secret',
|
|
55
|
+
'consumerSecret',
|
|
56
|
+
'consumer_key',
|
|
57
|
+
'consumerKey',
|
|
58
|
+
'session_token',
|
|
59
|
+
'sessionToken',
|
|
60
|
+
'id_token',
|
|
61
|
+
'idToken',
|
|
62
|
+
// W12-R1.3 (A2-M2) — 1Password Secret References are not secrets
|
|
63
|
+
// per se (the ref string itself is safe to log), BUT they identify
|
|
64
|
+
// the vault path + item + field of a real bearer. Surfacing them
|
|
65
|
+
// verbatim in an error payload that ends up in a Discord paste, a
|
|
66
|
+
// GitHub issue, or an LLM-shared transcript leaks the production
|
|
67
|
+
// 1Password layout to anyone reading. Treat as secret to be safe.
|
|
68
|
+
'bearer_ref',
|
|
69
|
+
'bearerRef',
|
|
70
|
+
'token_ref',
|
|
71
|
+
'tokenRef',
|
|
72
|
+
]);
|
|
73
|
+
/**
|
|
74
|
+
* Recursively walk any JSON-serialisable value and redact any nested
|
|
75
|
+
* value whose key matches a known-secret name. Returns a fresh tree —
|
|
76
|
+
* the input is never mutated.
|
|
77
|
+
*
|
|
78
|
+
* Primitives (string / number / boolean / null / undefined) pass through
|
|
79
|
+
* unchanged. Arrays are mapped element-wise. Objects are reconstructed
|
|
80
|
+
* with `[REDACTED]` substituted at any secret key.
|
|
81
|
+
*/
|
|
82
|
+
export function sanitizeSecrets(input) {
|
|
83
|
+
if (Array.isArray(input)) {
|
|
84
|
+
return input.map((item) => sanitizeSecrets(item));
|
|
85
|
+
}
|
|
86
|
+
if (input !== null && typeof input === 'object') {
|
|
87
|
+
const out = {};
|
|
88
|
+
for (const [k, v] of Object.entries(input)) {
|
|
89
|
+
if (SECRET_KEYS.has(k)) {
|
|
90
|
+
out[k] = '[REDACTED]';
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
out[k] = sanitizeSecrets(v);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
return input;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/errors/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS;IAChC,sBAAsB;IACtB,OAAO;IACP,QAAQ;IACR,cAAc;IACd,aAAa;IACb,4BAA4B;IAC5B,WAAW;IACX,UAAU;IACV,cAAc;IACd,qBAAqB;IACrB,mBAAmB;IACnB,eAAe;IACf,cAAc;IACd,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,eAAe;IACf,cAAc;IACd,SAAS;IACT,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,WAAW;IACX,8DAA8D;IAC9D,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,eAAe;IACf,cAAc;IACd,UAAU;IACV,SAAS;IACT,iEAAiE;IACjE,mEAAmE;IACnE,iEAAiE;IACjE,kEAAkE;IAClE,iEAAiE;IACjE,kEAAkE;IAClE,YAAY;IACZ,WAAW;IACX,WAAW;IACX,UAAU;CACb,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAI,KAAQ;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAiB,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACpE,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;QACD,OAAO,GAAmB,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error types for the YT Builder MCP package.
|
|
3
|
+
*
|
|
4
|
+
* `RestError` wraps non-2xx responses from the WP REST API with the
|
|
5
|
+
* status, the canonical WP_Error `code` (if present) and the human
|
|
6
|
+
* message. `ConfigError` is thrown when the server is missing
|
|
7
|
+
* environment configuration.
|
|
8
|
+
*
|
|
9
|
+
* Wave G.6.3: `body` is routed through `sanitizeSecrets` at construction
|
|
10
|
+
* time so any secret-bearing field returned by the upstream REST API
|
|
11
|
+
* (e.g. WP_Error data carrying `auth_data` or `oauth_refresh_token`)
|
|
12
|
+
* never lands in the LLM context — even if a future tool decides to
|
|
13
|
+
* echo `error.body` somewhere.
|
|
14
|
+
*
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
export interface RestErrorPayload {
|
|
18
|
+
readonly status: number;
|
|
19
|
+
readonly code?: string;
|
|
20
|
+
readonly message: string;
|
|
21
|
+
/** Original parsed JSON body (or null if the body was not JSON). */
|
|
22
|
+
readonly body: unknown;
|
|
23
|
+
}
|
|
24
|
+
export declare class RestError extends Error {
|
|
25
|
+
readonly status: number;
|
|
26
|
+
readonly code?: string;
|
|
27
|
+
readonly body: unknown;
|
|
28
|
+
constructor(payload: RestErrorPayload);
|
|
29
|
+
}
|
|
30
|
+
export declare class ConfigError extends Error {
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
export interface NetworkErrorPayload {
|
|
34
|
+
readonly cause: unknown;
|
|
35
|
+
readonly url: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class NetworkError extends Error {
|
|
38
|
+
readonly cause: unknown;
|
|
39
|
+
readonly url: string;
|
|
40
|
+
constructor(payload: NetworkErrorPayload);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,SAAU,SAAQ,KAAK;IAChC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,OAAO,CAAC;gBAElB,OAAO,EAAE,gBAAgB;CAUxC;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI9B;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IACnC,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,GAAG,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,mBAAmB;CAM3C"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error types for the YT Builder MCP package.
|
|
3
|
+
*
|
|
4
|
+
* `RestError` wraps non-2xx responses from the WP REST API with the
|
|
5
|
+
* status, the canonical WP_Error `code` (if present) and the human
|
|
6
|
+
* message. `ConfigError` is thrown when the server is missing
|
|
7
|
+
* environment configuration.
|
|
8
|
+
*
|
|
9
|
+
* Wave G.6.3: `body` is routed through `sanitizeSecrets` at construction
|
|
10
|
+
* time so any secret-bearing field returned by the upstream REST API
|
|
11
|
+
* (e.g. WP_Error data carrying `auth_data` or `oauth_refresh_token`)
|
|
12
|
+
* never lands in the LLM context — even if a future tool decides to
|
|
13
|
+
* echo `error.body` somewhere.
|
|
14
|
+
*
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
import { sanitizeSecrets } from './errors/sanitize.js';
|
|
18
|
+
export class RestError extends Error {
|
|
19
|
+
status;
|
|
20
|
+
code;
|
|
21
|
+
body;
|
|
22
|
+
constructor(payload) {
|
|
23
|
+
super(payload.message);
|
|
24
|
+
this.name = 'RestError';
|
|
25
|
+
this.status = payload.status;
|
|
26
|
+
this.code = payload.code;
|
|
27
|
+
// Deep-walk redaction at construction time (Wave G.6.3). The
|
|
28
|
+
// input body is never mutated; sanitizeSecrets returns a fresh
|
|
29
|
+
// tree with redacted secret-keys.
|
|
30
|
+
this.body = sanitizeSecrets(payload.body);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ConfigError extends Error {
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = 'ConfigError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class NetworkError extends Error {
|
|
40
|
+
cause;
|
|
41
|
+
url;
|
|
42
|
+
constructor(payload) {
|
|
43
|
+
super(`Network error contacting ${payload.url}: ${describeCause(payload.cause)}`);
|
|
44
|
+
this.name = 'NetworkError';
|
|
45
|
+
this.cause = payload.cause;
|
|
46
|
+
this.url = payload.url;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function describeCause(cause) {
|
|
50
|
+
if (cause instanceof Error)
|
|
51
|
+
return cause.message;
|
|
52
|
+
if (typeof cause === 'string')
|
|
53
|
+
return cause;
|
|
54
|
+
try {
|
|
55
|
+
return JSON.stringify(cause);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return String(cause);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAUvD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAChB,MAAM,CAAS;IACf,IAAI,CAAU;IACd,IAAI,CAAU;IAE9B,YAAY,OAAyB;QACjC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,6DAA6D;QAC7D,+DAA+D;QAC/D,kCAAkC;QAClC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;CACJ;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAOD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACnB,KAAK,CAAU;IACf,GAAG,CAAS;IAE5B,YAAY,OAA4B;QACpC,KAAK,CAAC,4BAA4B,OAAO,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAC3B,CAAC;CACJ;AAED,SAAS,aAAa,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway discovery-mode dispatch — handles `{ tool }`-only invocations
|
|
3
|
+
* by returning the target tool's description, JSON-schema, and
|
|
4
|
+
* annotations. Never invokes the target handler.
|
|
5
|
+
*
|
|
6
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
|
|
7
|
+
*
|
|
8
|
+
* @license MIT
|
|
9
|
+
*/
|
|
10
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { type ZodRawShape } from 'zod';
|
|
12
|
+
import type { AdvancedToolEntry } from '../capturing-server.js';
|
|
13
|
+
/** Reads the captured config's inputSchema as a Zod raw-shape (or empty). */
|
|
14
|
+
export declare function shapeOf(entry: AdvancedToolEntry): ZodRawShape;
|
|
15
|
+
/** Builds a JSON-schema for a captured tool's inputs, with a defensive fallback. */
|
|
16
|
+
export declare function inputSchemaJson(entry: AdvancedToolEntry): unknown;
|
|
17
|
+
/** Builds the discovery-mode result for a target tool. */
|
|
18
|
+
export declare function discoveryResult(toolName: string, entry: AdvancedToolEntry): CallToolResult;
|
|
19
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAK,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,WAAW,CAI7D;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAQjE;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,cAAc,CA0B1F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway discovery-mode dispatch — handles `{ tool }`-only invocations
|
|
3
|
+
* by returning the target tool's description, JSON-schema, and
|
|
4
|
+
* annotations. Never invokes the target handler.
|
|
5
|
+
*
|
|
6
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
|
|
7
|
+
*
|
|
8
|
+
* @license MIT
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
/** Reads the captured config's inputSchema as a Zod raw-shape (or empty). */
|
|
12
|
+
export function shapeOf(entry) {
|
|
13
|
+
const schema = entry.config.inputSchema;
|
|
14
|
+
if (schema && typeof schema === 'object')
|
|
15
|
+
return schema;
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
/** Builds a JSON-schema for a captured tool's inputs, with a defensive fallback. */
|
|
19
|
+
export function inputSchemaJson(entry) {
|
|
20
|
+
try {
|
|
21
|
+
return z.toJSONSchema(z.object(shapeOf(entry)));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// A schema that cannot be JSON-projected still yields a usable
|
|
25
|
+
// discovery payload — description + annotations carry the rest.
|
|
26
|
+
return { note: 'input schema could not be derived' };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Builds the discovery-mode result for a target tool. */
|
|
30
|
+
export function discoveryResult(toolName, entry) {
|
|
31
|
+
const cfg = entry.config;
|
|
32
|
+
const schema = inputSchemaJson(entry);
|
|
33
|
+
const payload = {
|
|
34
|
+
tool: toolName,
|
|
35
|
+
description: cfg.description ?? '',
|
|
36
|
+
inputSchema: schema,
|
|
37
|
+
annotations: cfg.annotations ?? {},
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text',
|
|
43
|
+
text: `Discovery for ${toolName}\n\n` +
|
|
44
|
+
`${cfg.description ?? ''}\n\n` +
|
|
45
|
+
`Annotations: ${JSON.stringify(cfg.annotations ?? {})}\n\n` +
|
|
46
|
+
`Input schema:\n${JSON.stringify(schema, null, 2)}\n\n` +
|
|
47
|
+
`Call yootheme_builder_advanced again with { tool: "${toolName}", arguments: {...} } to run it.`,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
structuredContent: payload,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,CAAC,EAAoB,MAAM,KAAK,CAAC;AAI1C,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,KAAwB;IAC5C,MAAM,MAAM,GAAI,KAAK,CAAC,MAAoC,CAAC,WAAW,CAAC;IACvE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAqB,CAAC;IACvE,OAAO,EAAE,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,KAAwB;IACpD,IAAI,CAAC;QACD,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACL,+DAA+D;QAC/D,gEAAgE;QAChE,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE,CAAC;IACzD,CAAC;AACL,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAwB;IACtE,MAAM,GAAG,GAAG,KAAK,CAAC,MAGjB,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG;QACZ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;KACrC,CAAC;IACF,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EACA,iBAAiB,QAAQ,MAAM;oBAC/B,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,MAAM;oBAC9B,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,MAAM;oBAC3D,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;oBACvD,sDAAsD,QAAQ,kCAAkC;aACvG;SACJ;QACD,iBAAiB,EAAE,OAAO;KAC7B,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway domain taxonomy — single source of truth for grouping
|
|
3
|
+
* advanced tools by domain in description, errors, and discovery
|
|
4
|
+
* payloads.
|
|
5
|
+
*
|
|
6
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`
|
|
7
|
+
* to keep that file ≤ 200 LoC per Architecture §11.
|
|
8
|
+
*
|
|
9
|
+
* The 4-entry `DOMAIN_ORDER` contract is pinned by
|
|
10
|
+
* `tests/gateway/domain-order.test.ts` — any change here MUST update
|
|
11
|
+
* that pin-test (Round-2 audit follow-up R2-A1-N1).
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
import type { AdvancedToolEntry } from '../capturing-server.js';
|
|
16
|
+
/**
|
|
17
|
+
* Domains used to group advanced tool names. Order = display order in
|
|
18
|
+
* gateway description, errors, and discovery responses. Aligned with
|
|
19
|
+
* YOOtheme builder concepts (Design-Doc §3.1.1). Round-1 I4 trimmed
|
|
20
|
+
* from 8→4 (singular forms now route via DOMAIN_PREFIX_MAP, not
|
|
21
|
+
* duplicate entries). Pinned by `tests/gateway/domain-order.test.ts`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DOMAIN_ORDER: readonly ["pages", "elements", "sources", "multi-items", "inspection"];
|
|
24
|
+
/**
|
|
25
|
+
* Prefix→domain routing table. Each domain accepts plural
|
|
26
|
+
* (`pages_list`) + singular (`page_save`, `element_add`, `source_…`)
|
|
27
|
+
* stems via `stem.startsWith(prefix + '_')` or full-equality. Anything
|
|
28
|
+
* outside the taxonomy falls through to 'misc'.
|
|
29
|
+
*
|
|
30
|
+
* The `multi-items` domain captures the YT-Pro Multi-Items binding
|
|
31
|
+
* pattern tools (inspect / clean-implode). Stems used:
|
|
32
|
+
* - `inspect_multi_items_binding` → starts with `inspect_multi_items`
|
|
33
|
+
* - `clean_implode_directives` → starts with `clean_implode`
|
|
34
|
+
*/
|
|
35
|
+
export declare const DOMAIN_PREFIX_MAP: Record<(typeof DOMAIN_ORDER)[number], readonly string[]>;
|
|
36
|
+
export declare const TOOL_PREFIX = "yootheme_builder_";
|
|
37
|
+
/** Maps a tool name to its display domain (the first underscore-segment after the prefix). */
|
|
38
|
+
export declare function domainOf(toolName: string): string;
|
|
39
|
+
/** Groups tool names by domain, in DOMAIN_ORDER, for stable output. */
|
|
40
|
+
export declare function groupByDomain(toolNames: string[]): Map<string, string[]>;
|
|
41
|
+
/** Renders the grouped tool list as readable text (used in description + errors). */
|
|
42
|
+
export declare function renderGroupedList(toolNames: string[]): string;
|
|
43
|
+
/** Builds the gateway tool's description, grouping every advanced tool by domain. */
|
|
44
|
+
export declare function buildDescription(toolNames: string[]): string;
|
|
45
|
+
/** Re-export the AdvancedToolEntry type so consumers don't need a second import path. */
|
|
46
|
+
export type { AdvancedToolEntry };
|
|
47
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/domains.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,wEAAyE,CAAC;AAEnG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAMtF,CAAC;AAEF,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAE/C,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYxE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAO7D;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAe5D;AAED,yFAAyF;AACzF,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway domain taxonomy — single source of truth for grouping
|
|
3
|
+
* advanced tools by domain in description, errors, and discovery
|
|
4
|
+
* payloads.
|
|
5
|
+
*
|
|
6
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`
|
|
7
|
+
* to keep that file ≤ 200 LoC per Architecture §11.
|
|
8
|
+
*
|
|
9
|
+
* The 4-entry `DOMAIN_ORDER` contract is pinned by
|
|
10
|
+
* `tests/gateway/domain-order.test.ts` — any change here MUST update
|
|
11
|
+
* that pin-test (Round-2 audit follow-up R2-A1-N1).
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Domains used to group advanced tool names. Order = display order in
|
|
17
|
+
* gateway description, errors, and discovery responses. Aligned with
|
|
18
|
+
* YOOtheme builder concepts (Design-Doc §3.1.1). Round-1 I4 trimmed
|
|
19
|
+
* from 8→4 (singular forms now route via DOMAIN_PREFIX_MAP, not
|
|
20
|
+
* duplicate entries). Pinned by `tests/gateway/domain-order.test.ts`.
|
|
21
|
+
*/
|
|
22
|
+
export const DOMAIN_ORDER = ['pages', 'elements', 'sources', 'multi-items', 'inspection'];
|
|
23
|
+
/**
|
|
24
|
+
* Prefix→domain routing table. Each domain accepts plural
|
|
25
|
+
* (`pages_list`) + singular (`page_save`, `element_add`, `source_…`)
|
|
26
|
+
* stems via `stem.startsWith(prefix + '_')` or full-equality. Anything
|
|
27
|
+
* outside the taxonomy falls through to 'misc'.
|
|
28
|
+
*
|
|
29
|
+
* The `multi-items` domain captures the YT-Pro Multi-Items binding
|
|
30
|
+
* pattern tools (inspect / clean-implode). Stems used:
|
|
31
|
+
* - `inspect_multi_items_binding` → starts with `inspect_multi_items`
|
|
32
|
+
* - `clean_implode_directives` → starts with `clean_implode`
|
|
33
|
+
*/
|
|
34
|
+
export const DOMAIN_PREFIX_MAP = {
|
|
35
|
+
pages: ['pages', 'page'],
|
|
36
|
+
elements: ['elements', 'element'],
|
|
37
|
+
sources: ['sources', 'source'],
|
|
38
|
+
'multi-items': ['inspect_multi_items', 'clean_implode'],
|
|
39
|
+
inspection: ['inspection'],
|
|
40
|
+
};
|
|
41
|
+
export const TOOL_PREFIX = 'yootheme_builder_';
|
|
42
|
+
/** Maps a tool name to its display domain (the first underscore-segment after the prefix). */
|
|
43
|
+
export function domainOf(toolName) {
|
|
44
|
+
const stem = toolName.startsWith(TOOL_PREFIX) ? toolName.slice(TOOL_PREFIX.length) : toolName;
|
|
45
|
+
for (const domain of DOMAIN_ORDER) {
|
|
46
|
+
for (const prefix of DOMAIN_PREFIX_MAP[domain]) {
|
|
47
|
+
if (stem === prefix || stem.startsWith(`${prefix}_`))
|
|
48
|
+
return domain;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return 'misc';
|
|
52
|
+
}
|
|
53
|
+
/** Groups tool names by domain, in DOMAIN_ORDER, for stable output. */
|
|
54
|
+
export function groupByDomain(toolNames) {
|
|
55
|
+
const groups = new Map();
|
|
56
|
+
for (const domain of DOMAIN_ORDER)
|
|
57
|
+
groups.set(domain, []);
|
|
58
|
+
for (const name of [...toolNames].sort()) {
|
|
59
|
+
const domain = domainOf(name);
|
|
60
|
+
const bucket = groups.get(domain);
|
|
61
|
+
if (bucket)
|
|
62
|
+
bucket.push(name);
|
|
63
|
+
}
|
|
64
|
+
for (const [domain, names] of groups) {
|
|
65
|
+
if (names.length === 0)
|
|
66
|
+
groups.delete(domain);
|
|
67
|
+
}
|
|
68
|
+
return groups;
|
|
69
|
+
}
|
|
70
|
+
/** Renders the grouped tool list as readable text (used in description + errors). */
|
|
71
|
+
export function renderGroupedList(toolNames) {
|
|
72
|
+
const groups = groupByDomain(toolNames);
|
|
73
|
+
const lines = [];
|
|
74
|
+
for (const [domain, names] of groups) {
|
|
75
|
+
lines.push(` ${domain}: ${names.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
return lines.join('\n');
|
|
78
|
+
}
|
|
79
|
+
/** Builds the gateway tool's description, grouping every advanced tool by domain. */
|
|
80
|
+
export function buildDescription(toolNames) {
|
|
81
|
+
const toolCount = toolNames.length;
|
|
82
|
+
const domains = [...groupByDomain(toolNames).keys()];
|
|
83
|
+
const domainCount = domains.length;
|
|
84
|
+
const domainList = domains.join(', ');
|
|
85
|
+
return (`Routes to ${String(toolCount)} advanced YOOtheme Builder tools across ${String(domainCount)} ` +
|
|
86
|
+
`domain${domainCount === 1 ? '' : 's'}${domainCount > 0 ? ` (${domainList})` : ''}. ` +
|
|
87
|
+
'Call with { tool } for a target\'s schema + annotations, or ' +
|
|
88
|
+
'{ tool, arguments } to run it. The target tool\'s own confirmation ' +
|
|
89
|
+
'guards and behavior stay in effect.\n\n' +
|
|
90
|
+
'Available advanced tools by domain:\n' +
|
|
91
|
+
`${renderGroupedList(toolNames)}\n\n` +
|
|
92
|
+
'For connectivity diagnostics use yootheme_builder_health or yootheme_builder_diagnose (top-level).');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/domains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway execute-mode dispatch — handles `{ tool, arguments }`
|
|
3
|
+
* invocations by validating `arguments` against the target tool's Zod
|
|
4
|
+
* schema in `.strict()` mode, then invoking the captured handler with
|
|
5
|
+
* the parsed args and the original SDK `extra` (so progress/elicitation/
|
|
6
|
+
* AbortSignal of the target tool keep working).
|
|
7
|
+
*
|
|
8
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
13
|
+
import type { AdvancedToolEntry } from '../capturing-server.js';
|
|
14
|
+
/** Builds an error CallToolResult with structured payload (echoed into text + structuredContent). */
|
|
15
|
+
export declare function errorResult(payload: {
|
|
16
|
+
message: string;
|
|
17
|
+
code: string;
|
|
18
|
+
suggestion: string;
|
|
19
|
+
details?: Record<string, unknown>;
|
|
20
|
+
}): CallToolResult;
|
|
21
|
+
/**
|
|
22
|
+
* Executes a captured advanced tool with strict-validated arguments.
|
|
23
|
+
*
|
|
24
|
+
* Returns a structured `invalid_arguments` error on Zod-validation
|
|
25
|
+
* failure; otherwise invokes `entry.handler` with `(parsedArgs, extra)`
|
|
26
|
+
* and returns its CallToolResult verbatim.
|
|
27
|
+
*/
|
|
28
|
+
export declare function executeAdvancedTool(toolName: string, entry: AdvancedToolEntry, rawArgs: Record<string, unknown>, extra: unknown): Promise<CallToolResult>;
|
|
29
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/execute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,GAAG,cAAc,CAYjB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway execute-mode dispatch — handles `{ tool, arguments }`
|
|
3
|
+
* invocations by validating `arguments` against the target tool's Zod
|
|
4
|
+
* schema in `.strict()` mode, then invoking the captured handler with
|
|
5
|
+
* the parsed args and the original SDK `extra` (so progress/elicitation/
|
|
6
|
+
* AbortSignal of the target tool keep working).
|
|
7
|
+
*
|
|
8
|
+
* Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { inputSchemaJson, shapeOf } from './discovery.js';
|
|
14
|
+
/** Builds an error CallToolResult with structured payload (echoed into text + structuredContent). */
|
|
15
|
+
export function errorResult(payload) {
|
|
16
|
+
const body = {
|
|
17
|
+
error: payload.message,
|
|
18
|
+
code: payload.code,
|
|
19
|
+
suggestion: payload.suggestion,
|
|
20
|
+
...(payload.details !== undefined ? { details: payload.details } : {}),
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
content: [{ type: 'text', text: JSON.stringify(body, null, 2) }],
|
|
24
|
+
structuredContent: body,
|
|
25
|
+
isError: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Executes a captured advanced tool with strict-validated arguments.
|
|
30
|
+
*
|
|
31
|
+
* Returns a structured `invalid_arguments` error on Zod-validation
|
|
32
|
+
* failure; otherwise invokes `entry.handler` with `(parsedArgs, extra)`
|
|
33
|
+
* and returns its CallToolResult verbatim.
|
|
34
|
+
*/
|
|
35
|
+
export async function executeAdvancedTool(toolName, entry, rawArgs, extra) {
|
|
36
|
+
// strict() surfaces unknown keys as Zod issues rather than silently
|
|
37
|
+
// dropping them, so callers can self-correct when they pass schema-
|
|
38
|
+
// extra keys.
|
|
39
|
+
const parsed = z.object(shapeOf(entry)).strict().safeParse(rawArgs);
|
|
40
|
+
if (!parsed.success) {
|
|
41
|
+
return errorResult({
|
|
42
|
+
message: `Invalid arguments for "${toolName}".`,
|
|
43
|
+
code: 'invalid_arguments',
|
|
44
|
+
suggestion: `Call yootheme_builder_advanced with { tool: "${toolName}" } to see ` +
|
|
45
|
+
'the expected schema, then retry with corrected arguments.',
|
|
46
|
+
details: {
|
|
47
|
+
issues: parsed.error.issues,
|
|
48
|
+
expected_schema: inputSchemaJson(entry),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return entry.handler(parsed.data, extra);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/execute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1D,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,OAK3B;IACG,MAAM,IAAI,GAAG;QACT,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;IACF,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,IAAI;KAChB,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,QAAgB,EAChB,KAAwB,EACxB,OAAgC,EAChC,KAAc;IAEd,oEAAoE;IACpE,oEAAoE;IACpE,cAAc;IACd,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC;YACf,OAAO,EAAE,0BAA0B,QAAQ,IAAI;YAC/C,IAAI,EAAE,mBAAmB;YACzB,UAAU,EACN,gDAAgD,QAAQ,aAAa;gBACrE,2DAA2D;YAC/D,OAAO,EAAE;gBACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC3B,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;aAC1C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|