@wootsup/yt-builder-mcp 1.5.0 → 1.6.1
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/bin/yt-builder-mcp.js +72 -0
- package/dist/auth.d.ts +11 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +11 -0
- package/dist/auth.js.map +1 -1
- package/dist/cli/doctor-command.d.ts.map +1 -1
- package/dist/cli/doctor-command.js +45 -2
- package/dist/cli/doctor-command.js.map +1 -1
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -1
- package/dist/client.js.map +1 -1
- package/dist/clients/claude-code.d.ts.map +1 -1
- package/dist/clients/claude-code.js +5 -2
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/claude-desktop.d.ts.map +1 -1
- package/dist/clients/claude-desktop.js +5 -2
- package/dist/clients/claude-desktop.js.map +1 -1
- package/dist/clients/cline.d.ts.map +1 -1
- package/dist/clients/cline.js +5 -2
- package/dist/clients/cline.js.map +1 -1
- package/dist/clients/codex-cli.d.ts.map +1 -1
- package/dist/clients/codex-cli.js +127 -2
- package/dist/clients/codex-cli.js.map +1 -1
- package/dist/clients/continue.d.ts.map +1 -1
- package/dist/clients/continue.js +11 -2
- package/dist/clients/continue.js.map +1 -1
- package/dist/clients/cursor.d.ts.map +1 -1
- package/dist/clients/cursor.js +5 -2
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/gemini-cli.d.ts.map +1 -1
- package/dist/clients/gemini-cli.js +5 -2
- package/dist/clients/gemini-cli.js.map +1 -1
- package/dist/clients/index.d.ts +49 -0
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +79 -0
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/roo-code.d.ts.map +1 -1
- package/dist/clients/roo-code.js +5 -2
- package/dist/clients/roo-code.js.map +1 -1
- package/dist/clients/zed.d.ts.map +1 -1
- package/dist/clients/zed.js +22 -2
- package/dist/clients/zed.js.map +1 -1
- package/dist/diagnostics/ca-reexec.d.ts +41 -0
- package/dist/diagnostics/ca-reexec.d.ts.map +1 -0
- package/dist/diagnostics/ca-reexec.js +91 -0
- package/dist/diagnostics/ca-reexec.js.map +1 -0
- package/dist/diagnostics/ca-trust.d.ts +11 -0
- package/dist/diagnostics/ca-trust.d.ts.map +1 -1
- package/dist/diagnostics/ca-trust.js +14 -1
- package/dist/diagnostics/ca-trust.js.map +1 -1
- package/dist/diagnostics/diagnose-network-error.d.ts +11 -0
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -1
- package/dist/diagnostics/diagnose-network-error.js +18 -3
- package/dist/diagnostics/diagnose-network-error.js.map +1 -1
- package/dist/diagnostics/doctor.d.ts +10 -1
- package/dist/diagnostics/doctor.d.ts.map +1 -1
- package/dist/diagnostics/doctor.js +23 -0
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/diagnostics/startup-self-probe.d.ts +39 -0
- package/dist/diagnostics/startup-self-probe.d.ts.map +1 -0
- package/dist/diagnostics/startup-self-probe.js +87 -0
- package/dist/diagnostics/startup-self-probe.js.map +1 -0
- package/dist/gateway/essentials.d.ts +15 -6
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +51 -5
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/net/proxy-dispatcher.d.ts +7 -0
- package/dist/net/proxy-dispatcher.d.ts.map +1 -1
- package/dist/net/proxy-dispatcher.js +7 -2
- package/dist/net/proxy-dispatcher.js.map +1 -1
- package/dist/net/site-basic-auth.d.ts +65 -0
- package/dist/net/site-basic-auth.d.ts.map +1 -0
- package/dist/net/site-basic-auth.js +118 -0
- package/dist/net/site-basic-auth.js.map +1 -0
- package/dist/proxy/bridge.d.ts +18 -1
- package/dist/proxy/bridge.d.ts.map +1 -1
- package/dist/proxy/bridge.js +23 -3
- package/dist/proxy/bridge.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +17 -4
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +22 -0
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +111 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/sites/client-pool.d.ts +35 -1
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +45 -1
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/tools/elements/builders.js +7 -7
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts +2 -0
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +48 -2
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/format/elements-format.d.ts.map +1 -1
- package/dist/tools/format/elements-format.js +8 -0
- package/dist/tools/format/elements-format.js.map +1 -1
- package/dist/tools/format/health-format.d.ts +2 -0
- package/dist/tools/format/health-format.d.ts.map +1 -1
- package/dist/tools/format/health-format.js +11 -0
- package/dist/tools/format/health-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts +27 -0
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +36 -0
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/source-schema-format.d.ts +64 -0
- package/dist/tools/format/source-schema-format.d.ts.map +1 -0
- package/dist/tools/format/source-schema-format.js +161 -0
- package/dist/tools/format/source-schema-format.js.map +1 -0
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +31 -0
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/multi-items/builders.js +2 -2
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +8 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/inspect-handler.js +48 -2
- package/dist/tools/multi-items/inspect-handler.js.map +1 -1
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +133 -31
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +24 -2
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +157 -11
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/handlers-write.d.ts +42 -1
- package/dist/tools/pages/handlers-write.d.ts.map +1 -1
- package/dist/tools/pages/handlers-write.js +114 -5
- package/dist/tools/pages/handlers-write.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +38 -1
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +58 -5
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/pool-resolve-helper.d.ts +11 -26
- package/dist/tools/pool-resolve-helper.d.ts.map +1 -1
- package/dist/tools/pool-resolve-helper.js +50 -0
- package/dist/tools/pool-resolve-helper.js.map +1 -1
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +258 -4
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/handlers-bind.d.ts +107 -0
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
- package/dist/tools/sources/handlers-bind.js +197 -2
- package/dist/tools/sources/handlers-bind.js.map +1 -1
- package/dist/tools/sources/handlers.d.ts +54 -0
- package/dist/tools/sources/handlers.d.ts.map +1 -1
- package/dist/tools/sources/handlers.js +82 -0
- package/dist/tools/sources/handlers.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +37 -1
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +35 -5
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +3 -0
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/skills/yt-builder-mcp/SKILL.md +80 -34
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
* @license MIT
|
|
14
14
|
*/
|
|
15
15
|
import { z } from 'zod';
|
|
16
|
-
import { withSiteRetry } from '../pool-resolve-helper.js';
|
|
17
|
-
import { POST_ID, RESOLVE_URL, SITE_ID_SCHEMA, TEMPLATE_ID, TEMPLATE_ID_OPTIONAL, } from '../shared-schemas.js';
|
|
16
|
+
import { withSiteRetry, withWriteSiteRetry } from '../pool-resolve-helper.js';
|
|
17
|
+
import { ETAG as ETAG_STRICT, POST_ID, RESOLVE_URL, SITE_ID_SCHEMA, TEMPLATE_ID, TEMPLATE_ID_OPTIONAL, } from '../shared-schemas.js';
|
|
18
18
|
import { FIELDS, FLAT, MAX_CHARS } from '../sparse-fields.js';
|
|
19
19
|
import { creating, defineTool, mutating, readOnly, withSiteMeta, } from '../tool-builder.js';
|
|
20
|
-
import { handleGetEtag, handlePageGetLayout, handlePageGetSchema, handlePagesList, handlePagesResolve, handleTemplateSummary, } from './handlers-read.js';
|
|
21
|
-
import { handlePageDynamize, handlePagePublish, handlePagesCreate, handlePagesDelete, handlePageSave, } from './handlers-write.js';
|
|
22
|
-
import { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_CREATE_INPUT, PAGES_DELETE_INPUT, PAGES_DELETE_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, PAGES_RESOLVE_INPUT, PAGES_RESOLVE_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
20
|
+
import { handleGetEtag, handlePageGetLayout, handlePageGetSchema, handlePagesList, handlePagesResolve, handleRenderPreview, handleTemplateSummary, } from './handlers-read.js';
|
|
21
|
+
import { handlePageDynamize, handlePagePublish, handlePagesCreate, handlePagesDelete, handlePageSave, handleTemplateSetType, TEMPLATE_SET_TYPE_OUTPUT_SCHEMA, } from './handlers-write.js';
|
|
22
|
+
import { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_CREATE_INPUT, PAGES_DELETE_INPUT, PAGES_DELETE_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, PAGES_RESOLVE_INPUT, PAGES_RESOLVE_OUTPUT_SCHEMA, RENDER_PREVIEW_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
|
|
23
23
|
// F-14: page-level save/publish accept OPTIONAL ETag (no precondition lock
|
|
24
24
|
// at template level — element/binding mutations REQUIRE one via the strict
|
|
25
25
|
// ETAG in shared-schemas.ts). Schema and description now agree: optional
|
|
@@ -111,14 +111,13 @@ export function buildPagesTools(pool) {
|
|
|
111
111
|
defineTool({
|
|
112
112
|
name: 'yootheme_builder_page_get_layout',
|
|
113
113
|
description: 'Get the layout tree for one template — address it by `template_id` ' +
|
|
114
|
-
'(from pages_list), `post_id` (numeric post/article id), or `url
|
|
115
|
-
'
|
|
116
|
-
'`mode:"
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'Operates on the default site unless site_id is provided.',
|
|
114
|
+
'(from pages_list), `post_id` (numeric post/article id), or `url`. For ' +
|
|
115
|
+
'dynamize/bind prefer `mode:"bindings_only"` (binding skeleton, no style ' +
|
|
116
|
+
'props). Default `mode:"full"` returns nested `{layout, etag}`; `flat:true` ' +
|
|
117
|
+
'gives a depth-first `{elements:[...]}` array (with `fields[]`). A repeated ' +
|
|
118
|
+
'unchanged read auto-skips (`force:true` re-fetches). `max_chars` bounds the ' +
|
|
119
|
+
'text; a clipped read returns `next_cursor` (pass back as `cursor`) to page ' +
|
|
120
|
+
'the rest. Operates on the default site unless site_id is provided.',
|
|
122
121
|
inputSchema: {
|
|
123
122
|
site_id: SITE_ID_SCHEMA,
|
|
124
123
|
// G-A (Track-C URL→layout): three interchangeable addressing modes
|
|
@@ -153,6 +152,15 @@ export function buildPagesTools(pool) {
|
|
|
153
152
|
flat: FLAT,
|
|
154
153
|
fields: FIELDS,
|
|
155
154
|
max_chars: MAX_CHARS,
|
|
155
|
+
// B7 (Glöckle continuation cursor): resume a clipped full/
|
|
156
|
+
// bindings_only text leg from its char offset. Opaque
|
|
157
|
+
// base64url `o:<n>` — the SAME offset-cursor contract
|
|
158
|
+
// pages_list/sources_list use. Omit to read from the start.
|
|
159
|
+
cursor: z
|
|
160
|
+
.string()
|
|
161
|
+
.optional()
|
|
162
|
+
.describe('Char-offset cursor from a clipped response\'s next_cursor — resumes ' +
|
|
163
|
+
'the same dump at that offset (use with max_chars).'),
|
|
156
164
|
},
|
|
157
165
|
// No outputSchema: the response shape is a union (nested OR flat with
|
|
158
166
|
// optional projection) and the JSON-Pointer-keyed nested shape is
|
|
@@ -187,11 +195,13 @@ export function buildPagesTools(pool) {
|
|
|
187
195
|
// agent reaches it directly (the whole point of the gap fix).
|
|
188
196
|
defineTool({
|
|
189
197
|
name: 'yootheme_builder_pages_resolve',
|
|
190
|
-
description: 'Resolve a public page/article URL to the template_id that renders it — ' +
|
|
191
|
-
'paste a URL, get a layout-addressable id in one call.
|
|
192
|
-
'
|
|
193
|
-
'
|
|
194
|
-
'
|
|
198
|
+
description: 'Resolve a public page/article OR archive URL to the template_id that renders it — ' +
|
|
199
|
+
'paste a URL, get a layout-addressable id in one call. A singular page resolves to ' +
|
|
200
|
+
'its per-page layout; a CPT archive (/faq/), taxonomy/category/tag term, or author ' +
|
|
201
|
+
'archive resolves to the governing THEME TEMPLATE. Returns {template_id, post_id ' +
|
|
202
|
+
'(null for theme templates), type, frontend_url, context (matched YT type), ' +
|
|
203
|
+
'resolved_via (per_page|theme_template)}. Only home/search/date 404 (use pages_list). ' +
|
|
204
|
+
'page_get_layout/page_get_schema also accept `url`. ' +
|
|
195
205
|
'Operates on the default site unless site_id is provided.',
|
|
196
206
|
inputSchema: { site_id: SITE_ID_SCHEMA, ...PAGES_RESOLVE_INPUT },
|
|
197
207
|
outputSchema: PAGES_RESOLVE_OUTPUT_SCHEMA,
|
|
@@ -230,14 +240,55 @@ export function buildPagesTools(pool) {
|
|
|
230
240
|
annotations: readOnly('Template Summary'),
|
|
231
241
|
handler: async ({ site_id, ...rest }) => withSiteRetry(pool, site_id, async (client, site) => withSiteMeta(await handleTemplateSummary(client, rest), site)),
|
|
232
242
|
}),
|
|
243
|
+
// ─── F5 + N5 (Glöckle HANDOFF-4/5) — render_preview ───────────
|
|
244
|
+
// The authenticated post-write render HEALTHCHECK. READ-ONLY: renders
|
|
245
|
+
// the template server-side over the existing Bearer channel and reports
|
|
246
|
+
// {rendered, item_count, empty, error?} + a cache_purge_hint — answering
|
|
247
|
+
// "does my saved page actually render, with how many items?" where an
|
|
248
|
+
// external cURL 401s behind QA Basic-Auth. L2 (advanced-read) — reached
|
|
249
|
+
// via yootheme_builder_advanced_read, NOT in ESSENTIAL_TOOLS, so the L1
|
|
250
|
+
// token-baseline stays at 32. Addressing mirrors page_get_layout:
|
|
251
|
+
// template_id OR url (exactly one).
|
|
252
|
+
defineTool({
|
|
253
|
+
name: 'yootheme_builder_render_preview',
|
|
254
|
+
description: 'Render-check a saved template over the authenticated channel — does it ' +
|
|
255
|
+
'actually render, with how many items, or is it blank? Address by ' +
|
|
256
|
+
'`template_id` (from pages_list) OR `url` (resolved for you). Returns ' +
|
|
257
|
+
'{rendered, item_count, empty, error?, cache_purge_hint}; with `expect`, also ' +
|
|
258
|
+
'{matched, snippet}. Use AFTER a page_save / element_bind_source to catch a ' +
|
|
259
|
+
'silently-empty live page (a bad binding "saves" then renders blank); the ' +
|
|
260
|
+
'swallowed YOOtheme render error is surfaced in `error`. Read-only — renders ' +
|
|
261
|
+
'without persisting. Operates on the default site unless site_id is provided.',
|
|
262
|
+
inputSchema: {
|
|
263
|
+
site_id: SITE_ID_SCHEMA,
|
|
264
|
+
// Exactly one of template_id / url — mirrors page_get_layout's
|
|
265
|
+
// TEMPLATE_ID_OPTIONAL + url addressing (resolveEffectiveTemplateId).
|
|
266
|
+
template_id: TEMPLATE_ID_OPTIONAL,
|
|
267
|
+
url: RESOLVE_URL,
|
|
268
|
+
// Glöckle HANDOFF-6 #4: optional substring the rendered HTML must
|
|
269
|
+
// contain. When set, the response adds {matched, snippet} so "did
|
|
270
|
+
// my edit reach the render?" is answerable in one call.
|
|
271
|
+
expect: z
|
|
272
|
+
.string()
|
|
273
|
+
.min(1)
|
|
274
|
+
.optional()
|
|
275
|
+
.describe('Optional substring to find in the rendered HTML (e.g. a headline you ' +
|
|
276
|
+
'just bound). When set, the response adds `matched` (bool) + ' +
|
|
277
|
+
'`snippet` (≈200-char window, or null) — confirm an edit reached ' +
|
|
278
|
+
'the render in one call.'),
|
|
279
|
+
},
|
|
280
|
+
outputSchema: RENDER_PREVIEW_OUTPUT_SCHEMA,
|
|
281
|
+
annotations: readOnly('Render Preview'),
|
|
282
|
+
handler: async ({ site_id, ...rest }) => withSiteRetry(pool, site_id, async (client, site) => withSiteMeta(await handleRenderPreview(client, rest), site)),
|
|
283
|
+
}),
|
|
233
284
|
defineTool({
|
|
234
285
|
name: 'yootheme_builder_page_save',
|
|
235
|
-
description: 'Re-run save-transforms + flush caches. Optionally
|
|
236
|
-
'
|
|
237
|
-
'
|
|
238
|
-
'
|
|
239
|
-
'
|
|
240
|
-
'
|
|
286
|
+
description: 'Re-run save-transforms + flush caches. Optionally REPLACE the template tree by ' +
|
|
287
|
+
'passing the INNER {type:"layout",children:[...]} tree as `layout` — NOT the full ' +
|
|
288
|
+
'template node page_get_layout returns (rejected 422, would blank the page). ' +
|
|
289
|
+
'Validated + ETag-locked; on reject nothing persists. An unrenderable layout is ' +
|
|
290
|
+
'refused PRE-WRITE (422). `dry_run:true` preflights; the success response carries ' +
|
|
291
|
+
'`previous_layout` for 1-call rollback. Omit `layout` to re-run transforms only. ' +
|
|
241
292
|
'ETag optional (412 on conflict; else last-write-wins). ' +
|
|
242
293
|
'Operates on the default site unless site_id is provided.',
|
|
243
294
|
inputSchema: {
|
|
@@ -249,12 +300,22 @@ export function buildPagesTools(pool) {
|
|
|
249
300
|
layout: z
|
|
250
301
|
.record(z.string(), z.unknown())
|
|
251
302
|
.optional()
|
|
252
|
-
.describe('Optional whole YT layout-node object
|
|
253
|
-
'
|
|
303
|
+
.describe('Optional whole YT layout-node object — the INNER tree ' +
|
|
304
|
+
'{type:"layout",children:[...]}, NOT the full template node ' +
|
|
305
|
+
'page_get_layout returns (passing that is rejected as a double-nest). ' +
|
|
306
|
+
'Replaces the template tree atomically. Validated + ETag-locked. ' +
|
|
254
307
|
'Omit to just re-run save-transforms.'),
|
|
308
|
+
// U3/F3 (Glöckle HANDOFF-4): optional render preflight.
|
|
309
|
+
dry_run: z
|
|
310
|
+
.boolean()
|
|
311
|
+
.optional()
|
|
312
|
+
.describe('Optional. When true, run the double-nest guard + a read-only Builder ' +
|
|
313
|
+
'render dry-run and return a validation_report WITHOUT persisting ' +
|
|
314
|
+
'(no write, no cache flush, no ETag bump). Use to verify a binding ' +
|
|
315
|
+
'renders before it can blank the live page. Omit to actually save.'),
|
|
255
316
|
},
|
|
256
317
|
annotations: mutating('Save Page'),
|
|
257
|
-
handler: async ({ site_id, ...rest }, extra) =>
|
|
318
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_page_save', async (client, site) => withRenderContext(withSiteMeta(await handlePageSave(client, rest, extra), site), buildRenderContext({
|
|
258
319
|
siteUrl: site.url,
|
|
259
320
|
parentTemplateId: rest.template_id,
|
|
260
321
|
locale: localeForSite(site),
|
|
@@ -275,7 +336,48 @@ export function buildPagesTools(pool) {
|
|
|
275
336
|
// unchanged template snapshots the same ETag and flushes
|
|
276
337
|
// the same caches. Matrix marks `idempotentHint:true`.
|
|
277
338
|
annotations: mutating('Publish Page'),
|
|
278
|
-
handler: async ({ site_id, ...rest }, extra) =>
|
|
339
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_page_publish', async (client, site) => withRenderContext(withSiteMeta(await handlePagePublish(client, rest, extra), site), buildRenderContext({
|
|
340
|
+
siteUrl: site.url,
|
|
341
|
+
parentTemplateId: rest.template_id,
|
|
342
|
+
locale: localeForSite(site),
|
|
343
|
+
}))),
|
|
344
|
+
}),
|
|
345
|
+
// ─── N3 (Glöckle HANDOFF-5) — template_set_type ───────────────
|
|
346
|
+
// L2 (advanced): set which archive/single a YOOtheme theme template
|
|
347
|
+
// is assigned to (the `templates.<id>.type` condition pages_list
|
|
348
|
+
// reads). The #1 missing step in a taxonomy/CPT-rename workflow —
|
|
349
|
+
// after categoryFaq→categoryHelp the `taxonomy-category_faq` /
|
|
350
|
+
// `single-gloeckle_faq` templates are orphaned and must be re-typed.
|
|
351
|
+
defineTool({
|
|
352
|
+
name: 'yootheme_builder_template_set_type',
|
|
353
|
+
description:
|
|
354
|
+
// N3 (Glöckle HANDOFF-5) — archive/single TYPE reassignment.
|
|
355
|
+
'Reassign which archive/single a YOOtheme THEME template applies to — ' +
|
|
356
|
+
'set its `type` condition (the value pages_list shows) in ONE ETag-locked ' +
|
|
357
|
+
'write. Use after a taxonomy/CPT rename orphans a template (e.g. re-type ' +
|
|
358
|
+
'"taxonomy-category_faq" → "taxonomy-category_help", "single-gloeckle_faq" ' +
|
|
359
|
+
'→ "single-gloeckle_help"). Returns {type, previous_type, new_etag} — ' +
|
|
360
|
+
'previous_type is the read of the prior assignment, folded in. THEME ' +
|
|
361
|
+
'templates only: a page:/article: layout is refused (422). ETag req. ' +
|
|
362
|
+
'Operates on the default site unless site_id is provided.',
|
|
363
|
+
inputSchema: {
|
|
364
|
+
site_id: SITE_ID_SCHEMA,
|
|
365
|
+
template_id: TEMPLATE_ID,
|
|
366
|
+
type: z
|
|
367
|
+
.string()
|
|
368
|
+
.min(1)
|
|
369
|
+
.describe('The new archive/single TYPE assignment (the `type` condition ' +
|
|
370
|
+
'pages_list surfaces), e.g. "taxonomy-category_help", ' +
|
|
371
|
+
'"single-gloeckle_help", "archive-post", or the bare "template". ' +
|
|
372
|
+
'Read the current value via pages_list (the `type` column) or ' +
|
|
373
|
+
'GET the template first. `page`/`article` are NOT valid here.'),
|
|
374
|
+
// Required strict ETag (the re-type is a real mutation; the PHP
|
|
375
|
+
// controller enforces If-Match → 428 if omitted, 412 on stale).
|
|
376
|
+
etag: ETAG_STRICT,
|
|
377
|
+
},
|
|
378
|
+
outputSchema: TEMPLATE_SET_TYPE_OUTPUT_SCHEMA,
|
|
379
|
+
annotations: mutating('Set Template Type'),
|
|
380
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_template_set_type', async (client, site) => withRenderContext(withSiteMeta(await handleTemplateSetType(client, rest, extra), site), buildRenderContext({
|
|
279
381
|
siteUrl: site.url,
|
|
280
382
|
parentTemplateId: rest.template_id,
|
|
281
383
|
locale: localeForSite(site),
|
|
@@ -299,7 +401,7 @@ export function buildPagesTools(pool) {
|
|
|
299
401
|
// No outputSchema: the response shape is a discriminated union
|
|
300
402
|
// (201 wet vs 200 dry-run). page_get_layout uses the same pattern.
|
|
301
403
|
annotations: mutating('Create Page'),
|
|
302
|
-
handler: async ({ site_id, ...rest }, extra) =>
|
|
404
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_pages_create', async (client, site) => withRenderContext(withSiteMeta(await handlePagesCreate(client, rest, extra), site), buildRenderContext({
|
|
303
405
|
siteUrl: site.url,
|
|
304
406
|
// A new page has no caller-supplied parent
|
|
305
407
|
// template; null until the REST response carries
|
|
@@ -329,7 +431,7 @@ export function buildPagesTools(pool) {
|
|
|
329
431
|
// `summary` object — pages_create uses the same no-outputSchema
|
|
330
432
|
// pattern for its discriminated union.
|
|
331
433
|
annotations: creating('Dynamize Page'),
|
|
332
|
-
handler: async ({ site_id, ...rest }, extra) =>
|
|
434
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_page_dynamize', async (client, site) => withRenderContext(withSiteMeta(await handlePageDynamize(client, rest, extra), site), buildRenderContext({
|
|
333
435
|
siteUrl: site.url,
|
|
334
436
|
parentTemplateId: null,
|
|
335
437
|
locale: localeForSite(site),
|
|
@@ -345,7 +447,7 @@ export function buildPagesTools(pool) {
|
|
|
345
447
|
inputSchema: { site_id: SITE_ID_SCHEMA, ...PAGES_DELETE_INPUT },
|
|
346
448
|
outputSchema: PAGES_DELETE_OUTPUT_SCHEMA,
|
|
347
449
|
annotations: mutating('Delete Page'),
|
|
348
|
-
handler: async ({ site_id, ...rest }, extra) =>
|
|
450
|
+
handler: async ({ site_id, ...rest }, extra) => withWriteSiteRetry(pool, site_id, 'yootheme_builder_pages_delete', async (client, site) => withSiteMeta(await handlePagesDelete(client, rest, extra), site)),
|
|
349
451
|
}),
|
|
350
452
|
];
|
|
351
453
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/pages/builders.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/pages/builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,9 +19,11 @@ export declare function handlePagesList(client: RestClient, { fields, limit, cur
|
|
|
19
19
|
/** Structured shape returned by GET /pages/resolve on success. */
|
|
20
20
|
export interface ResolvedTemplate {
|
|
21
21
|
readonly template_id: string;
|
|
22
|
-
readonly post_id: number;
|
|
22
|
+
readonly post_id: number | null;
|
|
23
23
|
readonly type: string;
|
|
24
24
|
readonly frontend_url: string | null;
|
|
25
|
+
readonly context: string | null;
|
|
26
|
+
readonly resolved_via: 'per_page' | 'theme_template';
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* G-A (Track-C URL→layout): GET /pages/resolve?url=... → the per-page
|
|
@@ -38,7 +40,7 @@ export declare function handlePagesResolve(client: RestClient, { url }: {
|
|
|
38
40
|
}): Promise<ToolResult>;
|
|
39
41
|
/** Test-only: clear the dedup cache between cases (mirrors the bus reset idiom). */
|
|
40
42
|
export declare function __resetLayoutDedupCacheForTests(): void;
|
|
41
|
-
export declare function handlePageGetLayout(client: RestClient, { template_id, post_id, url, flat, fields, mode, force, max_chars }: {
|
|
43
|
+
export declare function handlePageGetLayout(client: RestClient, { template_id, post_id, url, flat, fields, mode, force, cursor, max_chars }: {
|
|
42
44
|
template_id?: string;
|
|
43
45
|
post_id?: number;
|
|
44
46
|
url?: string;
|
|
@@ -46,6 +48,7 @@ export declare function handlePageGetLayout(client: RestClient, { template_id, p
|
|
|
46
48
|
fields?: readonly string[];
|
|
47
49
|
mode?: 'full' | 'bindings_only' | 'outline';
|
|
48
50
|
force?: boolean;
|
|
51
|
+
cursor?: string;
|
|
49
52
|
max_chars?: number;
|
|
50
53
|
}): Promise<ToolResult>;
|
|
51
54
|
export declare function handlePageGetSchema(client: RestClient, { template_id, post_id, url, fields, max_chars }: {
|
|
@@ -65,4 +68,23 @@ export declare function handleGetEtag(client: RestClient): Promise<ToolResult>;
|
|
|
65
68
|
export declare function handleTemplateSummary(client: RestClient, { template_id }: {
|
|
66
69
|
template_id: string;
|
|
67
70
|
}): Promise<ToolResult>;
|
|
71
|
+
/**
|
|
72
|
+
* F5 + N5 (Glöckle HANDOFF-4/5): the authenticated post-write render
|
|
73
|
+
* HEALTHCHECK. Resolves the EFFECTIVE template_id from `template_id` OR `url`
|
|
74
|
+
* (the SAME `resolveEffectiveTemplateId` precedence page_get_layout uses — a
|
|
75
|
+
* pasted public URL is reverse-resolved via GET /pages/resolve first), then
|
|
76
|
+
* GETs `/pages/{id}/render-preview` which runs the in-process read-only Builder
|
|
77
|
+
* render server-side over the already-authenticated Bearer channel — answering
|
|
78
|
+
* "renders / N items / blank?" where an external cURL 401s behind QA Basic-Auth.
|
|
79
|
+
*
|
|
80
|
+
* Returns the strict RENDER_PREVIEW_OUTPUT_SCHEMA shape: `{rendered, item_count,
|
|
81
|
+
* empty, error?, cache_purge_hint, template_id}`. A render that resolved to zero
|
|
82
|
+
* items, or that threw inside the Builder pipeline (the swallowed YOOtheme
|
|
83
|
+
* render error surfaced as `error`), is a SUCCESS — not a tool error.
|
|
84
|
+
*/
|
|
85
|
+
export declare function handleRenderPreview(client: RestClient, { template_id, url, expect }: {
|
|
86
|
+
template_id?: string;
|
|
87
|
+
url?: string;
|
|
88
|
+
expect?: string;
|
|
89
|
+
}): Promise<ToolResult>;
|
|
68
90
|
//# sourceMappingURL=handlers-read.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-read.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers-read.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
import { detailResult, tableResult } from '@getimo/mcp-toolkit';
|
|
11
11
|
import { encodeTemplateId } from '../../client.js';
|
|
12
12
|
import { flattenLayout } from '../layout-flatten.js';
|
|
13
|
-
import { PAGES_COMPACT_COLUMNS, PAGES_TABLE_COLUMNS, SCHEMA_COMPACT_COLUMNS, SCHEMA_TABLE_COLUMNS, buildEtagDetail, buildOutlineText, buildSchemaRows, mapPageRow, } from '../format/pages-format.js';
|
|
14
|
-
import { DEFAULT_FIELDS_PAGES_LIST, DEFAULT_FIELDS_SCHEMA, applyMaxChars, columnsFromFields, projectFields, projectedFieldsEcho, projectionFeedback, projectionWarning, } from '../sparse-fields.js';
|
|
13
|
+
import { PAGES_COMPACT_COLUMNS, PAGES_TABLE_COLUMNS, SCHEMA_COMPACT_COLUMNS, SCHEMA_TABLE_COLUMNS, buildEtagDetail, buildOutlineText, buildRenderPreviewDetail, buildSchemaRows, mapPageRow, } from '../format/pages-format.js';
|
|
14
|
+
import { DEFAULT_FIELDS_PAGES_LIST, DEFAULT_FIELDS_SCHEMA, applyMaxChars, clipTextWindow, columnsFromFields, decodeOffsetCursor, encodeOffsetCursor, projectFields, projectedFieldsEcho, projectionFeedback, projectionWarning, } from '../sparse-fields.js';
|
|
15
15
|
import { errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
|
|
16
16
|
// ─── pages_list ─────────────────────────────────────────────────────
|
|
17
17
|
/** Default page size for pages_list when `limit` is omitted (B2). */
|
|
@@ -139,9 +139,15 @@ export async function handlePagesResolve(client, { url }) {
|
|
|
139
139
|
const data = await resolveUrlToTemplate(client, url);
|
|
140
140
|
return structuredResult(jsonResult(data), {
|
|
141
141
|
template_id: data.template_id,
|
|
142
|
-
|
|
142
|
+
// G-A2: post_id is null for a theme-template resolution.
|
|
143
|
+
post_id: data.post_id ?? null,
|
|
143
144
|
type: data.type,
|
|
144
145
|
frontend_url: data.frontend_url ?? null,
|
|
146
|
+
// G-A2: context/resolved_via are additive. An OLDER plugin (pre-G-A2)
|
|
147
|
+
// only ever resolved per-page layouts and omits both — default to the
|
|
148
|
+
// per-page shape so a strict host still accepts the success.
|
|
149
|
+
context: data.context ?? null,
|
|
150
|
+
resolved_via: data.resolved_via ?? 'per_page',
|
|
145
151
|
});
|
|
146
152
|
}
|
|
147
153
|
catch (e) {
|
|
@@ -274,9 +280,9 @@ async function resolveEffectiveTemplateId(client, args) {
|
|
|
274
280
|
error: errorResult({
|
|
275
281
|
error: e,
|
|
276
282
|
context: { url: args.url },
|
|
277
|
-
hint: 'This URL did not resolve to a per-page layout
|
|
278
|
-
'
|
|
279
|
-
'to find its template_id.',
|
|
283
|
+
hint: 'This URL did not resolve to a per-page layout or a governing ' +
|
|
284
|
+
'theme template (home/front-page/search/date are not mapped). ' +
|
|
285
|
+
'Use yootheme_builder_pages_list to find its template_id.',
|
|
280
286
|
}),
|
|
281
287
|
};
|
|
282
288
|
}
|
|
@@ -327,7 +333,47 @@ function parseOutlineNodes(raw) {
|
|
|
327
333
|
}
|
|
328
334
|
return out;
|
|
329
335
|
}
|
|
330
|
-
|
|
336
|
+
/**
|
|
337
|
+
* B7 (Glöckle continuation cursor) — build the full-dump TEXT leg windowed at
|
|
338
|
+
* `[offset, offset+max_chars)` and, when more remains, append a `next_cursor`.
|
|
339
|
+
*
|
|
340
|
+
* The truncated full/bindings_only TEXT leg of page_get_layout had NO
|
|
341
|
+
* continuation: once `max_chars` clipped the JSON dump there was no way to
|
|
342
|
+
* fetch the rest of THAT subtree. This windows the SAME serialized JSON
|
|
343
|
+
* `jsonResult(data)` would emit, slices it from `offset` for up to `max_chars`
|
|
344
|
+
* chars, and emits a `next_cursor` (base64url `o:<n>`, the SAME opaque
|
|
345
|
+
* offset-cursor contract pages_list/sources_list use) when the body is clipped
|
|
346
|
+
* so a follow-up call resumes from the offset. The structured leg carries the
|
|
347
|
+
* cursor + offsets verbatim (page_get_layout declares no outputSchema).
|
|
348
|
+
*
|
|
349
|
+
* `max_chars === undefined` AND `offset === 0` returns the whole body with NO
|
|
350
|
+
* cursor — byte-identical to the pre-B7 `applyMaxChars(jsonResult(data),
|
|
351
|
+
* undefined)` no-op. A final slice (nothing left after it) carries no cursor.
|
|
352
|
+
*/
|
|
353
|
+
function windowedFullDump(data, offset, maxChars) {
|
|
354
|
+
const firstBlock = jsonResult(data).content[0];
|
|
355
|
+
const fullText = firstBlock !== undefined && firstBlock.type === 'text' && typeof firstBlock.text === 'string'
|
|
356
|
+
? firstBlock.text
|
|
357
|
+
: '';
|
|
358
|
+
const fullLength = fullText.length;
|
|
359
|
+
const window = clipTextWindow(fullText, offset, maxChars);
|
|
360
|
+
const nextCursor = window.clipped ? encodeOffsetCursor(window.nextOffset) : undefined;
|
|
361
|
+
// The text leg the LLM reads: the windowed slice. When a cursor is emitted
|
|
362
|
+
// the clip marker already rides inside `window.text`; append the resume
|
|
363
|
+
// hint so an agent reading ONLY the text leg can still page.
|
|
364
|
+
const text = nextCursor !== undefined
|
|
365
|
+
? `${window.text}\n[continued] pass cursor:"${nextCursor}" to page_get_layout to read chars ` +
|
|
366
|
+
`${String(window.nextOffset)}–${String(fullLength)} of this layout.`
|
|
367
|
+
: window.text;
|
|
368
|
+
return structuredResult({ content: [{ type: 'text', text }] }, {
|
|
369
|
+
...data,
|
|
370
|
+
...(nextCursor !== undefined ? { next_cursor: nextCursor } : {}),
|
|
371
|
+
char_offset: window.offset,
|
|
372
|
+
char_total: fullLength,
|
|
373
|
+
returned_chars: window.text.length,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
export async function handlePageGetLayout(client, { template_id, post_id, url, flat, fields, mode, force, cursor, max_chars }) {
|
|
331
377
|
try {
|
|
332
378
|
// G-A: resolve the effective template_id from template_id | post_id | url.
|
|
333
379
|
const effective = await resolveEffectiveTemplateId(client, { template_id, post_id, url });
|
|
@@ -335,6 +381,14 @@ export async function handlePageGetLayout(client, { template_id, post_id, url, f
|
|
|
335
381
|
return effective.error;
|
|
336
382
|
}
|
|
337
383
|
const templateId = effective.templateId;
|
|
384
|
+
// B7 (Glöckle continuation cursor): an opaque char-offset cursor
|
|
385
|
+
// (base64url `o:<n>`) resumes a previously-clipped full/bindings_only
|
|
386
|
+
// text leg from the offset. A present cursor makes the read a
|
|
387
|
+
// CONTINUATION — it is NEVER served from the [unchanged] dedup cache
|
|
388
|
+
// (the agent is intentionally paging the rest of the dump). `0` (no
|
|
389
|
+
// cursor / start) keeps the pre-B7 behaviour.
|
|
390
|
+
const charOffset = decodeOffsetCursor(cursor);
|
|
391
|
+
const isContinuation = cursor !== undefined && cursor !== '';
|
|
338
392
|
// F195 (P0): forward `mode=bindings_only` so the server returns the
|
|
339
393
|
// trimmed binding skeleton the dynamize/bind workflow needs. G1 (V3):
|
|
340
394
|
// `mode=outline` forwards `?mode=outline` for the flat semantic-outline
|
|
@@ -355,13 +409,26 @@ export async function handlePageGetLayout(client, { template_id, post_id, url, f
|
|
|
355
409
|
}
|
|
356
410
|
// F195 (P0): per-process dedup of REPEATED full reads. bindings_only
|
|
357
411
|
// is already cheap (and the recommended path), so it is never deduped.
|
|
358
|
-
// The skeleton passes straight through unchanged
|
|
412
|
+
// The skeleton passes straight through unchanged — EXCEPT B7: when
|
|
413
|
+
// `max_chars` clips it (or the caller resumes with a `cursor`), it gets
|
|
414
|
+
// the SAME char-offset continuation window the full leg does, so the
|
|
415
|
+
// binding skeleton of a very large template is pageable too.
|
|
359
416
|
if (isBindingsOnly) {
|
|
417
|
+
if (max_chars !== undefined || isContinuation) {
|
|
418
|
+
return windowedFullDump(data, charOffset, max_chars);
|
|
419
|
+
}
|
|
360
420
|
return jsonResult(data);
|
|
361
421
|
}
|
|
362
422
|
const etag = typeof data.etag === 'string' ? data.etag : undefined;
|
|
363
423
|
const dedupKey = `${client.getPlatform().baseUrl}|${templateId}`;
|
|
364
|
-
|
|
424
|
+
// B7: a WINDOWED read — either a continuation (cursor present) or a
|
|
425
|
+
// first slice (max_chars set) — must NEVER short-circuit on the
|
|
426
|
+
// [unchanged] dedup. The agent explicitly wants a (paged) slice of the
|
|
427
|
+
// body, and the one-line `[unchanged]` notice carries no slice + no
|
|
428
|
+
// cursor, which would strand the pager. Only the un-windowed full read
|
|
429
|
+
// is deduped (the forensic's duplicate-84KB waste this guards).
|
|
430
|
+
const isWindowedRead = isContinuation || max_chars !== undefined;
|
|
431
|
+
if (!isWindowedRead && force !== true && flat !== true && etag !== undefined) {
|
|
365
432
|
const lastServed = layoutDedupCache.get(dedupKey);
|
|
366
433
|
if (lastServed === etag) {
|
|
367
434
|
// Identical (template, etag) already emitted this process —
|
|
@@ -384,8 +451,16 @@ export async function handlePageGetLayout(client, { template_id, post_id, url, f
|
|
|
384
451
|
if (flat !== true) {
|
|
385
452
|
// Default: nested passthrough — unchanged from pre-G.3, except an
|
|
386
453
|
// OPTIONAL G-B `max_chars` caps the (potentially large) JSON text
|
|
387
|
-
// leg.
|
|
388
|
-
//
|
|
454
|
+
// leg. B7 (Glöckle continuation cursor): when the dump is clipped
|
|
455
|
+
// (by `max_chars` or resumed via `cursor`) it now also emits a
|
|
456
|
+
// `next_cursor` so an agent can page through the REST of the
|
|
457
|
+
// subtree instead of being stuck with the first slice. With no
|
|
458
|
+
// `max_chars` AND no cursor the whole body is returned with no
|
|
459
|
+
// cursor — byte-identical to the pre-B7 `applyMaxChars(…,
|
|
460
|
+
// undefined)` no-op.
|
|
461
|
+
if (max_chars !== undefined || isContinuation) {
|
|
462
|
+
return windowedFullDump(data, charOffset, max_chars);
|
|
463
|
+
}
|
|
389
464
|
return applyMaxChars(jsonResult(data), max_chars);
|
|
390
465
|
}
|
|
391
466
|
// flat: true → depth-first walk on the nested layout. Apply
|
|
@@ -633,4 +708,75 @@ export async function handleTemplateSummary(client, { template_id }) {
|
|
|
633
708
|
});
|
|
634
709
|
}
|
|
635
710
|
}
|
|
711
|
+
// ─── render_preview (F5 + N5 — authenticated post-write render check) ──
|
|
712
|
+
/**
|
|
713
|
+
* F5 + N5 (Glöckle HANDOFF-4/5): the authenticated post-write render
|
|
714
|
+
* HEALTHCHECK. Resolves the EFFECTIVE template_id from `template_id` OR `url`
|
|
715
|
+
* (the SAME `resolveEffectiveTemplateId` precedence page_get_layout uses — a
|
|
716
|
+
* pasted public URL is reverse-resolved via GET /pages/resolve first), then
|
|
717
|
+
* GETs `/pages/{id}/render-preview` which runs the in-process read-only Builder
|
|
718
|
+
* render server-side over the already-authenticated Bearer channel — answering
|
|
719
|
+
* "renders / N items / blank?" where an external cURL 401s behind QA Basic-Auth.
|
|
720
|
+
*
|
|
721
|
+
* Returns the strict RENDER_PREVIEW_OUTPUT_SCHEMA shape: `{rendered, item_count,
|
|
722
|
+
* empty, error?, cache_purge_hint, template_id}`. A render that resolved to zero
|
|
723
|
+
* items, or that threw inside the Builder pipeline (the swallowed YOOtheme
|
|
724
|
+
* render error surfaced as `error`), is a SUCCESS — not a tool error.
|
|
725
|
+
*/
|
|
726
|
+
export async function handleRenderPreview(client, { template_id, url, expect }) {
|
|
727
|
+
try {
|
|
728
|
+
// G-A precedence: template_id wins, else resolve `url` to its template_id.
|
|
729
|
+
const effective = await resolveEffectiveTemplateId(client, { template_id, url });
|
|
730
|
+
if ('error' in effective) {
|
|
731
|
+
return effective.error;
|
|
732
|
+
}
|
|
733
|
+
const templateId = effective.templateId;
|
|
734
|
+
// Glöckle HANDOFF-6 #4: an `expect` substring is passed to the render
|
|
735
|
+
// endpoint as a query param (the server greps the rendered HTML and adds
|
|
736
|
+
// {matched, snippet}). A blank value is treated as "no check".
|
|
737
|
+
const wantMatch = typeof expect === 'string' && expect !== '';
|
|
738
|
+
const query = wantMatch ? `?${new URLSearchParams({ expect }).toString()}` : '';
|
|
739
|
+
const data = await client.get(`/pages/${encodeTemplateId(templateId)}/render-preview${query}`);
|
|
740
|
+
// Normalize the REST body into the strict output shape. Defensive
|
|
741
|
+
// coercion keeps a malformed/partial host payload from tripping the
|
|
742
|
+
// strict outputSchema (-32602) — the structured leg MUST validate.
|
|
743
|
+
const payload = {
|
|
744
|
+
template_id: typeof data.template_id === 'string' ? data.template_id : templateId,
|
|
745
|
+
rendered: data.rendered === true,
|
|
746
|
+
item_count: typeof data.item_count === 'number' && Number.isFinite(data.item_count)
|
|
747
|
+
? Math.max(0, Math.trunc(data.item_count))
|
|
748
|
+
: 0,
|
|
749
|
+
empty: data.empty !== false,
|
|
750
|
+
cache_purge_hint: typeof data.cache_purge_hint === 'string' ? data.cache_purge_hint : '',
|
|
751
|
+
...(typeof data.error === 'string' ? { error: data.error } : {}),
|
|
752
|
+
// The {matched, snippet} pair is surfaced ONLY when `expect` was
|
|
753
|
+
// requested. `matched` coerces to a strict boolean; `snippet` is a
|
|
754
|
+
// string when present, else null (a miss / a render that threw).
|
|
755
|
+
...(wantMatch
|
|
756
|
+
? {
|
|
757
|
+
matched: data.matched === true,
|
|
758
|
+
snippet: typeof data.snippet === 'string' ? data.snippet : null,
|
|
759
|
+
}
|
|
760
|
+
: {}),
|
|
761
|
+
};
|
|
762
|
+
return structuredResult(detailResult(buildRenderPreviewDetail(payload)), {
|
|
763
|
+
rendered: payload.rendered,
|
|
764
|
+
item_count: payload.item_count,
|
|
765
|
+
empty: payload.empty,
|
|
766
|
+
cache_purge_hint: payload.cache_purge_hint,
|
|
767
|
+
template_id: payload.template_id,
|
|
768
|
+
...(payload.error !== undefined ? { error: payload.error } : {}),
|
|
769
|
+
...(payload.matched !== undefined ? { matched: payload.matched } : {}),
|
|
770
|
+
...(wantMatch ? { snippet: payload.snippet ?? null } : {}),
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
catch (e) {
|
|
774
|
+
return errorResult({
|
|
775
|
+
error: e,
|
|
776
|
+
context: { template_id, url, expect },
|
|
777
|
+
hint: 'Verify the template_id exists via yootheme_builder_pages_list ' +
|
|
778
|
+
'(or that the url resolves). Run yootheme_builder_diagnose to check auth.',
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
}
|
|
636
782
|
//# sourceMappingURL=handlers-read.js.map
|