@wootsup/yt-builder-mcp 1.1.6 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/bin/yt-builder-mcp.js +55 -40
- package/dist/auth.d.ts +137 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +244 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli/invocation-decision.d.ts +57 -0
- package/dist/cli/invocation-decision.d.ts.map +1 -0
- package/dist/cli/invocation-decision.js +86 -0
- package/dist/cli/invocation-decision.js.map +1 -0
- package/dist/client.d.ts +112 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +190 -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 +55 -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 +58 -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 +82 -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 +292 -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 +121 -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 +40 -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 +46 -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 +156 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +213 -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 +71 -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 +43 -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 +108 -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 +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +119 -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 +193 -0
- package/dist/setup-cli.d.ts.map +1 -0
- package/dist/setup-cli.js +1032 -0
- package/dist/setup-cli.js.map +1 -0
- package/dist/setup-prompts.d.ts +64 -0
- package/dist/setup-prompts.d.ts.map +1 -0
- package/dist/setup-prompts.js +221 -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/bootstrap.d.ts +41 -0
- package/dist/sites/bootstrap.d.ts.map +1 -0
- package/dist/sites/bootstrap.js +58 -0
- package/dist/sites/bootstrap.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 +157 -0
- package/dist/sites/client-pool.d.ts.map +1 -0
- package/dist/sites/client-pool.js +222 -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 +38 -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/sites/tools/use-site.d.ts +47 -0
- package/dist/sites/tools/use-site.d.ts.map +1 -0
- package/dist/sites/tools/use-site.js +183 -0
- package/dist/sites/tools/use-site.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 +208 -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 +341 -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 +193 -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 +70 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -0
- package/dist/tools/format/inspection-format.js +359 -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 +401 -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 +84 -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/format/inspection-format.d.ts +41 -0
- package/dist/tools/multi-items/format/inspection-format.d.ts.map +1 -0
- package/dist/tools/multi-items/format/inspection-format.js +64 -0
- package/dist/tools/multi-items/format/inspection-format.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 +76 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
- package/dist/tools/multi-items/inspect-handler.js +133 -0
- package/dist/tools/multi-items/inspect-handler.js.map +1 -0
- package/dist/tools/multi-items/inspection-cache.d.ts +85 -0
- package/dist/tools/multi-items/inspection-cache.d.ts.map +1 -0
- package/dist/tools/multi-items/inspection-cache.js +126 -0
- package/dist/tools/multi-items/inspection-cache.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 +43 -0
- package/dist/tools/pages/builders.d.ts.map +1 -0
- package/dist/tools/pages/builders.js +229 -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 +260 -0
- package/dist/tools/pages/handlers-read.js.map +1 -0
- package/dist/tools/pages/handlers-write.d.ts +63 -0
- package/dist/tools/pages/handlers-write.d.ts.map +1 -0
- package/dist/tools/pages/handlers-write.js +127 -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 +157 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -0
- package/dist/tools/pages/schemas.js +232 -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 +72 -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 +181 -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/dist/uninstall-skill.d.ts +52 -0
- package/dist/uninstall-skill.d.ts.map +1 -0
- package/dist/uninstall-skill.js +146 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/dist/uninstall.d.ts +73 -0
- package/dist/uninstall.d.ts.map +1 -0
- package/dist/uninstall.js +82 -0
- package/dist/uninstall.js.map +1 -0
- package/icon.png +0 -0
- package/manifest.json +10 -10
- package/package.json +4 -1
- package/skills/yt-builder-mcp/SKILL.md +30 -26
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W9 — `set-default` CLI subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Flips the `is_default` flag on the target entry to `true`, clears
|
|
5
|
+
* it on every other entry, and updates `default_site_id` to the
|
|
6
|
+
* target. Fails with code `'UNKNOWN_SITE'` when the site_id is not
|
|
7
|
+
* present.
|
|
8
|
+
*
|
|
9
|
+
* Idempotent: setting the already-default site as default is a
|
|
10
|
+
* successful no-op (the file is still rewritten so any drift between
|
|
11
|
+
* `default_site_id` and the per-entry `is_default` flag is healed in
|
|
12
|
+
* the same pass).
|
|
13
|
+
*
|
|
14
|
+
* @license MIT
|
|
15
|
+
*/
|
|
16
|
+
import { loadSitesFile, saveSitesFile } from '../store.js';
|
|
17
|
+
export class SetDefaultError extends Error {
|
|
18
|
+
code;
|
|
19
|
+
constructor(code, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.code = code;
|
|
22
|
+
this.name = 'SetDefaultError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function setDefaultCommand(siteId, path, opts, deps) {
|
|
26
|
+
const file = await deps.load(path);
|
|
27
|
+
if (!file.sites.some((s) => s.site_id === siteId)) {
|
|
28
|
+
throw new SetDefaultError('UNKNOWN_SITE', `Site "${siteId}" not found in ${path}. ` +
|
|
29
|
+
(file.sites.length > 0
|
|
30
|
+
? `Available: ${file.sites.map((s) => s.site_id).join(', ')}.`
|
|
31
|
+
: '(no sites configured)'));
|
|
32
|
+
}
|
|
33
|
+
const previousDefault = file.default_site_id;
|
|
34
|
+
// W12-R2A (A2-M1) — destructive-routing-op safeguard. Flipping the
|
|
35
|
+
// default redirects every subsequent tool call that omits `site_id`
|
|
36
|
+
// to a different connected site. That can silently land write-ops
|
|
37
|
+
// on the wrong CMS install. Fail-closed: if `--yes` is not set, a
|
|
38
|
+
// confirm hook is REQUIRED. Idempotent flip (already-default) is
|
|
39
|
+
// still gated — the file is rewritten even on no-op, and an
|
|
40
|
+
// operator confirming "yes" is the only reliable safe-belt.
|
|
41
|
+
if (opts.yes !== true) {
|
|
42
|
+
if (deps.confirm === undefined) {
|
|
43
|
+
throw new SetDefaultError('SET_DEFAULT_CONFIRM_REQUIRED', `Setting default to "${siteId}" requires --yes (no interactive `
|
|
44
|
+
+ `confirm available in this context). Re-run with --yes to skip the prompt.`);
|
|
45
|
+
}
|
|
46
|
+
const priorLabel = previousDefault !== null ? `"${previousDefault}"` : '(none)';
|
|
47
|
+
const cont = await deps.confirm(`Switch default site from ${priorLabel} to "${siteId}" in ${path}? `
|
|
48
|
+
+ `This changes which site every subsequent tool call routes to by default.`);
|
|
49
|
+
if (!cont) {
|
|
50
|
+
return { siteId, path, previousDefault, cancelled: true };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const nextSites = file.sites.map((s) => ({
|
|
54
|
+
...s,
|
|
55
|
+
is_default: s.site_id === siteId,
|
|
56
|
+
}));
|
|
57
|
+
const nextFile = {
|
|
58
|
+
schema_version: 1,
|
|
59
|
+
default_site_id: siteId,
|
|
60
|
+
sites: nextSites,
|
|
61
|
+
};
|
|
62
|
+
await deps.save(path, nextFile);
|
|
63
|
+
return { siteId, path, previousDefault, cancelled: false };
|
|
64
|
+
}
|
|
65
|
+
export const DEFAULT_SET_DEFAULT_DEPS = {
|
|
66
|
+
load: loadSitesFile,
|
|
67
|
+
save: saveSitesFile,
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=set-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-default.js","sourceRoot":"","sources":["../../../src/sites/cli/set-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiB3D,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACV;IAA5B,YAA4B,IAAY,EAAE,OAAe;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QADS,SAAI,GAAJ,IAAI,CAAQ;QAEpC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ;AAeD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAc,EACd,IAAY,EACZ,IAAuB,EACvB,IAAoB;IAEpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CACrB,cAAc,EACd,SAAS,MAAM,kBAAkB,IAAI,IAAI;YACrC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAClB,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC9D,CAAC,CAAC,uBAAuB,CAAC,CACrC,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IAE7C,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,iEAAiE;IACjE,4DAA4D;IAC5D,4DAA4D;IAC5D,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,eAAe,CACrB,8BAA8B,EAC9B,uBAAuB,MAAM,mCAAmC;kBAC1D,2EAA2E,CACpF,CAAC;QACN,CAAC;QACD,MAAM,UAAU,GAAG,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC3B,4BAA4B,UAAU,QAAQ,MAAM,QAAQ,IAAI,IAAI;cAC9D,0EAA0E,CACnF,CAAC;QACF,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC;QACJ,UAAU,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM;KACnC,CAAC,CAAC,CAAC;IAEJ,MAAM,QAAQ,GAAe;QACzB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,MAAM;QACvB,KAAK,EAAE,SAAS;KACnB,CAAC;IAEF,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACpD,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,aAAa;CACtB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W9 — `test-site` CLI subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Live connectivity probe for ONE site_id. Mirrors the runtime
|
|
5
|
+
* behaviour of the `yootheme_builder_sites_test` MCP tool, but from
|
|
6
|
+
* the CLI so operators can pre-flight a site without launching the
|
|
7
|
+
* stdio server.
|
|
8
|
+
*
|
|
9
|
+
* Pipeline (per plan §W9):
|
|
10
|
+
* 1. Load `sites.json` via the W1 store.
|
|
11
|
+
* 2. Build a {@link SiteRegistry} + {@link ClientPool} from the
|
|
12
|
+
* entries, wired to the supplied {@link SecretResolver}.
|
|
13
|
+
* 3. Call `pool.resolve(siteId)` → throws structured
|
|
14
|
+
* {@link UnknownSiteError} / {@link NoDefaultSiteError} which we
|
|
15
|
+
* map to a structured CLI result + a non-zero exit code.
|
|
16
|
+
* 4. Probe `/health` (no auth) + `/etag` (auth) in parallel via
|
|
17
|
+
* `Promise.allSettled` so a failure on one path never hides the
|
|
18
|
+
* other's outcome.
|
|
19
|
+
* 5. Print a green/red structured result and return it for the
|
|
20
|
+
* dispatcher / tests.
|
|
21
|
+
*
|
|
22
|
+
* Returns a {@link TestSiteResult} (not exit codes directly) so tests
|
|
23
|
+
* can assert deterministic outputs without re-implementing the
|
|
24
|
+
* probe-routing logic.
|
|
25
|
+
*
|
|
26
|
+
* @license MIT
|
|
27
|
+
*/
|
|
28
|
+
import { type Platform, type PlatformKind } from '../../platform/index.js';
|
|
29
|
+
import { ClientPool } from '../client-pool.js';
|
|
30
|
+
import { SiteRegistry } from '../registry.js';
|
|
31
|
+
import type { SitesFileT } from '../schema.js';
|
|
32
|
+
import { type SecretResolver } from '../secret-resolver.js';
|
|
33
|
+
export interface TestSiteResult {
|
|
34
|
+
readonly siteId: string;
|
|
35
|
+
readonly siteUrl: string;
|
|
36
|
+
readonly platform: PlatformKind | 'unknown';
|
|
37
|
+
readonly pluginReachable: boolean;
|
|
38
|
+
readonly bearerValid: boolean;
|
|
39
|
+
readonly etagReceived: boolean;
|
|
40
|
+
readonly summary: string;
|
|
41
|
+
readonly pluginError?: string;
|
|
42
|
+
readonly bearerError?: string;
|
|
43
|
+
/** True when site_id was not in the registry. */
|
|
44
|
+
readonly unknownSite: boolean;
|
|
45
|
+
/** Available ids when unknownSite is true. */
|
|
46
|
+
readonly available?: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
export interface TestSiteDeps {
|
|
49
|
+
readonly load: (path: string) => Promise<SitesFileT>;
|
|
50
|
+
readonly secretResolver?: SecretResolver;
|
|
51
|
+
/** Inject the platform probe for tests (no network). */
|
|
52
|
+
readonly platformForUrlAsync?: (url: string, hint?: PlatformKind) => Promise<Platform>;
|
|
53
|
+
/**
|
|
54
|
+
* Inject the pool factory. Tests pass a pool that does NOT call
|
|
55
|
+
* the real RestClient (they pre-stub the response shape).
|
|
56
|
+
* Production wires the default ClientPool below.
|
|
57
|
+
*/
|
|
58
|
+
readonly buildPool?: (registry: SiteRegistry, resolver: SecretResolver) => ClientPool;
|
|
59
|
+
readonly log?: (line: string) => void;
|
|
60
|
+
}
|
|
61
|
+
export declare class TestSiteError extends Error {
|
|
62
|
+
readonly code: string;
|
|
63
|
+
constructor(code: string, message: string);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the runtime result lines for stdout — keeps the live CLI path
|
|
67
|
+
* + tests in sync without forcing tests to parse text.
|
|
68
|
+
*/
|
|
69
|
+
export declare function renderTestSiteLines(result: TestSiteResult): readonly string[];
|
|
70
|
+
/**
|
|
71
|
+
* Probe one site and return a structured outcome. Never throws on a
|
|
72
|
+
* probe failure (those are surfaced inside the result); throws ONLY
|
|
73
|
+
* on file-IO failures the operator cannot recover from.
|
|
74
|
+
*/
|
|
75
|
+
export declare function testSiteCommand(siteId: string, path: string, deps: TestSiteDeps): Promise<TestSiteResult>;
|
|
76
|
+
export declare const DEFAULT_TEST_SITE_DEPS: TestSiteDeps;
|
|
77
|
+
//# sourceMappingURL=test-site.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-site.d.ts","sourceRoot":"","sources":["../../../src/sites/cli/test-site.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,YAAY,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAEH,KAAK,cAAc,EACtB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,wDAAwD;IACxD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,YAAY,KAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CACjB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,cAAc,KACvB,UAAU,CAAC;IAChB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,aAAc,SAAQ,KAAK;aACR,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CA0B7E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,GACnB,OAAO,CAAC,cAAc,CAAC,CAmEzB;AAED,eAAO,MAAM,sBAAsB,EAAE,YAEpC,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W9 — `test-site` CLI subcommand.
|
|
3
|
+
*
|
|
4
|
+
* Live connectivity probe for ONE site_id. Mirrors the runtime
|
|
5
|
+
* behaviour of the `yootheme_builder_sites_test` MCP tool, but from
|
|
6
|
+
* the CLI so operators can pre-flight a site without launching the
|
|
7
|
+
* stdio server.
|
|
8
|
+
*
|
|
9
|
+
* Pipeline (per plan §W9):
|
|
10
|
+
* 1. Load `sites.json` via the W1 store.
|
|
11
|
+
* 2. Build a {@link SiteRegistry} + {@link ClientPool} from the
|
|
12
|
+
* entries, wired to the supplied {@link SecretResolver}.
|
|
13
|
+
* 3. Call `pool.resolve(siteId)` → throws structured
|
|
14
|
+
* {@link UnknownSiteError} / {@link NoDefaultSiteError} which we
|
|
15
|
+
* map to a structured CLI result + a non-zero exit code.
|
|
16
|
+
* 4. Probe `/health` (no auth) + `/etag` (auth) in parallel via
|
|
17
|
+
* `Promise.allSettled` so a failure on one path never hides the
|
|
18
|
+
* other's outcome.
|
|
19
|
+
* 5. Print a green/red structured result and return it for the
|
|
20
|
+
* dispatcher / tests.
|
|
21
|
+
*
|
|
22
|
+
* Returns a {@link TestSiteResult} (not exit codes directly) so tests
|
|
23
|
+
* can assert deterministic outputs without re-implementing the
|
|
24
|
+
* probe-routing logic.
|
|
25
|
+
*
|
|
26
|
+
* @license MIT
|
|
27
|
+
*/
|
|
28
|
+
import { platformForUrlAsync, } from '../../platform/index.js';
|
|
29
|
+
import { ClientPool } from '../client-pool.js';
|
|
30
|
+
import { NoDefaultSiteError, UnknownSiteError, } from '../client-pool.js';
|
|
31
|
+
import { probeSite } from '../probe.js';
|
|
32
|
+
import { SiteRegistry } from '../registry.js';
|
|
33
|
+
import { CompositeSecretResolver, } from '../secret-resolver.js';
|
|
34
|
+
import { loadSitesFile } from '../store.js';
|
|
35
|
+
export class TestSiteError extends Error {
|
|
36
|
+
code;
|
|
37
|
+
constructor(code, message) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.code = code;
|
|
40
|
+
this.name = 'TestSiteError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the runtime result lines for stdout — keeps the live CLI path
|
|
45
|
+
* + tests in sync without forcing tests to parse text.
|
|
46
|
+
*/
|
|
47
|
+
export function renderTestSiteLines(result) {
|
|
48
|
+
if (result.unknownSite) {
|
|
49
|
+
const avail = result.available ?? [];
|
|
50
|
+
return [
|
|
51
|
+
`FAIL — Site "${result.siteId}" not found.`,
|
|
52
|
+
avail.length > 0
|
|
53
|
+
? `Available: ${avail.join(', ')}`
|
|
54
|
+
: '(no sites configured)',
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
const lines = [
|
|
58
|
+
`Site: ${result.siteId}`,
|
|
59
|
+
`URL: ${result.siteUrl}`,
|
|
60
|
+
`Platform: ${result.platform}`,
|
|
61
|
+
`Plugin reachable: ${result.pluginReachable ? 'yes' : 'NO'}`,
|
|
62
|
+
`Bearer valid: ${result.bearerValid ? 'yes' : 'NO'}`,
|
|
63
|
+
`ETag received: ${result.etagReceived ? 'yes' : 'NO'}`,
|
|
64
|
+
];
|
|
65
|
+
if (result.pluginError !== undefined) {
|
|
66
|
+
lines.push(`Plugin error: ${result.pluginError}`);
|
|
67
|
+
}
|
|
68
|
+
if (result.bearerError !== undefined) {
|
|
69
|
+
lines.push(`Bearer error: ${result.bearerError}`);
|
|
70
|
+
}
|
|
71
|
+
lines.push('', result.summary);
|
|
72
|
+
return lines;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Probe one site and return a structured outcome. Never throws on a
|
|
76
|
+
* probe failure (those are surfaced inside the result); throws ONLY
|
|
77
|
+
* on file-IO failures the operator cannot recover from.
|
|
78
|
+
*/
|
|
79
|
+
export async function testSiteCommand(siteId, path, deps) {
|
|
80
|
+
const file = await deps.load(path);
|
|
81
|
+
const registry = new SiteRegistry(file, {
|
|
82
|
+
...(deps.platformForUrlAsync !== undefined
|
|
83
|
+
? { platformForUrlAsync: deps.platformForUrlAsync }
|
|
84
|
+
: { platformForUrlAsync }),
|
|
85
|
+
});
|
|
86
|
+
const resolver = deps.secretResolver ?? new CompositeSecretResolver();
|
|
87
|
+
const pool = deps.buildPool !== undefined
|
|
88
|
+
? deps.buildPool(registry, resolver)
|
|
89
|
+
: new ClientPool(registry, resolver);
|
|
90
|
+
let client;
|
|
91
|
+
let site;
|
|
92
|
+
try {
|
|
93
|
+
const resolution = await pool.resolve(siteId);
|
|
94
|
+
client = resolution.client;
|
|
95
|
+
site = resolution.site;
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
if (e instanceof UnknownSiteError) {
|
|
99
|
+
const result = {
|
|
100
|
+
siteId,
|
|
101
|
+
siteUrl: '',
|
|
102
|
+
platform: 'unknown',
|
|
103
|
+
pluginReachable: false,
|
|
104
|
+
bearerValid: false,
|
|
105
|
+
etagReceived: false,
|
|
106
|
+
summary: `FAIL — Site "${siteId}" not found.`,
|
|
107
|
+
unknownSite: true,
|
|
108
|
+
available: e.available,
|
|
109
|
+
};
|
|
110
|
+
if (deps.log !== undefined) {
|
|
111
|
+
for (const line of renderTestSiteLines(result))
|
|
112
|
+
deps.log(line);
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
if (e instanceof NoDefaultSiteError) {
|
|
117
|
+
throw new TestSiteError('NO_DEFAULT_SITE', e.message);
|
|
118
|
+
}
|
|
119
|
+
throw e;
|
|
120
|
+
}
|
|
121
|
+
// W12-R1.2: probe lives in sites/probe.ts — single source of truth
|
|
122
|
+
// shared with the MCP tool surface so the two output channels never
|
|
123
|
+
// drift on edge cases (401 with /health rejected, 500 on /etag etc.).
|
|
124
|
+
const probe = await probeSite(client);
|
|
125
|
+
const result = {
|
|
126
|
+
siteId: site.id,
|
|
127
|
+
siteUrl: site.url,
|
|
128
|
+
platform: site.platform.kind,
|
|
129
|
+
pluginReachable: probe.plugin_reachable,
|
|
130
|
+
bearerValid: probe.bearer_valid,
|
|
131
|
+
etagReceived: probe.etag_received,
|
|
132
|
+
summary: probe.summary,
|
|
133
|
+
...(probe.plugin_error !== undefined ? { pluginError: probe.plugin_error } : {}),
|
|
134
|
+
...(probe.bearer_error !== undefined ? { bearerError: probe.bearer_error } : {}),
|
|
135
|
+
unknownSite: false,
|
|
136
|
+
};
|
|
137
|
+
if (deps.log !== undefined) {
|
|
138
|
+
for (const line of renderTestSiteLines(result))
|
|
139
|
+
deps.log(line);
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
export const DEFAULT_TEST_SITE_DEPS = {
|
|
144
|
+
load: loadSitesFile,
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=test-site.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-site.js","sourceRoot":"","sources":["../../../src/sites/cli/test-site.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W4 — ClientPool: caches one {@link RestClient} per `site_id`.
|
|
3
|
+
*
|
|
4
|
+
* The pool sits between the W3 {@link SiteRegistry} (which maps a
|
|
5
|
+
* `site_id` → entry + memoised {@link Platform}) and the W2
|
|
6
|
+
* {@link SecretResolver} (which produces a bearer token at call time)
|
|
7
|
+
* and emits {@link PoolResolution} bundles ready for tool handlers.
|
|
8
|
+
*
|
|
9
|
+
* Design choices (per plan §W4, Z.562-644):
|
|
10
|
+
*
|
|
11
|
+
* - **One client per site_id.** The first `resolve(id)` runs bearer +
|
|
12
|
+
* platform resolve in parallel via `Promise.all` (saves one
|
|
13
|
+
* round-trip-time per cold site) and stores the constructed
|
|
14
|
+
* `RestClient`. All subsequent calls reuse the same instance —
|
|
15
|
+
* identity-equal across the process lifetime.
|
|
16
|
+
*
|
|
17
|
+
* - **Cold parallel calls are racey-but-safe.** When N callers arrive
|
|
18
|
+
* for the same uncached site_id simultaneously, the plan §W4
|
|
19
|
+
* explicitly accepts N first-time `secretResolver.resolve()` calls
|
|
20
|
+
* (Z.630): `op read` is idempotent + latency dominates so a
|
|
21
|
+
* hard-once Promise-cache would not materially help. The W3
|
|
22
|
+
* registry's Promise-cache handles the platform side. The last
|
|
23
|
+
* setter wins the `cache.set(id, client)` race; subsequent
|
|
24
|
+
* `resolve()` calls see a stable single instance. Identity is
|
|
25
|
+
* eventual, not instantaneous — but stable from call N+1 onwards.
|
|
26
|
+
*
|
|
27
|
+
* - **`invalidate(siteId)` for post-401 force-re-resolve.** When the
|
|
28
|
+
* auth layer detects a `401 invalid_kid`, it can drop the cached
|
|
29
|
+
* client so the next call re-fetches the bearer through `op` and
|
|
30
|
+
* constructs a fresh `RestClient`.
|
|
31
|
+
*
|
|
32
|
+
* - **Structured errors.** `NoDefaultSiteError` and `UnknownSiteError`
|
|
33
|
+
* carry `code` + (for unknown) `siteId` + `available[]` so the
|
|
34
|
+
* auth/tool layer can branch on `error.code` instead of substring
|
|
35
|
+
* matching the message.
|
|
36
|
+
*
|
|
37
|
+
* @license MIT
|
|
38
|
+
*/
|
|
39
|
+
import { RestClient } from '../client.js';
|
|
40
|
+
import type { SiteRegistry, ResolvedSite } from './registry.js';
|
|
41
|
+
import type { SecretResolver } from './secret-resolver.js';
|
|
42
|
+
/**
|
|
43
|
+
* Thrown when `resolve()` is called without a `siteId` AND the
|
|
44
|
+
* registry has no default configured (neither `default_site_id` nor a
|
|
45
|
+
* flagged `is_default:true` entry). The auth layer surfaces this as a
|
|
46
|
+
* `no_default_site` MCP error with a hint to run
|
|
47
|
+
* `npx -y @wootsup/yt-builder-mcp add-site --default`.
|
|
48
|
+
*/
|
|
49
|
+
export declare class NoDefaultSiteError extends Error {
|
|
50
|
+
readonly code: "no_default_site";
|
|
51
|
+
constructor(message?: string);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Thrown when `resolve('some-id')` cannot find `some-id` in the
|
|
55
|
+
* registry. Carries the requested `siteId` and the (insertion-order)
|
|
56
|
+
* list of configured ids so the caller can render a friendly
|
|
57
|
+
* "did-you-mean" hint.
|
|
58
|
+
*/
|
|
59
|
+
export declare class UnknownSiteError extends Error {
|
|
60
|
+
readonly siteId: string;
|
|
61
|
+
readonly available: readonly string[];
|
|
62
|
+
readonly code: "unknown_site";
|
|
63
|
+
constructor(siteId: string, available: readonly string[]);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Bundle returned by {@link ClientPool.resolve}. Carries the cached
|
|
67
|
+
* REST client together with the fully-resolved site descriptor for
|
|
68
|
+
* downstream logging / display.
|
|
69
|
+
*/
|
|
70
|
+
export interface PoolResolution {
|
|
71
|
+
readonly client: RestClient;
|
|
72
|
+
readonly site: ResolvedSite;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Process-local cache of {@link RestClient} instances keyed by
|
|
76
|
+
* `site_id`. Constructed once at server boot (W6) and shared across
|
|
77
|
+
* all tool handlers.
|
|
78
|
+
*
|
|
79
|
+
* The pool is NOT thread-safe in the strict sense (Node is
|
|
80
|
+
* single-threaded but `await` can interleave); the cold-parallel-call
|
|
81
|
+
* behaviour is documented at the top of this file.
|
|
82
|
+
*/
|
|
83
|
+
export declare class ClientPool {
|
|
84
|
+
private readonly _registry;
|
|
85
|
+
private readonly secretResolver;
|
|
86
|
+
private readonly timeoutMs;
|
|
87
|
+
private readonly cache;
|
|
88
|
+
/**
|
|
89
|
+
* Runtime active-site override (Phase 3 — `yootheme_builder_use_site`).
|
|
90
|
+
*
|
|
91
|
+
* The {@link SiteRegistry} is immutable: its `defaultSiteId()` is
|
|
92
|
+
* fixed for the process lifetime. api-mapper's parallel feature
|
|
93
|
+
* (`apimapper_use_profile`) moves a mutable active-pointer in its
|
|
94
|
+
* on-disk ProfileStore. YT Builder instead keeps the registry
|
|
95
|
+
* read-only and layers a process-local override HERE: when set,
|
|
96
|
+
* `resolve(undefined)` targets this id BEFORE consulting
|
|
97
|
+
* `registry.defaultSiteId()`. An explicit `site_id` argument to
|
|
98
|
+
* `resolve()` always wins over the override.
|
|
99
|
+
*
|
|
100
|
+
* `null` = no override (registry default in effect).
|
|
101
|
+
*/
|
|
102
|
+
private activeOverride;
|
|
103
|
+
constructor(_registry: SiteRegistry, secretResolver: SecretResolver, timeoutMs?: number);
|
|
104
|
+
/**
|
|
105
|
+
* The current runtime active-site override, or `null` when none is
|
|
106
|
+
* set (the registry default is in effect). Read-only peek — does not
|
|
107
|
+
* resolve a client or hit the network.
|
|
108
|
+
*/
|
|
109
|
+
activeSiteId(): string | null;
|
|
110
|
+
/**
|
|
111
|
+
* Set (or clear) the runtime active-site override.
|
|
112
|
+
*
|
|
113
|
+
* Passing a `site_id` makes every subsequent `resolve(undefined)`
|
|
114
|
+
* target that site. Passing `null` clears the override so the
|
|
115
|
+
* registry default applies again.
|
|
116
|
+
*
|
|
117
|
+
* @throws {UnknownSiteError} when `siteId` is not in the registry —
|
|
118
|
+
* the pointer is left UNCHANGED on a bad switch so a typo never
|
|
119
|
+
* silently strands the session on a non-existent site.
|
|
120
|
+
*/
|
|
121
|
+
setActiveSite(siteId: string | null): void;
|
|
122
|
+
/**
|
|
123
|
+
* Read-only accessor for the underlying {@link SiteRegistry}. Used
|
|
124
|
+
* internally by the W7 `buildSitesTools(pool)` aggregator so the
|
|
125
|
+
* `sites_list` tool can render the configured-sites table without
|
|
126
|
+
* requiring callers to thread the registry separately. The registry
|
|
127
|
+
* itself is immutable from the outside (no mutator surface) so
|
|
128
|
+
* exposing it here is safe — `listForDisplay()` / `defaultSiteId()` /
|
|
129
|
+
* `listIds()` are all read-only operations.
|
|
130
|
+
*
|
|
131
|
+
* @internal Internal accessor for buildSitesTools; do not consume
|
|
132
|
+
* from tool handlers. Handlers should call `pool.resolve(siteId)`
|
|
133
|
+
* to get a `{client, site}` bundle instead.
|
|
134
|
+
*/
|
|
135
|
+
get registry(): SiteRegistry;
|
|
136
|
+
/**
|
|
137
|
+
* Resolve a site_id to its cached {@link RestClient} + descriptor.
|
|
138
|
+
*
|
|
139
|
+
* @param siteId Explicit site_id from the tool param. When
|
|
140
|
+
* `undefined`, the registry's `defaultSiteId()` is used.
|
|
141
|
+
* @throws {NoDefaultSiteError} when `siteId` is omitted and no
|
|
142
|
+
* default is configured.
|
|
143
|
+
* @throws {UnknownSiteError} when the resolved id is not in the
|
|
144
|
+
* registry (either the explicit id is wrong, or the registry's
|
|
145
|
+
* `default_site_id` points at a stale entry).
|
|
146
|
+
*/
|
|
147
|
+
resolve(siteId?: string): Promise<PoolResolution>;
|
|
148
|
+
/**
|
|
149
|
+
* Drop the cached client for `siteId` — used by the auth layer
|
|
150
|
+
* after a `401 invalid_kid` so the next call re-runs the bearer
|
|
151
|
+
* resolve and builds a fresh {@link RestClient}.
|
|
152
|
+
*
|
|
153
|
+
* No-op when `siteId` is not in the cache.
|
|
154
|
+
*/
|
|
155
|
+
invalidate(siteId: string): void;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=client-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-pool.d.ts","sourceRoot":"","sources":["../../src/sites/client-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IACzC,SAAgB,IAAI,EAAG,iBAAiB,CAAU;gBAG9C,OAAO,SAG6E;CAK3F;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAInB,MAAM,EAAE,MAAM;aACd,SAAS,EAAE,SAAS,MAAM,EAAE;IAJhD,SAAgB,IAAI,EAAG,cAAc,CAAU;gBAG3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,MAAM,EAAE;CAQnD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IAoBf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IArB9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc,CAAuB;gBAGxB,SAAS,EAAE,YAAY,EACvB,cAAc,EAAE,cAAc,EAC9B,SAAS,GAAE,MAAe;IAG/C;;;;OAIG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAW1C;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED;;;;;;;;;;OAUG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqDvD;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGnC"}
|