@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.
Files changed (241) hide show
  1. package/README.md +16 -12
  2. package/dist/catalog/build-catalog.d.ts +63 -0
  3. package/dist/catalog/build-catalog.d.ts.map +1 -0
  4. package/dist/catalog/build-catalog.js +166 -0
  5. package/dist/catalog/build-catalog.js.map +1 -0
  6. package/dist/cli/doctor-command.d.ts +21 -0
  7. package/dist/cli/doctor-command.d.ts.map +1 -0
  8. package/dist/cli/doctor-command.js +111 -0
  9. package/dist/cli/doctor-command.js.map +1 -0
  10. package/dist/cli/invocation-decision.d.ts.map +1 -1
  11. package/dist/cli/invocation-decision.js +2 -0
  12. package/dist/cli/invocation-decision.js.map +1 -1
  13. package/dist/client.d.ts +14 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +9 -0
  16. package/dist/client.js.map +1 -1
  17. package/dist/diagnostics/ca-trust.d.ts +16 -0
  18. package/dist/diagnostics/ca-trust.d.ts.map +1 -0
  19. package/dist/diagnostics/ca-trust.js +54 -0
  20. package/dist/diagnostics/ca-trust.js.map +1 -0
  21. package/dist/diagnostics/diagnose-network-error.d.ts +37 -0
  22. package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -0
  23. package/dist/diagnostics/diagnose-network-error.js +158 -0
  24. package/dist/diagnostics/diagnose-network-error.js.map +1 -0
  25. package/dist/diagnostics/doctor.d.ts +62 -0
  26. package/dist/diagnostics/doctor.d.ts.map +1 -0
  27. package/dist/diagnostics/doctor.js +165 -0
  28. package/dist/diagnostics/doctor.js.map +1 -0
  29. package/dist/gateway/advanced-read-tool.d.ts +37 -0
  30. package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
  31. package/dist/gateway/advanced-read-tool.js +156 -0
  32. package/dist/gateway/advanced-read-tool.js.map +1 -0
  33. package/dist/gateway/advanced-tool/domains.d.ts +18 -3
  34. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  35. package/dist/gateway/advanced-tool/domains.js +28 -9
  36. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  37. package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
  38. package/dist/gateway/advanced-tool/register.js +43 -11
  39. package/dist/gateway/advanced-tool/register.js.map +1 -1
  40. package/dist/gateway/essentials.d.ts +14 -4
  41. package/dist/gateway/essentials.d.ts.map +1 -1
  42. package/dist/gateway/essentials.js +46 -5
  43. package/dist/gateway/essentials.js.map +1 -1
  44. package/dist/gateway/test-support.d.ts +2 -2
  45. package/dist/gateway/test-support.js +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +45 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/install-skill.d.ts +1 -1
  50. package/dist/install-skill.js +2 -2
  51. package/dist/net/extra-headers.d.ts +66 -0
  52. package/dist/net/extra-headers.d.ts.map +1 -0
  53. package/dist/net/extra-headers.js +164 -0
  54. package/dist/net/extra-headers.js.map +1 -0
  55. package/dist/net/internal-host.d.ts +45 -0
  56. package/dist/net/internal-host.d.ts.map +1 -0
  57. package/dist/net/internal-host.js +164 -0
  58. package/dist/net/internal-host.js.map +1 -0
  59. package/dist/net/proxy-dispatcher.d.ts +40 -0
  60. package/dist/net/proxy-dispatcher.d.ts.map +1 -0
  61. package/dist/net/proxy-dispatcher.js +65 -0
  62. package/dist/net/proxy-dispatcher.js.map +1 -0
  63. package/dist/proxy/bridge.d.ts +43 -0
  64. package/dist/proxy/bridge.d.ts.map +1 -0
  65. package/dist/proxy/bridge.js +155 -0
  66. package/dist/proxy/bridge.js.map +1 -0
  67. package/dist/proxy/mode.d.ts +10 -0
  68. package/dist/proxy/mode.d.ts.map +1 -0
  69. package/dist/proxy/mode.js +20 -0
  70. package/dist/proxy/mode.js.map +1 -0
  71. package/dist/server.d.ts +5 -3
  72. package/dist/server.d.ts.map +1 -1
  73. package/dist/server.js +13 -3
  74. package/dist/server.js.map +1 -1
  75. package/dist/setup-ca-env.d.ts +40 -0
  76. package/dist/setup-ca-env.d.ts.map +1 -0
  77. package/dist/setup-ca-env.js +58 -0
  78. package/dist/setup-ca-env.js.map +1 -0
  79. package/dist/setup-ca-reprobe.d.ts +38 -0
  80. package/dist/setup-ca-reprobe.d.ts.map +1 -0
  81. package/dist/setup-ca-reprobe.js +68 -0
  82. package/dist/setup-ca-reprobe.js.map +1 -0
  83. package/dist/setup-cli.d.ts +37 -2
  84. package/dist/setup-cli.d.ts.map +1 -1
  85. package/dist/setup-cli.js +178 -4
  86. package/dist/setup-cli.js.map +1 -1
  87. package/dist/setup-npx-spec.d.ts +44 -0
  88. package/dist/setup-npx-spec.d.ts.map +1 -0
  89. package/dist/setup-npx-spec.js +66 -0
  90. package/dist/setup-npx-spec.js.map +1 -0
  91. package/dist/setup-prompts.d.ts +14 -1
  92. package/dist/setup-prompts.d.ts.map +1 -1
  93. package/dist/setup-prompts.js +53 -1
  94. package/dist/setup-prompts.js.map +1 -1
  95. package/dist/setup-wizard-defaults.d.ts.map +1 -1
  96. package/dist/setup-wizard-defaults.js +29 -5
  97. package/dist/setup-wizard-defaults.js.map +1 -1
  98. package/dist/setup-wizard-handshake.d.ts +4 -4
  99. package/dist/setup-wizard-handshake.d.ts.map +1 -1
  100. package/dist/setup-wizard-handshake.js +46 -12
  101. package/dist/setup-wizard-handshake.js.map +1 -1
  102. package/dist/setup-wizard-types.d.ts +81 -0
  103. package/dist/setup-wizard-types.d.ts.map +1 -1
  104. package/dist/setup-wizard.d.ts +2 -2
  105. package/dist/setup-wizard.d.ts.map +1 -1
  106. package/dist/setup-wizard.js +140 -18
  107. package/dist/setup-wizard.js.map +1 -1
  108. package/dist/sites/client-pool.d.ts +8 -1
  109. package/dist/sites/client-pool.d.ts.map +1 -1
  110. package/dist/sites/client-pool.js +34 -4
  111. package/dist/sites/client-pool.js.map +1 -1
  112. package/dist/sites/registry.d.ts +30 -0
  113. package/dist/sites/registry.d.ts.map +1 -1
  114. package/dist/sites/registry.js.map +1 -1
  115. package/dist/sites/store.d.ts +8 -1
  116. package/dist/sites/store.d.ts.map +1 -1
  117. package/dist/sites/store.js +17 -2
  118. package/dist/sites/store.js.map +1 -1
  119. package/dist/sites/tools/use-site.d.ts.map +1 -1
  120. package/dist/sites/tools/use-site.js +26 -6
  121. package/dist/sites/tools/use-site.js.map +1 -1
  122. package/dist/tools/bind-guidance.d.ts +80 -0
  123. package/dist/tools/bind-guidance.d.ts.map +1 -0
  124. package/dist/tools/bind-guidance.js +95 -0
  125. package/dist/tools/bind-guidance.js.map +1 -0
  126. package/dist/tools/elements/builders.d.ts.map +1 -1
  127. package/dist/tools/elements/builders.js +63 -13
  128. package/dist/tools/elements/builders.js.map +1 -1
  129. package/dist/tools/elements/handlers-write.d.ts +19 -2
  130. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  131. package/dist/tools/elements/handlers-write.js +179 -10
  132. package/dist/tools/elements/handlers-write.js.map +1 -1
  133. package/dist/tools/elements/handlers.d.ts +8 -2
  134. package/dist/tools/elements/handlers.d.ts.map +1 -1
  135. package/dist/tools/elements/handlers.js +76 -28
  136. package/dist/tools/elements/handlers.js.map +1 -1
  137. package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
  138. package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
  139. package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
  140. package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
  141. package/dist/tools/format/elements-format.d.ts +35 -0
  142. package/dist/tools/format/elements-format.d.ts.map +1 -1
  143. package/dist/tools/format/elements-format.js +124 -1
  144. package/dist/tools/format/elements-format.js.map +1 -1
  145. package/dist/tools/format/health-format.d.ts +3 -0
  146. package/dist/tools/format/health-format.d.ts.map +1 -1
  147. package/dist/tools/format/health-format.js +21 -4
  148. package/dist/tools/format/health-format.js.map +1 -1
  149. package/dist/tools/format/inspection-format.d.ts +18 -0
  150. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  151. package/dist/tools/format/inspection-format.js +22 -1
  152. package/dist/tools/format/inspection-format.js.map +1 -1
  153. package/dist/tools/format/pages-format.d.ts.map +1 -1
  154. package/dist/tools/format/pages-format.js +7 -0
  155. package/dist/tools/format/pages-format.js.map +1 -1
  156. package/dist/tools/format/sources-format.d.ts +8 -0
  157. package/dist/tools/format/sources-format.d.ts.map +1 -1
  158. package/dist/tools/format/sources-format.js +10 -0
  159. package/dist/tools/format/sources-format.js.map +1 -1
  160. package/dist/tools/health.d.ts.map +1 -1
  161. package/dist/tools/health.js +56 -0
  162. package/dist/tools/health.js.map +1 -1
  163. package/dist/tools/index.d.ts.map +1 -1
  164. package/dist/tools/index.js +4 -0
  165. package/dist/tools/index.js.map +1 -1
  166. package/dist/tools/inspection.d.ts +24 -0
  167. package/dist/tools/inspection.d.ts.map +1 -1
  168. package/dist/tools/inspection.js +140 -41
  169. package/dist/tools/inspection.js.map +1 -1
  170. package/dist/tools/layout-flatten.d.ts +11 -8
  171. package/dist/tools/layout-flatten.d.ts.map +1 -1
  172. package/dist/tools/layout-flatten.js +17 -6
  173. package/dist/tools/layout-flatten.js.map +1 -1
  174. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  175. package/dist/tools/multi-items/builders.js +11 -2
  176. package/dist/tools/multi-items/builders.js.map +1 -1
  177. package/dist/tools/multi-items/inspect-handler.d.ts +13 -0
  178. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
  179. package/dist/tools/multi-items/inspect-handler.js +147 -3
  180. package/dist/tools/multi-items/inspect-handler.js.map +1 -1
  181. package/dist/tools/pages/builders.d.ts.map +1 -1
  182. package/dist/tools/pages/builders.js +153 -39
  183. package/dist/tools/pages/builders.js.map +1 -1
  184. package/dist/tools/pages/handlers-read.d.ts +40 -5
  185. package/dist/tools/pages/handlers-read.d.ts.map +1 -1
  186. package/dist/tools/pages/handlers-read.js +404 -76
  187. package/dist/tools/pages/handlers-read.js.map +1 -1
  188. package/dist/tools/pages/handlers-write.d.ts +95 -1
  189. package/dist/tools/pages/handlers-write.d.ts.map +1 -1
  190. package/dist/tools/pages/handlers-write.js +137 -8
  191. package/dist/tools/pages/handlers-write.js.map +1 -1
  192. package/dist/tools/pages/index.d.ts +1 -1
  193. package/dist/tools/pages/index.d.ts.map +1 -1
  194. package/dist/tools/pages/index.js +1 -1
  195. package/dist/tools/pages/index.js.map +1 -1
  196. package/dist/tools/pages/schemas.d.ts +74 -5
  197. package/dist/tools/pages/schemas.d.ts.map +1 -1
  198. package/dist/tools/pages/schemas.js +243 -8
  199. package/dist/tools/pages/schemas.js.map +1 -1
  200. package/dist/tools/shared-schemas.d.ts +3 -0
  201. package/dist/tools/shared-schemas.d.ts.map +1 -1
  202. package/dist/tools/shared-schemas.js +43 -13
  203. package/dist/tools/shared-schemas.js.map +1 -1
  204. package/dist/tools/sources/builders.d.ts.map +1 -1
  205. package/dist/tools/sources/builders.js +93 -10
  206. package/dist/tools/sources/builders.js.map +1 -1
  207. package/dist/tools/sources/handlers-bind.d.ts +13 -1
  208. package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
  209. package/dist/tools/sources/handlers-bind.js +163 -1
  210. package/dist/tools/sources/handlers-bind.js.map +1 -1
  211. package/dist/tools/sources/handlers.d.ts +12 -1
  212. package/dist/tools/sources/handlers.d.ts.map +1 -1
  213. package/dist/tools/sources/handlers.js +103 -16
  214. package/dist/tools/sources/handlers.js.map +1 -1
  215. package/dist/tools/sparse-fields.d.ts +73 -0
  216. package/dist/tools/sparse-fields.d.ts.map +1 -1
  217. package/dist/tools/sparse-fields.js +136 -0
  218. package/dist/tools/sparse-fields.js.map +1 -1
  219. package/dist/tools/sublayout/builders.d.ts +23 -0
  220. package/dist/tools/sublayout/builders.d.ts.map +1 -0
  221. package/dist/tools/sublayout/builders.js +54 -0
  222. package/dist/tools/sublayout/builders.js.map +1 -0
  223. package/dist/tools/sublayout/index.d.ts +13 -0
  224. package/dist/tools/sublayout/index.d.ts.map +1 -0
  225. package/dist/tools/sublayout/index.js +13 -0
  226. package/dist/tools/sublayout/index.js.map +1 -0
  227. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
  228. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
  229. package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
  230. package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
  231. package/dist/tools/tool-builder/results.d.ts +31 -0
  232. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  233. package/dist/tools/tool-builder/results.js +95 -4
  234. package/dist/tools/tool-builder/results.js.map +1 -1
  235. package/dist/update/update-check.d.ts +56 -0
  236. package/dist/update/update-check.d.ts.map +1 -0
  237. package/dist/update/update-check.js +155 -0
  238. package/dist/update/update-check.js.map +1 -0
  239. package/manifest.json +1 -1
  240. package/package.json +5 -2
  241. 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
- export async function handlePagesList(client, { fields }) {
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
- const data = await client.get('/pages');
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
- const mapped = rawPages
66
+ let mapped = rawPages
22
67
  .filter((x) => x !== null && typeof x === 'object')
23
68
  .map(mapPageRow);
24
- // Project AFTER mapping keeps stable key names and lets the
25
- // toolkit's tableResult format the raw, full-shape rows for the
26
- // LLM text leg while the structuredContent leg carries the
27
- // projected per-item slice.
28
- const items = projectFields(mapped, fields, DEFAULT_FIELDS_PAGES_LIST);
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(mapped, fields);
31
- const unknownNote = feedback !== undefined && feedback.unknown_fields.length > 0
32
- ? ` (unknown fields ignored: ${feedback.unknown_fields.join(', ')}; available: ${feedback.available_fields.join(', ')})`
33
- : '';
34
- const toolkitResult = tableResult(mapped, {
35
- columns: [...PAGES_TABLE_COLUMNS],
36
- compactColumns: [...PAGES_COMPACT_COLUMNS],
37
- header: (count) => `${String(count)} pages${unknownNote}`,
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: items.length,
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
- export async function handlePageGetLayout(client, { template_id, flat, fields }) {
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
- const data = await client.get(`/pages/${encodeTemplateId(template_id)}/layout`);
63
- if (flat !== true) {
64
- // Default: nested passthrough — unchanged from pre-G.3.
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
- // Two distinct envelope shapes reach this handler — both must
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 = {name, layout:
75
- // {0:{...},1:{...}}, ...}` — the actual children live
76
- // under the INNER `layout` field, keyed by stringified
77
- // indices. F-208 (Audit 2026-05-26) fix descended one
78
- // extra hop here so paths anchored on `/layout/0` rather
79
- // than the double-prefixed `/layout/layout/0`.
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. Root cause: per-page layouts come from
84
- // PerPageLayoutEncoder which decodes to the BARE node
85
- // tree `{type:'layout', children:[{...},{...}]}` — there
86
- // is NO outer `{name, layout:{...}}` wrapper. The
87
- // previous envelope-detect only triggered on the inner
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
- // Per-page detection: a node with `type === 'layout'` and
95
- // an array `children`. Pass its `.children` array to
96
- // flattenLayout so the walker iterates the real elements
97
- // (and paths anchor on `/layout/0`, `/layout/1`, ... so
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
- const isPerPageRootNode = layoutObj !== null &&
110
- layoutObj.type === 'layout' &&
111
- Array.isArray(layoutObj.children);
112
- let layoutRoot;
113
- if (hasInnerLayoutField) {
114
- // Shape (A) theme template envelope.
115
- layoutRoot = layoutObj.layout;
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
- const data = await client.get(`/pages/${encodeTemplateId(template_id)}/schema`);
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 items = buildSchemaRows(rawNodes.filter((x) => x !== null && typeof x === 'object'));
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 = tableResult(items, {
174
- columns: [...SCHEMA_TABLE_COLUMNS],
175
- compactColumns: [...SCHEMA_COMPACT_COLUMNS],
176
- header: (count) => `${String(count)} nodes in template "${template_id}"`,
177
- footer: 'Use yootheme_builder_element_get <path> for full element data.',
178
- }, 'compact');
179
- return structuredResult(toolkitResult, {
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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"}