@wootsup/yt-builder-mcp 1.1.7 → 1.3.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 (249) hide show
  1. package/README.md +14 -10
  2. package/bin/yt-builder-mcp.js +55 -40
  3. package/dist/auth.d.ts +18 -0
  4. package/dist/auth.d.ts.map +1 -1
  5. package/dist/auth.js +18 -0
  6. package/dist/auth.js.map +1 -1
  7. package/dist/catalog/build-catalog.d.ts +63 -0
  8. package/dist/catalog/build-catalog.d.ts.map +1 -0
  9. package/dist/catalog/build-catalog.js +166 -0
  10. package/dist/catalog/build-catalog.js.map +1 -0
  11. package/dist/cli/invocation-decision.d.ts +57 -0
  12. package/dist/cli/invocation-decision.d.ts.map +1 -0
  13. package/dist/cli/invocation-decision.js +86 -0
  14. package/dist/cli/invocation-decision.js.map +1 -0
  15. package/dist/client.d.ts +28 -0
  16. package/dist/client.d.ts.map +1 -1
  17. package/dist/client.js +40 -1
  18. package/dist/client.js.map +1 -1
  19. package/dist/clients/claude-code.d.ts.map +1 -1
  20. package/dist/clients/claude-code.js +3 -1
  21. package/dist/clients/claude-code.js.map +1 -1
  22. package/dist/clients/claude-desktop.d.ts.map +1 -1
  23. package/dist/clients/claude-desktop.js +3 -1
  24. package/dist/clients/claude-desktop.js.map +1 -1
  25. package/dist/clients/cline.d.ts.map +1 -1
  26. package/dist/clients/cline.js +3 -1
  27. package/dist/clients/cline.js.map +1 -1
  28. package/dist/clients/codex-cli.d.ts +1 -1
  29. package/dist/clients/codex-cli.d.ts.map +1 -1
  30. package/dist/clients/codex-cli.js +98 -0
  31. package/dist/clients/codex-cli.js.map +1 -1
  32. package/dist/clients/continue.d.ts.map +1 -1
  33. package/dist/clients/continue.js +70 -1
  34. package/dist/clients/continue.js.map +1 -1
  35. package/dist/clients/cursor.d.ts.map +1 -1
  36. package/dist/clients/cursor.js +3 -1
  37. package/dist/clients/cursor.js.map +1 -1
  38. package/dist/clients/gemini-cli.d.ts.map +1 -1
  39. package/dist/clients/gemini-cli.js +3 -1
  40. package/dist/clients/gemini-cli.js.map +1 -1
  41. package/dist/clients/index.d.ts +104 -0
  42. package/dist/clients/index.d.ts.map +1 -1
  43. package/dist/clients/index.js +141 -0
  44. package/dist/clients/index.js.map +1 -1
  45. package/dist/clients/roo-code.d.ts.map +1 -1
  46. package/dist/clients/roo-code.js +3 -1
  47. package/dist/clients/roo-code.js.map +1 -1
  48. package/dist/clients/zed.d.ts.map +1 -1
  49. package/dist/clients/zed.js +3 -1
  50. package/dist/clients/zed.js.map +1 -1
  51. package/dist/gateway/advanced-read-tool.d.ts +37 -0
  52. package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
  53. package/dist/gateway/advanced-read-tool.js +156 -0
  54. package/dist/gateway/advanced-read-tool.js.map +1 -0
  55. package/dist/gateway/advanced-tool/domains.d.ts +18 -3
  56. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  57. package/dist/gateway/advanced-tool/domains.js +28 -9
  58. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  59. package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
  60. package/dist/gateway/advanced-tool/register.js +43 -11
  61. package/dist/gateway/advanced-tool/register.js.map +1 -1
  62. package/dist/gateway/essentials.d.ts +14 -4
  63. package/dist/gateway/essentials.d.ts.map +1 -1
  64. package/dist/gateway/essentials.js +55 -5
  65. package/dist/gateway/essentials.js.map +1 -1
  66. package/dist/gateway/test-support.d.ts +3 -3
  67. package/dist/gateway/test-support.js +3 -3
  68. package/dist/index.d.ts +2 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/install-skill.js +1 -1
  73. package/dist/proxy/bridge.d.ts +36 -0
  74. package/dist/proxy/bridge.d.ts.map +1 -0
  75. package/dist/proxy/bridge.js +129 -0
  76. package/dist/proxy/bridge.js.map +1 -0
  77. package/dist/proxy/mode.d.ts +10 -0
  78. package/dist/proxy/mode.d.ts.map +1 -0
  79. package/dist/proxy/mode.js +20 -0
  80. package/dist/proxy/mode.js.map +1 -0
  81. package/dist/server.d.ts +6 -4
  82. package/dist/server.d.ts.map +1 -1
  83. package/dist/server.js +14 -4
  84. package/dist/server.js.map +1 -1
  85. package/dist/setup-cli.d.ts +41 -0
  86. package/dist/setup-cli.d.ts.map +1 -1
  87. package/dist/setup-cli.js +163 -1
  88. package/dist/setup-cli.js.map +1 -1
  89. package/dist/setup-prompts.d.ts +23 -0
  90. package/dist/setup-prompts.d.ts.map +1 -1
  91. package/dist/setup-prompts.js +76 -1
  92. package/dist/setup-prompts.js.map +1 -1
  93. package/dist/setup-wizard.d.ts.map +1 -1
  94. package/dist/setup-wizard.js +7 -0
  95. package/dist/setup-wizard.js.map +1 -1
  96. package/dist/sites/bootstrap.d.ts +41 -0
  97. package/dist/sites/bootstrap.d.ts.map +1 -0
  98. package/dist/sites/bootstrap.js +58 -0
  99. package/dist/sites/bootstrap.js.map +1 -0
  100. package/dist/sites/client-pool.d.ts +33 -0
  101. package/dist/sites/client-pool.d.ts.map +1 -1
  102. package/dist/sites/client-pool.js +69 -1
  103. package/dist/sites/client-pool.js.map +1 -1
  104. package/dist/sites/registry.d.ts +30 -0
  105. package/dist/sites/registry.d.ts.map +1 -1
  106. package/dist/sites/registry.js.map +1 -1
  107. package/dist/sites/store.d.ts +8 -1
  108. package/dist/sites/store.d.ts.map +1 -1
  109. package/dist/sites/store.js +17 -2
  110. package/dist/sites/store.js.map +1 -1
  111. package/dist/sites/tools/index.d.ts.map +1 -1
  112. package/dist/sites/tools/index.js +9 -1
  113. package/dist/sites/tools/index.js.map +1 -1
  114. package/dist/sites/tools/use-site.d.ts +47 -0
  115. package/dist/sites/tools/use-site.d.ts.map +1 -0
  116. package/dist/sites/tools/use-site.js +203 -0
  117. package/dist/sites/tools/use-site.js.map +1 -0
  118. package/dist/tools/bind-guidance.d.ts +80 -0
  119. package/dist/tools/bind-guidance.d.ts.map +1 -0
  120. package/dist/tools/bind-guidance.js +95 -0
  121. package/dist/tools/bind-guidance.js.map +1 -0
  122. package/dist/tools/elements/builders.d.ts.map +1 -1
  123. package/dist/tools/elements/builders.js +75 -18
  124. package/dist/tools/elements/builders.js.map +1 -1
  125. package/dist/tools/elements/handlers-write.d.ts +20 -3
  126. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  127. package/dist/tools/elements/handlers-write.js +372 -10
  128. package/dist/tools/elements/handlers-write.js.map +1 -1
  129. package/dist/tools/elements/handlers.d.ts +6 -1
  130. package/dist/tools/elements/handlers.d.ts.map +1 -1
  131. package/dist/tools/elements/handlers.js +77 -10
  132. package/dist/tools/elements/handlers.js.map +1 -1
  133. package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
  134. package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
  135. package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
  136. package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
  137. package/dist/tools/format/elements-format.d.ts +35 -0
  138. package/dist/tools/format/elements-format.d.ts.map +1 -1
  139. package/dist/tools/format/elements-format.js +134 -12
  140. package/dist/tools/format/elements-format.js.map +1 -1
  141. package/dist/tools/format/inspection-format.d.ts +29 -0
  142. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  143. package/dist/tools/format/inspection-format.js +99 -22
  144. package/dist/tools/format/inspection-format.js.map +1 -1
  145. package/dist/tools/format/pages-format.d.ts.map +1 -1
  146. package/dist/tools/format/pages-format.js +7 -0
  147. package/dist/tools/format/pages-format.js.map +1 -1
  148. package/dist/tools/format/sources-format.d.ts +8 -0
  149. package/dist/tools/format/sources-format.d.ts.map +1 -1
  150. package/dist/tools/format/sources-format.js +10 -0
  151. package/dist/tools/format/sources-format.js.map +1 -1
  152. package/dist/tools/health.d.ts.map +1 -1
  153. package/dist/tools/health.js +24 -0
  154. package/dist/tools/health.js.map +1 -1
  155. package/dist/tools/index.d.ts.map +1 -1
  156. package/dist/tools/index.js +4 -0
  157. package/dist/tools/index.js.map +1 -1
  158. package/dist/tools/inspection.d.ts +24 -0
  159. package/dist/tools/inspection.d.ts.map +1 -1
  160. package/dist/tools/inspection.js +297 -5
  161. package/dist/tools/inspection.js.map +1 -1
  162. package/dist/tools/layout-flatten.d.ts +11 -8
  163. package/dist/tools/layout-flatten.d.ts.map +1 -1
  164. package/dist/tools/layout-flatten.js +17 -6
  165. package/dist/tools/layout-flatten.js.map +1 -1
  166. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  167. package/dist/tools/multi-items/builders.js +18 -3
  168. package/dist/tools/multi-items/builders.js.map +1 -1
  169. package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -1
  170. package/dist/tools/multi-items/clean-implode-handler.js +2 -2
  171. package/dist/tools/multi-items/clean-implode-handler.js.map +1 -1
  172. package/dist/tools/multi-items/format/inspection-format.d.ts +41 -0
  173. package/dist/tools/multi-items/format/inspection-format.d.ts.map +1 -0
  174. package/dist/tools/multi-items/format/inspection-format.js +64 -0
  175. package/dist/tools/multi-items/format/inspection-format.js.map +1 -0
  176. package/dist/tools/multi-items/inspect-handler.d.ts +50 -2
  177. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
  178. package/dist/tools/multi-items/inspect-handler.js +237 -10
  179. package/dist/tools/multi-items/inspect-handler.js.map +1 -1
  180. package/dist/tools/multi-items/inspection-cache.d.ts +85 -0
  181. package/dist/tools/multi-items/inspection-cache.d.ts.map +1 -0
  182. package/dist/tools/multi-items/inspection-cache.js +126 -0
  183. package/dist/tools/multi-items/inspection-cache.js.map +1 -0
  184. package/dist/tools/pages/builders.d.ts +31 -2
  185. package/dist/tools/pages/builders.d.ts.map +1 -1
  186. package/dist/tools/pages/builders.js +173 -17
  187. package/dist/tools/pages/builders.js.map +1 -1
  188. package/dist/tools/pages/handlers-read.d.ts +6 -2
  189. package/dist/tools/pages/handlers-read.d.ts.map +1 -1
  190. package/dist/tools/pages/handlers-read.js +228 -26
  191. package/dist/tools/pages/handlers-read.js.map +1 -1
  192. package/dist/tools/pages/handlers-write.d.ts +143 -7
  193. package/dist/tools/pages/handlers-write.d.ts.map +1 -1
  194. package/dist/tools/pages/handlers-write.js +215 -11
  195. package/dist/tools/pages/handlers-write.js.map +1 -1
  196. package/dist/tools/pages/index.d.ts +1 -1
  197. package/dist/tools/pages/index.d.ts.map +1 -1
  198. package/dist/tools/pages/index.js +1 -1
  199. package/dist/tools/pages/index.js.map +1 -1
  200. package/dist/tools/pages/schemas.d.ts +166 -0
  201. package/dist/tools/pages/schemas.d.ts.map +1 -1
  202. package/dist/tools/pages/schemas.js +347 -0
  203. package/dist/tools/pages/schemas.js.map +1 -1
  204. package/dist/tools/shared-schemas.d.ts.map +1 -1
  205. package/dist/tools/shared-schemas.js +26 -11
  206. package/dist/tools/shared-schemas.js.map +1 -1
  207. package/dist/tools/sources/builders.d.ts.map +1 -1
  208. package/dist/tools/sources/builders.js +64 -6
  209. package/dist/tools/sources/builders.js.map +1 -1
  210. package/dist/tools/sources/handlers-bind.d.ts +13 -1
  211. package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
  212. package/dist/tools/sources/handlers-bind.js +219 -5
  213. package/dist/tools/sources/handlers-bind.js.map +1 -1
  214. package/dist/tools/sources/handlers.d.ts +3 -0
  215. package/dist/tools/sources/handlers.d.ts.map +1 -1
  216. package/dist/tools/sources/handlers.js +45 -8
  217. package/dist/tools/sources/handlers.js.map +1 -1
  218. package/dist/tools/sparse-fields.d.ts +23 -0
  219. package/dist/tools/sparse-fields.d.ts.map +1 -1
  220. package/dist/tools/sparse-fields.js +29 -0
  221. package/dist/tools/sparse-fields.js.map +1 -1
  222. package/dist/tools/sublayout/builders.d.ts +23 -0
  223. package/dist/tools/sublayout/builders.d.ts.map +1 -0
  224. package/dist/tools/sublayout/builders.js +54 -0
  225. package/dist/tools/sublayout/builders.js.map +1 -0
  226. package/dist/tools/sublayout/index.d.ts +13 -0
  227. package/dist/tools/sublayout/index.d.ts.map +1 -0
  228. package/dist/tools/sublayout/index.js +13 -0
  229. package/dist/tools/sublayout/index.js.map +1 -0
  230. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
  231. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
  232. package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
  233. package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
  234. package/dist/tools/tool-builder/results.d.ts +31 -0
  235. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  236. package/dist/tools/tool-builder/results.js +95 -4
  237. package/dist/tools/tool-builder/results.js.map +1 -1
  238. package/dist/uninstall-skill.d.ts +52 -0
  239. package/dist/uninstall-skill.d.ts.map +1 -0
  240. package/dist/uninstall-skill.js +146 -0
  241. package/dist/uninstall-skill.js.map +1 -0
  242. package/dist/uninstall.d.ts +73 -0
  243. package/dist/uninstall.d.ts.map +1 -0
  244. package/dist/uninstall.js +82 -0
  245. package/dist/uninstall.js.map +1 -0
  246. package/icon.png +0 -0
  247. package/manifest.json +10 -10
  248. package/package.json +7 -3
  249. package/skills/yt-builder-mcp/SKILL.md +157 -88
@@ -1,23 +1,28 @@
1
1
  /**
2
- * Page-tool WRITE handlers — `page_save`, `page_publish`. Both implement
3
- * the 3-phase progress contract (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM).
4
- * PHASE_SERVER is emitted BEFORE the await so the synthetic intermediate
5
- * fires even when the REST call ultimately errors the dispatch IS the
6
- * boundary, not the response.
2
+ * Page-tool WRITE handlers — `page_save`, `page_publish`, `pages_create`,
3
+ * `pages_delete`. All implement the 3-phase progress contract
4
+ * (PHASE_SEND PHASE_SERVER PHASE_CONFIRM). PHASE_SERVER is emitted
5
+ * BEFORE the await so the synthetic intermediate fires even when the
6
+ * REST call ultimately errors — the dispatch IS the boundary, not the
7
+ * response.
7
8
  *
8
9
  * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
10
+ * Extended with pages_create / pages_delete (v1.2 — C2 + C3).
9
11
  *
10
12
  * @license MIT
11
13
  */
14
+ import { encodeTemplateId } from '../../client.js';
12
15
  import { PHASE_CONFIRM, PHASE_SEND, PHASE_SERVER } from '../progress-phases.js';
13
- import { createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
16
+ import { createProgressReporter, errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
14
17
  // ─── page_save ──────────────────────────────────────────────────────
15
- export async function handlePageSave(client, { template_id, etag }, extra) {
18
+ export async function handlePageSave(client, { template_id, etag, layout }, extra) {
16
19
  const progress = extra ? createProgressReporter(extra) : null;
17
20
  await progress?.report(0, 3, PHASE_SEND);
18
21
  await progress?.report(1, 3, PHASE_SERVER);
19
22
  try {
20
- const data = await client.post(`/pages/${encodeURIComponent(template_id)}/save`, { etag });
23
+ // F85: forward `layout` only when supplied so the historical save
24
+ // body (`{}`) is byte-unchanged for the re-run-transforms path.
25
+ const data = await client.post(`/pages/${encodeTemplateId(template_id)}/save`, layout !== undefined ? { body: { layout }, etag } : { etag });
21
26
  await progress?.report(2, 3, PHASE_CONFIRM);
22
27
  return jsonResult(data);
23
28
  }
@@ -26,19 +31,46 @@ export async function handlePageSave(client, { template_id, etag }, extra) {
26
31
  error: e,
27
32
  context: { template_id, etag },
28
33
  hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
29
- 'and retry — someone else edited the page.',
34
+ 'and retry — someone else edited the page. On 422 the supplied ' +
35
+ '`layout` failed validation (unknown element type or bad structure) — ' +
36
+ 'the error `path` + `element_type` pinpoint the offending node.',
30
37
  });
31
38
  }
32
39
  }
33
40
  // ─── page_publish ───────────────────────────────────────────────────
41
+ /**
42
+ * F202 (P1): when the publish/dynamize response carries a `cms_warning` (the
43
+ * YT-layout is published but the backing CMS object — WP post / Joomla article
44
+ * — is NOT publicly visible: draft/future status, future publish_up, or no
45
+ * route), append it as a SALIENT trailing text block. The JSON leg already
46
+ * carries `cms_visibility` + `cms_warning`; the extra block makes the warning
47
+ * survive a long, context-rotted session where the agent skips parsing the
48
+ * payload and declares success on a page that 404s anonymously.
49
+ *
50
+ * No-op (returns the result unchanged) when there is no `cms_warning` — the
51
+ * publicly-visible happy path keeps its single-leg shape.
52
+ */
53
+ function withCmsWarningText(result, data) {
54
+ if (typeof data !== 'object' || data === null) {
55
+ return result;
56
+ }
57
+ const warning = data.cms_warning;
58
+ if (typeof warning !== 'string' || warning === '') {
59
+ return result;
60
+ }
61
+ return {
62
+ ...result,
63
+ content: [...result.content, { type: 'text', text: warning }],
64
+ };
65
+ }
34
66
  export async function handlePagePublish(client, { template_id, etag }, extra) {
35
67
  const progress = extra ? createProgressReporter(extra) : null;
36
68
  await progress?.report(0, 3, PHASE_SEND);
37
69
  await progress?.report(1, 3, PHASE_SERVER);
38
70
  try {
39
- const data = await client.post(`/pages/${encodeURIComponent(template_id)}/publish`, { etag });
71
+ const data = await client.post(`/pages/${encodeTemplateId(template_id)}/publish`, { etag });
40
72
  await progress?.report(2, 3, PHASE_CONFIRM);
41
- return jsonResult(data);
73
+ return withCmsWarningText(jsonResult(data), data);
42
74
  }
43
75
  catch (e) {
44
76
  return errorResult({
@@ -49,4 +81,176 @@ export async function handlePagePublish(client, { template_id, etag }, extra) {
49
81
  });
50
82
  }
51
83
  }
84
+ /**
85
+ * F12 (2026-06-09): collapse the friendly `published` boolean into the
86
+ * canonical `status` the PHP host understands.
87
+ *
88
+ * Precedence: an EXPLICIT `status` always wins — `published` is the
89
+ * ergonomic shortcut, not an override. So:
90
+ * - status given → use it verbatim (published ignored).
91
+ * - status absent + true → 'publish' (WP post_status=publish, Joomla state=1).
92
+ * - status absent + false/∅ → undefined (server applies its draft default).
93
+ *
94
+ * Returning `undefined` (rather than an explicit `'draft'`) for the
95
+ * default case preserves the existing wire shape — the server's Q6
96
+ * default-to-draft logic stays authoritative and the body byte-shape is
97
+ * unchanged for legacy callers that never sent `published`.
98
+ */
99
+ export function resolveCreateStatus(status, published) {
100
+ if (status !== undefined)
101
+ return status;
102
+ if (published === true)
103
+ return 'publish';
104
+ return undefined;
105
+ }
106
+ /**
107
+ * `pages_create` — POST `/pages` with the provided body. On
108
+ * `dry_run:true`, the REST handler runs validation Layers 1+2+4
109
+ * without persisting and returns a dry-run report. On non-dry-run
110
+ * success, the REST handler returns 201 with the wire shape of
111
+ * `PAGES_CREATE_OUTPUT_SCHEMA`.
112
+ */
113
+ export async function handlePagesCreate(client, input, extra) {
114
+ const progress = extra ? createProgressReporter(extra) : null;
115
+ await progress?.report(0, 3, PHASE_SEND);
116
+ await progress?.report(1, 3, PHASE_SERVER);
117
+ // F12: translate the `published` shortcut into the host-native
118
+ // `status` and DROP `published` from the wire body (the REST host has
119
+ // no such field). `status` is omitted entirely when neither an
120
+ // explicit status nor published:true was given, so the server's
121
+ // draft-default stays authoritative and the body shape is unchanged
122
+ // for legacy callers.
123
+ const { published: _published, status: _status, ...rest } = input;
124
+ const resolvedStatus = resolveCreateStatus(input.status, input.published);
125
+ const body = resolvedStatus !== undefined ? { ...rest, status: resolvedStatus } : rest;
126
+ try {
127
+ const data = await client.post('/pages', { body });
128
+ await progress?.report(2, 3, PHASE_CONFIRM);
129
+ return jsonResult(data);
130
+ }
131
+ catch (e) {
132
+ return errorResult({
133
+ error: e,
134
+ context: {
135
+ title: input.title,
136
+ slug: input.slug,
137
+ dry_run: input.dry_run ?? false,
138
+ },
139
+ hint: 'Common issues: missing title (400), unknown element type in layout ' +
140
+ '(422), Builder pre-check failed (422 dry-run or wet), post_type/content_type ' +
141
+ 'other than page/article (403). For dry-run: re-submit without dry_run:true ' +
142
+ 'to actually create. ' +
143
+ // F95 (2026-06-10): a `body_parse_failed` 400 means the AI host
144
+ // TRUNCATED the arguments JSON in transit (a known failure mode
145
+ // for large inline `layout` payloads ~10KB+). Do NOT retry the
146
+ // same giant all-in-one create — create the page with a
147
+ // small/empty layout first, then build it up element-by-element.
148
+ 'On a `body_parse_failed` 400 the tool-call arguments were truncated in ' +
149
+ 'transit (large inline `layout`): create the page with an empty/small ' +
150
+ 'layout, then add elements one at a time via element_add / ' +
151
+ 'element_bind_source instead of one giant inline `layout`.',
152
+ });
153
+ }
154
+ }
155
+ /**
156
+ * The recency reminder appended to every successful dynamize (research:
157
+ * checklist echo — keeps the "verify visually" step salient even in a
158
+ * long, context-rotted session). One line, by design (F98 rank-3:
159
+ * attention-dilution on a longer echo).
160
+ */
161
+ const DYNAMIZE_SUCCESS_REMINDER = 'Verify one row visually against the original at the customer viewport before declaring success.';
162
+ /**
163
+ * `page_dynamize` — POST `/pages/dynamize`. THE one-call canonical path to
164
+ * dynamize an existing designed section: the server copies the reference
165
+ * subtree byte-identically and swaps only the mapped queries + leaf
166
+ * field-names (the recipe of `dynamize-existing-layout.md` as CODE), then
167
+ * creates the page through the same hardened create path. The 201 carries
168
+ * a `summary` self-check ({queries_swapped, leaves_remapped, leaves_kept,
169
+ * leaves_removed, unmatched_map_keys, kept_unresolvable}). A non-empty
170
+ * `unmatched_map_keys` means the agent mapped a field the reference subtree
171
+ * never bound; a non-zero `kept_unresolvable.count` means a sub-query panel
172
+ * had no flow field (its leaves render empty) — extend leaf_map with the
173
+ * qualified "<subquery>.<leaf>" keys and retry.
174
+ */
175
+ export async function handlePageDynamize(client, input, extra) {
176
+ const progress = extra ? createProgressReporter(extra) : null;
177
+ await progress?.report(0, 3, PHASE_SEND);
178
+ await progress?.report(1, 3, PHASE_SERVER);
179
+ try {
180
+ const data = await client.post('/pages/dynamize', { body: input, etag: input.etag });
181
+ await progress?.report(2, 3, PHASE_CONFIRM);
182
+ // Append the one-line recency reminder as a trailing text block so
183
+ // the JSON leg stays byte-pure (parsers read content[0]) while the
184
+ // human + model see the verify-visually nudge.
185
+ const base = jsonResult(data);
186
+ const withReminder = {
187
+ ...base,
188
+ content: [...base.content, { type: 'text', text: DYNAMIZE_SUCCESS_REMINDER }],
189
+ };
190
+ // F202: when a dynamize PUBLISHED to a draft/scheduled/unrouted CMS
191
+ // object, surface the cms_warning as a salient trailing block too.
192
+ return withCmsWarningText(withReminder, data);
193
+ }
194
+ catch (e) {
195
+ return errorResult({
196
+ error: e,
197
+ context: {
198
+ template_id: input.template_id,
199
+ section_name: input.section_name,
200
+ element_path: input.element_path,
201
+ list_source_name: input.list_source_name,
202
+ },
203
+ hint: 'On 404 section_not_found the error data lists `available_named_sections` — ' +
204
+ 'pick one and retry. Provide EXACTLY ONE of section_name / element_path. ' +
205
+ 'On 422 the dynamized layout failed validation (the `path` + `element_type` ' +
206
+ 'pinpoint the node). On 412 refresh via yootheme_builder_get_etag and retry. ' +
207
+ 'Check the response `summary.unmatched_map_keys` — a non-empty list means a ' +
208
+ 'leaf_map key did not match any leaf in the reference subtree (typo, or wrong ' +
209
+ 'reference section). Check `summary.kept_unresolvable` — a non-zero count means a ' +
210
+ 'sub-query panel had no flow field; add the qualified "<subquery>.<leaf>" keys to ' +
211
+ 'leaf_map and retry.',
212
+ });
213
+ }
214
+ }
215
+ /**
216
+ * `pages_delete` — DELETE `/pages/{post_id}` with confirm + force in the
217
+ * body. `force:false` (default) trashes via `wp_delete_post(false)`
218
+ * (recoverable via wp-admin). `force:true` hard-deletes the post
219
+ * (irrecoverable). The REST handler returns 200 with the wire shape of
220
+ * `PAGES_DELETE_OUTPUT_SCHEMA` on success.
221
+ */
222
+ export async function handlePagesDelete(client, input, extra) {
223
+ const progress = extra ? createProgressReporter(extra) : null;
224
+ await progress?.report(0, 3, PHASE_SEND);
225
+ await progress?.report(1, 3, PHASE_SERVER);
226
+ try {
227
+ const data = await client.delete(`/pages/${encodeURIComponent(String(input.post_id))}`, {
228
+ body: {
229
+ confirm: input.confirm,
230
+ force: input.force ?? false,
231
+ },
232
+ });
233
+ await progress?.report(2, 3, PHASE_CONFIRM);
234
+ // Task #38 (2026-05-29): pages_delete declares
235
+ // `outputSchema: PAGES_DELETE_OUTPUT_SCHEMA` in builders.ts. The
236
+ // host therefore validates `structuredContent` and rejects with
237
+ // `-32602 Output validation error` when it is missing. Use
238
+ // `structuredResult` (mirrors handlePagesList et al.) so the
239
+ // text leg stays LLM-readable AND the structured leg validates.
240
+ const toolkitResult = jsonResult(data);
241
+ return structuredResult({ content: toolkitResult.content }, data);
242
+ }
243
+ catch (e) {
244
+ return errorResult({
245
+ error: e,
246
+ context: {
247
+ post_id: input.post_id,
248
+ force: input.force ?? false,
249
+ },
250
+ hint: 'Common issues: missing confirm:true (400), unknown post id (404), ' +
251
+ 'post_type other than "page" (403). For permanent delete pass ' +
252
+ 'force:true; default is trash (recoverable via wp-admin).',
253
+ });
254
+ }
255
+ }
52
256
  //# sourceMappingURL=handlers-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACH,sBAAsB,EACtB,WAAW,EACX,UAAU,GAGb,MAAM,oBAAoB,CAAC;AAO5B,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAChD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,2CAA2C;SAClD,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,UAAU,EACnD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,YAAY;SACnB,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,5 @@
13
13
  * @license MIT
14
14
  */
15
15
  export { buildPagesTools } from './builders.js';
16
- export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
16
+ export { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
@@ -13,5 +13,5 @@
13
13
  * @license MIT
14
14
  */
15
15
  export { buildPagesTools } from './builders.js';
16
- export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
16
+ export { ETAG_OUTPUT_SCHEMA, PAGE_DYNAMIZE_INPUT, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, TEMPLATE_SUMMARY_OUTPUT_SCHEMA, } from './schemas.js';
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,GACjC,MAAM,cAAc,CAAC"}
@@ -14,6 +14,7 @@ export declare const PAGES_LIST_OUTPUT_SCHEMA: z.ZodObject<{
14
14
  projected_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
15
  available_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
16
  unknown_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ projection_warning: z.ZodOptional<z.ZodString>;
17
18
  }, z.core.$strip>;
18
19
  export declare const SCHEMA_OUTPUT_SCHEMA: z.ZodObject<{
19
20
  items: z.ZodArray<z.ZodObject<{
@@ -42,4 +43,169 @@ export declare const TEMPLATE_SUMMARY_OUTPUT_SCHEMA: z.ZodObject<{
42
43
  }, z.core.$strip>>;
43
44
  etag: z.ZodString;
44
45
  }, z.core.$strip>;
46
+ /**
47
+ * Input shape for `yootheme_builder_pages_create`.
48
+ *
49
+ * Mirrors the args of `POST /pages` (Phase B).
50
+ *
51
+ * Design pins:
52
+ * - `post_type` is intentionally NOT exposed. Layer 9 defensive guard
53
+ * on the REST side rejects it server-side; surfacing it at the MCP
54
+ * boundary would invite a footgun where an agent tries to set it
55
+ * and fails confusingly.
56
+ * - `status` defaults to `draft` on the server (Q6 design — no public
57
+ * empty page).
58
+ * - `dry_run` triggers validation Layers 1+2+4 without persisting.
59
+ */
60
+ export declare const PAGES_CREATE_INPUT: {
61
+ title: z.ZodString;
62
+ slug: z.ZodOptional<z.ZodString>;
63
+ status: z.ZodOptional<z.ZodEnum<{
64
+ publish: "publish";
65
+ draft: "draft";
66
+ pending: "pending";
67
+ private: "private";
68
+ future: "future";
69
+ }>>;
70
+ published: z.ZodDefault<z.ZodBoolean>;
71
+ menu_item: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
72
+ layout: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
73
+ dry_run: z.ZodOptional<z.ZodBoolean>;
74
+ };
75
+ /**
76
+ * Wire shape for `yootheme_builder_pages_create` on success (non-dry-run).
77
+ *
78
+ * Mirrors the REST 201 response shape.
79
+ *
80
+ * Design pins:
81
+ * - `frontend_url` is nullable: REST returns null for fresh drafts
82
+ * before publish.
83
+ * - `template_id` is a plain string. The "page:{post_id}" prefix is
84
+ * enforced server-side; adding a `.startsWith()` here would buy no
85
+ * MCP-client value while adding Zod complexity.
86
+ * - `warnings` is a lean string array (e.g. "slug_collision_resolved"
87
+ * when WP auto-appends `-2`). The REST surface may expand this to
88
+ * richer objects in v1.3; strings keep the v1.2 surface minimal.
89
+ */
90
+ export declare const PAGES_CREATE_OUTPUT_SCHEMA: z.ZodObject<{
91
+ page_id: z.ZodOptional<z.ZodNumber>;
92
+ article_id: z.ZodOptional<z.ZodNumber>;
93
+ title: z.ZodString;
94
+ slug: z.ZodString;
95
+ status: z.ZodString;
96
+ frontend_url: z.ZodNullable<z.ZodString>;
97
+ builder_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ template_id: z.ZodString;
99
+ etag: z.ZodString;
100
+ warnings: z.ZodArray<z.ZodString>;
101
+ }, z.core.$strip>;
102
+ /**
103
+ * Wire shape for `yootheme_builder_pages_create` when `dry_run:true`.
104
+ *
105
+ * Design pin: NO `etag` field. The B6 fix-cycle decision was that
106
+ * surfacing a "live" ETag with a dry-run response invites a stale-
107
+ * If-Match footgun (caller pins the ETag, then non-dry-run mutates,
108
+ * stale ETag rejected with 412). Dry-run is validation-only.
109
+ *
110
+ * `template_id_pattern` is a literal — the actual `template_id` cannot
111
+ * be materialised before WP allocates the post_id.
112
+ */
113
+ export declare const PAGES_CREATE_DRY_RUN_OUTPUT_SCHEMA: z.ZodObject<{
114
+ dry_run: z.ZodLiteral<true>;
115
+ would_create: z.ZodObject<{
116
+ title: z.ZodString;
117
+ slug: z.ZodString;
118
+ status: z.ZodString;
119
+ template_id_pattern: z.ZodEnum<{
120
+ "page:{post_id}": "page:{post_id}";
121
+ "article:{article_id}": "article:{article_id}";
122
+ }>;
123
+ }, z.core.$strip>;
124
+ validation_report: z.ZodObject<{
125
+ layer_1_structural: z.ZodLiteral<"passed">;
126
+ layer_2_element_types: z.ZodLiteral<"passed">;
127
+ layer_4_renderer: z.ZodLiteral<"passed">;
128
+ }, z.core.$strip>;
129
+ }, z.core.$strip>;
130
+ /**
131
+ * Input shape for `yootheme_builder_pages_delete`.
132
+ *
133
+ * Mirrors the args of `DELETE /pages/{post_id}` (Phase B).
134
+ *
135
+ * Design pin: `confirm` is `z.literal(true)`. This is the Zod-side
136
+ * enforcement of the confirm gate — the MCP boundary rejects requests
137
+ * without `confirm:true` before they ever hit the REST layer.
138
+ *
139
+ * `force` defaults to false server-side → wp_delete_post(trash). When
140
+ * true → hard delete (irrecoverable).
141
+ */
142
+ export declare const PAGES_DELETE_INPUT: {
143
+ post_id: z.ZodNumber;
144
+ confirm: z.ZodLiteral<true>;
145
+ force: z.ZodOptional<z.ZodBoolean>;
146
+ };
147
+ /**
148
+ * Input shape for `yootheme_builder_page_dynamize`. Wraps
149
+ * `POST /pages/dynamize`. Narrowest-schema rule: `template_id` +
150
+ * `list_source_name` + `page.title` are required non-empty; `page` carries
151
+ * the create-machinery passthrough; the reference selector is `section_name`
152
+ * OR `element_path` (exactly-one is enforced server-side so a miss can list
153
+ * the available named sections as remediation).
154
+ */
155
+ export declare const PAGE_DYNAMIZE_INPUT: {
156
+ template_id: z.ZodString;
157
+ section_name: z.ZodOptional<z.ZodString>;
158
+ element_path: z.ZodOptional<z.ZodString>;
159
+ list_source_name: z.ZodOptional<z.ZodString>;
160
+ source_map: z.ZodOptional<z.ZodArray<z.ZodObject<{
161
+ match: z.ZodString;
162
+ source_name: z.ZodString;
163
+ leaf_map: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
164
+ name: z.ZodString;
165
+ filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
166
+ }, z.core.$strict>]>>>;
167
+ }, z.core.$strict>>>;
168
+ leaf_map: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
169
+ name: z.ZodString;
170
+ filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
171
+ }, z.core.$strict>]>>>;
172
+ conditions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
173
+ name: z.ZodString;
174
+ filters: z.ZodObject<{
175
+ condition: z.ZodEnum<{
176
+ "!": "!";
177
+ "!!": "!!";
178
+ }>;
179
+ }, z.core.$strip>;
180
+ }, z.core.$strict>>>;
181
+ remove_leaves: z.ZodOptional<z.ZodArray<z.ZodString>>;
182
+ page: z.ZodObject<{
183
+ title: z.ZodString;
184
+ slug: z.ZodOptional<z.ZodString>;
185
+ published: z.ZodOptional<z.ZodBoolean>;
186
+ status: z.ZodOptional<z.ZodEnum<{
187
+ publish: "publish";
188
+ draft: "draft";
189
+ pending: "pending";
190
+ private: "private";
191
+ future: "future";
192
+ }>>;
193
+ menu_item: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
194
+ }, z.core.$strip>;
195
+ etag: z.ZodOptional<z.ZodString>;
196
+ };
197
+ /**
198
+ * Wire shape for `yootheme_builder_pages_delete` on success.
199
+ *
200
+ * `deleted` is `z.literal(true)` — the success-response invariant. A
201
+ * failed delete surfaces as `isError:true` with a structured-error
202
+ * envelope, not as `deleted:false`.
203
+ */
204
+ export declare const PAGES_DELETE_OUTPUT_SCHEMA: z.ZodObject<{
205
+ deleted: z.ZodLiteral<true>;
206
+ page_id: z.ZodOptional<z.ZodNumber>;
207
+ article_id: z.ZodOptional<z.ZodNumber>;
208
+ force_deleted: z.ZodBoolean;
209
+ etag: z.ZodString;
210
+ }, z.core.$strip>;
45
211
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;iBA8BnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAiB/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAWH,eAAO,MAAM,8BAA8B;;;;;;;;;;;iBAazC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;;;;iBAwCnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAiB/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAWH,eAAO,MAAM,8BAA8B;;;;;;;;;;;iBAazC,CAAC;AAWH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAiE9B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBA2BlC,CAAC;AAEN;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;iBAe7C,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB;;;;CAoB9B,CAAC;AAmCF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqI/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;;;;iBAYlC,CAAC"}