@wootsup/yt-builder-mcp 1.11.0 → 2.0.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 +131 -33
- package/bin/node-floor.d.ts +28 -0
- package/bin/node-floor.js +123 -0
- package/bin/yt-builder-mcp.js +52 -11
- package/dist/auth.d.ts +3 -121
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +40 -170
- package/dist/auth.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +4 -49
- package/dist/catalog/build-catalog.d.ts.map +1 -1
- package/dist/catalog/build-catalog.js +15 -126
- package/dist/catalog/build-catalog.js.map +1 -1
- package/dist/catalog/json-schema.d.ts +3 -0
- package/dist/catalog/json-schema.d.ts.map +1 -0
- package/dist/catalog/json-schema.js +68 -0
- package/dist/catalog/json-schema.js.map +1 -0
- package/dist/catalog/output-shapes.d.ts +6 -0
- package/dist/catalog/output-shapes.d.ts.map +1 -0
- package/dist/catalog/output-shapes.js +89 -0
- package/dist/catalog/output-shapes.js.map +1 -0
- package/dist/catalog/tool-catalog-markdown.d.ts +1 -37
- package/dist/catalog/tool-catalog-markdown.d.ts.map +1 -1
- package/dist/catalog/tool-catalog-markdown.js +9 -41
- package/dist/catalog/tool-catalog-markdown.js.map +1 -1
- package/dist/cli/doctor-command.d.ts +2 -7
- package/dist/cli/doctor-command.d.ts.map +1 -1
- package/dist/cli/doctor-command.js +33 -54
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/cli/invocation-decision.d.ts +4 -52
- package/dist/cli/invocation-decision.d.ts.map +1 -1
- package/dist/cli/invocation-decision.js +45 -54
- package/dist/cli/invocation-decision.js.map +1 -1
- package/dist/client.d.ts +3 -107
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -115
- package/dist/client.js.map +1 -1
- package/dist/clients/claude-code.d.ts +0 -15
- package/dist/clients/claude-code.d.ts.map +1 -1
- package/dist/clients/claude-code.js +0 -22
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/claude-desktop.d.ts +0 -16
- package/dist/clients/claude-desktop.d.ts.map +1 -1
- package/dist/clients/claude-desktop.js +0 -18
- package/dist/clients/claude-desktop.js.map +1 -1
- package/dist/clients/cline.d.ts +0 -23
- package/dist/clients/cline.d.ts.map +1 -1
- package/dist/clients/cline.js +0 -33
- package/dist/clients/cline.js.map +1 -1
- package/dist/clients/codex-cli.d.ts +0 -39
- package/dist/clients/codex-cli.d.ts.map +1 -1
- package/dist/clients/codex-cli.js +0 -137
- package/dist/clients/codex-cli.js.map +1 -1
- package/dist/clients/continue.d.ts +0 -10
- package/dist/clients/continue.d.ts.map +1 -1
- package/dist/clients/continue.js +0 -26
- package/dist/clients/continue.js.map +1 -1
- package/dist/clients/cursor.d.ts +0 -9
- package/dist/clients/cursor.d.ts.map +1 -1
- package/dist/clients/cursor.js +0 -11
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/gemini-cli.d.ts +0 -15
- package/dist/clients/gemini-cli.d.ts.map +1 -1
- package/dist/clients/gemini-cli.js +0 -17
- package/dist/clients/gemini-cli.js.map +1 -1
- package/dist/clients/home.d.ts +0 -12
- package/dist/clients/home.d.ts.map +1 -1
- package/dist/clients/home.js +0 -12
- package/dist/clients/home.js.map +1 -1
- package/dist/clients/index.d.ts +0 -150
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +0 -112
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/roo-code.d.ts +0 -20
- package/dist/clients/roo-code.d.ts.map +1 -1
- package/dist/clients/roo-code.js +0 -22
- package/dist/clients/roo-code.js.map +1 -1
- package/dist/clients/zed.d.ts +0 -9
- package/dist/clients/zed.d.ts.map +1 -1
- package/dist/clients/zed.js +0 -18
- package/dist/clients/zed.js.map +1 -1
- package/dist/compat-floor.d.ts +35 -0
- package/dist/compat-floor.d.ts.map +1 -0
- package/dist/compat-floor.js +84 -0
- package/dist/compat-floor.js.map +1 -0
- package/dist/compat-probe.d.ts +6 -0
- package/dist/compat-probe.d.ts.map +1 -0
- package/dist/compat-probe.js +20 -0
- package/dist/compat-probe.js.map +1 -0
- package/dist/diagnostics/ca-reexec.d.ts +0 -30
- package/dist/diagnostics/ca-reexec.d.ts.map +1 -1
- package/dist/diagnostics/ca-reexec.js +0 -62
- package/dist/diagnostics/ca-reexec.js.map +1 -1
- package/dist/diagnostics/ca-trust.d.ts +0 -22
- package/dist/diagnostics/ca-trust.d.ts.map +1 -1
- package/dist/diagnostics/ca-trust.js +3 -42
- package/dist/diagnostics/ca-trust.js.map +1 -1
- package/dist/diagnostics/diagnose-network-error.d.ts +1 -38
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -1
- package/dist/diagnostics/diagnose-network-error.js +26 -37
- package/dist/diagnostics/diagnose-network-error.js.map +1 -1
- package/dist/diagnostics/doctor.d.ts +13 -65
- package/dist/diagnostics/doctor.d.ts.map +1 -1
- package/dist/diagnostics/doctor.js +46 -70
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/diagnostics/startup-self-probe.d.ts +3 -25
- package/dist/diagnostics/startup-self-probe.d.ts.map +1 -1
- package/dist/diagnostics/startup-self-probe.js +11 -48
- package/dist/diagnostics/startup-self-probe.js.map +1 -1
- package/dist/errors/hints.d.ts +0 -44
- package/dist/errors/hints.d.ts.map +1 -1
- package/dist/errors/hints.js +0 -32
- package/dist/errors/hints.js.map +1 -1
- package/dist/errors/mask.d.ts +0 -31
- package/dist/errors/mask.d.ts.map +1 -1
- package/dist/errors/mask.js +0 -32
- package/dist/errors/mask.js.map +1 -1
- package/dist/errors/redact-credentials.d.ts +2 -0
- package/dist/errors/redact-credentials.d.ts.map +1 -0
- package/dist/errors/redact-credentials.js +13 -0
- package/dist/errors/redact-credentials.js.map +1 -0
- package/dist/errors/sanitize.d.ts +0 -29
- package/dist/errors/sanitize.d.ts.map +1 -1
- package/dist/errors/sanitize.js +0 -40
- package/dist/errors/sanitize.js.map +1 -1
- package/dist/errors.d.ts +6 -17
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -21
- package/dist/errors.js.map +1 -1
- package/dist/gateway/advanced-read-tool.d.ts +0 -32
- package/dist/gateway/advanced-read-tool.d.ts.map +1 -1
- package/dist/gateway/advanced-read-tool.js +43 -111
- package/dist/gateway/advanced-read-tool.js.map +1 -1
- package/dist/gateway/advanced-tool/discovery.d.ts +1 -12
- package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/discovery.js +18 -16
- package/dist/gateway/advanced-tool/discovery.js.map +1 -1
- package/dist/gateway/advanced-tool/domains.d.ts +7 -66
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/domains.js +36 -80
- package/dist/gateway/advanced-tool/domains.js.map +1 -1
- package/dist/gateway/advanced-tool/execute.d.ts +0 -25
- package/dist/gateway/advanced-tool/execute.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/execute.js +13 -49
- package/dist/gateway/advanced-tool/execute.js.map +1 -1
- package/dist/gateway/advanced-tool/index.d.ts +1 -32
- package/dist/gateway/advanced-tool/index.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/index.js +1 -35
- package/dist/gateway/advanced-tool/index.js.map +1 -1
- package/dist/gateway/advanced-tool/register.d.ts +0 -14
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/register.js +22 -58
- package/dist/gateway/advanced-tool/register.js.map +1 -1
- package/dist/gateway/advanced-tool.d.ts +0 -11
- package/dist/gateway/advanced-tool.d.ts.map +1 -1
- package/dist/gateway/advanced-tool.js +0 -11
- package/dist/gateway/advanced-tool.js.map +1 -1
- package/dist/gateway/capturing-server.d.ts +3 -88
- package/dist/gateway/capturing-server.d.ts.map +1 -1
- package/dist/gateway/capturing-server.js +0 -77
- package/dist/gateway/capturing-server.js.map +1 -1
- package/dist/gateway/essentials.d.ts +1 -63
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +10 -174
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/gateway/test-support.d.ts +0 -28
- package/dist/gateway/test-support.d.ts.map +1 -1
- package/dist/gateway/test-support.js +0 -29
- package/dist/gateway/test-support.js.map +1 -1
- package/dist/health-response.d.ts +2 -0
- package/dist/health-response.d.ts.map +1 -0
- package/dist/health-response.js +7 -0
- package/dist/health-response.js.map +1 -0
- package/dist/icon-data.js +0 -3
- package/dist/icon-data.js.map +1 -1
- package/dist/index.d.ts +7 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -130
- package/dist/index.js.map +1 -1
- package/dist/install-skill.d.ts +0 -44
- package/dist/install-skill.d.ts.map +1 -1
- package/dist/install-skill.js +5 -46
- package/dist/install-skill.js.map +1 -1
- package/dist/net/extra-headers.d.ts +0 -58
- package/dist/net/extra-headers.d.ts.map +1 -1
- package/dist/net/extra-headers.js +0 -67
- package/dist/net/extra-headers.js.map +1 -1
- package/dist/net/internal-host.d.ts +0 -31
- package/dist/net/internal-host.d.ts.map +1 -1
- package/dist/net/internal-host.js +7 -65
- package/dist/net/internal-host.js.map +1 -1
- package/dist/net/proxy-dispatcher.d.ts +0 -37
- package/dist/net/proxy-dispatcher.d.ts.map +1 -1
- package/dist/net/proxy-dispatcher.js +0 -40
- package/dist/net/proxy-dispatcher.js.map +1 -1
- package/dist/net/public-fetch.d.ts +53 -0
- package/dist/net/public-fetch.d.ts.map +1 -0
- package/dist/net/public-fetch.js +143 -0
- package/dist/net/public-fetch.js.map +1 -0
- package/dist/net/public-page-report.d.ts +26 -0
- package/dist/net/public-page-report.d.ts.map +1 -0
- package/dist/net/public-page-report.js +145 -0
- package/dist/net/public-page-report.js.map +1 -0
- package/dist/net/redirect-safe-fetch.d.ts +14 -0
- package/dist/net/redirect-safe-fetch.d.ts.map +1 -0
- package/dist/net/redirect-safe-fetch.js +61 -0
- package/dist/net/redirect-safe-fetch.js.map +1 -0
- package/dist/net/session-recovery-fetch.d.ts +7 -0
- package/dist/net/session-recovery-fetch.d.ts.map +1 -0
- package/dist/net/session-recovery-fetch.js +139 -0
- package/dist/net/session-recovery-fetch.js.map +1 -0
- package/dist/net/site-basic-auth.d.ts +1 -59
- package/dist/net/site-basic-auth.d.ts.map +1 -1
- package/dist/net/site-basic-auth.js +5 -94
- package/dist/net/site-basic-auth.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +15 -0
- package/dist/package-version.js.map +1 -0
- package/dist/platform/detect.d.ts +0 -54
- package/dist/platform/detect.d.ts.map +1 -1
- package/dist/platform/detect.js +0 -53
- package/dist/platform/detect.js.map +1 -1
- package/dist/platform/index.d.ts +0 -100
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +0 -106
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/joomla.d.ts +0 -35
- package/dist/platform/joomla.d.ts.map +1 -1
- package/dist/platform/joomla.js +0 -35
- package/dist/platform/joomla.js.map +1 -1
- package/dist/proxy/bridge.d.ts +36 -76
- package/dist/proxy/bridge.d.ts.map +1 -1
- package/dist/proxy/bridge.js +443 -136
- package/dist/proxy/bridge.js.map +1 -1
- package/dist/proxy/confirm-elicitation.d.ts +22 -0
- package/dist/proxy/confirm-elicitation.d.ts.map +1 -0
- package/dist/proxy/confirm-elicitation.js +170 -0
- package/dist/proxy/confirm-elicitation.js.map +1 -0
- package/dist/proxy/confirm-question-contract.d.ts +6 -0
- package/dist/proxy/confirm-question-contract.d.ts.map +1 -0
- package/dist/proxy/confirm-question-contract.js +9 -0
- package/dist/proxy/confirm-question-contract.js.map +1 -0
- package/dist/proxy/confirm-question.d.ts +2 -0
- package/dist/proxy/confirm-question.d.ts.map +1 -0
- package/dist/proxy/confirm-question.js +125 -0
- package/dist/proxy/confirm-question.js.map +1 -0
- package/dist/proxy/instructions.d.ts +4 -0
- package/dist/proxy/instructions.d.ts.map +1 -0
- package/dist/proxy/instructions.js +12 -0
- package/dist/proxy/instructions.js.map +1 -0
- package/dist/proxy/mode.d.ts +14 -9
- package/dist/proxy/mode.d.ts.map +1 -1
- package/dist/proxy/mode.js +58 -34
- package/dist/proxy/mode.js.map +1 -1
- package/dist/proxy/multi-site.d.ts +42 -0
- package/dist/proxy/multi-site.d.ts.map +1 -0
- package/dist/proxy/multi-site.js +134 -0
- package/dist/proxy/multi-site.js.map +1 -0
- package/dist/proxy/request-headers.d.ts +9 -0
- package/dist/proxy/request-headers.d.ts.map +1 -0
- package/dist/proxy/request-headers.js +17 -0
- package/dist/proxy/request-headers.js.map +1 -0
- package/dist/proxy/shadow-tools.d.ts +9 -0
- package/dist/proxy/shadow-tools.d.ts.map +1 -0
- package/dist/proxy/shadow-tools.js +42 -0
- package/dist/proxy/shadow-tools.js.map +1 -0
- package/dist/proxy/tools-list-cap.d.ts +7 -0
- package/dist/proxy/tools-list-cap.d.ts.map +1 -0
- package/dist/proxy/tools-list-cap.js +14 -0
- package/dist/proxy/tools-list-cap.js.map +1 -0
- package/dist/proxy/transport-uncertainty.d.ts +2 -0
- package/dist/proxy/transport-uncertainty.d.ts.map +1 -0
- package/dist/proxy/transport-uncertainty.js +8 -0
- package/dist/proxy/transport-uncertainty.js.map +1 -0
- package/dist/proxy/upstream-error.d.ts +7 -0
- package/dist/proxy/upstream-error.d.ts.map +1 -0
- package/dist/proxy/upstream-error.js +35 -0
- package/dist/proxy/upstream-error.js.map +1 -0
- package/dist/proxy/wire-dialect.d.ts +5 -0
- package/dist/proxy/wire-dialect.d.ts.map +1 -0
- package/dist/proxy/wire-dialect.js +33 -0
- package/dist/proxy/wire-dialect.js.map +1 -0
- package/dist/server.d.ts +14 -82
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +107 -203
- package/dist/server.js.map +1 -1
- package/dist/setup/banner-color.d.ts +13 -0
- package/dist/setup/banner-color.d.ts.map +1 -0
- package/dist/setup/banner-color.js +93 -0
- package/dist/setup/banner-color.js.map +1 -0
- package/dist/setup/banner.d.ts +22 -0
- package/dist/setup/banner.d.ts.map +1 -0
- package/dist/setup/banner.js +119 -0
- package/dist/setup/banner.js.map +1 -0
- package/dist/setup/ca-recovery.d.ts +20 -0
- package/dist/setup/ca-recovery.d.ts.map +1 -0
- package/dist/setup/ca-recovery.js +92 -0
- package/dist/setup/ca-recovery.js.map +1 -0
- package/dist/setup/closing.d.ts +15 -0
- package/dist/setup/closing.d.ts.map +1 -0
- package/dist/setup/closing.js +43 -0
- package/dist/setup/closing.js.map +1 -0
- package/dist/setup/corporate-ca.d.ts +16 -0
- package/dist/setup/corporate-ca.d.ts.map +1 -0
- package/dist/setup/corporate-ca.js +32 -0
- package/dist/setup/corporate-ca.js.map +1 -0
- package/dist/setup/host-platform.d.ts +8 -0
- package/dist/setup/host-platform.d.ts.map +1 -0
- package/dist/setup/host-platform.js +21 -0
- package/dist/setup/host-platform.js.map +1 -0
- package/dist/setup/install-configs.d.ts +18 -0
- package/dist/setup/install-configs.d.ts.map +1 -0
- package/dist/setup/install-configs.js +70 -0
- package/dist/setup/install-configs.js.map +1 -0
- package/dist/setup/multi-site-loop.d.ts +14 -0
- package/dist/setup/multi-site-loop.d.ts.map +1 -0
- package/dist/setup/multi-site-loop.js +20 -0
- package/dist/setup/multi-site-loop.js.map +1 -0
- package/dist/setup/phases.d.ts +18 -0
- package/dist/setup/phases.d.ts.map +1 -0
- package/dist/setup/phases.js +55 -0
- package/dist/setup/phases.js.map +1 -0
- package/dist/setup/registry-remedy.d.ts +12 -0
- package/dist/setup/registry-remedy.d.ts.map +1 -0
- package/dist/setup/registry-remedy.js +37 -0
- package/dist/setup/registry-remedy.js.map +1 -0
- package/dist/setup/resume.d.ts +28 -0
- package/dist/setup/resume.d.ts.map +1 -0
- package/dist/setup/resume.js +99 -0
- package/dist/setup/resume.js.map +1 -0
- package/dist/setup-ca-env.d.ts +0 -30
- package/dist/setup-ca-env.d.ts.map +1 -1
- package/dist/setup-ca-env.js +0 -28
- package/dist/setup-ca-env.js.map +1 -1
- package/dist/setup-ca-reprobe.d.ts +0 -25
- package/dist/setup-ca-reprobe.d.ts.map +1 -1
- package/dist/setup-ca-reprobe.js +0 -34
- package/dist/setup-ca-reprobe.js.map +1 -1
- package/dist/setup-cli-confirm.d.ts +0 -34
- package/dist/setup-cli-confirm.d.ts.map +1 -1
- package/dist/setup-cli-confirm.js +0 -36
- package/dist/setup-cli-confirm.js.map +1 -1
- package/dist/setup-cli.d.ts +6 -167
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +161 -173
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-npx-spec.d.ts +0 -36
- package/dist/setup-npx-spec.d.ts.map +1 -1
- package/dist/setup-npx-spec.js +0 -38
- package/dist/setup-npx-spec.js.map +1 -1
- package/dist/setup-prompts.d.ts +5 -70
- package/dist/setup-prompts.d.ts.map +1 -1
- package/dist/setup-prompts.js +67 -107
- package/dist/setup-prompts.js.map +1 -1
- package/dist/setup-token.d.ts +0 -34
- package/dist/setup-token.d.ts.map +1 -1
- package/dist/setup-token.js +0 -40
- package/dist/setup-token.js.map +1 -1
- package/dist/setup-wizard-defaults.d.ts +0 -36
- package/dist/setup-wizard-defaults.d.ts.map +1 -1
- package/dist/setup-wizard-defaults.js +0 -75
- package/dist/setup-wizard-defaults.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts +1 -19
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +8 -45
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +16 -209
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard-types.js +0 -9
- package/dist/setup-wizard-types.js.map +1 -1
- package/dist/setup-wizard.d.ts +0 -28
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +167 -412
- package/dist/setup-wizard.js.map +1 -1
- package/dist/setup.d.ts +0 -15
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +0 -15
- package/dist/setup.js.map +1 -1
- package/dist/sites/bootstrap.d.ts +0 -38
- package/dist/sites/bootstrap.d.ts.map +1 -1
- package/dist/sites/bootstrap.js +0 -44
- package/dist/sites/bootstrap.js.map +1 -1
- package/dist/sites/cli/add-site.d.ts +0 -76
- package/dist/sites/cli/add-site.d.ts.map +1 -1
- package/dist/sites/cli/add-site.js +0 -71
- package/dist/sites/cli/add-site.js.map +1 -1
- package/dist/sites/cli/list-sites.d.ts +0 -31
- package/dist/sites/cli/list-sites.d.ts.map +1 -1
- package/dist/sites/cli/list-sites.js +0 -45
- package/dist/sites/cli/list-sites.js.map +1 -1
- package/dist/sites/cli/remove-site.d.ts +0 -37
- package/dist/sites/cli/remove-site.d.ts.map +1 -1
- package/dist/sites/cli/remove-site.js +0 -37
- package/dist/sites/cli/remove-site.js.map +1 -1
- package/dist/sites/cli/set-default.d.ts +0 -25
- package/dist/sites/cli/set-default.d.ts.map +1 -1
- package/dist/sites/cli/set-default.js +0 -22
- package/dist/sites/cli/set-default.js.map +1 -1
- package/dist/sites/cli/test-site.d.ts +0 -44
- package/dist/sites/cli/test-site.d.ts.map +1 -1
- package/dist/sites/cli/test-site.js +0 -39
- package/dist/sites/cli/test-site.js.map +1 -1
- package/dist/sites/client-pool.d.ts +11 -164
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +73 -194
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/sites/config-problem.d.ts +2 -0
- package/dist/sites/config-problem.d.ts.map +1 -0
- package/dist/sites/config-problem.js +13 -0
- package/dist/sites/config-problem.js.map +1 -0
- package/dist/sites/env-bridge.d.ts +0 -69
- package/dist/sites/env-bridge.d.ts.map +1 -1
- package/dist/sites/env-bridge.js +2 -71
- package/dist/sites/env-bridge.js.map +1 -1
- package/dist/sites/op-inject.d.ts +23 -0
- package/dist/sites/op-inject.d.ts.map +1 -0
- package/dist/sites/op-inject.js +131 -0
- package/dist/sites/op-inject.js.map +1 -0
- package/dist/sites/paths.d.ts +0 -19
- package/dist/sites/paths.d.ts.map +1 -1
- package/dist/sites/paths.js +0 -19
- package/dist/sites/paths.js.map +1 -1
- package/dist/sites/probe.d.ts +1 -47
- package/dist/sites/probe.d.ts.map +1 -1
- package/dist/sites/probe.js +4 -46
- package/dist/sites/probe.js.map +1 -1
- package/dist/sites/registry.d.ts +4 -135
- package/dist/sites/registry.d.ts.map +1 -1
- package/dist/sites/registry.js +4 -98
- package/dist/sites/registry.js.map +1 -1
- package/dist/sites/schema.d.ts +3 -51
- package/dist/sites/schema.d.ts.map +1 -1
- package/dist/sites/schema.js +6 -52
- package/dist/sites/schema.js.map +1 -1
- package/dist/sites/secret-resolver.d.ts +6 -76
- package/dist/sites/secret-resolver.d.ts.map +1 -1
- package/dist/sites/secret-resolver.js +39 -104
- package/dist/sites/secret-resolver.js.map +1 -1
- package/dist/sites/store.d.ts +12 -69
- package/dist/sites/store.d.ts.map +1 -1
- package/dist/sites/store.js +37 -86
- package/dist/sites/store.js.map +1 -1
- package/dist/sites/substituted-registry.d.ts +11 -0
- package/dist/sites/substituted-registry.d.ts.map +1 -0
- package/dist/sites/substituted-registry.js +13 -0
- package/dist/sites/substituted-registry.js.map +1 -0
- package/dist/sites/tools/fetch-public-url.d.ts +4 -0
- package/dist/sites/tools/fetch-public-url.d.ts.map +1 -0
- package/dist/sites/tools/fetch-public-url.js +231 -0
- package/dist/sites/tools/fetch-public-url.js.map +1 -0
- package/dist/sites/tools/index.d.ts +2 -26
- package/dist/sites/tools/index.d.ts.map +1 -1
- package/dist/sites/tools/index.js +5 -28
- package/dist/sites/tools/index.js.map +1 -1
- package/dist/sites/tools/sites-list.d.ts +3 -47
- package/dist/sites/tools/sites-list.d.ts.map +1 -1
- package/dist/sites/tools/sites-list.js +68 -80
- package/dist/sites/tools/sites-list.js.map +1 -1
- package/dist/sites/tools/sites-overview.d.ts +4 -0
- package/dist/sites/tools/sites-overview.d.ts.map +1 -0
- package/dist/sites/tools/sites-overview.js +209 -0
- package/dist/sites/tools/sites-overview.js.map +1 -0
- package/dist/sites/tools/sites-test.d.ts +2 -45
- package/dist/sites/tools/sites-test.d.ts.map +1 -1
- package/dist/sites/tools/sites-test.js +1 -56
- package/dist/sites/tools/sites-test.js.map +1 -1
- package/dist/sites/tools/use-site.d.ts +2 -45
- package/dist/sites/tools/use-site.d.ts.map +1 -1
- package/dist/sites/tools/use-site.js +31 -80
- package/dist/sites/tools/use-site.js.map +1 -1
- package/dist/sites/unknown-name-result.d.ts +10 -0
- package/dist/sites/unknown-name-result.d.ts.map +1 -0
- package/dist/sites/unknown-name-result.js +13 -0
- package/dist/sites/unknown-name-result.js.map +1 -0
- package/dist/skill-instructions.d.ts +7 -0
- package/dist/skill-instructions.d.ts.map +1 -0
- package/dist/skill-instructions.js +84 -0
- package/dist/skill-instructions.js.map +1 -0
- package/dist/skill-loader.d.ts +0 -102
- package/dist/skill-loader.d.ts.map +1 -1
- package/dist/skill-loader.js +4 -142
- package/dist/skill-loader.js.map +1 -1
- package/dist/skill-manifest.d.ts +0 -20
- package/dist/skill-manifest.d.ts.map +1 -1
- package/dist/skill-manifest.js +1 -21
- package/dist/skill-manifest.js.map +1 -1
- package/dist/skill-topics.d.ts +19 -0
- package/dist/skill-topics.d.ts.map +1 -0
- package/dist/skill-topics.js +181 -0
- package/dist/skill-topics.js.map +1 -0
- package/dist/tools/active-site.d.ts +16 -0
- package/dist/tools/active-site.d.ts.map +1 -0
- package/dist/tools/active-site.js +55 -0
- package/dist/tools/active-site.js.map +1 -0
- package/dist/tools/bind-guidance.d.ts +2 -72
- package/dist/tools/bind-guidance.d.ts.map +1 -1
- package/dist/tools/bind-guidance.js +2 -72
- package/dist/tools/bind-guidance.js.map +1 -1
- package/dist/tools/budgeted-table.d.ts +16 -0
- package/dist/tools/budgeted-table.d.ts.map +1 -0
- package/dist/tools/budgeted-table.js +203 -0
- package/dist/tools/budgeted-table.js.map +1 -0
- package/dist/tools/elements/bind-output-schema.d.ts +69 -0
- package/dist/tools/elements/bind-output-schema.d.ts.map +1 -0
- package/dist/tools/elements/bind-output-schema.js +64 -0
- package/dist/tools/elements/bind-output-schema.js.map +1 -0
- package/dist/tools/elements/builders.d.ts +1 -22
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +171 -133
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/index.d.ts +0 -26
- package/dist/tools/elements/index.d.ts.map +1 -1
- package/dist/tools/elements/index.js +0 -25
- package/dist/tools/elements/index.js.map +1 -1
- package/dist/tools/elements/read-output-schemas.d.ts +121 -0
- package/dist/tools/elements/read-output-schemas.d.ts.map +1 -0
- package/dist/tools/elements/read-output-schemas.js +225 -0
- package/dist/tools/elements/read-output-schemas.js.map +1 -0
- package/dist/tools/elements/write-output-schemas.d.ts +185 -0
- package/dist/tools/elements/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/elements/write-output-schemas.js +98 -0
- package/dist/tools/elements/write-output-schemas.js.map +1 -0
- package/dist/tools/elements.d.ts +0 -11
- package/dist/tools/elements.d.ts.map +1 -1
- package/dist/tools/elements.js +0 -11
- package/dist/tools/elements.js.map +1 -1
- package/dist/tools/format/health-format.d.ts +42 -43
- package/dist/tools/format/health-format.d.ts.map +1 -1
- package/dist/tools/format/health-format.js +32 -55
- package/dist/tools/format/health-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +4 -49
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +46 -114
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts +32 -69
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +115 -133
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/sources-format.d.ts +5 -39
- package/dist/tools/format/sources-format.d.ts.map +1 -1
- package/dist/tools/format/sources-format.js +57 -87
- package/dist/tools/format/sources-format.js.map +1 -1
- package/dist/tools/health-output-schemas.d.ts +82 -0
- package/dist/tools/health-output-schemas.d.ts.map +1 -0
- package/dist/tools/health-output-schemas.js +130 -0
- package/dist/tools/health-output-schemas.js.map +1 -0
- package/dist/tools/health.d.ts +2 -20
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +59 -184
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/index.d.ts +1 -26
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +13 -33
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspection.d.ts +21 -17
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +431 -268
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/library.d.ts +118 -126
- package/dist/tools/library.d.ts.map +1 -1
- package/dist/tools/library.js +723 -456
- package/dist/tools/library.js.map +1 -1
- package/dist/tools/local-content/builders.d.ts +1 -17
- package/dist/tools/local-content/builders.d.ts.map +1 -1
- package/dist/tools/local-content/builders.js +105 -48
- package/dist/tools/local-content/builders.js.map +1 -1
- package/dist/tools/local-content/index.d.ts +0 -15
- package/dist/tools/local-content/index.d.ts.map +1 -1
- package/dist/tools/local-content/index.js +0 -14
- package/dist/tools/local-content/index.js.map +1 -1
- package/dist/tools/local-content/schemas.d.ts +31 -47
- package/dist/tools/local-content/schemas.d.ts.map +1 -1
- package/dist/tools/local-content/schemas.js +33 -62
- package/dist/tools/local-content/schemas.js.map +1 -1
- package/dist/tools/modules/builders.d.ts +4 -0
- package/dist/tools/modules/builders.d.ts.map +1 -0
- package/dist/tools/modules/builders.js +58 -0
- package/dist/tools/modules/builders.js.map +1 -0
- package/dist/tools/modules/index.d.ts +2 -0
- package/dist/tools/modules/index.d.ts.map +1 -0
- package/dist/tools/modules/index.js +2 -0
- package/dist/tools/modules/index.js.map +1 -0
- package/dist/tools/modules/module-id-schema.d.ts +4 -0
- package/dist/tools/modules/module-id-schema.d.ts.map +1 -0
- package/dist/tools/modules/module-id-schema.js +14 -0
- package/dist/tools/modules/module-id-schema.js.map +1 -0
- package/dist/tools/modules/module-type-fields.d.ts +10 -0
- package/dist/tools/modules/module-type-fields.d.ts.map +1 -0
- package/dist/tools/modules/module-type-fields.js +34 -0
- package/dist/tools/modules/module-type-fields.js.map +1 -0
- package/dist/tools/modules/modules-create.d.ts +59 -0
- package/dist/tools/modules/modules-create.d.ts.map +1 -0
- package/dist/tools/modules/modules-create.js +154 -0
- package/dist/tools/modules/modules-create.js.map +1 -0
- package/dist/tools/modules/modules-delete.d.ts +51 -0
- package/dist/tools/modules/modules-delete.d.ts.map +1 -0
- package/dist/tools/modules/modules-delete.js +180 -0
- package/dist/tools/modules/modules-delete.js.map +1 -0
- package/dist/tools/modules/modules-update.d.ts +43 -0
- package/dist/tools/modules/modules-update.d.ts.map +1 -0
- package/dist/tools/modules/modules-update.js +177 -0
- package/dist/tools/modules/modules-update.js.map +1 -0
- package/dist/tools/modules/placement-hints.d.ts +5 -0
- package/dist/tools/modules/placement-hints.d.ts.map +1 -0
- package/dist/tools/modules/placement-hints.js +90 -0
- package/dist/tools/modules/placement-hints.js.map +1 -0
- package/dist/tools/modules/placement-ways.d.ts +13 -0
- package/dist/tools/modules/placement-ways.d.ts.map +1 -0
- package/dist/tools/modules/placement-ways.js +61 -0
- package/dist/tools/modules/placement-ways.js.map +1 -0
- package/dist/tools/multi-items/builders.d.ts +1 -21
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +22 -67
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/index.d.ts +0 -15
- package/dist/tools/multi-items/index.d.ts.map +1 -1
- package/dist/tools/multi-items/index.js +0 -15
- package/dist/tools/multi-items/index.js.map +1 -1
- package/dist/tools/multi-items/item-container-map.d.ts +0 -35
- package/dist/tools/multi-items/item-container-map.d.ts.map +1 -1
- package/dist/tools/multi-items/item-container-map.js +0 -35
- package/dist/tools/multi-items/item-container-map.js.map +1 -1
- package/dist/tools/multi-items/output-schemas.d.ts +101 -0
- package/dist/tools/multi-items/output-schemas.d.ts.map +1 -0
- package/dist/tools/multi-items/output-schemas.js +74 -0
- package/dist/tools/multi-items/output-schemas.js.map +1 -0
- package/dist/tools/navigation/builders.d.ts +3 -0
- package/dist/tools/navigation/builders.d.ts.map +1 -0
- package/dist/tools/navigation/builders.js +25 -0
- package/dist/tools/navigation/builders.js.map +1 -0
- package/dist/tools/navigation/index.d.ts +2 -0
- package/dist/tools/navigation/index.d.ts.map +1 -0
- package/dist/tools/navigation/index.js +2 -0
- package/dist/tools/navigation/index.js.map +1 -0
- package/dist/tools/navigation/schemas.d.ts +16 -0
- package/dist/tools/navigation/schemas.d.ts.map +1 -0
- package/dist/tools/navigation/schemas.js +11 -0
- package/dist/tools/navigation/schemas.js.map +1 -0
- package/dist/tools/output-schema-metadata.d.ts +5 -0
- package/dist/tools/output-schema-metadata.d.ts.map +1 -0
- package/dist/tools/output-schema-metadata.js +83 -0
- package/dist/tools/output-schema-metadata.js.map +1 -0
- package/dist/tools/pages/builders.d.ts +1 -41
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +373 -359
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/header-transparency.d.ts +34 -0
- package/dist/tools/pages/header-transparency.d.ts.map +1 -0
- package/dist/tools/pages/header-transparency.js +85 -0
- package/dist/tools/pages/header-transparency.js.map +1 -0
- package/dist/tools/pages/index.d.ts +1 -19
- package/dist/tools/pages/index.d.ts.map +1 -1
- package/dist/tools/pages/index.js +1 -19
- package/dist/tools/pages/index.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +392 -224
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +605 -458
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/pages/write-output-schemas.d.ts +139 -0
- package/dist/tools/pages/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/pages/write-output-schemas.js +138 -0
- package/dist/tools/pages/write-output-schemas.js.map +1 -0
- package/dist/tools/pages.d.ts +0 -11
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +0 -11
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/pool-resolve-helper.d.ts +0 -52
- package/dist/tools/pool-resolve-helper.d.ts.map +1 -1
- package/dist/tools/pool-resolve-helper.js +29 -104
- package/dist/tools/pool-resolve-helper.js.map +1 -1
- package/dist/tools/progress-phases.d.ts +0 -42
- package/dist/tools/progress-phases.d.ts.map +1 -1
- package/dist/tools/progress-phases.js +0 -44
- package/dist/tools/progress-phases.js.map +1 -1
- package/dist/tools/response-budget.d.ts +8 -0
- package/dist/tools/response-budget.d.ts.map +1 -0
- package/dist/tools/response-budget.js +7 -0
- package/dist/tools/response-budget.js.map +1 -0
- package/dist/tools/shared-schemas.d.ts +12 -43
- package/dist/tools/shared-schemas.d.ts.map +1 -1
- package/dist/tools/shared-schemas.js +42 -97
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/skill/builders.d.ts +3 -0
- package/dist/tools/skill/builders.d.ts.map +1 -0
- package/dist/tools/skill/builders.js +81 -0
- package/dist/tools/skill/builders.js.map +1 -0
- package/dist/tools/sources/builders.d.ts +1 -11
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +195 -173
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/index.d.ts +0 -17
- package/dist/tools/sources/index.d.ts.map +1 -1
- package/dist/tools/sources/index.js +0 -16
- package/dist/tools/sources/index.js.map +1 -1
- package/dist/tools/sources/read-output-schemas.d.ts +101 -0
- package/dist/tools/sources/read-output-schemas.d.ts.map +1 -0
- package/dist/tools/sources/read-output-schemas.js +105 -0
- package/dist/tools/sources/read-output-schemas.js.map +1 -0
- package/dist/tools/sources/source-name-argument.d.ts +17 -0
- package/dist/tools/sources/source-name-argument.d.ts.map +1 -0
- package/dist/tools/sources/source-name-argument.js +64 -0
- package/dist/tools/sources/source-name-argument.js.map +1 -0
- package/dist/tools/sources/write-output-schemas.d.ts +100 -0
- package/dist/tools/sources/write-output-schemas.d.ts.map +1 -0
- package/dist/tools/sources/write-output-schemas.js +61 -0
- package/dist/tools/sources/write-output-schemas.js.map +1 -0
- package/dist/tools/sources.d.ts +0 -12
- package/dist/tools/sources.d.ts.map +1 -1
- package/dist/tools/sources.js +0 -12
- package/dist/tools/sources.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +19 -194
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +212 -196
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/strict-input.d.ts +5 -0
- package/dist/tools/strict-input.d.ts.map +1 -0
- package/dist/tools/strict-input.js +55 -0
- package/dist/tools/strict-input.js.map +1 -0
- package/dist/tools/sublayout/builders.d.ts +1 -21
- package/dist/tools/sublayout/builders.d.ts.map +1 -1
- package/dist/tools/sublayout/builders.js +10 -40
- package/dist/tools/sublayout/builders.js.map +1 -1
- package/dist/tools/sublayout/index.d.ts +1 -11
- package/dist/tools/sublayout/index.d.ts.map +1 -1
- package/dist/tools/sublayout/index.js +1 -11
- package/dist/tools/sublayout/index.js.map +1 -1
- package/dist/tools/sublayout/output-schemas.d.ts +57 -0
- package/dist/tools/sublayout/output-schemas.d.ts.map +1 -0
- package/dist/tools/sublayout/output-schemas.js +51 -0
- package/dist/tools/sublayout/output-schemas.js.map +1 -0
- package/dist/tools/tool-builder/annotations.d.ts +1 -49
- package/dist/tools/tool-builder/annotations.d.ts.map +1 -1
- package/dist/tools/tool-builder/annotations.js +9 -49
- package/dist/tools/tool-builder/annotations.js.map +1 -1
- package/dist/tools/tool-builder/confirm-preview.d.ts +24 -0
- package/dist/tools/tool-builder/confirm-preview.d.ts.map +1 -0
- package/dist/tools/tool-builder/confirm-preview.js +37 -0
- package/dist/tools/tool-builder/confirm-preview.js.map +1 -0
- package/dist/tools/tool-builder/define.d.ts +6 -26
- package/dist/tools/tool-builder/define.d.ts.map +1 -1
- package/dist/tools/tool-builder/define.js +0 -25
- package/dist/tools/tool-builder/define.js.map +1 -1
- package/dist/tools/tool-builder/index.d.ts +3 -26
- package/dist/tools/tool-builder/index.d.ts.map +1 -1
- package/dist/tools/tool-builder/index.js +2 -25
- package/dist/tools/tool-builder/index.js.map +1 -1
- package/dist/tools/tool-builder/results.d.ts +4 -111
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +258 -250
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/dist/tools/tool-builder/types.d.ts +5 -59
- package/dist/tools/tool-builder/types.d.ts.map +1 -1
- package/dist/tools/tool-builder/types.js +0 -7
- package/dist/tools/tool-builder/types.js.map +1 -1
- package/dist/tools/tool-builder.d.ts +0 -14
- package/dist/tools/tool-builder.d.ts.map +1 -1
- package/dist/tools/tool-builder.js +0 -14
- package/dist/tools/tool-builder.js.map +1 -1
- package/dist/uninstall-skill.d.ts +0 -41
- package/dist/uninstall-skill.d.ts.map +1 -1
- package/dist/uninstall-skill.js +0 -49
- package/dist/uninstall-skill.js.map +1 -1
- package/dist/uninstall.d.ts +0 -41
- package/dist/uninstall.d.ts.map +1 -1
- package/dist/uninstall.js +1 -29
- package/dist/uninstall.js.map +1 -1
- package/dist/update/update-check.d.ts +0 -26
- package/dist/update/update-check.d.ts.map +1 -1
- package/dist/update/update-check.js +0 -25
- package/dist/update/update-check.js.map +1 -1
- package/manifest.json +4 -5
- package/package.json +5 -5
- package/skills/yt-builder-mcp/SKILL.md +2958 -382
- package/dist/tools/elements/handlers-write.d.ts +0 -70
- package/dist/tools/elements/handlers-write.d.ts.map +0 -1
- package/dist/tools/elements/handlers-write.js +0 -700
- package/dist/tools/elements/handlers-write.js.map +0 -1
- package/dist/tools/elements/handlers.d.ts +0 -125
- package/dist/tools/elements/handlers.d.ts.map +0 -1
- package/dist/tools/elements/handlers.js +0 -571
- package/dist/tools/elements/handlers.js.map +0 -1
- package/dist/tools/elements/layout-hierarchy-rules.d.ts +0 -62
- package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +0 -1
- package/dist/tools/elements/layout-hierarchy-rules.js +0 -154
- package/dist/tools/elements/layout-hierarchy-rules.js.map +0 -1
- package/dist/tools/elements/schema-validation.d.ts +0 -96
- package/dist/tools/elements/schema-validation.d.ts.map +0 -1
- package/dist/tools/elements/schema-validation.js +0 -249
- package/dist/tools/elements/schema-validation.js.map +0 -1
- package/dist/tools/elicitation.d.ts +0 -87
- package/dist/tools/elicitation.d.ts.map +0 -1
- package/dist/tools/elicitation.js +0 -100
- package/dist/tools/elicitation.js.map +0 -1
- package/dist/tools/format/elements-format.d.ts +0 -75
- package/dist/tools/format/elements-format.d.ts.map +0 -1
- package/dist/tools/format/elements-format.js +0 -324
- package/dist/tools/format/elements-format.js.map +0 -1
- package/dist/tools/format/source-schema-format.d.ts +0 -74
- package/dist/tools/format/source-schema-format.d.ts.map +0 -1
- package/dist/tools/format/source-schema-format.js +0 -208
- package/dist/tools/format/source-schema-format.js.map +0 -1
- package/dist/tools/layout-flatten.d.ts +0 -84
- package/dist/tools/layout-flatten.d.ts.map +0 -1
- package/dist/tools/layout-flatten.js +0 -129
- package/dist/tools/layout-flatten.js.map +0 -1
- package/dist/tools/local-content/handlers.d.ts +0 -54
- package/dist/tools/local-content/handlers.d.ts.map +0 -1
- package/dist/tools/local-content/handlers.js +0 -316
- package/dist/tools/local-content/handlers.js.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.d.ts +0 -37
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/clean-implode-handler.js +0 -65
- package/dist/tools/multi-items/clean-implode-handler.js.map +0 -1
- package/dist/tools/multi-items/format/inspection-format.d.ts +0 -41
- package/dist/tools/multi-items/format/inspection-format.d.ts.map +0 -1
- package/dist/tools/multi-items/format/inspection-format.js +0 -64
- package/dist/tools/multi-items/format/inspection-format.js.map +0 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +0 -97
- package/dist/tools/multi-items/inspect-handler.d.ts.map +0 -1
- package/dist/tools/multi-items/inspect-handler.js +0 -323
- package/dist/tools/multi-items/inspect-handler.js.map +0 -1
- package/dist/tools/multi-items/inspection-cache.d.ts +0 -85
- package/dist/tools/multi-items/inspection-cache.d.ts.map +0 -1
- package/dist/tools/multi-items/inspection-cache.js +0 -126
- package/dist/tools/multi-items/inspection-cache.js.map +0 -1
- package/dist/tools/pages/handlers-audit.d.ts +0 -129
- package/dist/tools/pages/handlers-audit.d.ts.map +0 -1
- package/dist/tools/pages/handlers-audit.js +0 -704
- package/dist/tools/pages/handlers-audit.js.map +0 -1
- package/dist/tools/pages/handlers-read.d.ts +0 -95
- package/dist/tools/pages/handlers-read.d.ts.map +0 -1
- package/dist/tools/pages/handlers-read.js +0 -929
- package/dist/tools/pages/handlers-read.js.map +0 -1
- package/dist/tools/pages/handlers-write.d.ts +0 -212
- package/dist/tools/pages/handlers-write.d.ts.map +0 -1
- package/dist/tools/pages/handlers-write.js +0 -418
- package/dist/tools/pages/handlers-write.js.map +0 -1
- package/dist/tools/pages/target.d.ts +0 -162
- package/dist/tools/pages/target.d.ts.map +0 -1
- package/dist/tools/pages/target.js +0 -239
- package/dist/tools/pages/target.js.map +0 -1
- package/dist/tools/sources/handlers-bind.d.ts +0 -148
- package/dist/tools/sources/handlers-bind.d.ts.map +0 -1
- package/dist/tools/sources/handlers-bind.js +0 -655
- package/dist/tools/sources/handlers-bind.js.map +0 -1
- package/dist/tools/sources/handlers.d.ts +0 -114
- package/dist/tools/sources/handlers.d.ts.map +0 -1
- package/dist/tools/sources/handlers.js +0 -285
- package/dist/tools/sources/handlers.js.map +0 -1
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +0 -95
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +0 -1
- package/dist/tools/sublayout/inspect-sublayout-handler.js +0 -181
- package/dist/tools/sublayout/inspect-sublayout-handler.js.map +0 -1
|
@@ -1,700 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Element-tool write handlers (add/update/move/clone/delete).
|
|
3
|
-
*
|
|
4
|
-
* Wave G.4.0 split: read handlers + shared types in `./handlers.ts`.
|
|
5
|
-
* Wave G.4.1: `handleElementDelete` consults `deps.elicitation` when
|
|
6
|
-
* `confirm` is undefined — falls back to the explicit preview when
|
|
7
|
-
* elicitation is unavailable.
|
|
8
|
-
* Wave G.5: every handler emits 2-phase client-side progress
|
|
9
|
-
* (`PHASE_SEND` → `PHASE_CONFIRM`) when the caller supplied a
|
|
10
|
-
* `progressToken` — see `../progress-phases.ts` for the contract.
|
|
11
|
-
*
|
|
12
|
-
* @license MIT
|
|
13
|
-
*/
|
|
14
|
-
import { elicitConfirmation } from '@getimo/mcp-toolkit';
|
|
15
|
-
import { encodeElementPath, encodeTemplateId } from '../../client.js';
|
|
16
|
-
import { RestError } from '../../errors.js';
|
|
17
|
-
import { BIND_VIA_GATEWAY_EXAMPLE, BIND_VIA_GATEWAY_HINT } from '../bind-guidance.js';
|
|
18
|
-
import { PHASE_CONFIRM, PHASE_SEND } from '../progress-phases.js';
|
|
19
|
-
import { confirmGuard, createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
|
|
20
|
-
import { validatePropsAgainstLiveSchema } from './schema-validation.js';
|
|
21
|
-
// ─── Wave-7 (2026-05-29): props validation ──────────────────────────
|
|
22
|
-
//
|
|
23
|
-
// Cold-AI #5 hand-authored `props.source` / `props.source_extended` via
|
|
24
|
-
// element_update_settings({props:{source}}). YT-Pro's render-side then
|
|
25
|
-
// silently ignored the binding because `source` is not a leaf prop — it
|
|
26
|
-
// lives as a SIBLING of `props` on the element node. The agent had no
|
|
27
|
-
// signal that the call was a no-op until visual verification failed.
|
|
28
|
-
//
|
|
29
|
-
// These keys MUST go through yootheme_builder_element_bind_source (which
|
|
30
|
-
// writes them at the correct nesting level). Reject hand-authored attempts
|
|
31
|
-
// up-front so the agent gets a structured error instead of a silent broken
|
|
32
|
-
// render.
|
|
33
|
-
const RESERVED_BINDING_KEYS = new Set([
|
|
34
|
-
'source',
|
|
35
|
-
'source_extended',
|
|
36
|
-
// YT-Pro UI-only placeholders that customers paste from
|
|
37
|
-
// Inspect/Copy in the visual builder. They never resolve outside the
|
|
38
|
-
// builder runtime so they're useless inside a stored layout.
|
|
39
|
-
'source_node',
|
|
40
|
-
]);
|
|
41
|
-
// Wave-7 (2026-05-29): common cold-AI prop-key typos. The PHP backend
|
|
42
|
-
// silently drops unknown props, so a typo like `title` on a headline (real
|
|
43
|
-
// key is `content`) renders an empty headline. We surface a fix suggestion
|
|
44
|
-
// up-front for the small fixed set of high-frequency mistakes.
|
|
45
|
-
//
|
|
46
|
-
// Format: typo → { element_type → canonical_key }
|
|
47
|
-
// element_type === '*' applies to any element where the typo is known to be
|
|
48
|
-
// a typo on every type that has it.
|
|
49
|
-
const COMMON_PROP_TYPOS = {
|
|
50
|
-
title: {
|
|
51
|
-
headline: 'content',
|
|
52
|
-
subtitle: 'content',
|
|
53
|
-
text: 'content',
|
|
54
|
-
quote: 'content',
|
|
55
|
-
button_item: 'content',
|
|
56
|
-
// Wave-9 F9 (cold-AI #8): `button` accepts `content` at runtime
|
|
57
|
-
// even though the UI-tab fieldset omits it (see
|
|
58
|
-
// Inspector::knownAcceptedButHiddenFields). `title` is the most
|
|
59
|
-
// common cold-AI typo for the button label.
|
|
60
|
-
button: 'content',
|
|
61
|
-
},
|
|
62
|
-
text: {
|
|
63
|
-
headline: 'content',
|
|
64
|
-
text: 'content',
|
|
65
|
-
quote: 'content',
|
|
66
|
-
// Wave-9 F9: same rationale as `title` above — agents reading
|
|
67
|
-
// documentation often type `text` for the button label.
|
|
68
|
-
button: 'content',
|
|
69
|
-
},
|
|
70
|
-
label: {
|
|
71
|
-
button_item: 'content',
|
|
72
|
-
// Wave-9 F9: `label` is a common cold-AI alias for button text.
|
|
73
|
-
button: 'content',
|
|
74
|
-
},
|
|
75
|
-
url: {
|
|
76
|
-
button_item: 'link',
|
|
77
|
-
// Wave-9 F9 (cold-AI #8): `button` accepts `link` at runtime.
|
|
78
|
-
button: 'link',
|
|
79
|
-
},
|
|
80
|
-
href: {
|
|
81
|
-
// Wave-9 F9: HTML-native authors reach for `href` first.
|
|
82
|
-
button_item: 'link',
|
|
83
|
-
button: 'link',
|
|
84
|
-
},
|
|
85
|
-
button_text: {
|
|
86
|
-
button_item: 'content',
|
|
87
|
-
button: 'content',
|
|
88
|
-
},
|
|
89
|
-
button_link: {
|
|
90
|
-
button_item: 'link',
|
|
91
|
-
button: 'link',
|
|
92
|
-
},
|
|
93
|
-
style: {
|
|
94
|
-
button_item: 'button_style',
|
|
95
|
-
},
|
|
96
|
-
size: {
|
|
97
|
-
button_item: 'button_size',
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
function detectPropTypos(props, elementType) {
|
|
101
|
-
if (props === undefined || props === null)
|
|
102
|
-
return [];
|
|
103
|
-
const findings = [];
|
|
104
|
-
for (const key of Object.keys(props)) {
|
|
105
|
-
const map = COMMON_PROP_TYPOS[key];
|
|
106
|
-
if (map === undefined)
|
|
107
|
-
continue;
|
|
108
|
-
const suggested = map[elementType];
|
|
109
|
-
if (suggested !== undefined) {
|
|
110
|
-
findings.push({ typo: key, suggested });
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return findings;
|
|
114
|
-
}
|
|
115
|
-
function rejectOnPropTypos(props, elementType) {
|
|
116
|
-
const findings = detectPropTypos(props, elementType);
|
|
117
|
-
if (findings.length === 0)
|
|
118
|
-
return null;
|
|
119
|
-
// F14 (2026-06-09): name the CANONICAL prop explicitly + imperatively
|
|
120
|
-
// (`use \`content\` instead of \`title\``) rather than only posing it
|
|
121
|
-
// as a question. A cold agent that hit `element_add headline {title}`
|
|
122
|
-
// got the element rendered empty because YT-Pro silently drops the
|
|
123
|
-
// unknown alias; the error must state the right key so the agent can
|
|
124
|
-
// self-correct in one step without a schema round-trip.
|
|
125
|
-
const summary = findings
|
|
126
|
-
.map((f) => `use \`${f.suggested}\` instead of \`${f.typo}\``)
|
|
127
|
-
.join('; ');
|
|
128
|
-
// Lead with the single most-likely fix so the canonical key is the
|
|
129
|
-
// first concrete token the agent reads.
|
|
130
|
-
const primary = findings[0];
|
|
131
|
-
const rename = primary !== undefined
|
|
132
|
-
? `Rename \`${primary.typo}\` → \`${primary.suggested}\`. `
|
|
133
|
-
: '';
|
|
134
|
-
return errorResult({
|
|
135
|
-
error: new Error(`Unknown prop(s) for element type \`${elementType}\`: ${summary}. ` +
|
|
136
|
-
rename +
|
|
137
|
-
'YT-Pro silently drops unknown props server-side, so the element would render empty. ' +
|
|
138
|
-
'Call yootheme_builder_element_type_get_schema to see the canonical prop keys.'),
|
|
139
|
-
context: {
|
|
140
|
-
element_type: elementType,
|
|
141
|
-
findings,
|
|
142
|
-
},
|
|
143
|
-
hint: `Re-try with the canonical key (e.g. \`${primary?.suggested ?? 'content'}\`), ` +
|
|
144
|
-
'or fetch the schema first: ' +
|
|
145
|
-
`yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
function validatePropsForReservedKeys(props, elementType) {
|
|
149
|
-
if (props === undefined || props === null)
|
|
150
|
-
return null;
|
|
151
|
-
const offending = [];
|
|
152
|
-
for (const key of Object.keys(props)) {
|
|
153
|
-
if (RESERVED_BINDING_KEYS.has(key)) {
|
|
154
|
-
offending.push(key);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (offending.length === 0)
|
|
158
|
-
return null;
|
|
159
|
-
return errorResult({
|
|
160
|
-
error: new Error(`Reserved binding key(s) ${offending
|
|
161
|
-
.map((k) => `\`${k}\``)
|
|
162
|
-
.join(', ')} are NOT valid props for element type \`${elementType}\`. ` +
|
|
163
|
-
`Source binding lives as a SIBLING of \`props\` on the element node, ` +
|
|
164
|
-
`NOT nested inside props. Set the source via the gateway: ` +
|
|
165
|
-
`${BIND_VIA_GATEWAY_EXAMPLE} — it writes the binding at the correct ` +
|
|
166
|
-
`nesting level (the bind tool is advanced, not in tools/list). ` +
|
|
167
|
-
`For per-prop leaf bindings (headline.content, etc.) pass the prop name ` +
|
|
168
|
-
`inside the \`field_mappings\` argument of that same call. ` +
|
|
169
|
-
// F97 (2026-06-10): a FILTERED prop (e.g. a `_condition` that
|
|
170
|
-
// renders a row only when a field is non-empty) is the most
|
|
171
|
-
// common reason an agent reaches for a raw `source` here. The
|
|
172
|
-
// theme-canonical, validated path is the field_mappings OBJECT
|
|
173
|
-
// form on element_bind_source — name it so the agent never has
|
|
174
|
-
// to hand-author a dead `source` blob nor build pre-filtered
|
|
175
|
-
// flows as a workaround.
|
|
176
|
-
`For a FILTERED prop (e.g. a \`_condition\` that shows a row only when a ` +
|
|
177
|
-
`field is set) use the field_mappings OBJECT form: ` +
|
|
178
|
-
`field_mappings: { _condition: { name: "<field>", filters: { condition: "!!" } } } ` +
|
|
179
|
-
`(\`"!!"\` = render only when non-empty, \`"!"\` = only when empty; a bare ` +
|
|
180
|
-
`_condition with no filters operator renders ALWAYS). Date-format leaves use ` +
|
|
181
|
-
`{ name: "<field>", filters: { date: "D, d.m.y" } }.`),
|
|
182
|
-
context: { element_type: elementType, offending_keys: offending },
|
|
183
|
-
hint: 'Run yootheme_builder_element_type_get_schema to see the binding contract ' +
|
|
184
|
-
`(do_not section lists this anti-pattern). Then ${BIND_VIA_GATEWAY_HINT} ` +
|
|
185
|
-
'For filtered props pass the field_mappings object form ' +
|
|
186
|
-
'({ <prop>: { name, filters } }) on element_bind_source.',
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
// ─── children-tree guard (F132, Wave 4a) ─────────────────────────────
|
|
190
|
-
//
|
|
191
|
-
// `element_add` accepts a `children` array of arbitrary element objects.
|
|
192
|
-
// Before Wave 4a only the top-level `props` were validated, so a cold agent
|
|
193
|
-
// building a grid+grid_item tree in ONE element_add could smuggle the exact
|
|
194
|
-
// forbidden shapes through the children:
|
|
195
|
-
//
|
|
196
|
-
// children: [{ type:'grid_item', source:{query:…}, props:{title:…} }]
|
|
197
|
-
//
|
|
198
|
-
// `source` is a SIBLING of `props` on YT-Pro element nodes; hand-authoring it
|
|
199
|
-
// (or `source_extended` / `source_node`) never resolves in a stored layout —
|
|
200
|
-
// the render silently produces 0 rows while element_add returns success. The
|
|
201
|
-
// same applies to per-prop typos (`title` on a headline → empty headline).
|
|
202
|
-
//
|
|
203
|
-
// This walks the whole children subtree and applies the SAME two guards that
|
|
204
|
-
// protect top-level props, plus a sibling-`source` rejection per node.
|
|
205
|
-
function elementTypeOfChild(node) {
|
|
206
|
-
const t = node.type;
|
|
207
|
-
if (typeof t === 'string' && t !== '')
|
|
208
|
-
return t;
|
|
209
|
-
const et = node.element_type;
|
|
210
|
-
if (typeof et === 'string' && et !== '')
|
|
211
|
-
return et;
|
|
212
|
-
return '<child>';
|
|
213
|
-
}
|
|
214
|
-
function rejectSourceSiblingOnChild(node, elementType) {
|
|
215
|
-
const offending = [...RESERVED_BINDING_KEYS].filter((k) => k in node);
|
|
216
|
-
if (offending.length === 0)
|
|
217
|
-
return null;
|
|
218
|
-
return errorResult({
|
|
219
|
-
error: new Error(`Hand-authored binding key(s) ${offending
|
|
220
|
-
.map((k) => `\`${k}\``)
|
|
221
|
-
.join(', ')} found on a \`children\` node (element type \`${elementType}\`). ` +
|
|
222
|
-
`A source binding must NOT be hand-authored inside an element_add tree — ` +
|
|
223
|
-
`the stored layout silently renders 0 rows. Add the bare container/child ` +
|
|
224
|
-
`structure first, then bind with \`yootheme_builder_element_bind_source\`, ` +
|
|
225
|
-
`which writes the binding at the correct nesting level.`),
|
|
226
|
-
context: { element_type: elementType, offending_keys: offending },
|
|
227
|
-
hint: 'Remove `source` / `source_extended` / `source_node` from the children tree. ' +
|
|
228
|
-
'Build the structure, then call yootheme_builder_element_bind_source. See ' +
|
|
229
|
-
'yootheme_builder_element_type_get_schema (do_not section).',
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Recursively validate a `children` array: each node's own `props` is run
|
|
234
|
-
* through the reserved-key + prop-typo guards, the node itself is checked
|
|
235
|
-
* for a hand-authored `source` sibling, and nested `children` recurse.
|
|
236
|
-
* Returns the FIRST rejection found, or null when the whole tree is clean.
|
|
237
|
-
*/
|
|
238
|
-
function validateChildrenTree(children) {
|
|
239
|
-
if (!Array.isArray(children))
|
|
240
|
-
return null;
|
|
241
|
-
for (const raw of children) {
|
|
242
|
-
if (raw === null || typeof raw !== 'object')
|
|
243
|
-
continue;
|
|
244
|
-
const node = raw;
|
|
245
|
-
const elementType = elementTypeOfChild(node);
|
|
246
|
-
const sourceRejection = rejectSourceSiblingOnChild(node, elementType);
|
|
247
|
-
if (sourceRejection !== null)
|
|
248
|
-
return sourceRejection;
|
|
249
|
-
const props = node.props !== null && typeof node.props === 'object'
|
|
250
|
-
? node.props
|
|
251
|
-
: undefined;
|
|
252
|
-
const propsRejection = validatePropsForReservedKeys(props, elementType);
|
|
253
|
-
if (propsRejection !== null)
|
|
254
|
-
return propsRejection;
|
|
255
|
-
const typoRejection = rejectOnPropTypos(props, elementType);
|
|
256
|
-
if (typoRejection !== null)
|
|
257
|
-
return typoRejection;
|
|
258
|
-
const nested = validateChildrenTree(node.children);
|
|
259
|
-
if (nested !== null)
|
|
260
|
-
return nested;
|
|
261
|
-
}
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* ELEMENT_WRITE-12 — status/code-aware catch hint for `element_add`.
|
|
266
|
-
*
|
|
267
|
-
* The former hint was a single static string mentioning 412 + 400 for EVERY
|
|
268
|
-
* failure. The actual high-frequency failure is a 422
|
|
269
|
-
* `…elements.invalid_hierarchy` (e.g. adding a `row` at the layout root) — which
|
|
270
|
-
* is neither 412 nor 400, and whose real fix (scaffold_section) went unnamed.
|
|
271
|
-
* Inspect the RestError and emit the fix that matches the failure.
|
|
272
|
-
*/
|
|
273
|
-
function elementAddHint(e) {
|
|
274
|
-
if (e instanceof RestError) {
|
|
275
|
-
const code = e.code ?? '';
|
|
276
|
-
if (e.status === 422 && code.includes('invalid_hierarchy')) {
|
|
277
|
-
return ('invalid_hierarchy: this element type cannot be added at that parent ' +
|
|
278
|
-
'(e.g. a row/column at the layout root). Call ' +
|
|
279
|
-
'yootheme_builder_scaffold_section({ template_id, columns }) to create a ' +
|
|
280
|
-
'valid section→row→column hull, then pass a returned column path as ' +
|
|
281
|
-
'parent_path.');
|
|
282
|
-
}
|
|
283
|
-
if (e.status === 412) {
|
|
284
|
-
return 'On 412 refresh via yootheme_builder_get_etag and retry.';
|
|
285
|
-
}
|
|
286
|
-
if (e.status === 400) {
|
|
287
|
-
return 'On 400 check `element_type` is valid via yootheme_builder_element_types_list.';
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return ('On 412 refresh via yootheme_builder_get_etag and retry. On 400 check ' +
|
|
291
|
-
'`element_type` is valid via yootheme_builder_element_types_list. On 422 ' +
|
|
292
|
-
'invalid_hierarchy scaffold a section→row→column hull first with ' +
|
|
293
|
-
'yootheme_builder_scaffold_section and add into a returned column path.');
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* ELEMENT_WRITE-12 — status/code-aware catch hint for `element_update_settings`.
|
|
297
|
-
* A 422 invalid-value (a prop value the element rejects) is NOT fixed by
|
|
298
|
-
* `merge:true`, so the merge advice only rides on the non-422 path.
|
|
299
|
-
*/
|
|
300
|
-
function elementUpdateHint(e) {
|
|
301
|
-
if (e instanceof RestError && e.status === 422) {
|
|
302
|
-
return ('On 422 a prop VALUE was rejected by the element (invalid enum / type). ' +
|
|
303
|
-
'Fetch the accepted values with yootheme_builder_element_type_get_schema ' +
|
|
304
|
-
'(read each field\'s value_hint/enum) and resend a valid value — ' +
|
|
305
|
-
'`merge:true` does NOT fix an invalid value.');
|
|
306
|
-
}
|
|
307
|
-
return ('On 412 refresh via yootheme_builder_get_etag and retry. To merge ' +
|
|
308
|
-
'props instead of replacing, pass `merge:true` (server deep-merges ' +
|
|
309
|
-
'the request into current props).');
|
|
310
|
-
}
|
|
311
|
-
// ─── element_add ─────────────────────────────────────────────────────
|
|
312
|
-
export async function handleElementAdd({ client }, input, extra) {
|
|
313
|
-
// Union of F165 (type_name → element_type alias) and F70 (position →
|
|
314
|
-
// index alias). Both aliases are folded onto their canonical keys and
|
|
315
|
-
// stripped so they never leak into the REST body. The canonical key
|
|
316
|
-
// wins when both are supplied.
|
|
317
|
-
const { template_id, etag, type_name, index, position, ...rest } = input;
|
|
318
|
-
const elementType = typeof rest.element_type === 'string' && rest.element_type !== ''
|
|
319
|
-
? rest.element_type
|
|
320
|
-
: typeof type_name === 'string'
|
|
321
|
-
? type_name
|
|
322
|
-
: '';
|
|
323
|
-
if (elementType === '') {
|
|
324
|
-
return errorResult({
|
|
325
|
-
error: new Error('element_type is required.'),
|
|
326
|
-
context: { template_id },
|
|
327
|
-
hint: 'Provide `element_type` (e.g. "grid"; `type_name` is accepted as an ' +
|
|
328
|
-
'alias). Use yootheme_builder_element_types_list for the catalogue.',
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
// F70: index wins over the position alias; absent → body carries no
|
|
332
|
-
// index (server appends), preserving the historical append request.
|
|
333
|
-
const resolvedIndex = index ?? position;
|
|
334
|
-
const body = {
|
|
335
|
-
parent_path: typeof rest.parent_path === 'string' ? rest.parent_path : '',
|
|
336
|
-
element_type: elementType,
|
|
337
|
-
// ELEMENT_WRITE-4 (part 2): the first-class builder name → node-level
|
|
338
|
-
// `name`. Only forwarded when a non-empty string so an omitted/blank
|
|
339
|
-
// value leaves the server default (an unnamed node) untouched.
|
|
340
|
-
...(typeof rest.name === 'string' && rest.name !== '' ? { name: rest.name } : {}),
|
|
341
|
-
...(rest.props !== undefined ? { props: rest.props } : {}),
|
|
342
|
-
...(rest.children !== undefined ? { children: rest.children } : {}),
|
|
343
|
-
...(resolvedIndex !== undefined ? { index: resolvedIndex } : {}),
|
|
344
|
-
};
|
|
345
|
-
// Wave-7: guard against hand-authored source/source_extended in props.
|
|
346
|
-
const propsRejection = validatePropsForReservedKeys(input.props, elementType);
|
|
347
|
-
if (propsRejection !== null)
|
|
348
|
-
return propsRejection;
|
|
349
|
-
// Wave-7: guard against common prop-key typos (title→content etc.).
|
|
350
|
-
const typoRejection = rejectOnPropTypos(input.props, elementType);
|
|
351
|
-
if (typoRejection !== null)
|
|
352
|
-
return typoRejection;
|
|
353
|
-
// F132 (Wave 4a): the same guards must reach the `children` subtree —
|
|
354
|
-
// otherwise a single element_add can smuggle a forbidden source/typo
|
|
355
|
-
// through a nested child and silently render 0 rows.
|
|
356
|
-
const childrenRejection = validateChildrenTree(input.children);
|
|
357
|
-
if (childrenRejection !== null)
|
|
358
|
-
return childrenRejection;
|
|
359
|
-
// B3 (2026-06-29): live-schema cross-check. The static guards above catch a
|
|
360
|
-
// fixed set of known mistakes; this rejects ANY top-level prop key absent
|
|
361
|
-
// from the element-type's real schema (fields[].name) — the silent-drop
|
|
362
|
-
// class the static map cannot enumerate. Best-effort: a schema fetch
|
|
363
|
-
// failure / unknown shape / empty field list never breaks the write
|
|
364
|
-
// (additive-before-breaking; the plugin is live 1.6.x).
|
|
365
|
-
const liveSchemaRejection = await validatePropsAgainstLiveSchema({
|
|
366
|
-
client,
|
|
367
|
-
elementType,
|
|
368
|
-
props: input.props,
|
|
369
|
-
reservedKeys: RESERVED_BINDING_KEYS,
|
|
370
|
-
});
|
|
371
|
-
if (liveSchemaRejection !== null)
|
|
372
|
-
return liveSchemaRejection;
|
|
373
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
374
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
375
|
-
try {
|
|
376
|
-
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements`, { body, etag });
|
|
377
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
378
|
-
return jsonResult(data);
|
|
379
|
-
}
|
|
380
|
-
catch (e) {
|
|
381
|
-
return errorResult({
|
|
382
|
-
error: e,
|
|
383
|
-
context: input,
|
|
384
|
-
hint: elementAddHint(e),
|
|
385
|
-
});
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
// ─── scaffold_section (WF2 Option C) ─────────────────────────────────
|
|
389
|
-
/**
|
|
390
|
-
* `scaffold_section` — POST /pages/{template_id}/elements/scaffold-section.
|
|
391
|
-
*
|
|
392
|
-
* Create a VALID `section → row → column` hull (optionally N columns) in ONE
|
|
393
|
-
* atomic call and return the column pointer(s) to drop content into. This is
|
|
394
|
-
* the positive-steering counterpart to the server-side hierarchy guard: it
|
|
395
|
-
* makes the correct structure the cheapest path, so the guard rarely fires.
|
|
396
|
-
* The whole hull lands in a single server-side transaction (one ETag bump).
|
|
397
|
-
*/
|
|
398
|
-
export async function handleScaffoldSection({ client }, input, extra) {
|
|
399
|
-
const { template_id, columns, column_widths, etag } = input;
|
|
400
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
401
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
402
|
-
try {
|
|
403
|
-
const body = {};
|
|
404
|
-
if (columns !== undefined) {
|
|
405
|
-
body.columns = columns;
|
|
406
|
-
}
|
|
407
|
-
if (column_widths !== undefined) {
|
|
408
|
-
body.column_widths = column_widths;
|
|
409
|
-
}
|
|
410
|
-
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements/scaffold-section`, { body, etag });
|
|
411
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
412
|
-
return jsonResult(data);
|
|
413
|
-
}
|
|
414
|
-
catch (e) {
|
|
415
|
-
return errorResult({
|
|
416
|
-
error: e,
|
|
417
|
-
context: { template_id, columns, column_widths },
|
|
418
|
-
hint: 'On 412 refresh via yootheme_builder_get_etag and retry. The response ' +
|
|
419
|
-
'`column_paths` are valid parents for yootheme_builder_element_add — ' +
|
|
420
|
-
'drop your content elements into those columns.',
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
// ─── element_update_settings ─────────────────────────────────────────
|
|
425
|
-
/**
|
|
426
|
-
* B3 — best-effort element-type discovery for `element_update_settings`, which
|
|
427
|
-
* carries no `element_type` input. Reads the element and returns its type, or
|
|
428
|
-
* `null` on ANY failure (so the live-schema check simply does not run). Mirrors
|
|
429
|
-
* the type extraction in `handleElementGet` (`element_type`, then `type`).
|
|
430
|
-
*/
|
|
431
|
-
async function discoverElementType(client, template_id, element_path) {
|
|
432
|
-
try {
|
|
433
|
-
const data = await client.get(`/pages/${encodeTemplateId(template_id)}/elements/${encodeElementPath(element_path)}`);
|
|
434
|
-
if (typeof data.element_type === 'string' && data.element_type !== '') {
|
|
435
|
-
return data.element_type;
|
|
436
|
-
}
|
|
437
|
-
if (typeof data.type === 'string' && data.type !== '') {
|
|
438
|
-
return data.type;
|
|
439
|
-
}
|
|
440
|
-
return null;
|
|
441
|
-
}
|
|
442
|
-
catch {
|
|
443
|
-
return null;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
export async function handleElementUpdateSettings({ client }, input, extra) {
|
|
447
|
-
const { template_id, element_path, props, name, merge, unset, etag } = input;
|
|
448
|
-
// Wave-7: guard against hand-authored source/source_extended in props.
|
|
449
|
-
// element_path is the only identity we have at this layer; the agent gets
|
|
450
|
-
// a clear message anyway because the offending key is named explicitly.
|
|
451
|
-
const propsRejection = validatePropsForReservedKeys(props, `<at ${element_path}>`);
|
|
452
|
-
if (propsRejection !== null)
|
|
453
|
-
return propsRejection;
|
|
454
|
-
// B3 (2026-06-29): live-schema cross-check. This handler has no
|
|
455
|
-
// `element_type` input, so discover it best-effort via the element read,
|
|
456
|
-
// then validate props against the real schema. ANY failure (type
|
|
457
|
-
// undiscoverable, schema fetch error, empty field list) falls through to
|
|
458
|
-
// the prior behaviour — the write is never broken by the probe. Skipped
|
|
459
|
-
// when there are no props to validate so a no-op update stays a single call.
|
|
460
|
-
if (props !== null && typeof props === 'object' && Object.keys(props).length > 0) {
|
|
461
|
-
const discoveredType = await discoverElementType(client, template_id, element_path);
|
|
462
|
-
if (discoveredType !== null) {
|
|
463
|
-
const liveSchemaRejection = await validatePropsAgainstLiveSchema({
|
|
464
|
-
client,
|
|
465
|
-
elementType: discoveredType,
|
|
466
|
-
props,
|
|
467
|
-
reservedKeys: RESERVED_BINDING_KEYS,
|
|
468
|
-
});
|
|
469
|
-
if (liveSchemaRejection !== null)
|
|
470
|
-
return liveSchemaRejection;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
const encoded = encodeElementPath(element_path);
|
|
474
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
475
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
476
|
-
try {
|
|
477
|
-
// T5 / F-12: forward `merge` only when explicitly true so older PHP
|
|
478
|
-
// builds (which ignore unknown keys anyway) get the same byte-for-
|
|
479
|
-
// byte body they did before.
|
|
480
|
-
const body = { props };
|
|
481
|
-
if (merge === true) {
|
|
482
|
-
body.merge = true;
|
|
483
|
-
}
|
|
484
|
-
// ELEMENT_WRITE-4 (part 2): forward the first-class builder name → the
|
|
485
|
-
// node-level `name`. Only when a non-empty string so an omitted value
|
|
486
|
-
// leaves the current name unchanged.
|
|
487
|
-
if (typeof name === 'string' && name !== '') {
|
|
488
|
-
body.name = name;
|
|
489
|
-
}
|
|
490
|
-
// Task 10b: forward `unset` only when non-empty (same back-compat
|
|
491
|
-
// pattern as `merge`) — removal is never schema-validated, it
|
|
492
|
-
// mirrors the PHP side which honours an `unset` key in the PUT body.
|
|
493
|
-
if (unset !== undefined && unset.length > 0) {
|
|
494
|
-
body.unset = unset;
|
|
495
|
-
}
|
|
496
|
-
const data = await client.put(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/settings`, { body, etag });
|
|
497
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
498
|
-
return jsonResult(data);
|
|
499
|
-
}
|
|
500
|
-
catch (e) {
|
|
501
|
-
return errorResult({
|
|
502
|
-
error: e,
|
|
503
|
-
context: { template_id, element_path },
|
|
504
|
-
hint: elementUpdateHint(e),
|
|
505
|
-
});
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
// ─── element_move ────────────────────────────────────────────────────
|
|
509
|
-
export async function handleElementMove({ client }, input, extra) {
|
|
510
|
-
const { template_id, element_path, to_parent_path, to_index, etag } = input;
|
|
511
|
-
const encoded = encodeElementPath(element_path);
|
|
512
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
513
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
514
|
-
try {
|
|
515
|
-
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/move`, { body: { to_parent_path, to_index }, etag });
|
|
516
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
517
|
-
return jsonResult(data);
|
|
518
|
-
}
|
|
519
|
-
catch (e) {
|
|
520
|
-
return errorResult({
|
|
521
|
-
error: e,
|
|
522
|
-
context: { template_id, element_path, to_parent_path, to_index },
|
|
523
|
-
hint: 'Verify destination parent accepts the element type. On 412 refresh ' +
|
|
524
|
-
'ETag and retry.',
|
|
525
|
-
});
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
// ─── element_clone ───────────────────────────────────────────────────
|
|
529
|
-
export async function handleElementClone({ client }, input, extra) {
|
|
530
|
-
const { template_id, element_path, etag } = input;
|
|
531
|
-
const encoded = encodeElementPath(element_path);
|
|
532
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
533
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
534
|
-
try {
|
|
535
|
-
const data = await client.post(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}/clone`, { etag });
|
|
536
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
537
|
-
return jsonResult(data);
|
|
538
|
-
}
|
|
539
|
-
catch (e) {
|
|
540
|
-
return errorResult({
|
|
541
|
-
error: e,
|
|
542
|
-
context: { template_id, element_path },
|
|
543
|
-
hint: 'On 412 refresh via yootheme_builder_get_etag and retry.',
|
|
544
|
-
});
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
// ─── element_delete (destructive — elicitation + confirm-guard) ─────
|
|
548
|
-
//
|
|
549
|
-
// Wave G.4.1 — destructive confirm via MCP elicitation. Progress
|
|
550
|
-
// reports (Wave G.5) only start AFTER the confirm gate clears.
|
|
551
|
-
// Wave-6 R4 (2026-05-29): Defensive truthiness for the confirm gate.
|
|
552
|
-
// Cold-AI #4 reported the gate kept firing despite `confirm:true`. The Zod
|
|
553
|
-
// schema already coerces only strict booleans (anything non-boolean is
|
|
554
|
-
// rejected upstream as invalid_arguments), but we widen the in-handler
|
|
555
|
-
// check to accept the literal string `"true"` / numeric `1` as a safety net
|
|
556
|
-
// in case a future wrapper round-trips the arg through JSON re-encoding.
|
|
557
|
-
function isConfirmedTrue(v) {
|
|
558
|
-
if (v === true)
|
|
559
|
-
return true;
|
|
560
|
-
if (typeof v === 'string' && v.toLowerCase() === 'true')
|
|
561
|
-
return true;
|
|
562
|
-
if (typeof v === 'number' && v === 1)
|
|
563
|
-
return true;
|
|
564
|
-
return false;
|
|
565
|
-
}
|
|
566
|
-
function isConfirmedFalse(v) {
|
|
567
|
-
if (v === false)
|
|
568
|
-
return true;
|
|
569
|
-
if (typeof v === 'string' && v.toLowerCase() === 'false')
|
|
570
|
-
return true;
|
|
571
|
-
if (typeof v === 'number' && v === 0)
|
|
572
|
-
return true;
|
|
573
|
-
return false;
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* ELEMENT_WRITE-10 — best-effort enrichment of a delete PREVIEW so the human
|
|
577
|
-
* sees WHAT would be deleted, not just a path. Reads the element (try/catch,
|
|
578
|
-
* never blocks the preview on failure) and derives `{element_type, label,
|
|
579
|
-
* descendant_count, text_excerpt}`. Deleting a section can remove 10 descendant
|
|
580
|
-
* nodes; naming them turns "delete element at /children/3" into an informed
|
|
581
|
-
* decision. Returns `{}` on ANY failure so the preview always renders.
|
|
582
|
-
*/
|
|
583
|
-
async function bestEffortDeletePreviewDetails(client, template_id, element_path) {
|
|
584
|
-
try {
|
|
585
|
-
const data = await client.get(`/pages/${encodeTemplateId(template_id)}/elements/${encodeElementPath(element_path)}`);
|
|
586
|
-
const elementType = typeof data.element_type === 'string' && data.element_type !== ''
|
|
587
|
-
? data.element_type
|
|
588
|
-
: typeof data.type === 'string'
|
|
589
|
-
? data.type
|
|
590
|
-
: undefined;
|
|
591
|
-
const label = typeof data.label === 'string' && data.label !== ''
|
|
592
|
-
? data.label
|
|
593
|
-
: typeof data.path_label === 'string' && data.path_label !== ''
|
|
594
|
-
? data.path_label
|
|
595
|
-
: undefined;
|
|
596
|
-
const descendantCount = countDescendants(data.children);
|
|
597
|
-
const excerpt = firstTextExcerpt(data.props);
|
|
598
|
-
const out = {};
|
|
599
|
-
if (elementType !== undefined)
|
|
600
|
-
out.element_type = elementType;
|
|
601
|
-
if (label !== undefined)
|
|
602
|
-
out.label = label;
|
|
603
|
-
out.descendant_count = descendantCount;
|
|
604
|
-
if (excerpt !== undefined)
|
|
605
|
-
out.text_excerpt = excerpt;
|
|
606
|
-
return out;
|
|
607
|
-
}
|
|
608
|
-
catch {
|
|
609
|
-
return {};
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
/** Deep-count every descendant node under a `children` array (0 when absent). */
|
|
613
|
-
function countDescendants(children) {
|
|
614
|
-
if (!Array.isArray(children))
|
|
615
|
-
return 0;
|
|
616
|
-
let total = 0;
|
|
617
|
-
for (const child of children) {
|
|
618
|
-
if (child !== null && typeof child === 'object' && !Array.isArray(child)) {
|
|
619
|
-
total += 1;
|
|
620
|
-
total += countDescendants(child.children);
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
return total;
|
|
624
|
-
}
|
|
625
|
-
/** First-line text excerpt from a props map's canonical text carriers, capped. */
|
|
626
|
-
function firstTextExcerpt(props) {
|
|
627
|
-
if (props === null || typeof props !== 'object' || Array.isArray(props))
|
|
628
|
-
return undefined;
|
|
629
|
-
const p = props;
|
|
630
|
-
for (const key of ['content', 'title', 'text']) {
|
|
631
|
-
const v = p[key];
|
|
632
|
-
if (typeof v === 'string' && v.trim() !== '') {
|
|
633
|
-
const firstLine = v.trim().split('\n')[0] ?? '';
|
|
634
|
-
return firstLine.length > 80 ? `${firstLine.slice(0, 80)}…` : firstLine;
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
return undefined;
|
|
638
|
-
}
|
|
639
|
-
async function resolveDeleteConfirm(client, elicitation, template_id, element_path, confirm) {
|
|
640
|
-
// Wave-6 R4: explicit truthy check — confirm:true (any form) bypasses
|
|
641
|
-
// the elicitation/preview path immediately.
|
|
642
|
-
if (isConfirmedTrue(confirm))
|
|
643
|
-
return null;
|
|
644
|
-
// ELEMENT_WRITE-10: only on the PREVIEW path (not a confirmed delete) enrich
|
|
645
|
-
// the details with WHAT is about to be deleted. Best-effort — never blocks.
|
|
646
|
-
const enriched = await bestEffortDeletePreviewDetails(client, template_id, element_path);
|
|
647
|
-
if (isConfirmedFalse(confirm) || !elicitation) {
|
|
648
|
-
return confirmGuard({
|
|
649
|
-
operation: 'delete element',
|
|
650
|
-
details: {
|
|
651
|
-
template_id,
|
|
652
|
-
element_path,
|
|
653
|
-
...enriched,
|
|
654
|
-
// R4: echo back what was received so the agent can compare.
|
|
655
|
-
// Wave-7 (2026-05-29): force-encode undefined to null so the
|
|
656
|
-
// key survives JSON.stringify in the agent-facing payload.
|
|
657
|
-
// Without this the agent saw NO received_confirm field at all
|
|
658
|
-
// (key dropped by serializer) and could not diff sent vs
|
|
659
|
-
// received — looked like the value was accepted.
|
|
660
|
-
received_confirm: confirm === undefined ? null : confirm,
|
|
661
|
-
expected: 'confirm: true (boolean)',
|
|
662
|
-
},
|
|
663
|
-
});
|
|
664
|
-
}
|
|
665
|
-
const accepted = await elicitConfirmation(elicitation, `Permanently delete element at "${element_path}" in template ` +
|
|
666
|
-
`"${template_id}"? This cannot be undone.`);
|
|
667
|
-
return accepted
|
|
668
|
-
? null
|
|
669
|
-
: confirmGuard({
|
|
670
|
-
operation: 'delete element',
|
|
671
|
-
details: { template_id, element_path, ...enriched },
|
|
672
|
-
});
|
|
673
|
-
}
|
|
674
|
-
export async function handleElementDelete({ client, elicitation }, input, extra) {
|
|
675
|
-
const { template_id, element_path, etag, confirm } = input;
|
|
676
|
-
const blocked = await resolveDeleteConfirm(client, elicitation, template_id, element_path, confirm);
|
|
677
|
-
if (blocked)
|
|
678
|
-
return blocked;
|
|
679
|
-
const encoded = encodeElementPath(element_path);
|
|
680
|
-
const progress = extra ? createProgressReporter(extra) : null;
|
|
681
|
-
await progress?.report(0, 2, PHASE_SEND);
|
|
682
|
-
try {
|
|
683
|
-
// Wave-12 / Cold-AI #5 F13 (restored Wave-13 post-merge): forward
|
|
684
|
-
// `{confirm:true}` as JSON body so the PHP confirm-guard accepts the
|
|
685
|
-
// delete. Without it the guard returns `requires_confirm:true` and
|
|
686
|
-
// the caller loops forever.
|
|
687
|
-
const data = await client.delete(`/pages/${encodeTemplateId(template_id)}/elements/${encoded}`, { etag, body: { confirm: true } });
|
|
688
|
-
await progress?.report(2, 2, PHASE_CONFIRM);
|
|
689
|
-
return jsonResult(data);
|
|
690
|
-
}
|
|
691
|
-
catch (e) {
|
|
692
|
-
return errorResult({
|
|
693
|
-
error: e,
|
|
694
|
-
context: { template_id, element_path },
|
|
695
|
-
hint: 'On 412 refresh via yootheme_builder_get_etag and retry. On 404 the ' +
|
|
696
|
-
'element may already be gone — verify with yootheme_builder_element_list.',
|
|
697
|
-
});
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
//# sourceMappingURL=handlers-write.js.map
|