@wootsup/yt-builder-mcp 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -12
- package/dist/catalog/build-catalog.d.ts +63 -0
- package/dist/catalog/build-catalog.d.ts.map +1 -0
- package/dist/catalog/build-catalog.js +166 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli/doctor-command.d.ts +21 -0
- package/dist/cli/doctor-command.d.ts.map +1 -0
- package/dist/cli/doctor-command.js +111 -0
- package/dist/cli/doctor-command.js.map +1 -0
- package/dist/cli/invocation-decision.d.ts.map +1 -1
- package/dist/cli/invocation-decision.js +2 -0
- package/dist/cli/invocation-decision.js.map +1 -1
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -1
- package/dist/diagnostics/ca-trust.d.ts +16 -0
- package/dist/diagnostics/ca-trust.d.ts.map +1 -0
- package/dist/diagnostics/ca-trust.js +54 -0
- package/dist/diagnostics/ca-trust.js.map +1 -0
- package/dist/diagnostics/diagnose-network-error.d.ts +37 -0
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -0
- package/dist/diagnostics/diagnose-network-error.js +158 -0
- package/dist/diagnostics/diagnose-network-error.js.map +1 -0
- package/dist/diagnostics/doctor.d.ts +62 -0
- package/dist/diagnostics/doctor.d.ts.map +1 -0
- package/dist/diagnostics/doctor.js +165 -0
- package/dist/diagnostics/doctor.js.map +1 -0
- package/dist/gateway/advanced-read-tool.d.ts +37 -0
- package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
- package/dist/gateway/advanced-read-tool.js +156 -0
- package/dist/gateway/advanced-read-tool.js.map +1 -0
- package/dist/gateway/advanced-tool/domains.d.ts +18 -3
- package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/domains.js +28 -9
- package/dist/gateway/advanced-tool/domains.js.map +1 -1
- package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
- package/dist/gateway/advanced-tool/register.js +43 -11
- package/dist/gateway/advanced-tool/register.js.map +1 -1
- package/dist/gateway/essentials.d.ts +14 -4
- package/dist/gateway/essentials.d.ts.map +1 -1
- package/dist/gateway/essentials.js +46 -5
- package/dist/gateway/essentials.js.map +1 -1
- package/dist/gateway/test-support.d.ts +2 -2
- package/dist/gateway/test-support.js +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -1
- package/dist/install-skill.d.ts +1 -1
- package/dist/install-skill.js +2 -2
- package/dist/net/extra-headers.d.ts +66 -0
- package/dist/net/extra-headers.d.ts.map +1 -0
- package/dist/net/extra-headers.js +164 -0
- package/dist/net/extra-headers.js.map +1 -0
- package/dist/net/internal-host.d.ts +45 -0
- package/dist/net/internal-host.d.ts.map +1 -0
- package/dist/net/internal-host.js +164 -0
- package/dist/net/internal-host.js.map +1 -0
- package/dist/net/proxy-dispatcher.d.ts +40 -0
- package/dist/net/proxy-dispatcher.d.ts.map +1 -0
- package/dist/net/proxy-dispatcher.js +65 -0
- package/dist/net/proxy-dispatcher.js.map +1 -0
- package/dist/proxy/bridge.d.ts +43 -0
- package/dist/proxy/bridge.d.ts.map +1 -0
- package/dist/proxy/bridge.js +155 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +10 -0
- package/dist/proxy/mode.d.ts.map +1 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/server.d.ts +5 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -3
- package/dist/server.js.map +1 -1
- package/dist/setup-ca-env.d.ts +40 -0
- package/dist/setup-ca-env.d.ts.map +1 -0
- package/dist/setup-ca-env.js +58 -0
- package/dist/setup-ca-env.js.map +1 -0
- package/dist/setup-ca-reprobe.d.ts +38 -0
- package/dist/setup-ca-reprobe.d.ts.map +1 -0
- package/dist/setup-ca-reprobe.js +68 -0
- package/dist/setup-ca-reprobe.js.map +1 -0
- package/dist/setup-cli.d.ts +37 -2
- package/dist/setup-cli.d.ts.map +1 -1
- package/dist/setup-cli.js +178 -4
- package/dist/setup-cli.js.map +1 -1
- package/dist/setup-npx-spec.d.ts +44 -0
- package/dist/setup-npx-spec.d.ts.map +1 -0
- package/dist/setup-npx-spec.js +66 -0
- package/dist/setup-npx-spec.js.map +1 -0
- package/dist/setup-prompts.d.ts +14 -1
- package/dist/setup-prompts.d.ts.map +1 -1
- package/dist/setup-prompts.js +53 -1
- package/dist/setup-prompts.js.map +1 -1
- package/dist/setup-wizard-defaults.d.ts.map +1 -1
- package/dist/setup-wizard-defaults.js +29 -5
- package/dist/setup-wizard-defaults.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts +4 -4
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +46 -12
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +81 -0
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard.d.ts +2 -2
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +140 -18
- package/dist/setup-wizard.js.map +1 -1
- package/dist/sites/client-pool.d.ts +8 -1
- package/dist/sites/client-pool.d.ts.map +1 -1
- package/dist/sites/client-pool.js +34 -4
- package/dist/sites/client-pool.js.map +1 -1
- package/dist/sites/registry.d.ts +30 -0
- package/dist/sites/registry.d.ts.map +1 -1
- package/dist/sites/registry.js.map +1 -1
- package/dist/sites/store.d.ts +8 -1
- package/dist/sites/store.d.ts.map +1 -1
- package/dist/sites/store.js +17 -2
- package/dist/sites/store.js.map +1 -1
- package/dist/sites/tools/use-site.d.ts.map +1 -1
- package/dist/sites/tools/use-site.js +26 -6
- package/dist/sites/tools/use-site.js.map +1 -1
- package/dist/tools/bind-guidance.d.ts +80 -0
- package/dist/tools/bind-guidance.d.ts.map +1 -0
- package/dist/tools/bind-guidance.js +95 -0
- package/dist/tools/bind-guidance.js.map +1 -0
- package/dist/tools/elements/builders.d.ts.map +1 -1
- package/dist/tools/elements/builders.js +63 -13
- package/dist/tools/elements/builders.js.map +1 -1
- package/dist/tools/elements/handlers-write.d.ts +19 -2
- package/dist/tools/elements/handlers-write.d.ts.map +1 -1
- package/dist/tools/elements/handlers-write.js +179 -10
- package/dist/tools/elements/handlers-write.js.map +1 -1
- package/dist/tools/elements/handlers.d.ts +8 -2
- package/dist/tools/elements/handlers.d.ts.map +1 -1
- package/dist/tools/elements/handlers.js +76 -28
- package/dist/tools/elements/handlers.js.map +1 -1
- package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
- package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
- package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
- package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
- package/dist/tools/format/elements-format.d.ts +35 -0
- package/dist/tools/format/elements-format.d.ts.map +1 -1
- package/dist/tools/format/elements-format.js +124 -1
- package/dist/tools/format/elements-format.js.map +1 -1
- package/dist/tools/format/health-format.d.ts +3 -0
- package/dist/tools/format/health-format.d.ts.map +1 -1
- package/dist/tools/format/health-format.js +21 -4
- package/dist/tools/format/health-format.js.map +1 -1
- package/dist/tools/format/inspection-format.d.ts +18 -0
- package/dist/tools/format/inspection-format.d.ts.map +1 -1
- package/dist/tools/format/inspection-format.js +22 -1
- package/dist/tools/format/inspection-format.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +7 -0
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/format/sources-format.d.ts +8 -0
- package/dist/tools/format/sources-format.d.ts.map +1 -1
- package/dist/tools/format/sources-format.js +10 -0
- package/dist/tools/format/sources-format.js.map +1 -1
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +56 -0
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspection.d.ts +24 -0
- package/dist/tools/inspection.d.ts.map +1 -1
- package/dist/tools/inspection.js +140 -41
- package/dist/tools/inspection.js.map +1 -1
- package/dist/tools/layout-flatten.d.ts +11 -8
- package/dist/tools/layout-flatten.d.ts.map +1 -1
- package/dist/tools/layout-flatten.js +17 -6
- package/dist/tools/layout-flatten.js.map +1 -1
- package/dist/tools/multi-items/builders.d.ts.map +1 -1
- package/dist/tools/multi-items/builders.js +11 -2
- package/dist/tools/multi-items/builders.js.map +1 -1
- package/dist/tools/multi-items/inspect-handler.d.ts +13 -0
- package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
- package/dist/tools/multi-items/inspect-handler.js +147 -3
- 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 +153 -39
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +40 -5
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +404 -76
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/handlers-write.d.ts +95 -1
- package/dist/tools/pages/handlers-write.d.ts.map +1 -1
- package/dist/tools/pages/handlers-write.js +137 -8
- package/dist/tools/pages/handlers-write.js.map +1 -1
- package/dist/tools/pages/index.d.ts +1 -1
- package/dist/tools/pages/index.d.ts.map +1 -1
- package/dist/tools/pages/index.js +1 -1
- package/dist/tools/pages/index.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +74 -5
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +243 -8
- package/dist/tools/pages/schemas.js.map +1 -1
- package/dist/tools/shared-schemas.d.ts +3 -0
- package/dist/tools/shared-schemas.d.ts.map +1 -1
- package/dist/tools/shared-schemas.js +43 -13
- package/dist/tools/shared-schemas.js.map +1 -1
- package/dist/tools/sources/builders.d.ts.map +1 -1
- package/dist/tools/sources/builders.js +93 -10
- package/dist/tools/sources/builders.js.map +1 -1
- package/dist/tools/sources/handlers-bind.d.ts +13 -1
- package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
- package/dist/tools/sources/handlers-bind.js +163 -1
- package/dist/tools/sources/handlers-bind.js.map +1 -1
- package/dist/tools/sources/handlers.d.ts +12 -1
- package/dist/tools/sources/handlers.d.ts.map +1 -1
- package/dist/tools/sources/handlers.js +103 -16
- package/dist/tools/sources/handlers.js.map +1 -1
- package/dist/tools/sparse-fields.d.ts +73 -0
- package/dist/tools/sparse-fields.d.ts.map +1 -1
- package/dist/tools/sparse-fields.js +136 -0
- package/dist/tools/sparse-fields.js.map +1 -1
- package/dist/tools/sublayout/builders.d.ts +23 -0
- package/dist/tools/sublayout/builders.d.ts.map +1 -0
- package/dist/tools/sublayout/builders.js +54 -0
- package/dist/tools/sublayout/builders.js.map +1 -0
- package/dist/tools/sublayout/index.d.ts +13 -0
- package/dist/tools/sublayout/index.d.ts.map +1 -0
- package/dist/tools/sublayout/index.js +13 -0
- package/dist/tools/sublayout/index.js.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
- package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
- package/dist/tools/tool-builder/results.d.ts +31 -0
- package/dist/tools/tool-builder/results.d.ts.map +1 -1
- package/dist/tools/tool-builder/results.js +95 -4
- package/dist/tools/tool-builder/results.js.map +1 -1
- package/dist/update/update-check.d.ts +56 -0
- package/dist/update/update-check.d.ts.map +1 -0
- package/dist/update/update-check.js +155 -0
- package/dist/update/update-check.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +5 -2
- package/skills/yt-builder-mcp/SKILL.md +148 -82
|
@@ -11,40 +11,106 @@ import { detailResult, tableResult } from '@getimo/mcp-toolkit';
|
|
|
11
11
|
import { encodeTemplateId } from '../../client.js';
|
|
12
12
|
import { flattenLayout } from '../layout-flatten.js';
|
|
13
13
|
import { PAGES_COMPACT_COLUMNS, PAGES_TABLE_COLUMNS, SCHEMA_COMPACT_COLUMNS, SCHEMA_TABLE_COLUMNS, buildEtagDetail, buildSchemaRows, mapPageRow, } from '../format/pages-format.js';
|
|
14
|
-
import { DEFAULT_FIELDS_PAGES_LIST, projectFields, projectedFieldsEcho, projectionFeedback, } from '../sparse-fields.js';
|
|
14
|
+
import { DEFAULT_FIELDS_PAGES_LIST, DEFAULT_FIELDS_SCHEMA, applyMaxChars, columnsFromFields, 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). */
|
|
18
|
+
const DEFAULT_PAGES_LIMIT = 50;
|
|
19
|
+
/** Decode an offset cursor (`base64url("o:<n>")` or raw `o:<n>`) → offset, else 0. */
|
|
20
|
+
function decodePagesCursor(cursor) {
|
|
21
|
+
if (cursor === undefined || cursor === '')
|
|
22
|
+
return 0;
|
|
23
|
+
let raw = cursor;
|
|
24
|
+
if (!/^o:\d+$/.test(cursor)) {
|
|
25
|
+
try {
|
|
26
|
+
raw = Buffer.from(cursor.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8');
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const m = /^o:(\d+)$/.exec(raw);
|
|
33
|
+
return m ? Number(m[1]) : 0;
|
|
34
|
+
}
|
|
35
|
+
function encodePagesCursor(offset) {
|
|
36
|
+
return Buffer.from(`o:${offset}`, 'utf8').toString('base64url');
|
|
37
|
+
}
|
|
38
|
+
/** Case-insensitive substring match across a page row's label / id / type. */
|
|
39
|
+
function matchesPageFilter(row, needle) {
|
|
40
|
+
const hay = `${String(row.label ?? '')} ${String(row.id ?? '')} ${String(row.type ?? '')}`.toLowerCase();
|
|
41
|
+
return hay.includes(needle);
|
|
42
|
+
}
|
|
43
|
+
export async function handlePagesList(client, { fields, limit, cursor, label_contains, max_chars, }) {
|
|
18
44
|
try {
|
|
19
|
-
|
|
45
|
+
// G-B (Glöckle 2026-06-26, P0): forward `limit`/`offset`/`filter` to the
|
|
46
|
+
// REST /pages endpoint so a site with hundreds of templates does not
|
|
47
|
+
// serialize the full set every call (server-side pagination). The
|
|
48
|
+
// server is BACKWARD-COMPATIBLE: with no params it returns the full set
|
|
49
|
+
// (the pre-G-B shape), so the client-side slice below stays a correct
|
|
50
|
+
// fallback for an un-upgraded host that ignores the params. When the
|
|
51
|
+
// server DOES honour them it echoes `total` (the filtered grand total)
|
|
52
|
+
// + `returned`; we trust that `total` over the local slice length so
|
|
53
|
+
// the cursor still spans the whole result.
|
|
54
|
+
const offset = decodePagesCursor(cursor);
|
|
55
|
+
const qs = new URLSearchParams();
|
|
56
|
+
if (typeof limit === 'number')
|
|
57
|
+
qs.set('limit', String(limit));
|
|
58
|
+
if (offset > 0)
|
|
59
|
+
qs.set('offset', String(offset));
|
|
60
|
+
if (label_contains !== undefined && label_contains !== '') {
|
|
61
|
+
qs.set('label_contains', label_contains);
|
|
62
|
+
}
|
|
63
|
+
const query = qs.toString();
|
|
64
|
+
const data = await client.get(`/pages${query !== '' ? `?${query}` : ''}`);
|
|
20
65
|
const rawPages = Array.isArray(data.pages) ? data.pages : [];
|
|
21
|
-
|
|
66
|
+
let mapped = rawPages
|
|
22
67
|
.filter((x) => x !== null && typeof x === 'object')
|
|
23
68
|
.map(mapPageRow);
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
|
|
69
|
+
// B2 (Glöckle 2026-06-25) + G-B server-side fallback: a real site can
|
|
70
|
+
// have hundreds of templates. When the server already paged + filtered
|
|
71
|
+
// (it echoes a `total`), the rows it returned ARE the page — do NOT
|
|
72
|
+
// re-slice them. When the server ignored the params (no `total`, full
|
|
73
|
+
// set returned) we still filter + slice CLIENT-SIDE so behaviour is
|
|
74
|
+
// identical against an un-upgraded host. Filter BEFORE paging so
|
|
75
|
+
// `total` + the cursor reflect the filtered result.
|
|
76
|
+
const serverPaged = typeof data.total === 'number';
|
|
77
|
+
if (!serverPaged && label_contains !== undefined && label_contains !== '') {
|
|
78
|
+
const needle = label_contains.toLowerCase();
|
|
79
|
+
mapped = mapped.filter((row) => matchesPageFilter(row, needle));
|
|
80
|
+
}
|
|
81
|
+
const pageSize = limit ?? DEFAULT_PAGES_LIMIT;
|
|
82
|
+
// Server-paged: rows ARE the slice, total comes from the server.
|
|
83
|
+
// Client-fallback: slice the full set locally.
|
|
84
|
+
const slice = serverPaged ? mapped : mapped.slice(offset, offset + pageSize);
|
|
85
|
+
const total = serverPaged ? data.total : mapped.length;
|
|
86
|
+
const nextOffset = offset + slice.length;
|
|
87
|
+
const nextCursor = nextOffset < total ? encodePagesCursor(nextOffset) : undefined;
|
|
88
|
+
// B1: project the SLICE (text leg + structuredContent) when fields given.
|
|
89
|
+
const items = projectFields(slice, fields, DEFAULT_FIELDS_PAGES_LIST);
|
|
29
90
|
const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_PAGES_LIST);
|
|
30
|
-
const feedback = projectionFeedback(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
91
|
+
const feedback = projectionFeedback(slice, fields);
|
|
92
|
+
// F23 (2026-06-09): shared loud-warning helper.
|
|
93
|
+
const unknownNote = projectionWarning(feedback);
|
|
94
|
+
const useProjection = echo !== undefined && echo.length > 0;
|
|
95
|
+
const projectedColumns = useProjection ? columnsFromFields([...echo]) : undefined;
|
|
96
|
+
const pagedNote = total > slice.length ? ` of ${String(total)}${nextCursor !== undefined ? ', pass cursor for more' : ''}` : '';
|
|
97
|
+
const toolkitResult = tableResult(useProjection ? items : slice, {
|
|
98
|
+
columns: projectedColumns ?? [...PAGES_TABLE_COLUMNS],
|
|
99
|
+
compactColumns: projectedColumns ?? [...PAGES_COMPACT_COLUMNS],
|
|
100
|
+
header: (count) => `${String(count)}${pagedNote} pages${unknownNote}`,
|
|
38
101
|
footer: 'Use yootheme_builder_page_get_schema <id> to inspect.',
|
|
39
102
|
});
|
|
40
|
-
return structuredResult(toolkitResult, {
|
|
103
|
+
return structuredResult(applyMaxChars(toolkitResult, max_chars), {
|
|
41
104
|
items,
|
|
42
|
-
total
|
|
105
|
+
total,
|
|
106
|
+
returned: slice.length,
|
|
107
|
+
...(nextCursor !== undefined ? { next_cursor: nextCursor } : {}),
|
|
43
108
|
...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
|
|
44
109
|
...(echo !== undefined ? { projected_fields: [...echo] } : {}),
|
|
45
110
|
...(feedback !== undefined ? {
|
|
46
111
|
available_fields: [...feedback.available_fields],
|
|
47
112
|
unknown_fields: [...feedback.unknown_fields],
|
|
113
|
+
...(unknownNote.trim() !== '' ? { projection_warning: unknownNote.trim() } : {}),
|
|
48
114
|
} : {}),
|
|
49
115
|
});
|
|
50
116
|
}
|
|
@@ -56,47 +122,264 @@ export async function handlePagesList(client, { fields }) {
|
|
|
56
122
|
});
|
|
57
123
|
}
|
|
58
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* G-A (Track-C URL→layout): GET /pages/resolve?url=... → the per-page
|
|
127
|
+
* `template_id` that renders the URL. Returns the structured result on a
|
|
128
|
+
* 200; throws (RestError 404) when the URL renders via a theme template or
|
|
129
|
+
* carries no YT per-page layout — the caller surfaces the steer-to-pages_list
|
|
130
|
+
* hint. Shared by the `pages_resolve` tool AND the `url`-param fast-path in
|
|
131
|
+
* page_get_layout / page_get_schema (one internal REST call → one MCP call
|
|
132
|
+
* yields the layout).
|
|
133
|
+
*/
|
|
134
|
+
export async function resolveUrlToTemplate(client, url) {
|
|
135
|
+
return client.get(`/pages/resolve?url=${encodeURIComponent(url)}`);
|
|
136
|
+
}
|
|
137
|
+
export async function handlePagesResolve(client, { url }) {
|
|
138
|
+
try {
|
|
139
|
+
const data = await resolveUrlToTemplate(client, url);
|
|
140
|
+
return structuredResult(jsonResult(data), {
|
|
141
|
+
template_id: data.template_id,
|
|
142
|
+
post_id: data.post_id,
|
|
143
|
+
type: data.type,
|
|
144
|
+
frontend_url: data.frontend_url ?? null,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
return errorResult({
|
|
149
|
+
error: e,
|
|
150
|
+
context: { url },
|
|
151
|
+
hint: 'If this 404s, the URL renders via a theme template (not a ' +
|
|
152
|
+
'per-page layout) — use yootheme_builder_pages_list to find its ' +
|
|
153
|
+
'template_id. Verify the URL is a public, singular page/article.',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
59
157
|
// ─── page_get_layout ────────────────────────────────────────────────
|
|
60
|
-
|
|
158
|
+
/**
|
|
159
|
+
* F195 (P0, 2026-06-12) — per-process layout-read dedup cache.
|
|
160
|
+
*
|
|
161
|
+
* The Desktop-E2E #2 forensic showed two identical 84 KB full-layout dumps in
|
|
162
|
+
* a single session (58 % of the 330 KB output budget). The same agent re-read
|
|
163
|
+
* the SAME template at the SAME state — the second dump was pure waste. This
|
|
164
|
+
* module-internal cache records, keyed by `site|template_id`, the LAST etag
|
|
165
|
+
* served as a FULL read. On a subsequent full read whose server-returned etag
|
|
166
|
+
* matches, the handler short-circuits with a one-line `[unchanged]` notice
|
|
167
|
+
* instead of re-emitting the body. `force:true` bypasses; bindings_only reads
|
|
168
|
+
* are never deduped (they are already cheap and are the recommended path).
|
|
169
|
+
*
|
|
170
|
+
* Cache key includes the site so multi-site sessions never cross-contaminate.
|
|
171
|
+
* It is a plain module Map (process-scoped) — exactly the granularity the
|
|
172
|
+
* forensic targets (duplicate reads within one MCP session).
|
|
173
|
+
*/
|
|
174
|
+
const layoutDedupCache = new Map();
|
|
175
|
+
/** Test-only: clear the dedup cache between cases (mirrors the bus reset idiom). */
|
|
176
|
+
export function __resetLayoutDedupCacheForTests() {
|
|
177
|
+
layoutDedupCache.clear();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Single SSoT unwrap rule for `page_get_layout(flat:true)`.
|
|
181
|
+
*
|
|
182
|
+
* flattenLayout iterates the TOP-LEVEL ENTRIES of whatever it is given.
|
|
183
|
+
* That is correct for a *container* (an array, or an index-keyed object
|
|
184
|
+
* `{0:{...},1:{...}}`) where every entry is itself an element node. It
|
|
185
|
+
* is WRONG for a single root NODE (`{type:'layout', children:[...]}`),
|
|
186
|
+
* whose top-level entries are `type` / `children` / `version` — not
|
|
187
|
+
* element nodes. Handing a root node straight to flattenLayout emits
|
|
188
|
+
* nothing (the C4 / Wave-9 F7 silent-`elements:[]` bug class).
|
|
189
|
+
*
|
|
190
|
+
* Rule: a value that looks like a single root node (`type === 'layout'`
|
|
191
|
+
* with an array `children`) is unwrapped to its `.children` array; any
|
|
192
|
+
* other value passes through untouched so containers and the legacy
|
|
193
|
+
* index-keyed object shape keep working unchanged.
|
|
194
|
+
*/
|
|
195
|
+
function unwrapToWalkableContainer(value) {
|
|
196
|
+
if (value !== null &&
|
|
197
|
+
typeof value === 'object' &&
|
|
198
|
+
!Array.isArray(value)) {
|
|
199
|
+
const obj = value;
|
|
200
|
+
if (obj.type === 'layout' && Array.isArray(obj.children)) {
|
|
201
|
+
return obj.children;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Decide whether a ZERO-element flatten should surface the C4
|
|
208
|
+
* "layout shape not recognized" warning.
|
|
209
|
+
*
|
|
210
|
+
* The decision runs on the RESOLVED walk container (`layoutRoot`, the value
|
|
211
|
+
* actually handed to `flattenLayout` after `unwrapToWalkableContainer`),
|
|
212
|
+
* NOT the raw `data.layout` envelope. That is the F29 calibration
|
|
213
|
+
* (2026-06-10):
|
|
214
|
+
*
|
|
215
|
+
* - An ARRAY (empty or otherwise) is a recognized container shape. A
|
|
216
|
+
* bare root node `{type:'layout', children:[]}` (a freshly-created
|
|
217
|
+
* empty article / per-page layout, or a fresh empty theme template)
|
|
218
|
+
* unwraps to its empty `.children` array, so it lands here and is
|
|
219
|
+
* treated as a GENUINELY empty page → NO warning. This kills the
|
|
220
|
+
* false-positive the raw-envelope check produced (the bare root node
|
|
221
|
+
* is a non-empty OBJECT — keys `type`/`children` — so the old check
|
|
222
|
+
* mistook "empty container" for "had content").
|
|
223
|
+
* - An OBJECT with ZERO keys (e.g. an empty index-keyed container `{}`)
|
|
224
|
+
* is also genuinely empty → NO warning.
|
|
225
|
+
* - An OBJECT with keys that nonetheless flattened to nothing is an
|
|
226
|
+
* unrecognized / future shape masquerading as empty → WARN (the
|
|
227
|
+
* original C4 contract; the `{some_future_key, another}` fixture).
|
|
228
|
+
*
|
|
229
|
+
* @param layoutRoot The resolved walk container passed to flattenLayout.
|
|
230
|
+
*/
|
|
231
|
+
function isUnrecognizedNonEmptyLayout(layoutRoot) {
|
|
232
|
+
if (Array.isArray(layoutRoot)) {
|
|
233
|
+
// Recognized container shape — empty or not, never "unrecognized".
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
if (layoutRoot !== null && typeof layoutRoot === 'object') {
|
|
237
|
+
// A non-empty object that produced zero elements is the
|
|
238
|
+
// unrecognized-shape case worth warning about; an empty object is
|
|
239
|
+
// a genuinely empty container.
|
|
240
|
+
return Object.keys(layoutRoot).length > 0;
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* G-A (Track-C URL→layout): resolve the EFFECTIVE template_id a read tool
|
|
246
|
+
* should operate on from the three accepted addressing modes, so ONE MCP
|
|
247
|
+
* tool call reaches a layout from any of them:
|
|
248
|
+
*
|
|
249
|
+
* - `template_id` (highest precedence) — used verbatim.
|
|
250
|
+
* - `post_id` — `String(post_id)` is a bare numeric id the server's C1
|
|
251
|
+
* dispatch resolves to the per-page layout. No extra REST
|
|
252
|
+
* round-trip.
|
|
253
|
+
* - `url` — resolved via GET /pages/resolve first (one internal REST
|
|
254
|
+
* call), then the returned `template_id` is used.
|
|
255
|
+
*
|
|
256
|
+
* Exactly one of the three is required. When `url` does not resolve (theme-
|
|
257
|
+
* template / non-singular URL), the resolve error (with its steer-to-pages_list
|
|
258
|
+
* hint) is returned for the caller to surface unchanged.
|
|
259
|
+
*/
|
|
260
|
+
async function resolveEffectiveTemplateId(client, args) {
|
|
261
|
+
if (args.template_id !== undefined && args.template_id !== '') {
|
|
262
|
+
return { templateId: args.template_id };
|
|
263
|
+
}
|
|
264
|
+
if (args.post_id !== undefined) {
|
|
265
|
+
return { templateId: String(args.post_id) };
|
|
266
|
+
}
|
|
267
|
+
if (args.url !== undefined && args.url !== '') {
|
|
268
|
+
try {
|
|
269
|
+
const resolved = await resolveUrlToTemplate(client, args.url);
|
|
270
|
+
return { templateId: resolved.template_id };
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
return {
|
|
274
|
+
error: errorResult({
|
|
275
|
+
error: e,
|
|
276
|
+
context: { url: args.url },
|
|
277
|
+
hint: 'This URL did not resolve to a per-page layout — it likely ' +
|
|
278
|
+
'renders via a theme template. Use yootheme_builder_pages_list ' +
|
|
279
|
+
'to find its template_id.',
|
|
280
|
+
}),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
error: errorResult({
|
|
286
|
+
error: new Error('one of template_id, post_id, or url is required'),
|
|
287
|
+
context: {},
|
|
288
|
+
hint: 'Pass template_id (from pages_list), OR post_id (a numeric ' +
|
|
289
|
+
'WP post-id / Joomla article-id), OR url (a public page URL).',
|
|
290
|
+
}),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
export async function handlePageGetLayout(client, { template_id, post_id, url, flat, fields, mode, force, max_chars }) {
|
|
61
294
|
try {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
295
|
+
// G-A: resolve the effective template_id from template_id | post_id | url.
|
|
296
|
+
const effective = await resolveEffectiveTemplateId(client, { template_id, post_id, url });
|
|
297
|
+
if ('error' in effective) {
|
|
298
|
+
return effective.error;
|
|
299
|
+
}
|
|
300
|
+
const templateId = effective.templateId;
|
|
301
|
+
// F195 (P0): forward `mode=bindings_only` so the server returns the
|
|
302
|
+
// trimmed binding skeleton the dynamize/bind workflow needs. `full`
|
|
303
|
+
// (default) appends no query param — byte-identical to the pre-F195
|
|
304
|
+
// request shape.
|
|
305
|
+
const isBindingsOnly = mode === 'bindings_only';
|
|
306
|
+
const query = isBindingsOnly ? '?mode=bindings_only' : '';
|
|
307
|
+
const data = await client.get(`/pages/${encodeTemplateId(templateId)}/layout${query}`);
|
|
308
|
+
// F195 (P0): per-process dedup of REPEATED full reads. bindings_only
|
|
309
|
+
// is already cheap (and the recommended path), so it is never deduped.
|
|
310
|
+
// The skeleton passes straight through unchanged.
|
|
311
|
+
if (isBindingsOnly) {
|
|
65
312
|
return jsonResult(data);
|
|
66
313
|
}
|
|
314
|
+
const etag = typeof data.etag === 'string' ? data.etag : undefined;
|
|
315
|
+
const dedupKey = `${client.getPlatform().baseUrl}|${templateId}`;
|
|
316
|
+
if (force !== true && flat !== true && etag !== undefined) {
|
|
317
|
+
const lastServed = layoutDedupCache.get(dedupKey);
|
|
318
|
+
if (lastServed === etag) {
|
|
319
|
+
// Identical (template, etag) already emitted this process —
|
|
320
|
+
// skip the re-dump (the forensic's duplicate-84KB waste).
|
|
321
|
+
return jsonResult({
|
|
322
|
+
unchanged: true,
|
|
323
|
+
template_id: templateId,
|
|
324
|
+
etag,
|
|
325
|
+
note: `[unchanged] layout identical to your previous read (etag ${etag}) — ` +
|
|
326
|
+
're-read skipped; pass force:true to re-fetch.',
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Record the etag served for this (nested) full read so a later
|
|
331
|
+
// identical read can be short-circuited. Only nested full reads are
|
|
332
|
+
// tracked — flat/projected reads have a different downstream shape.
|
|
333
|
+
if (flat !== true && etag !== undefined) {
|
|
334
|
+
layoutDedupCache.set(dedupKey, etag);
|
|
335
|
+
}
|
|
336
|
+
if (flat !== true) {
|
|
337
|
+
// Default: nested passthrough — unchanged from pre-G.3, except an
|
|
338
|
+
// OPTIONAL G-B `max_chars` caps the (potentially large) JSON text
|
|
339
|
+
// leg. jsonResult is otherwise un-capped, so this is the only knob
|
|
340
|
+
// an agent on a tight budget has to bound a full layout dump.
|
|
341
|
+
return applyMaxChars(jsonResult(data), max_chars);
|
|
342
|
+
}
|
|
67
343
|
// flat: true → depth-first walk on the nested layout. Apply
|
|
68
344
|
// pickFields per element when `fields[]` was passed; echo the
|
|
69
345
|
// projection so the AI knows the per-item shape it received.
|
|
70
346
|
//
|
|
71
|
-
//
|
|
72
|
-
// flatten to the same element list
|
|
347
|
+
// Several distinct envelope shapes reach this handler — all must
|
|
348
|
+
// flatten to the same element list. Resolution funnels through
|
|
349
|
+
// ONE rule (`unwrapToWalkableContainer`) so a single root NODE
|
|
350
|
+
// (`{type:'layout', children:[...]}`) is never handed to
|
|
351
|
+
// flattenLayout directly:
|
|
73
352
|
//
|
|
74
|
-
// (A) Theme templates: `data.layout = {
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
//
|
|
353
|
+
// (A) Theme templates: `data.layout = {query, type:'single-post',
|
|
354
|
+
// name:'Post', layout:{type:'layout', children:[...],
|
|
355
|
+
// version}}` — the actual node tree lives under the INNER
|
|
356
|
+
// `layout` field. That inner value is itself a single root
|
|
357
|
+
// NODE (not the index-keyed `{0:{...}}` container the older
|
|
358
|
+
// fixtures assumed). Handing the root node to flattenLayout
|
|
359
|
+
// made it iterate the node's OWN top-level entries
|
|
360
|
+
// (`['type',...]`, `['children',[...]]`, `['version',...]`)
|
|
361
|
+
// and emit nothing — `elements:[]` silently (C4 fix,
|
|
362
|
+
// 2026-06-09; verified on wp-dev5 template bFIb-syj). The
|
|
363
|
+
// inner-root-node case is now unwrapped to its `.children`,
|
|
364
|
+
// unifying it with the per-page path below.
|
|
365
|
+
//
|
|
366
|
+
// Legacy F-208 shape `{name, layout:{0:{...},1:{...}}}`
|
|
367
|
+
// (index-keyed inner container) still works: the inner
|
|
368
|
+
// value is NOT a root node, so it passes through to
|
|
369
|
+
// flattenLayout unchanged.
|
|
80
370
|
//
|
|
81
371
|
// (B) Per-page templates (Wave-9 F7 fix, 2026-05-29): cold-AI
|
|
82
372
|
// #8 reported `elements:[]` for a non-empty per-page
|
|
83
|
-
// template.
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
// `layout` key, so for per-page it fell through to
|
|
89
|
-
// walking `data.layout` directly, where flattenLayout
|
|
90
|
-
// iterates top-level entries (`['type', 'layout']` +
|
|
91
|
-
// `['children', [...]]`) and emits nothing — neither
|
|
92
|
-
// entry is a valid element node.
|
|
373
|
+
// template. Per-page layouts come from PerPageLayoutEncoder
|
|
374
|
+
// which decodes to the BARE root node
|
|
375
|
+
// `{type:'layout', children:[{...},{...}]}` — NO outer
|
|
376
|
+
// `{name, layout:{...}}` wrapper. Same root-node unwrap
|
|
377
|
+
// rule as (A), applied at the top level.
|
|
93
378
|
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
// cold agents can copy them into element_path without
|
|
99
|
-
// further bookkeeping).
|
|
379
|
+
// The unwrap rule (single SSoT): if a value is a single root node
|
|
380
|
+
// (`type === 'layout'` with an array `children`), iterate its
|
|
381
|
+
// `.children` array so the walker sees real element nodes and
|
|
382
|
+
// paths anchor on `/layout/children/0`, `/layout/children/1`, …
|
|
100
383
|
const dataLayout = data.layout;
|
|
101
384
|
const isObjectNode = dataLayout !== null &&
|
|
102
385
|
typeof dataLayout === 'object' &&
|
|
@@ -106,35 +389,53 @@ export async function handlePageGetLayout(client, { template_id, flat, fields })
|
|
|
106
389
|
'layout' in layoutObj &&
|
|
107
390
|
layoutObj.layout !== null &&
|
|
108
391
|
typeof layoutObj.layout === 'object';
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
else if (isPerPageRootNode) {
|
|
118
|
-
// Shape (B) — per-page bare-layout-node. Iterate children
|
|
119
|
-
// directly so the walker sees real element nodes.
|
|
120
|
-
layoutRoot = layoutObj.children;
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
// Back-compat: assume already in walkable form.
|
|
124
|
-
layoutRoot = dataLayout;
|
|
125
|
-
}
|
|
392
|
+
// Resolve the candidate container ONE hop from the envelope:
|
|
393
|
+
// shape (A) descends into the inner `layout`; everything else
|
|
394
|
+
// starts from `data.layout` directly. Then funnel through the
|
|
395
|
+
// shared root-node unwrap so shapes (A) and (B) — and any future
|
|
396
|
+
// single-root-node envelope — collapse identically.
|
|
397
|
+
const candidate = hasInnerLayoutField ? layoutObj.layout : dataLayout;
|
|
398
|
+
const layoutRoot = unwrapToWalkableContainer(candidate);
|
|
126
399
|
const flatElements = flattenLayout(layoutRoot);
|
|
400
|
+
// Non-silent fallback (C4) + F29 calibration: if the walk yields
|
|
401
|
+
// ZERO elements AND the resolved walk container is an unrecognized
|
|
402
|
+
// NON-EMPTY shape, surface a warning so it can never pass silently.
|
|
403
|
+
// A genuinely empty container (an empty array — including a bare
|
|
404
|
+
// `{type:'layout', children:[]}` root that unwrapped to `[]` — or
|
|
405
|
+
// an empty object) is a real empty page and must NOT warn.
|
|
406
|
+
const warning = flatElements.length === 0 && isUnrecognizedNonEmptyLayout(layoutRoot)
|
|
407
|
+
? 'layout shape not recognized - flat view may be incomplete'
|
|
408
|
+
: undefined;
|
|
127
409
|
const projected = projectFields(flatElements, fields,
|
|
128
410
|
// No default-set on layout.flat: keep "all" semantics
|
|
129
411
|
// unless caller opts-in. The echo helper below mirrors that.
|
|
130
412
|
[]);
|
|
131
413
|
const echo = projectedFieldsEcho(fields, undefined);
|
|
414
|
+
// F31 (2026-06-10): align the flat-projection path with F23 — when a
|
|
415
|
+
// caller-requested field appears on NO element (e.g. `label` on a
|
|
416
|
+
// YT4 layout), don't echo it in `projected_fields` with no signal.
|
|
417
|
+
// Compute the projection feedback over the FLAT element rows and
|
|
418
|
+
// surface `unknown_fields` + `available_fields` + a loud
|
|
419
|
+
// `projection_warning` (the shared F23 SSoT helper) so the agent can
|
|
420
|
+
// self-correct on the next call. Default-all callers (no fields[])
|
|
421
|
+
// get no audit overhead — projectionFeedback returns undefined.
|
|
422
|
+
const feedback = projectionFeedback(flatElements, fields);
|
|
423
|
+
const projectionNote = projectionWarning(feedback);
|
|
132
424
|
// 1.0.1 Wave-1.7 F-COLD-3: forward the canonical pointer base
|
|
133
425
|
// through the flat-projection path too so cold agents iterating
|
|
134
426
|
// with `flat: true` see the same hint they get on the nested
|
|
135
427
|
// default payload.
|
|
136
428
|
return jsonResult({
|
|
137
429
|
elements: projected,
|
|
430
|
+
...(warning !== undefined ? { warning } : {}),
|
|
431
|
+
...(feedback !== undefined ? {
|
|
432
|
+
available_fields: [...feedback.available_fields],
|
|
433
|
+
unknown_fields: [...feedback.unknown_fields],
|
|
434
|
+
} : {}),
|
|
435
|
+
// F31: trim the leading space the table-header helper prepends —
|
|
436
|
+
// here it rides in a JSON field, not a header string. Emitted
|
|
437
|
+
// ONLY when there's actually an unknown field to flag.
|
|
438
|
+
...(projectionNote !== '' ? { projection_warning: projectionNote.trimStart() } : {}),
|
|
138
439
|
...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
|
|
139
440
|
...(typeof data.layout_root_pointer === 'string'
|
|
140
441
|
? { layout_root_pointer: data.layout_root_pointer }
|
|
@@ -155,31 +456,58 @@ export async function handlePageGetLayout(client, { template_id, flat, fields })
|
|
|
155
456
|
}
|
|
156
457
|
}
|
|
157
458
|
// ─── page_get_schema ────────────────────────────────────────────────
|
|
158
|
-
export async function handlePageGetSchema(client, { template_id }) {
|
|
459
|
+
export async function handlePageGetSchema(client, { template_id, post_id, url, fields, max_chars }) {
|
|
159
460
|
try {
|
|
160
|
-
|
|
461
|
+
// G-A: resolve the effective template_id from template_id | post_id | url.
|
|
462
|
+
const effective = await resolveEffectiveTemplateId(client, { template_id, post_id, url });
|
|
463
|
+
if ('error' in effective) {
|
|
464
|
+
return effective.error;
|
|
465
|
+
}
|
|
466
|
+
const templateId = effective.templateId;
|
|
467
|
+
const data = await client.get(`/pages/${encodeTemplateId(templateId)}/schema`);
|
|
161
468
|
const rawNodes = Array.isArray(data.nodes) ? data.nodes : [];
|
|
162
|
-
const
|
|
469
|
+
const rows = buildSchemaRows(rawNodes.filter((x) => x !== null && typeof x === 'object'));
|
|
470
|
+
// G-B (Glöckle 2026-06-26, P2): `fields[]` projection — DEFAULT_FIELDS_SCHEMA
|
|
471
|
+
// existed but was never wired. Mirror element_list: project both legs,
|
|
472
|
+
// echo `projected_fields`, surface the F23 unknown-field feedback.
|
|
473
|
+
const items = projectFields(rows, fields, DEFAULT_FIELDS_SCHEMA);
|
|
474
|
+
const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_SCHEMA);
|
|
475
|
+
const feedback = projectionFeedback(rows, fields);
|
|
476
|
+
const unknownNote = projectionWarning(feedback);
|
|
477
|
+
const hasNarrowProjection = Array.isArray(fields) && fields.length > 0;
|
|
163
478
|
// Templates routinely exceed 21 nodes (a typical home page has
|
|
164
479
|
// 30–150 elements). Force compact level so the LLM never gets
|
|
165
480
|
// truncated text — toolkit's resolveDetailLevel honours the
|
|
166
|
-
// explicit override.
|
|
481
|
+
// explicit override. With a narrow `fields[]` projection, render the
|
|
482
|
+
// projected rows from caller-chosen columns (mirrors element_list).
|
|
167
483
|
//
|
|
168
484
|
// TODO(toolkit-upstream): contribute a `compactWhen: (count) => boolean`
|
|
169
485
|
// field to @getimo/mcp-toolkit's AutoFormatOptions so this
|
|
170
486
|
// can be expressed declaratively on the config object instead
|
|
171
487
|
// of via the third positional argument. Tracked as Round-1.5
|
|
172
488
|
// follow-up (I2).
|
|
173
|
-
const toolkitResult =
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
489
|
+
const toolkitResult = hasNarrowProjection
|
|
490
|
+
? tableResult(items, {
|
|
491
|
+
columns: columnsFromFields([...fields]),
|
|
492
|
+
header: (count) => `${String(count)} nodes in template "${templateId}"${unknownNote}`,
|
|
493
|
+
footer: 'Use yootheme_builder_element_get <path> for full element data.',
|
|
494
|
+
}, 'compact')
|
|
495
|
+
: tableResult(rows, {
|
|
496
|
+
columns: [...SCHEMA_TABLE_COLUMNS],
|
|
497
|
+
compactColumns: [...SCHEMA_COMPACT_COLUMNS],
|
|
498
|
+
header: (count) => `${String(count)} nodes in template "${templateId}"`,
|
|
499
|
+
footer: 'Use yootheme_builder_element_get <path> for full element data.',
|
|
500
|
+
}, 'compact');
|
|
501
|
+
return structuredResult(applyMaxChars(toolkitResult, max_chars), {
|
|
180
502
|
items,
|
|
181
503
|
total: items.length,
|
|
182
|
-
template_id,
|
|
504
|
+
template_id: templateId,
|
|
505
|
+
...(echo !== undefined ? { projected_fields: [...echo] } : {}),
|
|
506
|
+
...(feedback !== undefined ? {
|
|
507
|
+
available_fields: [...feedback.available_fields],
|
|
508
|
+
unknown_fields: [...feedback.unknown_fields],
|
|
509
|
+
...(unknownNote.trim() !== '' ? { projection_warning: unknownNote.trim() } : {}),
|
|
510
|
+
} : {}),
|
|
183
511
|
});
|
|
184
512
|
}
|
|
185
513
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-read.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlers-read.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"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"}
|