@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,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool-builder/results` — envelope builders (`jsonResult`,
|
|
3
|
+
* `errorResult`, `structuredResult`, `confirmGuard`) + the shared
|
|
4
|
+
* `sanitizeContentItem` helper. Every payload accepted here runs
|
|
5
|
+
* through the `sanitizeSecrets` / `sanitizeForLogs` boundary so an
|
|
6
|
+
* upstream regression can never land in the LLM context. The mask
|
|
7
|
+
* is concentrated here — `define.ts` and call-sites do not re-mask.
|
|
8
|
+
*
|
|
9
|
+
* Split from `tool-builder.ts` in Round-1.5.
|
|
10
|
+
*
|
|
11
|
+
* @license MIT
|
|
12
|
+
*/
|
|
13
|
+
import { NetworkError, RestError } from '../../errors.js';
|
|
14
|
+
import { sanitizeForLogs } from '../../errors/mask.js';
|
|
15
|
+
import { sanitizeSecrets } from '../../errors/sanitize.js';
|
|
16
|
+
function stringify(value) {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.stringify(value, null, 2);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return String(value);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert any JSON-serializable value into the MCP content envelope
|
|
26
|
+
* (2-space JSON). Wave G.6.4b: every payload is deep-walked through
|
|
27
|
+
* `sanitizeSecrets` before stringification so an upstream regression
|
|
28
|
+
* (REST handler surfacing `oauth_refresh_token`, `auth_data`, etc.)
|
|
29
|
+
* can never land in the LLM context.
|
|
30
|
+
*/
|
|
31
|
+
export function jsonResult(payload, options = {}) {
|
|
32
|
+
const safe = sanitizeSecrets(payload);
|
|
33
|
+
return {
|
|
34
|
+
content: [{ type: 'text', text: stringify(safe) }],
|
|
35
|
+
...(options.isError === true ? { isError: true } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Extract `(message, status?, code?)` from any thrown value, honouring
|
|
39
|
+
* `RestError` / `NetworkError` shape distinctions. */
|
|
40
|
+
function describeError(e) {
|
|
41
|
+
if (e instanceof RestError)
|
|
42
|
+
return { message: e.message, status: e.status, code: e.code };
|
|
43
|
+
if (e instanceof NetworkError)
|
|
44
|
+
return { message: e.message };
|
|
45
|
+
if (e instanceof Error)
|
|
46
|
+
return { message: e.message };
|
|
47
|
+
return { message: stringify(e) };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Render a structured error result with `context` (echoed input) and a
|
|
51
|
+
* recovery `hint`. Wave G.6.3 defense-in-depth: message is
|
|
52
|
+
* mask-and-truncate'd; context is deep-walked so an input param that
|
|
53
|
+
* accidentally echoed a secret-bearing value cannot leak.
|
|
54
|
+
*/
|
|
55
|
+
export function errorResult(opts) {
|
|
56
|
+
const { message, status, code } = describeError(opts.error);
|
|
57
|
+
return jsonResult({
|
|
58
|
+
error: sanitizeForLogs(message),
|
|
59
|
+
...(status !== undefined ? { status } : {}),
|
|
60
|
+
...(code !== undefined ? { code } : {}),
|
|
61
|
+
context: sanitizeSecrets(opts.context),
|
|
62
|
+
hint: opts.hint,
|
|
63
|
+
}, { isError: true });
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Confirm-guard preview helper for destructive tools. Returns the
|
|
67
|
+
* preview `ToolResult` when `confirm` is false; callers `return` it
|
|
68
|
+
* before executing the destructive REST call.
|
|
69
|
+
*/
|
|
70
|
+
export function confirmGuard(opts) {
|
|
71
|
+
return jsonResult({
|
|
72
|
+
preview: true,
|
|
73
|
+
warning: 'DESTRUCTIVE — Confirmation required',
|
|
74
|
+
operation: opts.operation,
|
|
75
|
+
details: opts.details,
|
|
76
|
+
instruction: 'Ask the user to confirm, then call again with `confirm: true`.',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sanitise a single content item from a toolkit builder. Text items
|
|
81
|
+
* frequently embed a JSON-stringified payload — if it parses, deep-walk
|
|
82
|
+
* and re-stringify; otherwise leave as-is (toolkit-rendered tables /
|
|
83
|
+
* details are already domain-mapped at the call site).
|
|
84
|
+
*/
|
|
85
|
+
function sanitizeContentItem(item) {
|
|
86
|
+
if (item.type !== 'text' || typeof item.text !== 'string')
|
|
87
|
+
return item;
|
|
88
|
+
const text = item.text;
|
|
89
|
+
try {
|
|
90
|
+
const parsed = JSON.parse(text);
|
|
91
|
+
const safe = sanitizeSecrets(parsed);
|
|
92
|
+
return { ...item, text: stringify(safe) };
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Not JSON — toolkit-rendered text. No structural redaction
|
|
96
|
+
// possible without false-positives; the caller has already
|
|
97
|
+
// mapped raw secrets out via field-projection helpers.
|
|
98
|
+
return item;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Merge a toolkit `StructuredCallToolResult` (carries `content[0].text`
|
|
103
|
+
* + `_meta.ui`) with a domain-typed `structuredContent` payload. The
|
|
104
|
+
* result satisfies both Rich-Card hosts (read `_meta.ui`) AND
|
|
105
|
+
* structured-output hosts (read `structuredContent`, may validate
|
|
106
|
+
* against `outputSchema`). Single envelope-merger from every migrated
|
|
107
|
+
* tool's handler — toolkit builders are wrapped, not modified.
|
|
108
|
+
*/
|
|
109
|
+
/**
|
|
110
|
+
* W6.2 — site-awareness envelope wrapper.
|
|
111
|
+
*
|
|
112
|
+
* Stamps a resolved-site descriptor onto a tool result so the human +
|
|
113
|
+
* agent both know which connected site the call ran against. Two
|
|
114
|
+
* channels:
|
|
115
|
+
*
|
|
116
|
+
* 1. **text-prefix PRIMARY surface** — `[<label or site_id> @
|
|
117
|
+
* <hostname>] ` is injected at the start of `content[0].text`
|
|
118
|
+
* when that block is a text item. Per the W6 web-research
|
|
119
|
+
* addendum (HCFV §B, Claude-Desktop UI gap doc'd in plan
|
|
120
|
+
* Z.1329-1332), `_meta` is read by the agent but NOT rendered as
|
|
121
|
+
* a UI widget today — so the prefix is the only thing Maria the
|
|
122
|
+
* Claude-Desktop-user reliably SEES. LOAD-BEARING.
|
|
123
|
+
*
|
|
124
|
+
* 2. **result-level `_meta` SECONDARY surface** — `_meta:
|
|
125
|
+
* {site_id, site_url, platform}` is merged into the RESULT-level
|
|
126
|
+
* `_meta` (alongside the toolkit's `_meta.ui`). This is the
|
|
127
|
+
* MCP-spec metadata channel: free-form and NOT validated against
|
|
128
|
+
* the tool's `outputSchema`.
|
|
129
|
+
*
|
|
130
|
+
* W12-R2 fix: site meta was previously merged into
|
|
131
|
+
* `structuredContent._meta`. That broke real hosts. Every tool's
|
|
132
|
+
* `outputSchema` is generated with `additionalProperties:false`,
|
|
133
|
+
* so an undeclared `_meta` key inside `structuredContent` fails
|
|
134
|
+
* client-side schema validation (`-32602`) and surfaces as a
|
|
135
|
+
* "Failed to call tool" toast in Claude Desktop EVEN ON A
|
|
136
|
+
* SUCCESSFUL CALL. `live-verify.mjs` never caught it because raw
|
|
137
|
+
* JSON-RPC calls skip the host's structuredContent↔outputSchema
|
|
138
|
+
* validation. `structuredContent` must stay schema-pure.
|
|
139
|
+
*
|
|
140
|
+
* Pure function: never mutates the input result. Non-text blocks
|
|
141
|
+
* (resource / image / etc.) pass through verbatim. `structuredContent`
|
|
142
|
+
* is passed through UNTOUCHED so it always validates against
|
|
143
|
+
* `outputSchema`. Empty `content[]` is tolerated and produces a
|
|
144
|
+
* prefix-free result (the meta still lands in result-level `_meta`).
|
|
145
|
+
*
|
|
146
|
+
* Label-fallback: `site.label` wins; falls back to `site.id`.
|
|
147
|
+
*
|
|
148
|
+
* Hostname extraction defaults to `new URL(site.url).host`. A
|
|
149
|
+
* malformed URL falls back to the raw site.url string so the prefix
|
|
150
|
+
* remains user-readable even when the registry was hand-edited.
|
|
151
|
+
*/
|
|
152
|
+
export function withSiteMeta(result, site) {
|
|
153
|
+
const displayLabel = site.label ?? site.id;
|
|
154
|
+
let host;
|
|
155
|
+
try {
|
|
156
|
+
host = new URL(site.url).host;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
host = site.url;
|
|
160
|
+
}
|
|
161
|
+
const prefix = `[${displayLabel} @ ${host}] `;
|
|
162
|
+
const meta = {
|
|
163
|
+
site_id: site.id,
|
|
164
|
+
site_url: site.url,
|
|
165
|
+
platform: site.platform.kind,
|
|
166
|
+
};
|
|
167
|
+
// W12-R1.2 (A4-F2): site-awareness is the LOAD-BEARING surface for
|
|
168
|
+
// Claude-Desktop users. When the wrapped result has no text content
|
|
169
|
+
// (e.g. an image-only / resource-only / empty-list response), the
|
|
170
|
+
// prefix would otherwise be lost and the agent would have no visible
|
|
171
|
+
// signal of which site the call ran against. Prepend a synthetic
|
|
172
|
+
// text block so the prefix is ALWAYS the first visible glyph.
|
|
173
|
+
// Trim the trailing space — a standalone prefix block reads better
|
|
174
|
+
// without it.
|
|
175
|
+
const firstItem = result.content[0];
|
|
176
|
+
const needsSynthetic = result.content.length === 0
|
|
177
|
+
|| firstItem === undefined
|
|
178
|
+
|| firstItem.type !== 'text';
|
|
179
|
+
const newContent = needsSynthetic
|
|
180
|
+
? [
|
|
181
|
+
{ type: 'text', text: prefix.trimEnd() },
|
|
182
|
+
...result.content,
|
|
183
|
+
]
|
|
184
|
+
: result.content.map((item, idx) => {
|
|
185
|
+
if (idx !== 0)
|
|
186
|
+
return item;
|
|
187
|
+
if (item.type !== 'text')
|
|
188
|
+
return item;
|
|
189
|
+
const existingText = typeof item.text === 'string' ? item.text : '';
|
|
190
|
+
return { ...item, text: prefix + existingText };
|
|
191
|
+
});
|
|
192
|
+
// Site meta merges into the RESULT-level `_meta` (next to the
|
|
193
|
+
// toolkit's `_meta.ui`), NEVER into `structuredContent`. The latter
|
|
194
|
+
// is validated by the host against the tool's `outputSchema`
|
|
195
|
+
// (additionalProperties:false); an undeclared key there triggers a
|
|
196
|
+
// `-32602` "Failed to call tool" reject even on success. The result
|
|
197
|
+
// envelope `_meta` is the spec's free-form metadata channel.
|
|
198
|
+
const baseTopMeta = result._meta;
|
|
199
|
+
const mergedTopMeta = baseTopMeta !== undefined && baseTopMeta !== null && typeof baseTopMeta === 'object'
|
|
200
|
+
? { ...baseTopMeta, ...meta }
|
|
201
|
+
: meta;
|
|
202
|
+
return {
|
|
203
|
+
...result,
|
|
204
|
+
content: newContent,
|
|
205
|
+
_meta: mergedTopMeta,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
export function structuredResult(toolkitResult, structuredContent) {
|
|
209
|
+
// Wave G.6.4b — deep-walk-sanitise all three legs (text content,
|
|
210
|
+
// _meta.ui, structuredContent) so regressing sources never bypass
|
|
211
|
+
// the LLM-boundary mask.
|
|
212
|
+
const safeContent = toolkitResult.content.map(sanitizeContentItem);
|
|
213
|
+
const safeStructured = sanitizeSecrets(structuredContent);
|
|
214
|
+
const safeMeta = toolkitResult._meta !== undefined
|
|
215
|
+
? sanitizeSecrets(toolkitResult._meta)
|
|
216
|
+
: undefined;
|
|
217
|
+
return {
|
|
218
|
+
content: safeContent,
|
|
219
|
+
...(safeMeta !== undefined ? { _meta: safeMeta } : {}),
|
|
220
|
+
...(toolkitResult.isError === true ? { isError: true } : {}),
|
|
221
|
+
structuredContent: safeStructured,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/tools/tool-builder/results.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool-builder/types` — pure type declarations for the tool-definition
|
|
3
|
+
* system. Split from `tool-builder.ts` in Round-1.5 (replaces the
|
|
4
|
+
* Round-1 LoC-exception spec-amendment with a structural code-fix).
|
|
5
|
+
*
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
import type { ServerNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
import type { ZodRawShape, z } from 'zod';
|
|
10
|
+
/**
|
|
11
|
+
* A content item the SDK accepts. Mirrors the SDK
|
|
12
|
+
* `CallToolResult.content[number]` union (text/image/resource). Tools
|
|
13
|
+
* in this server only emit text, but the toolkit's structured builders
|
|
14
|
+
* return the wider union, so the envelope-merger must accept it.
|
|
15
|
+
*/
|
|
16
|
+
export type ToolContent = {
|
|
17
|
+
type: string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* MCP-compatible content envelope. Fields:
|
|
22
|
+
* - `content` — text blocks shown to the LLM.
|
|
23
|
+
* - `isError` — flag honoured by the SDK for error results.
|
|
24
|
+
* - `_meta.ui` — Rich-Card hints (toolkit structured-display
|
|
25
|
+
* protocol: data-table, detail, stats, error).
|
|
26
|
+
* - `structuredContent` — domain-typed payload validated against the
|
|
27
|
+
* tool's optional `outputSchema`.
|
|
28
|
+
*/
|
|
29
|
+
export interface ToolResult {
|
|
30
|
+
content: ToolContent[];
|
|
31
|
+
isError?: boolean;
|
|
32
|
+
_meta?: {
|
|
33
|
+
ui?: unknown;
|
|
34
|
+
} & Record<string, unknown>;
|
|
35
|
+
structuredContent?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface ToolAnnotations {
|
|
38
|
+
readonly title?: string;
|
|
39
|
+
/** Tool does not mutate state. */
|
|
40
|
+
readonly readOnlyHint?: boolean;
|
|
41
|
+
/** Tool may delete or otherwise destroy state. */
|
|
42
|
+
readonly destructiveHint?: boolean;
|
|
43
|
+
/** Tool talks to a system outside the host process. */
|
|
44
|
+
readonly openWorldHint?: boolean;
|
|
45
|
+
/** Identical invocations have identical effects (PUT-style). */
|
|
46
|
+
readonly idempotentHint?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Minimal MCP-handler `extra` surface used by Wave G.5 progress reports.
|
|
50
|
+
* Only `_meta.progressToken` and `sendNotification` are consumed; the
|
|
51
|
+
* toolkit's `createProgressReporter` is defined against this same
|
|
52
|
+
* minimal shape so we forward verbatim with no cast at the call site.
|
|
53
|
+
*/
|
|
54
|
+
export interface HandlerExtra {
|
|
55
|
+
readonly _meta?: {
|
|
56
|
+
progressToken?: string | number;
|
|
57
|
+
};
|
|
58
|
+
readonly sendNotification: (notification: ServerNotification) => Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
export type ToolHandler<TSchema extends ZodRawShape> = (args: z.infer<z.ZodObject<TSchema>>, extra?: HandlerExtra) => Promise<ToolResult>;
|
|
61
|
+
export interface ToolDefinition<TSchema extends ZodRawShape = ZodRawShape> {
|
|
62
|
+
readonly name: string;
|
|
63
|
+
readonly description: string;
|
|
64
|
+
readonly inputSchema: TSchema;
|
|
65
|
+
/**
|
|
66
|
+
* Optional Zod schema describing the `structuredContent` payload.
|
|
67
|
+
* Hosts that support MCP structured output validate responses
|
|
68
|
+
* against this schema. Set on migrated tools using
|
|
69
|
+
* `structuredResult` / `tableResult` / `detailResult` /
|
|
70
|
+
* `statsResult`; tools on `jsonResult` may omit it.
|
|
71
|
+
*/
|
|
72
|
+
readonly outputSchema?: z.ZodTypeAny;
|
|
73
|
+
readonly annotations: ToolAnnotations;
|
|
74
|
+
readonly handler: ToolHandler<TSchema>;
|
|
75
|
+
/**
|
|
76
|
+
* F-203 follow-up (Audit 2026-05-26 reviewer Gap 2): optional refined
|
|
77
|
+
* `ZodObject` representation of the input shape. When present,
|
|
78
|
+
* `registerToolOn` forwards THIS to the SDK in place of the raw
|
|
79
|
+
* `inputSchema` shape — so a top-level `.refine()` / `.superRefine()`
|
|
80
|
+
* is honoured by the SDK's pre-handler validation and a violation
|
|
81
|
+
* surfaces as a JSON-RPC `-32602 InvalidParams` envelope BEFORE the
|
|
82
|
+
* handler runs.
|
|
83
|
+
*
|
|
84
|
+
* The handler signature is still derived from `inputSchema: TSchema`
|
|
85
|
+
* (the raw shape) so the per-handler arg type stays inferred and
|
|
86
|
+
* stable. The refined object MUST be built from the SAME shape — any
|
|
87
|
+
* drift will compile-fail on the handler's argument typing.
|
|
88
|
+
*/
|
|
89
|
+
readonly inputObjectSchema?: z.ZodTypeAny;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Type-erased tool definition used by the aggregator and server. Tools
|
|
93
|
+
* carry their own runtime-typed handler internally — at the registry
|
|
94
|
+
* boundary we only need the metadata + an opaque handler.
|
|
95
|
+
*/
|
|
96
|
+
export type AnyToolDefinition = ToolDefinition<any>;
|
|
97
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-builder/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,gEAAgE;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClF;AAED,MAAM,MAAM,WAAW,CAAC,OAAO,SAAS,WAAW,IAAI,CACnD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EACnC,KAAK,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;CAC7C;AAED;;;;GAIG;AAEH,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool-builder/types` — pure type declarations for the tool-definition
|
|
3
|
+
* system. Split from `tool-builder.ts` in Round-1.5 (replaces the
|
|
4
|
+
* Round-1 LoC-exception spec-amendment with a structural code-fix).
|
|
5
|
+
*
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/tool-builder/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool-builder.ts` — backward-compat re-export barrel.
|
|
3
|
+
*
|
|
4
|
+
* The implementation was split into `tool-builder/{types,annotations,
|
|
5
|
+
* results,define}.ts` in Round-1.5 (replaces the Round-1 LoC-exception
|
|
6
|
+
* spec-amendment with a structural code-fix). All existing
|
|
7
|
+
* `./tool-builder.js` imports continue to work via this re-export.
|
|
8
|
+
*
|
|
9
|
+
* For new code, prefer importing from `./tool-builder/index.js` (or
|
|
10
|
+
* the specific submodule) — but the barrel here is the stable
|
|
11
|
+
* public-import path for the package's internal modules.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
export * from './tool-builder/index.js';
|
|
16
|
+
//# sourceMappingURL=tool-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-builder.d.ts","sourceRoot":"","sources":["../../src/tools/tool-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tool-builder.ts` — backward-compat re-export barrel.
|
|
3
|
+
*
|
|
4
|
+
* The implementation was split into `tool-builder/{types,annotations,
|
|
5
|
+
* results,define}.ts` in Round-1.5 (replaces the Round-1 LoC-exception
|
|
6
|
+
* spec-amendment with a structural code-fix). All existing
|
|
7
|
+
* `./tool-builder.js` imports continue to work via this re-export.
|
|
8
|
+
*
|
|
9
|
+
* For new code, prefer importing from `./tool-builder/index.js` (or
|
|
10
|
+
* the specific submodule) — but the barrel here is the stable
|
|
11
|
+
* public-import path for the package's internal modules.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
export * from './tool-builder/index.js';
|
|
16
|
+
//# sourceMappingURL=tool-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-builder.js","sourceRoot":"","sources":["../../src/tools/tool-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `uninstall-skill` — the inverse of {@link installSkill}.
|
|
3
|
+
*
|
|
4
|
+
* Removes the bundled skill directory from the user's agent-skill folder
|
|
5
|
+
* (`~/.claude/skills/yt-builder-mcp/`, plus the legacy
|
|
6
|
+
* `~/.claude/skills/yootheme-builder/`) and strips the marker block this
|
|
7
|
+
* package appended to `~/AGENTS.md`.
|
|
8
|
+
*
|
|
9
|
+
* Idempotent + non-destructive to the user's own content: only OUR
|
|
10
|
+
* `## YT Builder MCP` marker section is removed from AGENTS.md; every
|
|
11
|
+
* other line the user wrote is preserved verbatim.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
export interface UninstallSkillOptions {
|
|
16
|
+
/** Dir that holds the installed skill folder(s). Default `~/.claude/skills`. */
|
|
17
|
+
readonly targetSkillsDir?: string;
|
|
18
|
+
/** AGENTS.md file the marker block was appended to. Default `~/AGENTS.md`. */
|
|
19
|
+
readonly targetAgentsFile?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface UninstallSkillResult {
|
|
22
|
+
/** True when at least one skill directory was removed. */
|
|
23
|
+
readonly skillRemoved: boolean;
|
|
24
|
+
/** Absolute path of the canonical skill dir that was targeted. */
|
|
25
|
+
readonly skillTargetDir: string;
|
|
26
|
+
/** True when the marker block was stripped from AGENTS.md. */
|
|
27
|
+
readonly markerRemoved: boolean;
|
|
28
|
+
/** Absolute AGENTS.md path that was inspected / mutated. */
|
|
29
|
+
readonly agentsFile: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* True when a skill folder OR an AGENTS.md marker is present — used by
|
|
33
|
+
* the uninstall CLI to decide whether to surface the "remove skill"
|
|
34
|
+
* checkbox at all.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isSkillInstalled(opts?: UninstallSkillOptions): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Strip our `## YT Builder MCP` marker section from an AGENTS.md body.
|
|
39
|
+
*
|
|
40
|
+
* The block installSkill writes is:
|
|
41
|
+
*
|
|
42
|
+
* \n\n## YT Builder MCP\n\n<MARKER_LINE>\n<a few prose lines>\n
|
|
43
|
+
*
|
|
44
|
+
* It is always appended at EOF. We locate the `## YT Builder MCP`
|
|
45
|
+
* heading whose following lines contain {@link MARKER_LINE}, then remove
|
|
46
|
+
* from that heading (collapsing the blank lines that preceded it) up to
|
|
47
|
+
* the next top-level/section heading (`# ` or `## `) or EOF. Returns the
|
|
48
|
+
* cleaned body, or `null` when no marker block was found (no-op).
|
|
49
|
+
*/
|
|
50
|
+
export declare function stripMarkerBlock(body: string): string | null;
|
|
51
|
+
export declare function uninstallSkill(options?: UninstallSkillOptions): Promise<UninstallSkillResult>;
|
|
52
|
+
//# sourceMappingURL=uninstall-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-skill.d.ts","sourceRoot":"","sources":["../src/uninstall-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,MAAM,WAAW,qBAAqB;IAClC,gFAAgF;IAChF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAUD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAc1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoD5D;AAED,wBAAsB,cAAc,CAChC,OAAO,GAAE,qBAA0B,GACpC,OAAO,CAAC,oBAAoB,CAAC,CAgC/B"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `uninstall-skill` — the inverse of {@link installSkill}.
|
|
3
|
+
*
|
|
4
|
+
* Removes the bundled skill directory from the user's agent-skill folder
|
|
5
|
+
* (`~/.claude/skills/yt-builder-mcp/`, plus the legacy
|
|
6
|
+
* `~/.claude/skills/yootheme-builder/`) and strips the marker block this
|
|
7
|
+
* package appended to `~/AGENTS.md`.
|
|
8
|
+
*
|
|
9
|
+
* Idempotent + non-destructive to the user's own content: only OUR
|
|
10
|
+
* `## YT Builder MCP` marker section is removed from AGENTS.md; every
|
|
11
|
+
* other line the user wrote is preserved verbatim.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { MARKER_LINE } from './install-skill.js';
|
|
19
|
+
/** Skill folder names this package has ever installed (canonical first). */
|
|
20
|
+
const SKILL_DIR_NAMES = ['yt-builder-mcp', 'yootheme-builder'];
|
|
21
|
+
function resolveSkillsDir(opts) {
|
|
22
|
+
return opts.targetSkillsDir ?? join(homedir(), '.claude', 'skills');
|
|
23
|
+
}
|
|
24
|
+
function resolveAgentsFile(opts) {
|
|
25
|
+
return opts.targetAgentsFile ?? join(homedir(), 'AGENTS.md');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* True when a skill folder OR an AGENTS.md marker is present — used by
|
|
29
|
+
* the uninstall CLI to decide whether to surface the "remove skill"
|
|
30
|
+
* checkbox at all.
|
|
31
|
+
*/
|
|
32
|
+
export function isSkillInstalled(opts = {}) {
|
|
33
|
+
const skillsDir = resolveSkillsDir(opts);
|
|
34
|
+
for (const name of SKILL_DIR_NAMES) {
|
|
35
|
+
if (existsSync(join(skillsDir, name)))
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
const agentsFile = resolveAgentsFile(opts);
|
|
39
|
+
if (existsSync(agentsFile)) {
|
|
40
|
+
try {
|
|
41
|
+
if (readFileSync(agentsFile, 'utf-8').includes(MARKER_LINE))
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// unreadable → treat as not-installed
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Strip our `## YT Builder MCP` marker section from an AGENTS.md body.
|
|
52
|
+
*
|
|
53
|
+
* The block installSkill writes is:
|
|
54
|
+
*
|
|
55
|
+
* \n\n## YT Builder MCP\n\n<MARKER_LINE>\n<a few prose lines>\n
|
|
56
|
+
*
|
|
57
|
+
* It is always appended at EOF. We locate the `## YT Builder MCP`
|
|
58
|
+
* heading whose following lines contain {@link MARKER_LINE}, then remove
|
|
59
|
+
* from that heading (collapsing the blank lines that preceded it) up to
|
|
60
|
+
* the next top-level/section heading (`# ` or `## `) or EOF. Returns the
|
|
61
|
+
* cleaned body, or `null` when no marker block was found (no-op).
|
|
62
|
+
*/
|
|
63
|
+
export function stripMarkerBlock(body) {
|
|
64
|
+
if (!body.includes(MARKER_LINE))
|
|
65
|
+
return null;
|
|
66
|
+
const lines = body.split('\n');
|
|
67
|
+
// Find the `## YT Builder MCP` heading that owns the marker line.
|
|
68
|
+
let headingIdx = -1;
|
|
69
|
+
for (let i = 0; i < lines.length; i++) {
|
|
70
|
+
if (lines[i].trim() === '## YT Builder MCP') {
|
|
71
|
+
// Confirm the marker line appears before the next heading.
|
|
72
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
73
|
+
const t = lines[j];
|
|
74
|
+
if (/^#{1,2}\s/.test(t))
|
|
75
|
+
break;
|
|
76
|
+
if (t.includes(MARKER_LINE)) {
|
|
77
|
+
headingIdx = i;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (headingIdx !== -1)
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
// Fallback: marker present but no recognised heading (hand-edited).
|
|
86
|
+
// Remove just the marker line + its immediate prose paragraph.
|
|
87
|
+
if (headingIdx === -1) {
|
|
88
|
+
const filtered = lines.filter((l) => !l.includes(MARKER_LINE));
|
|
89
|
+
const cleaned = filtered.join('\n');
|
|
90
|
+
return cleaned === body ? null : cleaned;
|
|
91
|
+
}
|
|
92
|
+
// Walk to the end of the block: next `# `/`## ` heading or EOF.
|
|
93
|
+
let endIdx = lines.length;
|
|
94
|
+
for (let j = headingIdx + 1; j < lines.length; j++) {
|
|
95
|
+
if (/^#{1,2}\s/.test(lines[j])) {
|
|
96
|
+
endIdx = j;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Collapse trailing blank lines that immediately preceded the heading
|
|
101
|
+
// so we don't leave a widening gap.
|
|
102
|
+
let startIdx = headingIdx;
|
|
103
|
+
while (startIdx > 0 && lines[startIdx - 1].trim() === '') {
|
|
104
|
+
startIdx--;
|
|
105
|
+
}
|
|
106
|
+
const kept = [...lines.slice(0, startIdx), ...lines.slice(endIdx)];
|
|
107
|
+
let cleaned = kept.join('\n');
|
|
108
|
+
// Normalise trailing whitespace: collapse 3+ newlines, ensure single
|
|
109
|
+
// trailing newline when there is content.
|
|
110
|
+
cleaned = cleaned.replace(/\n{3,}/g, '\n\n').replace(/\n*$/, '');
|
|
111
|
+
if (cleaned !== '')
|
|
112
|
+
cleaned += '\n';
|
|
113
|
+
return cleaned;
|
|
114
|
+
}
|
|
115
|
+
export async function uninstallSkill(options = {}) {
|
|
116
|
+
const skillsDir = resolveSkillsDir(options);
|
|
117
|
+
const agentsFile = resolveAgentsFile(options);
|
|
118
|
+
const skillTargetDir = join(skillsDir, SKILL_DIR_NAMES[0]);
|
|
119
|
+
// 1. Remove skill directories (canonical + legacy).
|
|
120
|
+
let skillRemoved = false;
|
|
121
|
+
for (const name of SKILL_DIR_NAMES) {
|
|
122
|
+
const dir = join(skillsDir, name);
|
|
123
|
+
if (existsSync(dir)) {
|
|
124
|
+
rmSync(dir, { recursive: true, force: true });
|
|
125
|
+
skillRemoved = true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 2. Strip the marker block from AGENTS.md.
|
|
129
|
+
let markerRemoved = false;
|
|
130
|
+
if (existsSync(agentsFile)) {
|
|
131
|
+
let body = '';
|
|
132
|
+
try {
|
|
133
|
+
body = readFileSync(agentsFile, 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
body = '';
|
|
137
|
+
}
|
|
138
|
+
const cleaned = stripMarkerBlock(body);
|
|
139
|
+
if (cleaned !== null) {
|
|
140
|
+
writeFileSync(agentsFile, cleaned, 'utf-8');
|
|
141
|
+
markerRemoved = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { skillRemoved, skillTargetDir, markerRemoved, agentsFile };
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=uninstall-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-skill.js","sourceRoot":"","sources":["../src/uninstall-skill.ts"],"names":[],"mappings":"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"}
|