@wootsup/yt-builder-mcp 1.1.5 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -55
- package/dist/auth.d.ts +119 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +226 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +84 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +151 -0
- package/dist/client.js.map +1 -0
- package/dist/clients/claude-code.d.ts +18 -0
- package/dist/clients/claude-code.d.ts.map +1 -0
- package/dist/clients/claude-code.js +53 -0
- package/dist/clients/claude-code.js.map +1 -0
- package/dist/clients/claude-desktop.d.ts +19 -0
- package/dist/clients/claude-desktop.d.ts.map +1 -0
- package/dist/clients/claude-desktop.js +56 -0
- package/dist/clients/claude-desktop.js.map +1 -0
- package/dist/clients/cline.d.ts +26 -0
- package/dist/clients/cline.d.ts.map +1 -0
- package/dist/clients/cline.js +80 -0
- package/dist/clients/cline.js.map +1 -0
- package/dist/clients/codex-cli.d.ts +42 -0
- package/dist/clients/codex-cli.d.ts.map +1 -0
- package/dist/clients/codex-cli.js +194 -0
- package/dist/clients/codex-cli.js.map +1 -0
- package/dist/clients/continue.d.ts +13 -0
- package/dist/clients/continue.d.ts.map +1 -0
- package/dist/clients/continue.js +52 -0
- package/dist/clients/continue.js.map +1 -0
- package/dist/clients/cursor.d.ts +12 -0
- package/dist/clients/cursor.d.ts.map +1 -0
- package/dist/clients/cursor.js +38 -0
- package/dist/clients/cursor.js.map +1 -0
- package/dist/clients/gemini-cli.d.ts +18 -0
- package/dist/clients/gemini-cli.d.ts.map +1 -0
- package/dist/clients/gemini-cli.js +44 -0
- package/dist/clients/gemini-cli.js.map +1 -0
- package/dist/clients/home.d.ts +14 -0
- package/dist/clients/home.d.ts.map +1 -0
- package/dist/clients/home.js +20 -0
- package/dist/clients/home.js.map +1 -0
- package/dist/clients/index.d.ts +52 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +72 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/roo-code.d.ts +23 -0
- package/dist/clients/roo-code.d.ts.map +1 -0
- package/dist/clients/roo-code.js +69 -0
- package/dist/clients/roo-code.js.map +1 -0
- package/dist/clients/zed.d.ts +12 -0
- package/dist/clients/zed.d.ts.map +1 -0
- package/dist/clients/zed.js +41 -0
- package/dist/clients/zed.js.map +1 -0
- package/dist/errors/hints.d.ts +51 -0
- package/dist/errors/hints.d.ts.map +1 -0
- package/dist/errors/hints.js +95 -0
- package/dist/errors/hints.js.map +1 -0
- package/dist/errors/mask.d.ts +35 -0
- package/dist/errors/mask.d.ts.map +1 -0
- package/dist/errors/mask.js +49 -0
- package/dist/errors/mask.js.map +1 -0
- package/dist/errors/sanitize.d.ts +31 -0
- package/dist/errors/sanitize.d.ts.map +1 -0
- package/dist/errors/sanitize.js +100 -0
- package/dist/errors/sanitize.js.map +1 -0
- package/dist/errors.d.ts +42 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +61 -0
- package/dist/errors.js.map +1 -0
- package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
- package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/discovery.js +53 -0
- package/dist/gateway/advanced-tool/discovery.js.map +1 -0
- package/dist/gateway/advanced-tool/domains.d.ts +47 -0
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/domains.js +94 -0
- package/dist/gateway/advanced-tool/domains.js.map +1 -0
- package/dist/gateway/advanced-tool/execute.d.ts +29 -0
- package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/execute.js +54 -0
- package/dist/gateway/advanced-tool/execute.js.map +1 -0
- package/dist/gateway/advanced-tool/index.d.ts +36 -0
- package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/index.js +39 -0
- package/dist/gateway/advanced-tool/index.js.map +1 -0
- package/dist/gateway/advanced-tool/register.d.ts +18 -0
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
- package/dist/gateway/advanced-tool/register.js +69 -0
- package/dist/gateway/advanced-tool/register.js.map +1 -0
- package/dist/gateway/advanced-tool.d.ts +13 -0
- package/dist/gateway/advanced-tool.d.ts.map +1 -0
- package/dist/gateway/advanced-tool.js +13 -0
- package/dist/gateway/advanced-tool.js.map +1 -0
- package/dist/gateway/capturing-server.d.ts +117 -0
- package/dist/gateway/capturing-server.d.ts.map +1 -0
- package/dist/gateway/capturing-server.js +103 -0
- package/dist/gateway/capturing-server.js.map +1 -0
- package/dist/gateway/essentials.d.ts +50 -0
- package/dist/gateway/essentials.d.ts.map +1 -0
- package/dist/gateway/essentials.js +94 -0
- package/dist/gateway/essentials.js.map +1 -0
- package/dist/gateway/test-support.d.ts +41 -0
- package/dist/gateway/test-support.d.ts.map +1 -0
- package/dist/gateway/test-support.js +60 -0
- package/dist/gateway/test-support.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +111 -0
- package/dist/index.js.map +1 -0
- package/dist/install-skill.d.ts +43 -0
- package/dist/install-skill.d.ts.map +1 -0
- package/dist/install-skill.js +118 -0
- package/dist/install-skill.js.map +1 -0
- package/dist/platform/detect.d.ts +64 -0
- package/dist/platform/detect.d.ts.map +1 -0
- package/dist/platform/detect.js +98 -0
- package/dist/platform/detect.js.map +1 -0
- package/dist/platform/index.d.ts +121 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +176 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/joomla.d.ts +44 -0
- package/dist/platform/joomla.d.ts.map +1 -0
- package/dist/platform/joomla.js +46 -0
- package/dist/platform/joomla.js.map +1 -0
- package/dist/server.d.ts +110 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +274 -0
- package/dist/server.js.map +1 -0
- package/dist/setup-cli-confirm.d.ts +36 -0
- package/dist/setup-cli-confirm.d.ts.map +1 -0
- package/dist/setup-cli-confirm.js +59 -0
- package/dist/setup-cli-confirm.js.map +1 -0
- package/dist/setup-cli.d.ts +152 -0
- package/dist/setup-cli.d.ts.map +1 -0
- package/dist/setup-cli.js +870 -0
- package/dist/setup-cli.js.map +1 -0
- package/dist/setup-prompts.d.ts +41 -0
- package/dist/setup-prompts.d.ts.map +1 -0
- package/dist/setup-prompts.js +146 -0
- package/dist/setup-prompts.js.map +1 -0
- package/dist/setup-token.d.ts +38 -0
- package/dist/setup-token.d.ts.map +1 -0
- package/dist/setup-token.js +106 -0
- package/dist/setup-token.js.map +1 -0
- package/dist/setup-wizard-defaults.d.ts +43 -0
- package/dist/setup-wizard-defaults.d.ts.map +1 -0
- package/dist/setup-wizard-defaults.js +160 -0
- package/dist/setup-wizard-defaults.js.map +1 -0
- package/dist/setup-wizard-handshake.d.ts +25 -0
- package/dist/setup-wizard-handshake.d.ts.map +1 -0
- package/dist/setup-wizard-handshake.js +103 -0
- package/dist/setup-wizard-handshake.js.map +1 -0
- package/dist/setup-wizard-types.d.ts +164 -0
- package/dist/setup-wizard-types.d.ts.map +1 -0
- package/dist/setup-wizard-types.js +11 -0
- package/dist/setup-wizard-types.js.map +1 -0
- package/dist/setup-wizard.d.ts +33 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +199 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/setup.d.ts +17 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +33 -0
- package/dist/setup.js.map +1 -0
- package/dist/sites/cli/add-site.d.ts +106 -0
- package/dist/sites/cli/add-site.d.ts.map +1 -0
- package/dist/sites/cli/add-site.js +185 -0
- package/dist/sites/cli/add-site.js.map +1 -0
- package/dist/sites/cli/list-sites.d.ts +40 -0
- package/dist/sites/cli/list-sites.d.ts.map +1 -0
- package/dist/sites/cli/list-sites.js +116 -0
- package/dist/sites/cli/list-sites.js.map +1 -0
- package/dist/sites/cli/remove-site.d.ts +60 -0
- package/dist/sites/cli/remove-site.d.ts.map +1 -0
- package/dist/sites/cli/remove-site.js +120 -0
- package/dist/sites/cli/remove-site.js.map +1 -0
- package/dist/sites/cli/set-default.d.ts +47 -0
- package/dist/sites/cli/set-default.d.ts.map +1 -0
- package/dist/sites/cli/set-default.js +69 -0
- package/dist/sites/cli/set-default.js.map +1 -0
- package/dist/sites/cli/test-site.d.ts +77 -0
- package/dist/sites/cli/test-site.d.ts.map +1 -0
- package/dist/sites/cli/test-site.js +146 -0
- package/dist/sites/cli/test-site.js.map +1 -0
- package/dist/sites/client-pool.d.ts +124 -0
- package/dist/sites/client-pool.d.ts.map +1 -0
- package/dist/sites/client-pool.js +172 -0
- package/dist/sites/client-pool.js.map +1 -0
- package/dist/sites/env-bridge.d.ts +55 -0
- package/dist/sites/env-bridge.d.ts.map +1 -0
- package/dist/sites/env-bridge.js +94 -0
- package/dist/sites/env-bridge.js.map +1 -0
- package/dist/sites/paths.d.ts +21 -0
- package/dist/sites/paths.d.ts.map +1 -0
- package/dist/sites/paths.js +37 -0
- package/dist/sites/paths.js.map +1 -0
- package/dist/sites/probe.d.ts +60 -0
- package/dist/sites/probe.d.ts.map +1 -0
- package/dist/sites/probe.js +112 -0
- package/dist/sites/probe.js.map +1 -0
- package/dist/sites/registry.d.ts +142 -0
- package/dist/sites/registry.d.ts.map +1 -0
- package/dist/sites/registry.js +163 -0
- package/dist/sites/registry.js.map +1 -0
- package/dist/sites/schema.d.ts +90 -0
- package/dist/sites/schema.d.ts.map +1 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +115 -0
- package/dist/sites/secret-resolver.d.ts.map +1 -0
- package/dist/sites/secret-resolver.js +225 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/sites/store.d.ts +82 -0
- package/dist/sites/store.d.ts.map +1 -0
- package/dist/sites/store.js +198 -0
- package/dist/sites/store.js.map +1 -0
- package/dist/sites/tools/index.d.ts +28 -0
- package/dist/sites/tools/index.d.ts.map +1 -0
- package/dist/sites/tools/index.js +30 -0
- package/dist/sites/tools/index.js.map +1 -0
- package/dist/sites/tools/sites-list.d.ts +48 -0
- package/dist/sites/tools/sites-list.d.ts.map +1 -0
- package/dist/sites/tools/sites-list.js +137 -0
- package/dist/sites/tools/sites-list.js.map +1 -0
- package/dist/sites/tools/sites-test.d.ts +47 -0
- package/dist/sites/tools/sites-test.d.ts.map +1 -0
- package/dist/sites/tools/sites-test.js +148 -0
- package/dist/sites/tools/sites-test.js.map +1 -0
- package/dist/skill-loader.d.ts +111 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +191 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/tools/elements/builders.d.ts +24 -0
- package/dist/tools/elements/builders.d.ts.map +1 -0
- package/dist/tools/elements/builders.js +199 -0
- package/dist/tools/elements/builders.js.map +1 -0
- package/dist/tools/elements/handlers-write.d.ts +49 -0
- package/dist/tools/elements/handlers-write.d.ts.map +1 -0
- package/dist/tools/elements/handlers-write.js +148 -0
- package/dist/tools/elements/handlers-write.js.map +1 -0
- package/dist/tools/elements/handlers.d.ts +70 -0
- package/dist/tools/elements/handlers.d.ts.map +1 -0
- package/dist/tools/elements/handlers.js +292 -0
- package/dist/tools/elements/handlers.js.map +1 -0
- package/dist/tools/elements/index.d.ts +28 -0
- package/dist/tools/elements/index.d.ts.map +1 -0
- package/dist/tools/elements/index.js +27 -0
- package/dist/tools/elements/index.js.map +1 -0
- package/dist/tools/elements.d.ts +13 -0
- package/dist/tools/elements.d.ts.map +1 -0
- package/dist/tools/elements.js +13 -0
- package/dist/tools/elements.js.map +1 -0
- package/dist/tools/elicitation.d.ts +87 -0
- package/dist/tools/elicitation.d.ts.map +1 -0
- package/dist/tools/elicitation.js +100 -0
- package/dist/tools/elicitation.js.map +1 -0
- package/dist/tools/format/elements-format.d.ts +40 -0
- package/dist/tools/format/elements-format.d.ts.map +1 -0
- package/dist/tools/format/elements-format.js +194 -0
- package/dist/tools/format/elements-format.js.map +1 -0
- package/dist/tools/format/health-format.d.ts +79 -0
- package/dist/tools/format/health-format.d.ts.map +1 -0
- package/dist/tools/format/health-format.js +181 -0
- package/dist/tools/format/health-format.js.map +1 -0
- package/dist/tools/format/inspection-format.d.ts +59 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -0
- package/dist/tools/format/inspection-format.js +303 -0
- package/dist/tools/format/inspection-format.js.map +1 -0
- package/dist/tools/format/pages-format.d.ts +57 -0
- package/dist/tools/format/pages-format.d.ts.map +1 -0
- package/dist/tools/format/pages-format.js +157 -0
- package/dist/tools/format/pages-format.js.map +1 -0
- package/dist/tools/format/sources-format.d.ts +44 -0
- package/dist/tools/format/sources-format.d.ts.map +1 -0
- package/dist/tools/format/sources-format.js +242 -0
- package/dist/tools/format/sources-format.js.map +1 -0
- package/dist/tools/health.d.ts +22 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +220 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/index.d.ts +30 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +39 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inspection.d.ts +14 -0
- package/dist/tools/inspection.d.ts.map +1 -0
- package/dist/tools/inspection.js +208 -0
- package/dist/tools/inspection.js.map +1 -0
- package/dist/tools/layout-flatten.d.ts +75 -0
- package/dist/tools/layout-flatten.d.ts.map +1 -0
- package/dist/tools/layout-flatten.js +107 -0
- package/dist/tools/layout-flatten.js.map +1 -0
- package/dist/tools/multi-items/builders.d.ts +23 -0
- package/dist/tools/multi-items/builders.d.ts.map +1 -0
- package/dist/tools/multi-items/builders.js +78 -0
- package/dist/tools/multi-items/builders.js.map +1 -0
- package/dist/tools/multi-items/clean-implode-handler.d.ts +36 -0
- package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -0
- package/dist/tools/multi-items/clean-implode-handler.js +57 -0
- package/dist/tools/multi-items/clean-implode-handler.js.map +1 -0
- package/dist/tools/multi-items/index.d.ts +18 -0
- package/dist/tools/multi-items/index.d.ts.map +1 -0
- package/dist/tools/multi-items/index.js +18 -0
- package/dist/tools/multi-items/index.js.map +1 -0
- package/dist/tools/multi-items/inspect-handler.d.ts +41 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
- package/dist/tools/multi-items/inspect-handler.js +50 -0
- package/dist/tools/multi-items/inspect-handler.js.map +1 -0
- package/dist/tools/multi-items/item-container-map.d.ts +41 -0
- package/dist/tools/multi-items/item-container-map.d.ts.map +1 -0
- package/dist/tools/multi-items/item-container-map.js +73 -0
- package/dist/tools/multi-items/item-container-map.js.map +1 -0
- package/dist/tools/pages/builders.d.ts +14 -0
- package/dist/tools/pages/builders.d.ts.map +1 -0
- package/dist/tools/pages/builders.js +136 -0
- package/dist/tools/pages/builders.js.map +1 -0
- package/dist/tools/pages/handlers-read.d.ts +33 -0
- package/dist/tools/pages/handlers-read.d.ts.map +1 -0
- package/dist/tools/pages/handlers-read.js +203 -0
- package/dist/tools/pages/handlers-read.js.map +1 -0
- package/dist/tools/pages/handlers-write.d.ts +21 -0
- package/dist/tools/pages/handlers-write.d.ts.map +1 -0
- package/dist/tools/pages/handlers-write.js +52 -0
- package/dist/tools/pages/handlers-write.js.map +1 -0
- package/dist/tools/pages/index.d.ts +17 -0
- package/dist/tools/pages/index.d.ts.map +1 -0
- package/dist/tools/pages/index.js +17 -0
- package/dist/tools/pages/index.js.map +1 -0
- package/dist/tools/pages/schemas.d.ts +45 -0
- package/dist/tools/pages/schemas.d.ts.map +1 -0
- package/dist/tools/pages/schemas.js +82 -0
- package/dist/tools/pages/schemas.js.map +1 -0
- package/dist/tools/pages.d.ts +13 -0
- package/dist/tools/pages.d.ts.map +1 -0
- package/dist/tools/pages.js +13 -0
- package/dist/tools/pages.js.map +1 -0
- package/dist/tools/pool-resolve-helper.d.ts +83 -0
- package/dist/tools/pool-resolve-helper.d.ts.map +1 -0
- package/dist/tools/pool-resolve-helper.js +148 -0
- package/dist/tools/pool-resolve-helper.js.map +1 -0
- package/dist/tools/progress-phases.d.ts +46 -0
- package/dist/tools/progress-phases.d.ts.map +1 -0
- package/dist/tools/progress-phases.js +48 -0
- package/dist/tools/progress-phases.js.map +1 -0
- package/dist/tools/shared-schemas.d.ts +25 -0
- package/dist/tools/shared-schemas.d.ts.map +1 -0
- package/dist/tools/shared-schemas.js +59 -0
- package/dist/tools/shared-schemas.js.map +1 -0
- package/dist/tools/sources/builders.d.ts +13 -0
- package/dist/tools/sources/builders.d.ts.map +1 -0
- package/dist/tools/sources/builders.js +118 -0
- package/dist/tools/sources/builders.js.map +1 -0
- package/dist/tools/sources/handlers-bind.d.ts +28 -0
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
- package/dist/tools/sources/handlers-bind.js +129 -0
- package/dist/tools/sources/handlers-bind.js.map +1 -0
- package/dist/tools/sources/handlers.d.ts +47 -0
- package/dist/tools/sources/handlers.d.ts.map +1 -0
- package/dist/tools/sources/handlers.js +108 -0
- package/dist/tools/sources/handlers.js.map +1 -0
- package/dist/tools/sources/index.d.ts +19 -0
- package/dist/tools/sources/index.d.ts.map +1 -0
- package/dist/tools/sources/index.js +18 -0
- package/dist/tools/sources/index.js.map +1 -0
- package/dist/tools/sources.d.ts +14 -0
- package/dist/tools/sources.d.ts.map +1 -0
- package/dist/tools/sources.js +14 -0
- package/dist/tools/sources.js.map +1 -0
- package/dist/tools/sparse-fields.d.ts +106 -0
- package/dist/tools/sparse-fields.d.ts.map +1 -0
- package/dist/tools/sparse-fields.js +165 -0
- package/dist/tools/sparse-fields.js.map +1 -0
- package/dist/tools/tool-builder/annotations.d.ts +55 -0
- package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
- package/dist/tools/tool-builder/annotations.js +86 -0
- package/dist/tools/tool-builder/annotations.js.map +1 -0
- package/dist/tools/tool-builder/define.d.ts +31 -0
- package/dist/tools/tool-builder/define.d.ts.map +1 -0
- package/dist/tools/tool-builder/define.js +31 -0
- package/dist/tools/tool-builder/define.js.map +1 -0
- package/dist/tools/tool-builder/index.d.ts +28 -0
- package/dist/tools/tool-builder/index.d.ts.map +1 -0
- package/dist/tools/tool-builder/index.js +27 -0
- package/dist/tools/tool-builder/index.js.map +1 -0
- package/dist/tools/tool-builder/results.d.ts +104 -0
- package/dist/tools/tool-builder/results.d.ts.map +1 -0
- package/dist/tools/tool-builder/results.js +224 -0
- package/dist/tools/tool-builder/results.js.map +1 -0
- package/dist/tools/tool-builder/types.d.ts +97 -0
- package/dist/tools/tool-builder/types.d.ts.map +1 -0
- package/dist/tools/tool-builder/types.js +9 -0
- package/dist/tools/tool-builder/types.js.map +1 -0
- package/dist/tools/tool-builder.d.ts +16 -0
- package/dist/tools/tool-builder.d.ts.map +1 -0
- package/dist/tools/tool-builder.js +16 -0
- package/dist/tools/tool-builder.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +2 -1
- package/skills/yt-builder-mcp/SKILL.md +108 -107
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool READ handlers + shared output-schemas.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) to keep
|
|
5
|
+
* each file ≤ 200 LoC per Architecture §11. Write handlers (page_save,
|
|
6
|
+
* page_publish — 3-phase progress contract) live in `./handlers-write.ts`.
|
|
7
|
+
*
|
|
8
|
+
* @license MIT
|
|
9
|
+
*/
|
|
10
|
+
import { detailResult, tableResult } from '@getimo/mcp-toolkit';
|
|
11
|
+
import { flattenLayout } from '../layout-flatten.js';
|
|
12
|
+
import { PAGES_COMPACT_COLUMNS, PAGES_TABLE_COLUMNS, SCHEMA_COMPACT_COLUMNS, SCHEMA_TABLE_COLUMNS, buildEtagDetail, buildSchemaRows, mapPageRow, } from '../format/pages-format.js';
|
|
13
|
+
import { DEFAULT_FIELDS_PAGES_LIST, projectFields, projectedFieldsEcho, projectionFeedback, } from '../sparse-fields.js';
|
|
14
|
+
import { errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
|
|
15
|
+
// ─── pages_list ─────────────────────────────────────────────────────
|
|
16
|
+
export async function handlePagesList(client, { fields }) {
|
|
17
|
+
try {
|
|
18
|
+
const data = await client.get('/pages');
|
|
19
|
+
const rawPages = Array.isArray(data.pages) ? data.pages : [];
|
|
20
|
+
const mapped = rawPages
|
|
21
|
+
.filter((x) => x !== null && typeof x === 'object')
|
|
22
|
+
.map(mapPageRow);
|
|
23
|
+
// Project AFTER mapping — keeps stable key names and lets the
|
|
24
|
+
// toolkit's tableResult format the raw, full-shape rows for the
|
|
25
|
+
// LLM text leg while the structuredContent leg carries the
|
|
26
|
+
// projected per-item slice.
|
|
27
|
+
const items = projectFields(mapped, fields, DEFAULT_FIELDS_PAGES_LIST);
|
|
28
|
+
const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_PAGES_LIST);
|
|
29
|
+
const feedback = projectionFeedback(mapped, fields);
|
|
30
|
+
const unknownNote = feedback !== undefined && feedback.unknown_fields.length > 0
|
|
31
|
+
? ` (unknown fields ignored: ${feedback.unknown_fields.join(', ')}; available: ${feedback.available_fields.join(', ')})`
|
|
32
|
+
: '';
|
|
33
|
+
const toolkitResult = tableResult(mapped, {
|
|
34
|
+
columns: [...PAGES_TABLE_COLUMNS],
|
|
35
|
+
compactColumns: [...PAGES_COMPACT_COLUMNS],
|
|
36
|
+
header: (count) => `${String(count)} pages${unknownNote}`,
|
|
37
|
+
footer: 'Use yootheme_builder_page_get_schema <id> to inspect.',
|
|
38
|
+
});
|
|
39
|
+
return structuredResult(toolkitResult, {
|
|
40
|
+
items,
|
|
41
|
+
total: items.length,
|
|
42
|
+
...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
|
|
43
|
+
...(echo !== undefined ? { projected_fields: [...echo] } : {}),
|
|
44
|
+
...(feedback !== undefined ? {
|
|
45
|
+
available_fields: [...feedback.available_fields],
|
|
46
|
+
unknown_fields: [...feedback.unknown_fields],
|
|
47
|
+
} : {}),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
return errorResult({
|
|
52
|
+
error: e,
|
|
53
|
+
context: {},
|
|
54
|
+
hint: 'Run yootheme_builder_diagnose to verify connectivity and auth.',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ─── page_get_layout ────────────────────────────────────────────────
|
|
59
|
+
export async function handlePageGetLayout(client, { template_id, flat, fields }) {
|
|
60
|
+
try {
|
|
61
|
+
const data = await client.get(`/pages/${encodeURIComponent(template_id)}/layout`);
|
|
62
|
+
if (flat !== true) {
|
|
63
|
+
// Default: nested passthrough — unchanged from pre-G.3.
|
|
64
|
+
return jsonResult(data);
|
|
65
|
+
}
|
|
66
|
+
// flat: true → depth-first walk on the nested layout. Apply
|
|
67
|
+
// pickFields per element when `fields[]` was passed; echo the
|
|
68
|
+
// projection so the AI knows the per-item shape it received.
|
|
69
|
+
//
|
|
70
|
+
// F-208 (Audit 2026-05-26): the REST envelope nests the actual
|
|
71
|
+
// node tree as `data.layout.layout` — `data.layout` is the
|
|
72
|
+
// WHOLE template object (`{name, layout: {…children…}, …}`),
|
|
73
|
+
// so walking `data.layout` directly produced double-prefixed
|
|
74
|
+
// paths (`/layout/layout/children/0`). Detect the template
|
|
75
|
+
// envelope by presence of an inner `layout` field and descend
|
|
76
|
+
// one extra hop. Back-compat: when `data.layout` is already
|
|
77
|
+
// the node tree (no inner `layout` key), pass it through.
|
|
78
|
+
const layoutRoot = data.layout !== null &&
|
|
79
|
+
typeof data.layout === 'object' &&
|
|
80
|
+
!Array.isArray(data.layout) &&
|
|
81
|
+
'layout' in data.layout &&
|
|
82
|
+
data.layout.layout !== null &&
|
|
83
|
+
typeof data.layout.layout === 'object'
|
|
84
|
+
? data.layout.layout
|
|
85
|
+
: data.layout;
|
|
86
|
+
const flatElements = flattenLayout(layoutRoot);
|
|
87
|
+
const projected = projectFields(flatElements, fields,
|
|
88
|
+
// No default-set on layout.flat: keep "all" semantics
|
|
89
|
+
// unless caller opts-in. The echo helper below mirrors that.
|
|
90
|
+
[]);
|
|
91
|
+
const echo = projectedFieldsEcho(fields, undefined);
|
|
92
|
+
// 1.0.1 Wave-1.7 F-COLD-3: forward the canonical pointer base
|
|
93
|
+
// through the flat-projection path too so cold agents iterating
|
|
94
|
+
// with `flat: true` see the same hint they get on the nested
|
|
95
|
+
// default payload.
|
|
96
|
+
return jsonResult({
|
|
97
|
+
elements: projected,
|
|
98
|
+
...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
|
|
99
|
+
...(typeof data.layout_root_pointer === 'string'
|
|
100
|
+
? { layout_root_pointer: data.layout_root_pointer }
|
|
101
|
+
: {}),
|
|
102
|
+
...(typeof data.pointer_hint === 'string'
|
|
103
|
+
? { pointer_hint: data.pointer_hint }
|
|
104
|
+
: {}),
|
|
105
|
+
...(echo !== undefined ? { projected_fields: [...echo] } : {}),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
return errorResult({
|
|
110
|
+
error: e,
|
|
111
|
+
context: { template_id },
|
|
112
|
+
hint: 'Verify the template_id exists via yootheme_builder_pages_list. ' +
|
|
113
|
+
'IDs are case-sensitive.',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// ─── page_get_schema ────────────────────────────────────────────────
|
|
118
|
+
export async function handlePageGetSchema(client, { template_id }) {
|
|
119
|
+
try {
|
|
120
|
+
const data = await client.get(`/pages/${encodeURIComponent(template_id)}/schema`);
|
|
121
|
+
const rawNodes = Array.isArray(data.nodes) ? data.nodes : [];
|
|
122
|
+
const items = buildSchemaRows(rawNodes.filter((x) => x !== null && typeof x === 'object'));
|
|
123
|
+
// Templates routinely exceed 21 nodes (a typical home page has
|
|
124
|
+
// 30–150 elements). Force compact level so the LLM never gets
|
|
125
|
+
// truncated text — toolkit's resolveDetailLevel honours the
|
|
126
|
+
// explicit override.
|
|
127
|
+
//
|
|
128
|
+
// TODO(toolkit-upstream): contribute a `compactWhen: (count) => boolean`
|
|
129
|
+
// field to @getimo/mcp-toolkit's AutoFormatOptions so this
|
|
130
|
+
// can be expressed declaratively on the config object instead
|
|
131
|
+
// of via the third positional argument. Tracked as Round-1.5
|
|
132
|
+
// follow-up (I2).
|
|
133
|
+
const toolkitResult = tableResult(items, {
|
|
134
|
+
columns: [...SCHEMA_TABLE_COLUMNS],
|
|
135
|
+
compactColumns: [...SCHEMA_COMPACT_COLUMNS],
|
|
136
|
+
header: (count) => `${String(count)} nodes in template "${template_id}"`,
|
|
137
|
+
footer: 'Use yootheme_builder_element_get <path> for full element data.',
|
|
138
|
+
}, 'compact');
|
|
139
|
+
return structuredResult(toolkitResult, {
|
|
140
|
+
items,
|
|
141
|
+
total: items.length,
|
|
142
|
+
template_id,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
return errorResult({
|
|
147
|
+
error: e,
|
|
148
|
+
context: { template_id },
|
|
149
|
+
hint: 'Verify the template_id exists via yootheme_builder_pages_list.',
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ─── get_etag ───────────────────────────────────────────────────────
|
|
154
|
+
export async function handleGetEtag(client) {
|
|
155
|
+
try {
|
|
156
|
+
const data = await client.get('/etag');
|
|
157
|
+
const toolkitResult = detailResult(buildEtagDetail({
|
|
158
|
+
etag: data.etag,
|
|
159
|
+
generated_at: data.generated_at,
|
|
160
|
+
}));
|
|
161
|
+
return structuredResult(toolkitResult, {
|
|
162
|
+
etag: data.etag,
|
|
163
|
+
...(typeof data.generated_at === 'string'
|
|
164
|
+
? { generated_at: data.generated_at }
|
|
165
|
+
: {}),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
return errorResult({
|
|
170
|
+
error: e,
|
|
171
|
+
context: {},
|
|
172
|
+
hint: 'Run yootheme_builder_diagnose to verify auth.',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ─── template_summary (T9 — Audit-v3 B.5 token-efficient overview) ────
|
|
177
|
+
/**
|
|
178
|
+
* T9: a one-call structured overview of a template — element counts by
|
|
179
|
+
* type, binding count, max nesting depth, and named landmarks. Lets the
|
|
180
|
+
* agent grasp a 96-node template for ~1 kB instead of pulling the full
|
|
181
|
+
* element_list dump (20 kB+).
|
|
182
|
+
*/
|
|
183
|
+
export async function handleTemplateSummary(client, { template_id }) {
|
|
184
|
+
try {
|
|
185
|
+
const data = await client.get(`/pages/${encodeURIComponent(template_id)}/summary`);
|
|
186
|
+
// F-AUDIT-2 (2026-05-26): template_summary now declares
|
|
187
|
+
// TEMPLATE_SUMMARY_OUTPUT_SCHEMA. The SDK requires
|
|
188
|
+
// `structuredContent` when an outputSchema is present, otherwise
|
|
189
|
+
// it raises `-32602 Output validation error`. Wrap the raw body
|
|
190
|
+
// with `structuredResult` so the text leg (LLM-readable JSON)
|
|
191
|
+
// stays unchanged AND the structuredContent leg validates.
|
|
192
|
+
const toolkitResult = jsonResult(data);
|
|
193
|
+
return structuredResult({ content: toolkitResult.content }, data);
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
return errorResult({
|
|
197
|
+
error: e,
|
|
198
|
+
context: { template_id },
|
|
199
|
+
hint: 'Verify the template_id exists via yootheme_builder_pages_list.',
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=handlers-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers-read.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool WRITE handlers — `page_save`, `page_publish`. Both implement
|
|
3
|
+
* the 3-phase progress contract (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM).
|
|
4
|
+
* PHASE_SERVER is emitted BEFORE the await so the synthetic intermediate
|
|
5
|
+
* fires even when the REST call ultimately errors — the dispatch IS the
|
|
6
|
+
* boundary, not the response.
|
|
7
|
+
*
|
|
8
|
+
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import type { RestClient } from '../../client.js';
|
|
13
|
+
import { type HandlerExtra, type ToolResult } from '../tool-builder.js';
|
|
14
|
+
interface SavePublishInput {
|
|
15
|
+
template_id: string;
|
|
16
|
+
etag?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function handlePageSave(client: RestClient, { template_id, etag }: SavePublishInput, extra?: HandlerExtra): Promise<ToolResult>;
|
|
19
|
+
export declare function handlePagePublish(client: RestClient, { template_id, etag }: SavePublishInput, extra?: HandlerExtra): Promise<ToolResult>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=handlers-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers-write.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAIH,KAAK,YAAY,EACjB,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,cAAc,CAChC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,gBAAgB,EACvC,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAID,wBAAsB,iBAAiB,CACnC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,gBAAgB,EACvC,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool WRITE handlers — `page_save`, `page_publish`. Both implement
|
|
3
|
+
* the 3-phase progress contract (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM).
|
|
4
|
+
* PHASE_SERVER is emitted BEFORE the await so the synthetic intermediate
|
|
5
|
+
* fires even when the REST call ultimately errors — the dispatch IS the
|
|
6
|
+
* boundary, not the response.
|
|
7
|
+
*
|
|
8
|
+
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import { PHASE_CONFIRM, PHASE_SEND, PHASE_SERVER } from '../progress-phases.js';
|
|
13
|
+
import { createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
|
|
14
|
+
// ─── page_save ──────────────────────────────────────────────────────
|
|
15
|
+
export async function handlePageSave(client, { template_id, etag }, extra) {
|
|
16
|
+
const progress = extra ? createProgressReporter(extra) : null;
|
|
17
|
+
await progress?.report(0, 3, PHASE_SEND);
|
|
18
|
+
await progress?.report(1, 3, PHASE_SERVER);
|
|
19
|
+
try {
|
|
20
|
+
const data = await client.post(`/pages/${encodeURIComponent(template_id)}/save`, { etag });
|
|
21
|
+
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
22
|
+
return jsonResult(data);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
return errorResult({
|
|
26
|
+
error: e,
|
|
27
|
+
context: { template_id, etag },
|
|
28
|
+
hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
|
|
29
|
+
'and retry — someone else edited the page.',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// ─── page_publish ───────────────────────────────────────────────────
|
|
34
|
+
export async function handlePagePublish(client, { template_id, etag }, extra) {
|
|
35
|
+
const progress = extra ? createProgressReporter(extra) : null;
|
|
36
|
+
await progress?.report(0, 3, PHASE_SEND);
|
|
37
|
+
await progress?.report(1, 3, PHASE_SERVER);
|
|
38
|
+
try {
|
|
39
|
+
const data = await client.post(`/pages/${encodeURIComponent(template_id)}/publish`, { etag });
|
|
40
|
+
await progress?.report(2, 3, PHASE_CONFIRM);
|
|
41
|
+
return jsonResult(data);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
return errorResult({
|
|
45
|
+
error: e,
|
|
46
|
+
context: { template_id, etag },
|
|
47
|
+
hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
|
|
48
|
+
'and retry.',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=handlers-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACH,sBAAsB,EACtB,WAAW,EACX,UAAU,GAGb,MAAM,oBAAoB,CAAC;AAO5B,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAChD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,2CAA2C;SAClD,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,UAAU,EACnD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,YAAY;SACnB,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool barrel — public entry-point for the 6 page-level tools:
|
|
3
|
+
*
|
|
4
|
+
* yootheme_builder_pages_list → list templates (tableResult + structuredContent)
|
|
5
|
+
* yootheme_builder_page_get_layout → full layout tree (jsonResult)
|
|
6
|
+
* yootheme_builder_page_get_schema → flat schema (tableResult compact)
|
|
7
|
+
* yootheme_builder_page_save → re-run save-transforms + persist
|
|
8
|
+
* yootheme_builder_page_publish → publish
|
|
9
|
+
* yootheme_builder_get_etag → top-level state ETag (detailResult)
|
|
10
|
+
*
|
|
11
|
+
* Round-2 R2-A2-CRIT1 — split out of the original `src/tools/pages.ts`.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
export { buildPagesTools } from './builders.js';
|
|
16
|
+
export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool barrel — public entry-point for the 6 page-level tools:
|
|
3
|
+
*
|
|
4
|
+
* yootheme_builder_pages_list → list templates (tableResult + structuredContent)
|
|
5
|
+
* yootheme_builder_page_get_layout → full layout tree (jsonResult)
|
|
6
|
+
* yootheme_builder_page_get_schema → flat schema (tableResult compact)
|
|
7
|
+
* yootheme_builder_page_save → re-run save-transforms + persist
|
|
8
|
+
* yootheme_builder_page_publish → publish
|
|
9
|
+
* yootheme_builder_get_etag → top-level state ETag (detailResult)
|
|
10
|
+
*
|
|
11
|
+
* Round-2 R2-A2-CRIT1 — split out of the original `src/tools/pages.ts`.
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
*/
|
|
15
|
+
export { buildPagesTools } from './builders.js';
|
|
16
|
+
export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool output-schemas (Wave G.2 §4 structuredContent contracts).
|
|
3
|
+
*
|
|
4
|
+
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) so the
|
|
5
|
+
* handler files stay focused on logic.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export declare const PAGES_LIST_OUTPUT_SCHEMA: z.ZodObject<{
|
|
11
|
+
items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
12
|
+
total: z.ZodNumber;
|
|
13
|
+
etag: z.ZodOptional<z.ZodString>;
|
|
14
|
+
projected_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
|
+
available_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
16
|
+
unknown_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export declare const SCHEMA_OUTPUT_SCHEMA: z.ZodObject<{
|
|
19
|
+
items: z.ZodArray<z.ZodObject<{
|
|
20
|
+
rel_path: z.ZodString;
|
|
21
|
+
path: z.ZodOptional<z.ZodString>;
|
|
22
|
+
element_type: z.ZodString;
|
|
23
|
+
label: z.ZodString;
|
|
24
|
+
has_binding: z.ZodBoolean;
|
|
25
|
+
}, z.core.$strip>>;
|
|
26
|
+
total: z.ZodNumber;
|
|
27
|
+
template_id: z.ZodString;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const ETAG_OUTPUT_SCHEMA: z.ZodObject<{
|
|
30
|
+
etag: z.ZodString;
|
|
31
|
+
generated_at: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export declare const TEMPLATE_SUMMARY_OUTPUT_SCHEMA: z.ZodObject<{
|
|
34
|
+
template_id: z.ZodString;
|
|
35
|
+
counts_by_type: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
36
|
+
bound_count: z.ZodNumber;
|
|
37
|
+
max_depth: z.ZodNumber;
|
|
38
|
+
total: z.ZodNumber;
|
|
39
|
+
named_sections: z.ZodArray<z.ZodObject<{
|
|
40
|
+
path: z.ZodString;
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
}, z.core.$strip>>;
|
|
43
|
+
etag: z.ZodString;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;iBA8BnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAiB/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAWH,eAAO,MAAM,8BAA8B;;;;;;;;;;;iBAazC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-tool output-schemas (Wave G.2 §4 structuredContent contracts).
|
|
3
|
+
*
|
|
4
|
+
* Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) so the
|
|
5
|
+
* handler files stay focused on logic.
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
export const PAGES_LIST_OUTPUT_SCHEMA = z.object({
|
|
11
|
+
// F-Frontend-URL (2026-05-25): each row carries `frontend_url`,
|
|
12
|
+
// `frontend_url_template`, `frontend_url_description` so an MCP-agent
|
|
13
|
+
// can answer "What is the URL of my <type> template?" without a
|
|
14
|
+
// follow-up REST call or operator input. Server-side resolvers
|
|
15
|
+
// (WordPress: get_permalink/get_term_link/get_author_posts_url; Joomla:
|
|
16
|
+
// RouteHelper::getArticleRoute/getCategoryRoute/getTagRoute) emit one
|
|
17
|
+
// of two shapes per row:
|
|
18
|
+
// - `frontend_url: <permalink>` + `frontend_url_template: null`
|
|
19
|
+
// when a canonical public URL exists (latest post / first category
|
|
20
|
+
// / first author etc.).
|
|
21
|
+
// - `frontend_url: null` + `frontend_url_template: <pattern>` when
|
|
22
|
+
// the URL needs a runtime parameter (search, 404-test) or when no
|
|
23
|
+
// public content of the matching type exists yet.
|
|
24
|
+
// `frontend_url_description` is a short human hint ("Append any non-
|
|
25
|
+
// existent path to test." / "Latest published post — rendered with
|
|
26
|
+
// this template.") so the agent can render an instruction to the
|
|
27
|
+
// end-user. All three keys are kept on the row-record (not an extra
|
|
28
|
+
// schema object) so per-item sparse-field projection works.
|
|
29
|
+
items: z.array(z.record(z.string(), z.unknown())),
|
|
30
|
+
total: z.number(),
|
|
31
|
+
etag: z.string().optional(),
|
|
32
|
+
projected_fields: z.array(z.string()).optional(),
|
|
33
|
+
// F-004 fix (2026-05-25 exhaustive audit): projection-feedback —
|
|
34
|
+
// emitted ONLY when the caller passed `fields[]`. `available_fields`
|
|
35
|
+
// is the discovered top-level field vocabulary; `unknown_fields` is
|
|
36
|
+
// the subset of requested fields that did NOT appear in any item
|
|
37
|
+
// (previously: items came back as `[{}, {}, …]` silently).
|
|
38
|
+
available_fields: z.array(z.string()).optional(),
|
|
39
|
+
unknown_fields: z.array(z.string()).optional(),
|
|
40
|
+
});
|
|
41
|
+
export const SCHEMA_OUTPUT_SCHEMA = z.object({
|
|
42
|
+
// F-006 (2026-05-26): `rel_path` is the agent-preferred path form
|
|
43
|
+
// (matches `element_list` + `page_get_layout` emit). `path` (the
|
|
44
|
+
// fully-qualified `/templates/<id>/layout/...` pointer) stays on the
|
|
45
|
+
// row for back-compat but is optional so callers reading the schema
|
|
46
|
+
// know `rel_path` is the canonical projection column.
|
|
47
|
+
items: z.array(z.object({
|
|
48
|
+
rel_path: z.string(),
|
|
49
|
+
path: z.string().optional(),
|
|
50
|
+
element_type: z.string(),
|
|
51
|
+
label: z.string(),
|
|
52
|
+
has_binding: z.boolean(),
|
|
53
|
+
})),
|
|
54
|
+
total: z.number(),
|
|
55
|
+
template_id: z.string(),
|
|
56
|
+
});
|
|
57
|
+
export const ETAG_OUTPUT_SCHEMA = z.object({
|
|
58
|
+
etag: z.string(),
|
|
59
|
+
generated_at: z.string().optional(),
|
|
60
|
+
});
|
|
61
|
+
// F-AUDIT-2 (2026-05-26): template_summary outputSchema. The handler
|
|
62
|
+
// passes the REST `/pages/{id}/summary` body through verbatim via
|
|
63
|
+
// `jsonResult(data)`. Live shape verified against the WP+Joomla dev
|
|
64
|
+
// hosts: `template_id`, `counts_by_type` (open-ended map element-type
|
|
65
|
+
// → count), `bound_count`, `max_depth`, `total`, `named_sections` (each
|
|
66
|
+
// `{path, name}`), and the `etag` string. NOTE: `_meta` is merged at
|
|
67
|
+
// the RESULT-LEVEL by `withSiteMeta`, NEVER into `structuredContent`
|
|
68
|
+
// (see results.ts W12-R2 commentary) — this schema therefore validates
|
|
69
|
+
// only the inner template-summary shape.
|
|
70
|
+
export const TEMPLATE_SUMMARY_OUTPUT_SCHEMA = z.object({
|
|
71
|
+
template_id: z.string(),
|
|
72
|
+
counts_by_type: z.record(z.string(), z.number().int().nonnegative()),
|
|
73
|
+
bound_count: z.number().int().nonnegative(),
|
|
74
|
+
max_depth: z.number().int().nonnegative(),
|
|
75
|
+
total: z.number().int().nonnegative(),
|
|
76
|
+
named_sections: z.array(z.object({
|
|
77
|
+
path: z.string(),
|
|
78
|
+
name: z.string(),
|
|
79
|
+
})),
|
|
80
|
+
etag: z.string(),
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward-compat shim for `src/tools/pages.ts`.
|
|
3
|
+
*
|
|
4
|
+
* The original 358-LoC module was split into `src/tools/pages/`
|
|
5
|
+
* (5 files, each ≤ 200 LoC) per Architecture §11 cap (Round-2
|
|
6
|
+
* R2-A2-CRIT1 audit fix). This shim preserves the public import path
|
|
7
|
+
* (`from '../../src/tools/pages.js'`) so all existing test imports
|
|
8
|
+
* and `tools/index.ts` keep working unchanged.
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
export * from './pages/index.js';
|
|
13
|
+
//# sourceMappingURL=pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward-compat shim for `src/tools/pages.ts`.
|
|
3
|
+
*
|
|
4
|
+
* The original 358-LoC module was split into `src/tools/pages/`
|
|
5
|
+
* (5 files, each ≤ 200 LoC) per Architecture §11 cap (Round-2
|
|
6
|
+
* R2-A2-CRIT1 audit fix). This shim preserves the public import path
|
|
7
|
+
* (`from '../../src/tools/pages.js'`) so all existing test imports
|
|
8
|
+
* and `tools/index.ts` keep working unchanged.
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
export * from './pages/index.js';
|
|
13
|
+
//# sourceMappingURL=pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W6.3 — shared helper for the per-handler `pool.resolve(site_id)`
|
|
3
|
+
* pattern.
|
|
4
|
+
*
|
|
5
|
+
* Every tool handler does the same dance:
|
|
6
|
+
* 1. Extract `site_id` from args (optional, undefined → default site).
|
|
7
|
+
* 2. Call `pool.resolve(site_id)`.
|
|
8
|
+
* 3. Translate `NoDefaultSiteError` / `UnknownSiteError` into a
|
|
9
|
+
* structured `errorResult` so the agent can self-recover.
|
|
10
|
+
* 4. Hand back `{client, site}` for downstream use.
|
|
11
|
+
*
|
|
12
|
+
* Centralising the dance keeps the 24 handler bodies short and ensures
|
|
13
|
+
* the error wording stays consistent across the tool surface.
|
|
14
|
+
*
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
import { type ClientPool, type PoolResolution } from '../sites/client-pool.js';
|
|
18
|
+
import type { ResolvedSite } from '../sites/registry.js';
|
|
19
|
+
import type { RestClient } from '../client.js';
|
|
20
|
+
import { type ToolResult } from './tool-builder.js';
|
|
21
|
+
/**
|
|
22
|
+
* Discriminated union returned by {@link resolveSiteOrError}: callers
|
|
23
|
+
* check the `ok` boolean before destructuring. When `ok === false`,
|
|
24
|
+
* the `error` field is a fully-formed `ToolResult` ready to be
|
|
25
|
+
* returned from the handler verbatim (no further wrapping needed).
|
|
26
|
+
*
|
|
27
|
+
* The dual-channel shape lets handlers keep their flat top-level
|
|
28
|
+
* control flow:
|
|
29
|
+
*
|
|
30
|
+
* const r = await resolveSiteOrError(pool, args.site_id);
|
|
31
|
+
* if (!r.ok) return r.error;
|
|
32
|
+
* const { client, site } = r;
|
|
33
|
+
* // ... existing logic ...
|
|
34
|
+
* return withSiteMeta(result, site);
|
|
35
|
+
*/
|
|
36
|
+
export type SiteResolution = {
|
|
37
|
+
readonly ok: true;
|
|
38
|
+
readonly client: PoolResolution['client'];
|
|
39
|
+
readonly site: PoolResolution['site'];
|
|
40
|
+
} | {
|
|
41
|
+
readonly ok: false;
|
|
42
|
+
readonly error: ToolResult;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Resolve a site_id through the pool, translating the W4 typed errors
|
|
46
|
+
* into structured `ToolResult` envelopes. Non-typed errors (genuine
|
|
47
|
+
* fetch failures during the platform probe, secret-resolver crashes,
|
|
48
|
+
* etc.) re-throw so the handler's outer try/catch can shape them with
|
|
49
|
+
* domain-specific hints.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveSiteOrError(pool: ClientPool, siteId: string | undefined): Promise<SiteResolution>;
|
|
52
|
+
/**
|
|
53
|
+
* W12-R2A (A4-F3 / A5-S2) — resolve a site + execute a handler-body with
|
|
54
|
+
* a 1-shot 401 retry.
|
|
55
|
+
*
|
|
56
|
+
* Bearer-rotation use case: a site's bearer is revoked / rotated /
|
|
57
|
+
* expired AFTER the pool cached a {@link RestClient} for it. The next
|
|
58
|
+
* call returns HTTP 401. Without retry the agent has to be told
|
|
59
|
+
* "restart your client". With retry we drop the cached client (so the
|
|
60
|
+
* next `pool.resolve` re-runs `secretResolver.resolve`), then call the
|
|
61
|
+
* handler-body again exactly once. If the second attempt also returns
|
|
62
|
+
* 401, we surface a structured `bearer_invalid` error with an
|
|
63
|
+
* actionable hint pointing at `sites_test` / sites.json.
|
|
64
|
+
*
|
|
65
|
+
* Scope: deliberately ONE retry. A second 401 means the bearer is
|
|
66
|
+
* genuinely revoked at the source — looping forever wastes tokens and
|
|
67
|
+
* masks the real problem.
|
|
68
|
+
*
|
|
69
|
+
* The wrapper handles {@link NoDefaultSiteError} / {@link
|
|
70
|
+
* UnknownSiteError} via the same `resolveSiteOrError` envelope so
|
|
71
|
+
* call-sites don't have to duplicate the structured-error wording.
|
|
72
|
+
* Non-401 thrown errors propagate to the handler's outer try/catch
|
|
73
|
+
* (or the SDK boundary) untouched — only HTTP 401 triggers the retry
|
|
74
|
+
* / structured-error path.
|
|
75
|
+
*
|
|
76
|
+
* Usage (post-migration):
|
|
77
|
+
*
|
|
78
|
+
* handler: async ({ site_id, ...rest }) =>
|
|
79
|
+
* withSiteRetry(pool, site_id, async (client, site) =>
|
|
80
|
+
* withSiteMeta(await handleX(makeDeps(client), rest), site)),
|
|
81
|
+
*/
|
|
82
|
+
export declare function withSiteRetry(pool: ClientPool, siteId: string | undefined, fn: (client: RestClient, site: ResolvedSite) => Promise<ToolResult>): Promise<ToolResult>;
|
|
83
|
+
//# sourceMappingURL=pool-resolve-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-resolve-helper.d.ts","sourceRoot":"","sources":["../../src/tools/pool-resolve-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACH,KAAK,UAAU,EAEf,KAAK,cAAc,EAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAAE,GACvG;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACpC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,CAAC,CAqDzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,aAAa,CAC/B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,GACpE,OAAO,CAAC,UAAU,CAAC,CA8CrB"}
|