@wootsup/yt-builder-mcp 0.2.0-alpha.2

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 (299) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/bin/yt-builder-mcp.js +59 -0
  4. package/dist/auth.d.ts +39 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.js +93 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/client.d.ts +84 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +151 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/clients/claude-code.d.ts +18 -0
  13. package/dist/clients/claude-code.d.ts.map +1 -0
  14. package/dist/clients/claude-code.js +53 -0
  15. package/dist/clients/claude-code.js.map +1 -0
  16. package/dist/clients/claude-desktop.d.ts +19 -0
  17. package/dist/clients/claude-desktop.d.ts.map +1 -0
  18. package/dist/clients/claude-desktop.js +56 -0
  19. package/dist/clients/claude-desktop.js.map +1 -0
  20. package/dist/clients/cline.d.ts +26 -0
  21. package/dist/clients/cline.d.ts.map +1 -0
  22. package/dist/clients/cline.js +80 -0
  23. package/dist/clients/cline.js.map +1 -0
  24. package/dist/clients/codex-cli.d.ts +42 -0
  25. package/dist/clients/codex-cli.d.ts.map +1 -0
  26. package/dist/clients/codex-cli.js +194 -0
  27. package/dist/clients/codex-cli.js.map +1 -0
  28. package/dist/clients/continue.d.ts +13 -0
  29. package/dist/clients/continue.d.ts.map +1 -0
  30. package/dist/clients/continue.js +52 -0
  31. package/dist/clients/continue.js.map +1 -0
  32. package/dist/clients/cursor.d.ts +12 -0
  33. package/dist/clients/cursor.d.ts.map +1 -0
  34. package/dist/clients/cursor.js +38 -0
  35. package/dist/clients/cursor.js.map +1 -0
  36. package/dist/clients/gemini-cli.d.ts +18 -0
  37. package/dist/clients/gemini-cli.d.ts.map +1 -0
  38. package/dist/clients/gemini-cli.js +44 -0
  39. package/dist/clients/gemini-cli.js.map +1 -0
  40. package/dist/clients/home.d.ts +14 -0
  41. package/dist/clients/home.d.ts.map +1 -0
  42. package/dist/clients/home.js +20 -0
  43. package/dist/clients/home.js.map +1 -0
  44. package/dist/clients/index.d.ts +52 -0
  45. package/dist/clients/index.d.ts.map +1 -0
  46. package/dist/clients/index.js +72 -0
  47. package/dist/clients/index.js.map +1 -0
  48. package/dist/clients/roo-code.d.ts +23 -0
  49. package/dist/clients/roo-code.d.ts.map +1 -0
  50. package/dist/clients/roo-code.js +69 -0
  51. package/dist/clients/roo-code.js.map +1 -0
  52. package/dist/clients/zed.d.ts +12 -0
  53. package/dist/clients/zed.d.ts.map +1 -0
  54. package/dist/clients/zed.js +41 -0
  55. package/dist/clients/zed.js.map +1 -0
  56. package/dist/errors/hints.d.ts +51 -0
  57. package/dist/errors/hints.d.ts.map +1 -0
  58. package/dist/errors/hints.js +95 -0
  59. package/dist/errors/hints.js.map +1 -0
  60. package/dist/errors/mask.d.ts +35 -0
  61. package/dist/errors/mask.d.ts.map +1 -0
  62. package/dist/errors/mask.js +49 -0
  63. package/dist/errors/mask.js.map +1 -0
  64. package/dist/errors/sanitize.d.ts +31 -0
  65. package/dist/errors/sanitize.d.ts.map +1 -0
  66. package/dist/errors/sanitize.js +90 -0
  67. package/dist/errors/sanitize.js.map +1 -0
  68. package/dist/errors.d.ts +42 -0
  69. package/dist/errors.d.ts.map +1 -0
  70. package/dist/errors.js +61 -0
  71. package/dist/errors.js.map +1 -0
  72. package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
  73. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
  74. package/dist/gateway/advanced-tool/discovery.js +53 -0
  75. package/dist/gateway/advanced-tool/discovery.js.map +1 -0
  76. package/dist/gateway/advanced-tool/domains.d.ts +42 -0
  77. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
  78. package/dist/gateway/advanced-tool/domains.js +88 -0
  79. package/dist/gateway/advanced-tool/domains.js.map +1 -0
  80. package/dist/gateway/advanced-tool/execute.d.ts +29 -0
  81. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
  82. package/dist/gateway/advanced-tool/execute.js +54 -0
  83. package/dist/gateway/advanced-tool/execute.js.map +1 -0
  84. package/dist/gateway/advanced-tool/index.d.ts +36 -0
  85. package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
  86. package/dist/gateway/advanced-tool/index.js +39 -0
  87. package/dist/gateway/advanced-tool/index.js.map +1 -0
  88. package/dist/gateway/advanced-tool/register.d.ts +18 -0
  89. package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
  90. package/dist/gateway/advanced-tool/register.js +62 -0
  91. package/dist/gateway/advanced-tool/register.js.map +1 -0
  92. package/dist/gateway/advanced-tool.d.ts +13 -0
  93. package/dist/gateway/advanced-tool.d.ts.map +1 -0
  94. package/dist/gateway/advanced-tool.js +13 -0
  95. package/dist/gateway/advanced-tool.js.map +1 -0
  96. package/dist/gateway/capturing-server.d.ts +117 -0
  97. package/dist/gateway/capturing-server.d.ts.map +1 -0
  98. package/dist/gateway/capturing-server.js +103 -0
  99. package/dist/gateway/capturing-server.js.map +1 -0
  100. package/dist/gateway/essentials.d.ts +49 -0
  101. package/dist/gateway/essentials.d.ts.map +1 -0
  102. package/dist/gateway/essentials.js +62 -0
  103. package/dist/gateway/essentials.js.map +1 -0
  104. package/dist/gateway/test-support.d.ts +41 -0
  105. package/dist/gateway/test-support.d.ts.map +1 -0
  106. package/dist/gateway/test-support.js +60 -0
  107. package/dist/gateway/test-support.js.map +1 -0
  108. package/dist/index.d.ts +25 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +77 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/install-skill.d.ts +35 -0
  113. package/dist/install-skill.d.ts.map +1 -0
  114. package/dist/install-skill.js +107 -0
  115. package/dist/install-skill.js.map +1 -0
  116. package/dist/platform/index.d.ts +49 -0
  117. package/dist/platform/index.d.ts.map +1 -0
  118. package/dist/platform/index.js +38 -0
  119. package/dist/platform/index.js.map +1 -0
  120. package/dist/server.d.ts +50 -0
  121. package/dist/server.d.ts.map +1 -0
  122. package/dist/server.js +117 -0
  123. package/dist/server.js.map +1 -0
  124. package/dist/setup-cli.d.ts +100 -0
  125. package/dist/setup-cli.d.ts.map +1 -0
  126. package/dist/setup-cli.js +355 -0
  127. package/dist/setup-cli.js.map +1 -0
  128. package/dist/setup-prompts.d.ts +41 -0
  129. package/dist/setup-prompts.d.ts.map +1 -0
  130. package/dist/setup-prompts.js +142 -0
  131. package/dist/setup-prompts.js.map +1 -0
  132. package/dist/setup-token.d.ts +38 -0
  133. package/dist/setup-token.d.ts.map +1 -0
  134. package/dist/setup-token.js +106 -0
  135. package/dist/setup-token.js.map +1 -0
  136. package/dist/setup-wizard-defaults.d.ts +43 -0
  137. package/dist/setup-wizard-defaults.d.ts.map +1 -0
  138. package/dist/setup-wizard-defaults.js +160 -0
  139. package/dist/setup-wizard-defaults.js.map +1 -0
  140. package/dist/setup-wizard-handshake.d.ts +25 -0
  141. package/dist/setup-wizard-handshake.d.ts.map +1 -0
  142. package/dist/setup-wizard-handshake.js +103 -0
  143. package/dist/setup-wizard-handshake.js.map +1 -0
  144. package/dist/setup-wizard-types.d.ts +148 -0
  145. package/dist/setup-wizard-types.d.ts.map +1 -0
  146. package/dist/setup-wizard-types.js +11 -0
  147. package/dist/setup-wizard-types.js.map +1 -0
  148. package/dist/setup-wizard.d.ts +33 -0
  149. package/dist/setup-wizard.d.ts.map +1 -0
  150. package/dist/setup-wizard.js +166 -0
  151. package/dist/setup-wizard.js.map +1 -0
  152. package/dist/setup.d.ts +17 -0
  153. package/dist/setup.d.ts.map +1 -0
  154. package/dist/setup.js +33 -0
  155. package/dist/setup.js.map +1 -0
  156. package/dist/tools/elements/builders.d.ts +24 -0
  157. package/dist/tools/elements/builders.d.ts.map +1 -0
  158. package/dist/tools/elements/builders.js +150 -0
  159. package/dist/tools/elements/builders.js.map +1 -0
  160. package/dist/tools/elements/handlers-write.d.ts +48 -0
  161. package/dist/tools/elements/handlers-write.d.ts.map +1 -0
  162. package/dist/tools/elements/handlers-write.js +141 -0
  163. package/dist/tools/elements/handlers-write.js.map +1 -0
  164. package/dist/tools/elements/handlers.d.ts +56 -0
  165. package/dist/tools/elements/handlers.d.ts.map +1 -0
  166. package/dist/tools/elements/handlers.js +113 -0
  167. package/dist/tools/elements/handlers.js.map +1 -0
  168. package/dist/tools/elements/index.d.ts +28 -0
  169. package/dist/tools/elements/index.d.ts.map +1 -0
  170. package/dist/tools/elements/index.js +27 -0
  171. package/dist/tools/elements/index.js.map +1 -0
  172. package/dist/tools/elements.d.ts +13 -0
  173. package/dist/tools/elements.d.ts.map +1 -0
  174. package/dist/tools/elements.js +13 -0
  175. package/dist/tools/elements.js.map +1 -0
  176. package/dist/tools/elicitation.d.ts +87 -0
  177. package/dist/tools/elicitation.d.ts.map +1 -0
  178. package/dist/tools/elicitation.js +100 -0
  179. package/dist/tools/elicitation.js.map +1 -0
  180. package/dist/tools/format/elements-format.d.ts +34 -0
  181. package/dist/tools/format/elements-format.d.ts.map +1 -0
  182. package/dist/tools/format/elements-format.js +112 -0
  183. package/dist/tools/format/elements-format.js.map +1 -0
  184. package/dist/tools/format/health-format.d.ts +73 -0
  185. package/dist/tools/format/health-format.d.ts.map +1 -0
  186. package/dist/tools/format/health-format.js +178 -0
  187. package/dist/tools/format/health-format.js.map +1 -0
  188. package/dist/tools/format/inspection-format.d.ts +45 -0
  189. package/dist/tools/format/inspection-format.d.ts.map +1 -0
  190. package/dist/tools/format/inspection-format.js +125 -0
  191. package/dist/tools/format/inspection-format.js.map +1 -0
  192. package/dist/tools/format/pages-format.d.ts +39 -0
  193. package/dist/tools/format/pages-format.d.ts.map +1 -0
  194. package/dist/tools/format/pages-format.js +110 -0
  195. package/dist/tools/format/pages-format.js.map +1 -0
  196. package/dist/tools/format/sources-format.d.ts +25 -0
  197. package/dist/tools/format/sources-format.d.ts.map +1 -0
  198. package/dist/tools/format/sources-format.js +113 -0
  199. package/dist/tools/format/sources-format.js.map +1 -0
  200. package/dist/tools/health.d.ts +22 -0
  201. package/dist/tools/health.d.ts.map +1 -0
  202. package/dist/tools/health.js +147 -0
  203. package/dist/tools/health.js.map +1 -0
  204. package/dist/tools/index.d.ts +23 -0
  205. package/dist/tools/index.d.ts.map +1 -0
  206. package/dist/tools/index.js +23 -0
  207. package/dist/tools/index.js.map +1 -0
  208. package/dist/tools/inspection.d.ts +14 -0
  209. package/dist/tools/inspection.d.ts.map +1 -0
  210. package/dist/tools/inspection.js +115 -0
  211. package/dist/tools/inspection.js.map +1 -0
  212. package/dist/tools/layout-flatten.d.ts +63 -0
  213. package/dist/tools/layout-flatten.d.ts.map +1 -0
  214. package/dist/tools/layout-flatten.js +95 -0
  215. package/dist/tools/layout-flatten.js.map +1 -0
  216. package/dist/tools/pages/builders.d.ts +14 -0
  217. package/dist/tools/pages/builders.d.ts.map +1 -0
  218. package/dist/tools/pages/builders.js +97 -0
  219. package/dist/tools/pages/builders.js.map +1 -0
  220. package/dist/tools/pages/handlers-read.d.ts +24 -0
  221. package/dist/tools/pages/handlers-read.d.ts.map +1 -0
  222. package/dist/tools/pages/handlers-read.js +141 -0
  223. package/dist/tools/pages/handlers-read.js.map +1 -0
  224. package/dist/tools/pages/handlers-write.d.ts +21 -0
  225. package/dist/tools/pages/handlers-write.d.ts.map +1 -0
  226. package/dist/tools/pages/handlers-write.js +52 -0
  227. package/dist/tools/pages/handlers-write.js.map +1 -0
  228. package/dist/tools/pages/index.d.ts +17 -0
  229. package/dist/tools/pages/index.d.ts.map +1 -0
  230. package/dist/tools/pages/index.js +17 -0
  231. package/dist/tools/pages/index.js.map +1 -0
  232. package/dist/tools/pages/schemas.d.ts +30 -0
  233. package/dist/tools/pages/schemas.d.ts.map +1 -0
  234. package/dist/tools/pages/schemas.js +30 -0
  235. package/dist/tools/pages/schemas.js.map +1 -0
  236. package/dist/tools/pages.d.ts +13 -0
  237. package/dist/tools/pages.d.ts.map +1 -0
  238. package/dist/tools/pages.js +13 -0
  239. package/dist/tools/pages.js.map +1 -0
  240. package/dist/tools/progress-phases.d.ts +46 -0
  241. package/dist/tools/progress-phases.d.ts.map +1 -0
  242. package/dist/tools/progress-phases.js +48 -0
  243. package/dist/tools/progress-phases.js.map +1 -0
  244. package/dist/tools/shared-schemas.d.ts +15 -0
  245. package/dist/tools/shared-schemas.d.ts.map +1 -0
  246. package/dist/tools/shared-schemas.js +30 -0
  247. package/dist/tools/shared-schemas.js.map +1 -0
  248. package/dist/tools/sources/builders.d.ts +13 -0
  249. package/dist/tools/sources/builders.d.ts.map +1 -0
  250. package/dist/tools/sources/builders.js +88 -0
  251. package/dist/tools/sources/builders.js.map +1 -0
  252. package/dist/tools/sources/handlers-bind.d.ts +26 -0
  253. package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
  254. package/dist/tools/sources/handlers-bind.js +123 -0
  255. package/dist/tools/sources/handlers-bind.js.map +1 -0
  256. package/dist/tools/sources/handlers.d.ts +45 -0
  257. package/dist/tools/sources/handlers.d.ts.map +1 -0
  258. package/dist/tools/sources/handlers.js +84 -0
  259. package/dist/tools/sources/handlers.js.map +1 -0
  260. package/dist/tools/sources/index.d.ts +19 -0
  261. package/dist/tools/sources/index.d.ts.map +1 -0
  262. package/dist/tools/sources/index.js +18 -0
  263. package/dist/tools/sources/index.js.map +1 -0
  264. package/dist/tools/sources.d.ts +14 -0
  265. package/dist/tools/sources.d.ts.map +1 -0
  266. package/dist/tools/sources.js +14 -0
  267. package/dist/tools/sources.js.map +1 -0
  268. package/dist/tools/sparse-fields.d.ts +80 -0
  269. package/dist/tools/sparse-fields.d.ts.map +1 -0
  270. package/dist/tools/sparse-fields.js +144 -0
  271. package/dist/tools/sparse-fields.js.map +1 -0
  272. package/dist/tools/tool-builder/annotations.d.ts +22 -0
  273. package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
  274. package/dist/tools/tool-builder/annotations.js +35 -0
  275. package/dist/tools/tool-builder/annotations.js.map +1 -0
  276. package/dist/tools/tool-builder/define.d.ts +31 -0
  277. package/dist/tools/tool-builder/define.d.ts.map +1 -0
  278. package/dist/tools/tool-builder/define.js +31 -0
  279. package/dist/tools/tool-builder/define.js.map +1 -0
  280. package/dist/tools/tool-builder/index.d.ts +28 -0
  281. package/dist/tools/tool-builder/index.d.ts.map +1 -0
  282. package/dist/tools/tool-builder/index.js +27 -0
  283. package/dist/tools/tool-builder/index.js.map +1 -0
  284. package/dist/tools/tool-builder/results.d.ts +59 -0
  285. package/dist/tools/tool-builder/results.d.ts.map +1 -0
  286. package/dist/tools/tool-builder/results.js +125 -0
  287. package/dist/tools/tool-builder/results.js.map +1 -0
  288. package/dist/tools/tool-builder/types.d.ts +82 -0
  289. package/dist/tools/tool-builder/types.d.ts.map +1 -0
  290. package/dist/tools/tool-builder/types.js +9 -0
  291. package/dist/tools/tool-builder/types.js.map +1 -0
  292. package/dist/tools/tool-builder.d.ts +16 -0
  293. package/dist/tools/tool-builder.d.ts.map +1 -0
  294. package/dist/tools/tool-builder.js +16 -0
  295. package/dist/tools/tool-builder.js.map +1 -0
  296. package/icon.png +0 -0
  297. package/manifest.json +63 -0
  298. package/package.json +81 -0
  299. package/skills/yootheme-builder/SKILL.md +582 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Layout-flatten helper — depth-first walk that turns a nested YOOtheme
3
+ * layout tree into a flat array of `{ path, parent_path, depth,
4
+ * element_type, props }` records.
5
+ *
6
+ * Used by `yootheme_builder_page_get_layout` when called with
7
+ * `flat: true`. Per Design §4.4.1:
8
+ *
9
+ * - Walk-order: depth-first, parent BEFORE children, original child
10
+ * order preserved (no sort).
11
+ * - `path` uses JSON-Pointer-style notation rooted at `/layout/<key>`
12
+ * and descends via `/children/<index>` segments. The root segments
13
+ * mirror the keys the REST plugin produces (string keys "0","1",…
14
+ * when the top-level layout is an object; numeric indices when it
15
+ * happens to be an array).
16
+ * - `parent_path` is `null` for top-level entries.
17
+ * - The emitted record's `children` field is REMOVED — children become
18
+ * their own emitted entries with their own `path`. Keeping the nested
19
+ * array would defeat the purpose of flattening.
20
+ * - Non-object children are skipped silently but their index is
21
+ * preserved in the parent's child-numbering (the next valid sibling
22
+ * keeps its original index).
23
+ *
24
+ * Pure function — no I/O, no client dependency. Test-covered in
25
+ * `tests/tools/layout-flatten.test.ts`.
26
+ *
27
+ * @license MIT
28
+ */
29
+ /**
30
+ * Flatten a YOOtheme nested layout tree.
31
+ *
32
+ * @param layout - The top-level layout container. Accepts either an
33
+ * object keyed by stringified indices ("0","1",…) or an actual array.
34
+ * Returns `[]` for empty input or anything that isn't iterable.
35
+ */
36
+ export function flattenLayout(layout) {
37
+ const out = [];
38
+ if (layout === null || typeof layout !== 'object') {
39
+ return out;
40
+ }
41
+ // Iterate top-level entries in insertion order. For arrays this gives
42
+ // numeric indices; for objects keyed by "0","1",… it gives the same
43
+ // ordering YT serialises.
44
+ const entries = Array.isArray(layout)
45
+ ? layout.map((v, i) => [String(i), v])
46
+ : Object.entries(layout);
47
+ for (const [key, node] of entries) {
48
+ walk(node, `/layout/${key}`, null, 0, out);
49
+ }
50
+ return out;
51
+ }
52
+ /**
53
+ * Depth-first walker. Emits the node, then recurses into its children.
54
+ * Skips non-object nodes silently while preserving child-index numbering.
55
+ */
56
+ function walk(node, path, parentPath, depth, out) {
57
+ if (node === null || typeof node !== 'object' || Array.isArray(node)) {
58
+ return;
59
+ }
60
+ const obj = node;
61
+ const elementType = typeof obj.type === 'string' ? obj.type : '';
62
+ const props = obj.props !== null && typeof obj.props === 'object' && !Array.isArray(obj.props)
63
+ ? obj.props
64
+ : undefined;
65
+ // Build a passthrough shallow-clone WITHOUT the children field. We
66
+ // copy every other top-level key so future REST additions (label,
67
+ // has_binding, …) survive the flatten.
68
+ const emitted = {
69
+ path,
70
+ parent_path: parentPath,
71
+ depth,
72
+ element_type: elementType,
73
+ };
74
+ for (const [k, v] of Object.entries(obj)) {
75
+ if (k === 'children' || k === 'type' || k === 'props')
76
+ continue;
77
+ emitted[k] = v;
78
+ }
79
+ if (props !== undefined)
80
+ emitted.props = props;
81
+ out.push(emitted);
82
+ const children = obj.children;
83
+ if (Array.isArray(children)) {
84
+ for (let i = 0; i < children.length; i++) {
85
+ const child = children[i];
86
+ if (child === null || typeof child !== 'object' || Array.isArray(child)) {
87
+ // Skip non-object children; their index is preserved in
88
+ // the next sibling's path.
89
+ continue;
90
+ }
91
+ walk(child, `${path}/children/${String(i)}`, path, depth + 1, out);
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=layout-flatten.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-flatten.js","sourceRoot":"","sources":["../../src/tools/layout-flatten.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Page-tool builders — pure `defineTool` factory list.
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1). Handler
5
+ * bodies live in `./handlers-read.ts` (pages_list, page_get_layout,
6
+ * page_get_schema, get_etag) and `./handlers-write.ts` (page_save,
7
+ * page_publish — 3-phase progress contract).
8
+ *
9
+ * @license MIT
10
+ */
11
+ import type { RestClient } from '../../client.js';
12
+ import { type AnyToolDefinition } from '../tool-builder.js';
13
+ export declare function buildPagesTools(client: RestClient): readonly AnyToolDefinition[];
14
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAyB5B,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,iBAAiB,EAAE,CAiFhF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Page-tool builders — pure `defineTool` factory list.
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1). Handler
5
+ * bodies live in `./handlers-read.ts` (pages_list, page_get_layout,
6
+ * page_get_schema, get_etag) and `./handlers-write.ts` (page_save,
7
+ * page_publish — 3-phase progress contract).
8
+ *
9
+ * @license MIT
10
+ */
11
+ import { z } from 'zod';
12
+ import { TEMPLATE_ID } from '../shared-schemas.js';
13
+ import { FIELDS, FLAT } from '../sparse-fields.js';
14
+ import { creating, defineTool, mutating, readOnly, } from '../tool-builder.js';
15
+ import { handleGetEtag, handlePageGetLayout, handlePageGetSchema, handlePagesList, } from './handlers-read.js';
16
+ import { handlePagePublish, handlePageSave } from './handlers-write.js';
17
+ import { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, } from './schemas.js';
18
+ // Wave-6 Fix 20: pages.ts retains an OPTIONAL ETag (page-level save/publish
19
+ // is allowed without a precondition; element/binding mutations REQUIRE
20
+ // one via the strict ETAG in shared-schemas.ts).
21
+ const ETAG = z
22
+ .string()
23
+ .optional()
24
+ .describe('Optimistic-lock ETag (e.g. "abc123" from yootheme_builder_get_etag). ' +
25
+ 'Required for write operations after the first call.');
26
+ export function buildPagesTools(client) {
27
+ return [
28
+ defineTool({
29
+ name: 'yootheme_builder_pages_list',
30
+ description: 'List all YOOtheme templates ("pages") on the site. Returns id, label and ' +
31
+ 'usage metadata for each. Use this first to discover template IDs. ' +
32
+ 'Pass `fields:["id","label"]` to project per-item to a smaller shape.',
33
+ inputSchema: { fields: FIELDS },
34
+ outputSchema: PAGES_LIST_OUTPUT_SCHEMA,
35
+ annotations: readOnly('List Pages'),
36
+ handler: (input) => handlePagesList(client, input),
37
+ }),
38
+ defineTool({
39
+ name: 'yootheme_builder_page_get_layout',
40
+ description: 'Get full layout tree for one template. Default nested `{layout, ' +
41
+ 'etag}`. Set `flat:true` for depth-first array `{elements:[...], ' +
42
+ 'etag}`; combine with `fields[]` to project per-element.',
43
+ inputSchema: {
44
+ template_id: TEMPLATE_ID,
45
+ flat: FLAT,
46
+ fields: FIELDS,
47
+ },
48
+ // No outputSchema: the response shape is a union (nested OR flat with
49
+ // optional projection) and the JSON-Pointer-keyed nested shape is
50
+ // structurally open-ended — modelling it precisely buys nothing here.
51
+ annotations: readOnly('Get Page Layout'),
52
+ handler: (input) => handlePageGetLayout(client, input),
53
+ }),
54
+ defineTool({
55
+ name: 'yootheme_builder_page_get_schema',
56
+ description: 'Get the flat schema for a template — a list of nodes with their JSON-Pointer ' +
57
+ 'paths and element types. Best entry-point for navigation: lighter than ' +
58
+ 'page_get_layout, sufficient to locate elements before editing.',
59
+ inputSchema: { template_id: TEMPLATE_ID },
60
+ outputSchema: SCHEMA_OUTPUT_SCHEMA,
61
+ annotations: readOnly('Get Page Schema'),
62
+ handler: (input) => handlePageGetSchema(client, input),
63
+ }),
64
+ defineTool({
65
+ name: 'yootheme_builder_get_etag',
66
+ description: 'Get the current top-level state ETag. Pass this back via the `etag` parameter ' +
67
+ 'on any write tool to prevent overwriting concurrent edits.',
68
+ inputSchema: {},
69
+ outputSchema: ETAG_OUTPUT_SCHEMA,
70
+ annotations: readOnly('Get ETag'),
71
+ handler: () => handleGetEtag(client),
72
+ }),
73
+ defineTool({
74
+ name: 'yootheme_builder_page_save',
75
+ description: 'Re-run save-transforms on a template and persist. Useful after a series of ' +
76
+ 'low-level writes to trigger the Builder normalization pass. Requires ETag.',
77
+ inputSchema: {
78
+ template_id: TEMPLATE_ID,
79
+ etag: ETAG,
80
+ },
81
+ annotations: mutating('Save Page'),
82
+ handler: (input, extra) => handlePageSave(client, input, extra),
83
+ }),
84
+ defineTool({
85
+ name: 'yootheme_builder_page_publish',
86
+ description: 'Publish a template. Currently behaves as save + sets `published: true` in the ' +
87
+ 'response. Requires ETag.',
88
+ inputSchema: {
89
+ template_id: TEMPLATE_ID,
90
+ etag: ETAG,
91
+ },
92
+ annotations: creating('Publish Page'),
93
+ handler: (input, extra) => handlePagePublish(client, input, extra),
94
+ }),
95
+ ];
96
+ }
97
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/pages/builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Page-tool READ handlers + shared output-schemas.
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) to keep
5
+ * each file ≤ 200 LoC per Architecture §11. Write handlers (page_save,
6
+ * page_publish — 3-phase progress contract) live in `./handlers-write.ts`.
7
+ *
8
+ * @license MIT
9
+ */
10
+ import type { RestClient } from '../../client.js';
11
+ import { type ToolResult } from '../tool-builder.js';
12
+ export declare function handlePagesList(client: RestClient, { fields }: {
13
+ fields?: readonly string[];
14
+ }): Promise<ToolResult>;
15
+ export declare function handlePageGetLayout(client: RestClient, { template_id, flat, fields }: {
16
+ template_id: string;
17
+ flat?: boolean;
18
+ fields?: readonly string[];
19
+ }): Promise<ToolResult>;
20
+ export declare function handlePageGetSchema(client: RestClient, { template_id }: {
21
+ template_id: string;
22
+ }): Promise<ToolResult>;
23
+ export declare function handleGetEtag(client: RestClient): Promise<ToolResult>;
24
+ //# sourceMappingURL=handlers-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-read.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBlD,OAAO,EAIH,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAI5B,wBAAsB,eAAe,CACjC,MAAM,EAAE,UAAU,EAClB,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC3C,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAID,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,GACF,OAAO,CAAC,UAAU,CAAC,CAmCrB;AAID,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,UAAU,CAAC,CA4CrB;AAID,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB3E"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Page-tool READ handlers + shared output-schemas.
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) to keep
5
+ * each file ≤ 200 LoC per Architecture §11. Write handlers (page_save,
6
+ * page_publish — 3-phase progress contract) live in `./handlers-write.ts`.
7
+ *
8
+ * @license MIT
9
+ */
10
+ import { detailResult, tableResult } from '@getimo/mcp-toolkit';
11
+ import { flattenLayout } from '../layout-flatten.js';
12
+ import { PAGES_COMPACT_COLUMNS, PAGES_TABLE_COLUMNS, SCHEMA_COMPACT_COLUMNS, SCHEMA_TABLE_COLUMNS, buildEtagDetail, buildSchemaRows, mapPageRow, } from '../format/pages-format.js';
13
+ import { DEFAULT_FIELDS_PAGES_LIST, projectFields, projectedFieldsEcho, } from '../sparse-fields.js';
14
+ import { errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
15
+ // ─── pages_list ─────────────────────────────────────────────────────
16
+ export async function handlePagesList(client, { fields }) {
17
+ try {
18
+ const data = await client.get('/pages');
19
+ const rawPages = Array.isArray(data.pages) ? data.pages : [];
20
+ const mapped = rawPages
21
+ .filter((x) => x !== null && typeof x === 'object')
22
+ .map(mapPageRow);
23
+ // Project AFTER mapping — keeps stable key names and lets the
24
+ // toolkit's tableResult format the raw, full-shape rows for the
25
+ // LLM text leg while the structuredContent leg carries the
26
+ // projected per-item slice.
27
+ const items = projectFields(mapped, fields, DEFAULT_FIELDS_PAGES_LIST);
28
+ const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_PAGES_LIST);
29
+ const toolkitResult = tableResult(mapped, {
30
+ columns: [...PAGES_TABLE_COLUMNS],
31
+ compactColumns: [...PAGES_COMPACT_COLUMNS],
32
+ header: (count) => `${String(count)} pages`,
33
+ footer: 'Use yootheme_builder_page_get_schema <id> to inspect.',
34
+ });
35
+ return structuredResult(toolkitResult, {
36
+ items,
37
+ total: items.length,
38
+ ...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
39
+ ...(echo !== undefined ? { projected_fields: [...echo] } : {}),
40
+ });
41
+ }
42
+ catch (e) {
43
+ return errorResult({
44
+ error: e,
45
+ context: {},
46
+ hint: 'Run yootheme_builder_diagnose to verify connectivity and auth.',
47
+ });
48
+ }
49
+ }
50
+ // ─── page_get_layout ────────────────────────────────────────────────
51
+ export async function handlePageGetLayout(client, { template_id, flat, fields }) {
52
+ try {
53
+ const data = await client.get(`/pages/${encodeURIComponent(template_id)}/layout`);
54
+ if (flat !== true) {
55
+ // Default: nested passthrough — unchanged from pre-G.3.
56
+ return jsonResult(data);
57
+ }
58
+ // flat: true → depth-first walk on the nested layout. Apply
59
+ // pickFields per element when `fields[]` was passed; echo the
60
+ // projection so the AI knows the per-item shape it received.
61
+ const flatElements = flattenLayout(data.layout);
62
+ const projected = projectFields(flatElements, fields,
63
+ // No default-set on layout.flat: keep "all" semantics
64
+ // unless caller opts-in. The echo helper below mirrors that.
65
+ []);
66
+ const echo = projectedFieldsEcho(fields, undefined);
67
+ return jsonResult({
68
+ elements: projected,
69
+ ...(typeof data.etag === 'string' ? { etag: data.etag } : {}),
70
+ ...(echo !== undefined ? { projected_fields: [...echo] } : {}),
71
+ });
72
+ }
73
+ catch (e) {
74
+ return errorResult({
75
+ error: e,
76
+ context: { template_id },
77
+ hint: 'Verify the template_id exists via yootheme_builder_pages_list. ' +
78
+ 'IDs are case-sensitive.',
79
+ });
80
+ }
81
+ }
82
+ // ─── page_get_schema ────────────────────────────────────────────────
83
+ export async function handlePageGetSchema(client, { template_id }) {
84
+ try {
85
+ const data = await client.get(`/pages/${encodeURIComponent(template_id)}/schema`);
86
+ const rawNodes = Array.isArray(data.nodes) ? data.nodes : [];
87
+ const items = buildSchemaRows(rawNodes.filter((x) => x !== null && typeof x === 'object'));
88
+ // Templates routinely exceed 21 nodes (a typical home page has
89
+ // 30–150 elements). Force compact level so the LLM never gets
90
+ // truncated text — toolkit's resolveDetailLevel honours the
91
+ // explicit override.
92
+ //
93
+ // TODO(toolkit-upstream): contribute a `compactWhen: (count) => boolean`
94
+ // field to @getimo/mcp-toolkit's AutoFormatOptions so this
95
+ // can be expressed declaratively on the config object instead
96
+ // of via the third positional argument. Tracked as Round-1.5
97
+ // follow-up (I2).
98
+ const toolkitResult = tableResult(items, {
99
+ columns: [...SCHEMA_TABLE_COLUMNS],
100
+ compactColumns: [...SCHEMA_COMPACT_COLUMNS],
101
+ header: (count) => `${String(count)} nodes in template "${template_id}"`,
102
+ footer: 'Use yootheme_builder_element_get <path> for full element data.',
103
+ }, 'compact');
104
+ return structuredResult(toolkitResult, {
105
+ items,
106
+ total: items.length,
107
+ template_id,
108
+ });
109
+ }
110
+ catch (e) {
111
+ return errorResult({
112
+ error: e,
113
+ context: { template_id },
114
+ hint: 'Verify the template_id exists via yootheme_builder_pages_list.',
115
+ });
116
+ }
117
+ }
118
+ // ─── get_etag ───────────────────────────────────────────────────────
119
+ export async function handleGetEtag(client) {
120
+ try {
121
+ const data = await client.get('/etag');
122
+ const toolkitResult = detailResult(buildEtagDetail({
123
+ etag: data.etag,
124
+ generated_at: data.generated_at,
125
+ }));
126
+ return structuredResult(toolkitResult, {
127
+ etag: data.etag,
128
+ ...(typeof data.generated_at === 'string'
129
+ ? { generated_at: data.generated_at }
130
+ : {}),
131
+ });
132
+ }
133
+ catch (e) {
134
+ return errorResult({
135
+ error: e,
136
+ context: {},
137
+ hint: 'Run yootheme_builder_diagnose to verify auth.',
138
+ });
139
+ }
140
+ }
141
+ //# sourceMappingURL=handlers-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-read.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Page-tool WRITE handlers — `page_save`, `page_publish`. Both implement
3
+ * the 3-phase progress contract (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM).
4
+ * PHASE_SERVER is emitted BEFORE the await so the synthetic intermediate
5
+ * fires even when the REST call ultimately errors — the dispatch IS the
6
+ * boundary, not the response.
7
+ *
8
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
9
+ *
10
+ * @license MIT
11
+ */
12
+ import type { RestClient } from '../../client.js';
13
+ import { type HandlerExtra, type ToolResult } from '../tool-builder.js';
14
+ interface SavePublishInput {
15
+ template_id: string;
16
+ etag?: string;
17
+ }
18
+ export declare function handlePageSave(client: RestClient, { template_id, etag }: SavePublishInput, extra?: HandlerExtra): Promise<ToolResult>;
19
+ export declare function handlePagePublish(client: RestClient, { template_id, etag }: SavePublishInput, extra?: HandlerExtra): Promise<ToolResult>;
20
+ export {};
21
+ //# sourceMappingURL=handlers-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-write.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAIH,KAAK,YAAY,EACjB,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,cAAc,CAChC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,gBAAgB,EACvC,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAID,wBAAsB,iBAAiB,CACnC,MAAM,EAAE,UAAU,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,gBAAgB,EACvC,KAAK,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Page-tool WRITE handlers — `page_save`, `page_publish`. Both implement
3
+ * the 3-phase progress contract (PHASE_SEND → PHASE_SERVER → PHASE_CONFIRM).
4
+ * PHASE_SERVER is emitted BEFORE the await so the synthetic intermediate
5
+ * fires even when the REST call ultimately errors — the dispatch IS the
6
+ * boundary, not the response.
7
+ *
8
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1).
9
+ *
10
+ * @license MIT
11
+ */
12
+ import { PHASE_CONFIRM, PHASE_SEND, PHASE_SERVER } from '../progress-phases.js';
13
+ import { createProgressReporter, errorResult, jsonResult, } from '../tool-builder.js';
14
+ // ─── page_save ──────────────────────────────────────────────────────
15
+ export async function handlePageSave(client, { template_id, etag }, extra) {
16
+ const progress = extra ? createProgressReporter(extra) : null;
17
+ await progress?.report(0, 3, PHASE_SEND);
18
+ await progress?.report(1, 3, PHASE_SERVER);
19
+ try {
20
+ const data = await client.post(`/pages/${encodeURIComponent(template_id)}/save`, { etag });
21
+ await progress?.report(2, 3, PHASE_CONFIRM);
22
+ return jsonResult(data);
23
+ }
24
+ catch (e) {
25
+ return errorResult({
26
+ error: e,
27
+ context: { template_id, etag },
28
+ hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
29
+ 'and retry — someone else edited the page.',
30
+ });
31
+ }
32
+ }
33
+ // ─── page_publish ───────────────────────────────────────────────────
34
+ export async function handlePagePublish(client, { template_id, etag }, extra) {
35
+ const progress = extra ? createProgressReporter(extra) : null;
36
+ await progress?.report(0, 3, PHASE_SEND);
37
+ await progress?.report(1, 3, PHASE_SERVER);
38
+ try {
39
+ const data = await client.post(`/pages/${encodeURIComponent(template_id)}/publish`, { etag });
40
+ await progress?.report(2, 3, PHASE_CONFIRM);
41
+ return jsonResult(data);
42
+ }
43
+ catch (e) {
44
+ return errorResult({
45
+ error: e,
46
+ context: { template_id, etag },
47
+ hint: 'On 412 (precondition failed) refresh via yootheme_builder_get_etag ' +
48
+ 'and retry.',
49
+ });
50
+ }
51
+ }
52
+ //# sourceMappingURL=handlers-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers-write.js","sourceRoot":"","sources":["../../../src/tools/pages/handlers-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACH,sBAAsB,EACtB,WAAW,EACX,UAAU,GAGb,MAAM,oBAAoB,CAAC;AAO5B,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAChD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,2CAA2C;SAClD,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAkB,EAClB,EAAE,WAAW,EAAE,IAAI,EAAoB,EACvC,KAAoB;IAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,UAAU,EACnD,EAAE,IAAI,EAAE,CACX,CAAC;QACF,MAAM,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;YAC9B,IAAI,EACA,qEAAqE;gBACrE,YAAY;SACnB,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Page-tool barrel — public entry-point for the 6 page-level tools:
3
+ *
4
+ * yootheme_builder_pages_list → list templates (tableResult + structuredContent)
5
+ * yootheme_builder_page_get_layout → full layout tree (jsonResult)
6
+ * yootheme_builder_page_get_schema → flat schema (tableResult compact)
7
+ * yootheme_builder_page_save → re-run save-transforms + persist
8
+ * yootheme_builder_page_publish → publish
9
+ * yootheme_builder_get_etag → top-level state ETag (detailResult)
10
+ *
11
+ * Round-2 R2-A2-CRIT1 — split out of the original `src/tools/pages.ts`.
12
+ *
13
+ * @license MIT
14
+ */
15
+ export { buildPagesTools } from './builders.js';
16
+ export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, } from './schemas.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Page-tool barrel — public entry-point for the 6 page-level tools:
3
+ *
4
+ * yootheme_builder_pages_list → list templates (tableResult + structuredContent)
5
+ * yootheme_builder_page_get_layout → full layout tree (jsonResult)
6
+ * yootheme_builder_page_get_schema → flat schema (tableResult compact)
7
+ * yootheme_builder_page_save → re-run save-transforms + persist
8
+ * yootheme_builder_page_publish → publish
9
+ * yootheme_builder_get_etag → top-level state ETag (detailResult)
10
+ *
11
+ * Round-2 R2-A2-CRIT1 — split out of the original `src/tools/pages.ts`.
12
+ *
13
+ * @license MIT
14
+ */
15
+ export { buildPagesTools } from './builders.js';
16
+ export { ETAG_OUTPUT_SCHEMA, PAGES_LIST_OUTPUT_SCHEMA, SCHEMA_OUTPUT_SCHEMA, } from './schemas.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACH,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Page-tool output-schemas (Wave G.2 §4 structuredContent contracts).
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) so the
5
+ * handler files stay focused on logic.
6
+ *
7
+ * @license MIT
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const PAGES_LIST_OUTPUT_SCHEMA: z.ZodObject<{
11
+ items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
12
+ total: z.ZodNumber;
13
+ etag: z.ZodOptional<z.ZodString>;
14
+ projected_fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ }, z.core.$strip>;
16
+ export declare const SCHEMA_OUTPUT_SCHEMA: z.ZodObject<{
17
+ items: z.ZodArray<z.ZodObject<{
18
+ path: z.ZodString;
19
+ element_type: z.ZodString;
20
+ label: z.ZodString;
21
+ has_binding: z.ZodBoolean;
22
+ }, z.core.$strip>>;
23
+ total: z.ZodNumber;
24
+ template_id: z.ZodString;
25
+ }, z.core.$strip>;
26
+ export declare const ETAG_OUTPUT_SCHEMA: z.ZodObject<{
27
+ etag: z.ZodString;
28
+ generated_at: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strip>;
30
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB;;;;;iBAKnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;iBAW/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Page-tool output-schemas (Wave G.2 §4 structuredContent contracts).
3
+ *
4
+ * Split out of `src/tools/pages.ts` (Round-2 R2-A2-CRIT1) so the
5
+ * handler files stay focused on logic.
6
+ *
7
+ * @license MIT
8
+ */
9
+ import { z } from 'zod';
10
+ export const PAGES_LIST_OUTPUT_SCHEMA = z.object({
11
+ items: z.array(z.record(z.string(), z.unknown())),
12
+ total: z.number(),
13
+ etag: z.string().optional(),
14
+ projected_fields: z.array(z.string()).optional(),
15
+ });
16
+ export const SCHEMA_OUTPUT_SCHEMA = z.object({
17
+ items: z.array(z.object({
18
+ path: z.string(),
19
+ element_type: z.string(),
20
+ label: z.string(),
21
+ has_binding: z.boolean(),
22
+ })),
23
+ total: z.number(),
24
+ template_id: z.string(),
25
+ });
26
+ export const ETAG_OUTPUT_SCHEMA = z.object({
27
+ etag: z.string(),
28
+ generated_at: z.string().optional(),
29
+ });
30
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/pages/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,KAAK,CACV,CAAC,CAAC,MAAM,CAAC;QACL,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;KAC3B,CAAC,CACL;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Backward-compat shim for `src/tools/pages.ts`.
3
+ *
4
+ * The original 358-LoC module was split into `src/tools/pages/`
5
+ * (5 files, each ≤ 200 LoC) per Architecture §11 cap (Round-2
6
+ * R2-A2-CRIT1 audit fix). This shim preserves the public import path
7
+ * (`from '../../src/tools/pages.js'`) so all existing test imports
8
+ * and `tools/index.ts` keep working unchanged.
9
+ *
10
+ * @license MIT
11
+ */
12
+ export * from './pages/index.js';
13
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Backward-compat shim for `src/tools/pages.ts`.
3
+ *
4
+ * The original 358-LoC module was split into `src/tools/pages/`
5
+ * (5 files, each ≤ 200 LoC) per Architecture §11 cap (Round-2
6
+ * R2-A2-CRIT1 audit fix). This shim preserves the public import path
7
+ * (`from '../../src/tools/pages.js'`) so all existing test imports
8
+ * and `tools/index.ts` keep working unchanged.
9
+ *
10
+ * @license MIT
11
+ */
12
+ export * from './pages/index.js';
13
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}