@wootsup/yt-builder-mcp 1.1.5 → 1.1.7

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 (400) hide show
  1. package/README.md +56 -55
  2. package/dist/auth.d.ts +119 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +226 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/client.d.ts +84 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +151 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/clients/claude-code.d.ts +18 -0
  11. package/dist/clients/claude-code.d.ts.map +1 -0
  12. package/dist/clients/claude-code.js +53 -0
  13. package/dist/clients/claude-code.js.map +1 -0
  14. package/dist/clients/claude-desktop.d.ts +19 -0
  15. package/dist/clients/claude-desktop.d.ts.map +1 -0
  16. package/dist/clients/claude-desktop.js +56 -0
  17. package/dist/clients/claude-desktop.js.map +1 -0
  18. package/dist/clients/cline.d.ts +26 -0
  19. package/dist/clients/cline.d.ts.map +1 -0
  20. package/dist/clients/cline.js +80 -0
  21. package/dist/clients/cline.js.map +1 -0
  22. package/dist/clients/codex-cli.d.ts +42 -0
  23. package/dist/clients/codex-cli.d.ts.map +1 -0
  24. package/dist/clients/codex-cli.js +194 -0
  25. package/dist/clients/codex-cli.js.map +1 -0
  26. package/dist/clients/continue.d.ts +13 -0
  27. package/dist/clients/continue.d.ts.map +1 -0
  28. package/dist/clients/continue.js +52 -0
  29. package/dist/clients/continue.js.map +1 -0
  30. package/dist/clients/cursor.d.ts +12 -0
  31. package/dist/clients/cursor.d.ts.map +1 -0
  32. package/dist/clients/cursor.js +38 -0
  33. package/dist/clients/cursor.js.map +1 -0
  34. package/dist/clients/gemini-cli.d.ts +18 -0
  35. package/dist/clients/gemini-cli.d.ts.map +1 -0
  36. package/dist/clients/gemini-cli.js +44 -0
  37. package/dist/clients/gemini-cli.js.map +1 -0
  38. package/dist/clients/home.d.ts +14 -0
  39. package/dist/clients/home.d.ts.map +1 -0
  40. package/dist/clients/home.js +20 -0
  41. package/dist/clients/home.js.map +1 -0
  42. package/dist/clients/index.d.ts +52 -0
  43. package/dist/clients/index.d.ts.map +1 -0
  44. package/dist/clients/index.js +72 -0
  45. package/dist/clients/index.js.map +1 -0
  46. package/dist/clients/roo-code.d.ts +23 -0
  47. package/dist/clients/roo-code.d.ts.map +1 -0
  48. package/dist/clients/roo-code.js +69 -0
  49. package/dist/clients/roo-code.js.map +1 -0
  50. package/dist/clients/zed.d.ts +12 -0
  51. package/dist/clients/zed.d.ts.map +1 -0
  52. package/dist/clients/zed.js +41 -0
  53. package/dist/clients/zed.js.map +1 -0
  54. package/dist/errors/hints.d.ts +51 -0
  55. package/dist/errors/hints.d.ts.map +1 -0
  56. package/dist/errors/hints.js +95 -0
  57. package/dist/errors/hints.js.map +1 -0
  58. package/dist/errors/mask.d.ts +35 -0
  59. package/dist/errors/mask.d.ts.map +1 -0
  60. package/dist/errors/mask.js +49 -0
  61. package/dist/errors/mask.js.map +1 -0
  62. package/dist/errors/sanitize.d.ts +31 -0
  63. package/dist/errors/sanitize.d.ts.map +1 -0
  64. package/dist/errors/sanitize.js +100 -0
  65. package/dist/errors/sanitize.js.map +1 -0
  66. package/dist/errors.d.ts +42 -0
  67. package/dist/errors.d.ts.map +1 -0
  68. package/dist/errors.js +61 -0
  69. package/dist/errors.js.map +1 -0
  70. package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
  71. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
  72. package/dist/gateway/advanced-tool/discovery.js +53 -0
  73. package/dist/gateway/advanced-tool/discovery.js.map +1 -0
  74. package/dist/gateway/advanced-tool/domains.d.ts +47 -0
  75. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
  76. package/dist/gateway/advanced-tool/domains.js +94 -0
  77. package/dist/gateway/advanced-tool/domains.js.map +1 -0
  78. package/dist/gateway/advanced-tool/execute.d.ts +29 -0
  79. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
  80. package/dist/gateway/advanced-tool/execute.js +54 -0
  81. package/dist/gateway/advanced-tool/execute.js.map +1 -0
  82. package/dist/gateway/advanced-tool/index.d.ts +36 -0
  83. package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
  84. package/dist/gateway/advanced-tool/index.js +39 -0
  85. package/dist/gateway/advanced-tool/index.js.map +1 -0
  86. package/dist/gateway/advanced-tool/register.d.ts +18 -0
  87. package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
  88. package/dist/gateway/advanced-tool/register.js +69 -0
  89. package/dist/gateway/advanced-tool/register.js.map +1 -0
  90. package/dist/gateway/advanced-tool.d.ts +13 -0
  91. package/dist/gateway/advanced-tool.d.ts.map +1 -0
  92. package/dist/gateway/advanced-tool.js +13 -0
  93. package/dist/gateway/advanced-tool.js.map +1 -0
  94. package/dist/gateway/capturing-server.d.ts +117 -0
  95. package/dist/gateway/capturing-server.d.ts.map +1 -0
  96. package/dist/gateway/capturing-server.js +103 -0
  97. package/dist/gateway/capturing-server.js.map +1 -0
  98. package/dist/gateway/essentials.d.ts +50 -0
  99. package/dist/gateway/essentials.d.ts.map +1 -0
  100. package/dist/gateway/essentials.js +94 -0
  101. package/dist/gateway/essentials.js.map +1 -0
  102. package/dist/gateway/test-support.d.ts +41 -0
  103. package/dist/gateway/test-support.d.ts.map +1 -0
  104. package/dist/gateway/test-support.js +60 -0
  105. package/dist/gateway/test-support.js.map +1 -0
  106. package/dist/index.d.ts +29 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +111 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/install-skill.d.ts +43 -0
  111. package/dist/install-skill.d.ts.map +1 -0
  112. package/dist/install-skill.js +118 -0
  113. package/dist/install-skill.js.map +1 -0
  114. package/dist/platform/detect.d.ts +64 -0
  115. package/dist/platform/detect.d.ts.map +1 -0
  116. package/dist/platform/detect.js +98 -0
  117. package/dist/platform/detect.js.map +1 -0
  118. package/dist/platform/index.d.ts +121 -0
  119. package/dist/platform/index.d.ts.map +1 -0
  120. package/dist/platform/index.js +176 -0
  121. package/dist/platform/index.js.map +1 -0
  122. package/dist/platform/joomla.d.ts +44 -0
  123. package/dist/platform/joomla.d.ts.map +1 -0
  124. package/dist/platform/joomla.js +46 -0
  125. package/dist/platform/joomla.js.map +1 -0
  126. package/dist/server.d.ts +110 -0
  127. package/dist/server.d.ts.map +1 -0
  128. package/dist/server.js +274 -0
  129. package/dist/server.js.map +1 -0
  130. package/dist/setup-cli-confirm.d.ts +36 -0
  131. package/dist/setup-cli-confirm.d.ts.map +1 -0
  132. package/dist/setup-cli-confirm.js +59 -0
  133. package/dist/setup-cli-confirm.js.map +1 -0
  134. package/dist/setup-cli.d.ts +152 -0
  135. package/dist/setup-cli.d.ts.map +1 -0
  136. package/dist/setup-cli.js +870 -0
  137. package/dist/setup-cli.js.map +1 -0
  138. package/dist/setup-prompts.d.ts +41 -0
  139. package/dist/setup-prompts.d.ts.map +1 -0
  140. package/dist/setup-prompts.js +146 -0
  141. package/dist/setup-prompts.js.map +1 -0
  142. package/dist/setup-token.d.ts +38 -0
  143. package/dist/setup-token.d.ts.map +1 -0
  144. package/dist/setup-token.js +106 -0
  145. package/dist/setup-token.js.map +1 -0
  146. package/dist/setup-wizard-defaults.d.ts +43 -0
  147. package/dist/setup-wizard-defaults.d.ts.map +1 -0
  148. package/dist/setup-wizard-defaults.js +160 -0
  149. package/dist/setup-wizard-defaults.js.map +1 -0
  150. package/dist/setup-wizard-handshake.d.ts +25 -0
  151. package/dist/setup-wizard-handshake.d.ts.map +1 -0
  152. package/dist/setup-wizard-handshake.js +103 -0
  153. package/dist/setup-wizard-handshake.js.map +1 -0
  154. package/dist/setup-wizard-types.d.ts +164 -0
  155. package/dist/setup-wizard-types.d.ts.map +1 -0
  156. package/dist/setup-wizard-types.js +11 -0
  157. package/dist/setup-wizard-types.js.map +1 -0
  158. package/dist/setup-wizard.d.ts +33 -0
  159. package/dist/setup-wizard.d.ts.map +1 -0
  160. package/dist/setup-wizard.js +199 -0
  161. package/dist/setup-wizard.js.map +1 -0
  162. package/dist/setup.d.ts +17 -0
  163. package/dist/setup.d.ts.map +1 -0
  164. package/dist/setup.js +33 -0
  165. package/dist/setup.js.map +1 -0
  166. package/dist/sites/cli/add-site.d.ts +106 -0
  167. package/dist/sites/cli/add-site.d.ts.map +1 -0
  168. package/dist/sites/cli/add-site.js +185 -0
  169. package/dist/sites/cli/add-site.js.map +1 -0
  170. package/dist/sites/cli/list-sites.d.ts +40 -0
  171. package/dist/sites/cli/list-sites.d.ts.map +1 -0
  172. package/dist/sites/cli/list-sites.js +116 -0
  173. package/dist/sites/cli/list-sites.js.map +1 -0
  174. package/dist/sites/cli/remove-site.d.ts +60 -0
  175. package/dist/sites/cli/remove-site.d.ts.map +1 -0
  176. package/dist/sites/cli/remove-site.js +120 -0
  177. package/dist/sites/cli/remove-site.js.map +1 -0
  178. package/dist/sites/cli/set-default.d.ts +47 -0
  179. package/dist/sites/cli/set-default.d.ts.map +1 -0
  180. package/dist/sites/cli/set-default.js +69 -0
  181. package/dist/sites/cli/set-default.js.map +1 -0
  182. package/dist/sites/cli/test-site.d.ts +77 -0
  183. package/dist/sites/cli/test-site.d.ts.map +1 -0
  184. package/dist/sites/cli/test-site.js +146 -0
  185. package/dist/sites/cli/test-site.js.map +1 -0
  186. package/dist/sites/client-pool.d.ts +124 -0
  187. package/dist/sites/client-pool.d.ts.map +1 -0
  188. package/dist/sites/client-pool.js +172 -0
  189. package/dist/sites/client-pool.js.map +1 -0
  190. package/dist/sites/env-bridge.d.ts +55 -0
  191. package/dist/sites/env-bridge.d.ts.map +1 -0
  192. package/dist/sites/env-bridge.js +94 -0
  193. package/dist/sites/env-bridge.js.map +1 -0
  194. package/dist/sites/paths.d.ts +21 -0
  195. package/dist/sites/paths.d.ts.map +1 -0
  196. package/dist/sites/paths.js +37 -0
  197. package/dist/sites/paths.js.map +1 -0
  198. package/dist/sites/probe.d.ts +60 -0
  199. package/dist/sites/probe.d.ts.map +1 -0
  200. package/dist/sites/probe.js +112 -0
  201. package/dist/sites/probe.js.map +1 -0
  202. package/dist/sites/registry.d.ts +142 -0
  203. package/dist/sites/registry.d.ts.map +1 -0
  204. package/dist/sites/registry.js +163 -0
  205. package/dist/sites/registry.js.map +1 -0
  206. package/dist/sites/schema.d.ts +90 -0
  207. package/dist/sites/schema.d.ts.map +1 -0
  208. package/dist/sites/schema.js +71 -0
  209. package/dist/sites/schema.js.map +1 -0
  210. package/dist/sites/secret-resolver.d.ts +115 -0
  211. package/dist/sites/secret-resolver.d.ts.map +1 -0
  212. package/dist/sites/secret-resolver.js +225 -0
  213. package/dist/sites/secret-resolver.js.map +1 -0
  214. package/dist/sites/store.d.ts +82 -0
  215. package/dist/sites/store.d.ts.map +1 -0
  216. package/dist/sites/store.js +198 -0
  217. package/dist/sites/store.js.map +1 -0
  218. package/dist/sites/tools/index.d.ts +28 -0
  219. package/dist/sites/tools/index.d.ts.map +1 -0
  220. package/dist/sites/tools/index.js +30 -0
  221. package/dist/sites/tools/index.js.map +1 -0
  222. package/dist/sites/tools/sites-list.d.ts +48 -0
  223. package/dist/sites/tools/sites-list.d.ts.map +1 -0
  224. package/dist/sites/tools/sites-list.js +137 -0
  225. package/dist/sites/tools/sites-list.js.map +1 -0
  226. package/dist/sites/tools/sites-test.d.ts +47 -0
  227. package/dist/sites/tools/sites-test.d.ts.map +1 -0
  228. package/dist/sites/tools/sites-test.js +148 -0
  229. package/dist/sites/tools/sites-test.js.map +1 -0
  230. package/dist/skill-loader.d.ts +111 -0
  231. package/dist/skill-loader.d.ts.map +1 -0
  232. package/dist/skill-loader.js +191 -0
  233. package/dist/skill-loader.js.map +1 -0
  234. package/dist/tools/elements/builders.d.ts +24 -0
  235. package/dist/tools/elements/builders.d.ts.map +1 -0
  236. package/dist/tools/elements/builders.js +199 -0
  237. package/dist/tools/elements/builders.js.map +1 -0
  238. package/dist/tools/elements/handlers-write.d.ts +49 -0
  239. package/dist/tools/elements/handlers-write.d.ts.map +1 -0
  240. package/dist/tools/elements/handlers-write.js +148 -0
  241. package/dist/tools/elements/handlers-write.js.map +1 -0
  242. package/dist/tools/elements/handlers.d.ts +70 -0
  243. package/dist/tools/elements/handlers.d.ts.map +1 -0
  244. package/dist/tools/elements/handlers.js +292 -0
  245. package/dist/tools/elements/handlers.js.map +1 -0
  246. package/dist/tools/elements/index.d.ts +28 -0
  247. package/dist/tools/elements/index.d.ts.map +1 -0
  248. package/dist/tools/elements/index.js +27 -0
  249. package/dist/tools/elements/index.js.map +1 -0
  250. package/dist/tools/elements.d.ts +13 -0
  251. package/dist/tools/elements.d.ts.map +1 -0
  252. package/dist/tools/elements.js +13 -0
  253. package/dist/tools/elements.js.map +1 -0
  254. package/dist/tools/elicitation.d.ts +87 -0
  255. package/dist/tools/elicitation.d.ts.map +1 -0
  256. package/dist/tools/elicitation.js +100 -0
  257. package/dist/tools/elicitation.js.map +1 -0
  258. package/dist/tools/format/elements-format.d.ts +40 -0
  259. package/dist/tools/format/elements-format.d.ts.map +1 -0
  260. package/dist/tools/format/elements-format.js +194 -0
  261. package/dist/tools/format/elements-format.js.map +1 -0
  262. package/dist/tools/format/health-format.d.ts +79 -0
  263. package/dist/tools/format/health-format.d.ts.map +1 -0
  264. package/dist/tools/format/health-format.js +181 -0
  265. package/dist/tools/format/health-format.js.map +1 -0
  266. package/dist/tools/format/inspection-format.d.ts +59 -0
  267. package/dist/tools/format/inspection-format.d.ts.map +1 -0
  268. package/dist/tools/format/inspection-format.js +303 -0
  269. package/dist/tools/format/inspection-format.js.map +1 -0
  270. package/dist/tools/format/pages-format.d.ts +57 -0
  271. package/dist/tools/format/pages-format.d.ts.map +1 -0
  272. package/dist/tools/format/pages-format.js +157 -0
  273. package/dist/tools/format/pages-format.js.map +1 -0
  274. package/dist/tools/format/sources-format.d.ts +44 -0
  275. package/dist/tools/format/sources-format.d.ts.map +1 -0
  276. package/dist/tools/format/sources-format.js +242 -0
  277. package/dist/tools/format/sources-format.js.map +1 -0
  278. package/dist/tools/health.d.ts +22 -0
  279. package/dist/tools/health.d.ts.map +1 -0
  280. package/dist/tools/health.js +220 -0
  281. package/dist/tools/health.js.map +1 -0
  282. package/dist/tools/index.d.ts +30 -0
  283. package/dist/tools/index.d.ts.map +1 -0
  284. package/dist/tools/index.js +39 -0
  285. package/dist/tools/index.js.map +1 -0
  286. package/dist/tools/inspection.d.ts +14 -0
  287. package/dist/tools/inspection.d.ts.map +1 -0
  288. package/dist/tools/inspection.js +208 -0
  289. package/dist/tools/inspection.js.map +1 -0
  290. package/dist/tools/layout-flatten.d.ts +75 -0
  291. package/dist/tools/layout-flatten.d.ts.map +1 -0
  292. package/dist/tools/layout-flatten.js +107 -0
  293. package/dist/tools/layout-flatten.js.map +1 -0
  294. package/dist/tools/multi-items/builders.d.ts +23 -0
  295. package/dist/tools/multi-items/builders.d.ts.map +1 -0
  296. package/dist/tools/multi-items/builders.js +78 -0
  297. package/dist/tools/multi-items/builders.js.map +1 -0
  298. package/dist/tools/multi-items/clean-implode-handler.d.ts +36 -0
  299. package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -0
  300. package/dist/tools/multi-items/clean-implode-handler.js +57 -0
  301. package/dist/tools/multi-items/clean-implode-handler.js.map +1 -0
  302. package/dist/tools/multi-items/index.d.ts +18 -0
  303. package/dist/tools/multi-items/index.d.ts.map +1 -0
  304. package/dist/tools/multi-items/index.js +18 -0
  305. package/dist/tools/multi-items/index.js.map +1 -0
  306. package/dist/tools/multi-items/inspect-handler.d.ts +41 -0
  307. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
  308. package/dist/tools/multi-items/inspect-handler.js +50 -0
  309. package/dist/tools/multi-items/inspect-handler.js.map +1 -0
  310. package/dist/tools/multi-items/item-container-map.d.ts +41 -0
  311. package/dist/tools/multi-items/item-container-map.d.ts.map +1 -0
  312. package/dist/tools/multi-items/item-container-map.js +73 -0
  313. package/dist/tools/multi-items/item-container-map.js.map +1 -0
  314. package/dist/tools/pages/builders.d.ts +14 -0
  315. package/dist/tools/pages/builders.d.ts.map +1 -0
  316. package/dist/tools/pages/builders.js +136 -0
  317. package/dist/tools/pages/builders.js.map +1 -0
  318. package/dist/tools/pages/handlers-read.d.ts +33 -0
  319. package/dist/tools/pages/handlers-read.d.ts.map +1 -0
  320. package/dist/tools/pages/handlers-read.js +203 -0
  321. package/dist/tools/pages/handlers-read.js.map +1 -0
  322. package/dist/tools/pages/handlers-write.d.ts +21 -0
  323. package/dist/tools/pages/handlers-write.d.ts.map +1 -0
  324. package/dist/tools/pages/handlers-write.js +52 -0
  325. package/dist/tools/pages/handlers-write.js.map +1 -0
  326. package/dist/tools/pages/index.d.ts +17 -0
  327. package/dist/tools/pages/index.d.ts.map +1 -0
  328. package/dist/tools/pages/index.js +17 -0
  329. package/dist/tools/pages/index.js.map +1 -0
  330. package/dist/tools/pages/schemas.d.ts +45 -0
  331. package/dist/tools/pages/schemas.d.ts.map +1 -0
  332. package/dist/tools/pages/schemas.js +82 -0
  333. package/dist/tools/pages/schemas.js.map +1 -0
  334. package/dist/tools/pages.d.ts +13 -0
  335. package/dist/tools/pages.d.ts.map +1 -0
  336. package/dist/tools/pages.js +13 -0
  337. package/dist/tools/pages.js.map +1 -0
  338. package/dist/tools/pool-resolve-helper.d.ts +83 -0
  339. package/dist/tools/pool-resolve-helper.d.ts.map +1 -0
  340. package/dist/tools/pool-resolve-helper.js +148 -0
  341. package/dist/tools/pool-resolve-helper.js.map +1 -0
  342. package/dist/tools/progress-phases.d.ts +46 -0
  343. package/dist/tools/progress-phases.d.ts.map +1 -0
  344. package/dist/tools/progress-phases.js +48 -0
  345. package/dist/tools/progress-phases.js.map +1 -0
  346. package/dist/tools/shared-schemas.d.ts +25 -0
  347. package/dist/tools/shared-schemas.d.ts.map +1 -0
  348. package/dist/tools/shared-schemas.js +59 -0
  349. package/dist/tools/shared-schemas.js.map +1 -0
  350. package/dist/tools/sources/builders.d.ts +13 -0
  351. package/dist/tools/sources/builders.d.ts.map +1 -0
  352. package/dist/tools/sources/builders.js +118 -0
  353. package/dist/tools/sources/builders.js.map +1 -0
  354. package/dist/tools/sources/handlers-bind.d.ts +28 -0
  355. package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
  356. package/dist/tools/sources/handlers-bind.js +129 -0
  357. package/dist/tools/sources/handlers-bind.js.map +1 -0
  358. package/dist/tools/sources/handlers.d.ts +47 -0
  359. package/dist/tools/sources/handlers.d.ts.map +1 -0
  360. package/dist/tools/sources/handlers.js +108 -0
  361. package/dist/tools/sources/handlers.js.map +1 -0
  362. package/dist/tools/sources/index.d.ts +19 -0
  363. package/dist/tools/sources/index.d.ts.map +1 -0
  364. package/dist/tools/sources/index.js +18 -0
  365. package/dist/tools/sources/index.js.map +1 -0
  366. package/dist/tools/sources.d.ts +14 -0
  367. package/dist/tools/sources.d.ts.map +1 -0
  368. package/dist/tools/sources.js +14 -0
  369. package/dist/tools/sources.js.map +1 -0
  370. package/dist/tools/sparse-fields.d.ts +106 -0
  371. package/dist/tools/sparse-fields.d.ts.map +1 -0
  372. package/dist/tools/sparse-fields.js +165 -0
  373. package/dist/tools/sparse-fields.js.map +1 -0
  374. package/dist/tools/tool-builder/annotations.d.ts +55 -0
  375. package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
  376. package/dist/tools/tool-builder/annotations.js +86 -0
  377. package/dist/tools/tool-builder/annotations.js.map +1 -0
  378. package/dist/tools/tool-builder/define.d.ts +31 -0
  379. package/dist/tools/tool-builder/define.d.ts.map +1 -0
  380. package/dist/tools/tool-builder/define.js +31 -0
  381. package/dist/tools/tool-builder/define.js.map +1 -0
  382. package/dist/tools/tool-builder/index.d.ts +28 -0
  383. package/dist/tools/tool-builder/index.d.ts.map +1 -0
  384. package/dist/tools/tool-builder/index.js +27 -0
  385. package/dist/tools/tool-builder/index.js.map +1 -0
  386. package/dist/tools/tool-builder/results.d.ts +104 -0
  387. package/dist/tools/tool-builder/results.d.ts.map +1 -0
  388. package/dist/tools/tool-builder/results.js +224 -0
  389. package/dist/tools/tool-builder/results.js.map +1 -0
  390. package/dist/tools/tool-builder/types.d.ts +97 -0
  391. package/dist/tools/tool-builder/types.d.ts.map +1 -0
  392. package/dist/tools/tool-builder/types.js +9 -0
  393. package/dist/tools/tool-builder/types.js.map +1 -0
  394. package/dist/tools/tool-builder.d.ts +16 -0
  395. package/dist/tools/tool-builder.d.ts.map +1 -0
  396. package/dist/tools/tool-builder.js +16 -0
  397. package/dist/tools/tool-builder.js.map +1 -0
  398. package/manifest.json +1 -1
  399. package/package.json +2 -1
  400. package/skills/yt-builder-mcp/SKILL.md +108 -107
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Element-type inspection tools.
3
+ *
4
+ * yootheme_builder_element_types_list
5
+ * → catalogue of available element types (tableResult — Wave G.2)
6
+ * yootheme_builder_element_type_get_schema
7
+ * → field schema for a single element type (detailResult — Wave G.2)
8
+ *
9
+ * @license MIT
10
+ */
11
+ import { detailResult, tableResult } from '@getimo/mcp-toolkit';
12
+ import { z } from 'zod';
13
+ import { TYPES_COMPACT_COLUMNS, TYPES_TABLE_COLUMNS, buildTypeSchemaDetail, flattenTypesPayload, mapTypeRow, } from './format/inspection-format.js';
14
+ import { SITE_ID_SCHEMA } from './shared-schemas.js';
15
+ import { resolveSiteOrError } from './pool-resolve-helper.js';
16
+ import { defineTool, errorResult, readOnly, structuredResult, withSiteMeta, } from './tool-builder.js';
17
+ import { DEFAULT_FIELDS_TYPES_LIST, FIELDS, projectFields, projectedFieldsEcho, projectionFeedback, } from './sparse-fields.js';
18
+ // ─── outputSchemas (Wave G.2 §4) ─────────────────────────────────────
19
+ const TYPES_LIST_OUTPUT_SCHEMA = z.object({
20
+ items: z.array(z.record(z.string(), z.unknown())),
21
+ total: z.number(),
22
+ projected_fields: z.array(z.string()).optional(),
23
+ // F-004 fix (2026-05-25 exhaustive audit): see sparse-fields::projectionFeedback.
24
+ available_fields: z.array(z.string()).optional(),
25
+ unknown_fields: z.array(z.string()).optional(),
26
+ });
27
+ const TYPE_SCHEMA_OUTPUT_SCHEMA = z.object({
28
+ name: z.string(),
29
+ label: z.string().optional(),
30
+ origin: z.string().optional(),
31
+ // The REST endpoint returns `fields` as a list of {name,type,label?}
32
+ // field descriptors — each `name` is a valid prop key for element_add /
33
+ // _update_settings.
34
+ fields: z.array(z.record(z.string(), z.unknown())).optional(),
35
+ field_count: z.number(),
36
+ });
37
+ export function buildInspectionTools(pool) {
38
+ return [
39
+ defineTool({
40
+ name: 'yootheme_builder_element_types_list',
41
+ description: 'List element types registered on this site (built-ins + ' +
42
+ 'YOOessentials/uEssentials extras). Names feed `element_type` of ' +
43
+ 'element_add. Pass `fields[]` to narrow each row. ' +
44
+ 'Operates on the default site unless site_id is provided.',
45
+ inputSchema: {
46
+ site_id: SITE_ID_SCHEMA,
47
+ fields: FIELDS,
48
+ },
49
+ outputSchema: TYPES_LIST_OUTPUT_SCHEMA,
50
+ annotations: readOnly('List Element Types'),
51
+ handler: async ({ site_id, fields }) => {
52
+ const r = await resolveSiteOrError(pool, site_id);
53
+ if (!r.ok)
54
+ return r.error;
55
+ const { client: siteClient, site } = r;
56
+ try {
57
+ const data = await siteClient.get('/element-types');
58
+ const flat = flattenTypesPayload(data);
59
+ const mapped = flat.map(mapTypeRow);
60
+ const mappedRecords = mapped;
61
+ const items = projectFields(mappedRecords, fields, DEFAULT_FIELDS_TYPES_LIST);
62
+ const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_TYPES_LIST);
63
+ const feedback = projectionFeedback(mappedRecords, fields);
64
+ const unknownNote = feedback !== undefined && feedback.unknown_fields.length > 0
65
+ ? ` (unknown fields ignored: ${feedback.unknown_fields.join(', ')}; available: ${feedback.available_fields.join(', ')})`
66
+ : '';
67
+ const toolkitResult = tableResult(mappedRecords, {
68
+ columns: [...TYPES_TABLE_COLUMNS],
69
+ compactColumns: [...TYPES_COMPACT_COLUMNS],
70
+ header: (count) => `${String(count)} element types${unknownNote}`,
71
+ footer: 'Use yootheme_builder_element_type_get_schema <name> for fields.',
72
+ });
73
+ return withSiteMeta(structuredResult(toolkitResult, {
74
+ items,
75
+ total: items.length,
76
+ ...(echo !== undefined ? { projected_fields: [...echo] } : {}),
77
+ ...(feedback !== undefined ? {
78
+ available_fields: [...feedback.available_fields],
79
+ unknown_fields: [...feedback.unknown_fields],
80
+ } : {}),
81
+ }), site);
82
+ }
83
+ catch (e) {
84
+ return withSiteMeta(errorResult({
85
+ error: e,
86
+ context: { site_id: site.id },
87
+ hint: 'Run yootheme_builder_diagnose to verify auth.',
88
+ }), site);
89
+ }
90
+ },
91
+ }),
92
+ buildElementTypeGetSchemaTool(pool),
93
+ ];
94
+ }
95
+ /**
96
+ * F-203 follow-up (Audit 2026-05-26 reviewer Gap 2): factored out of
97
+ * `buildInspectionTools` so the shape + refined ZodObject pair lives in
98
+ * one place. The SDK's pre-handler validator honours the top-level
99
+ * `.refine()` on `TYPE_SCHEMA_REFINED` and raises
100
+ * JSON-RPC `-32602 InvalidParams` when violated — hosts see the
101
+ * failure BEFORE the handler ever runs. The raw shape stays for
102
+ * handler-type inference (see `inputSchema`).
103
+ */
104
+ function buildElementTypeGetSchemaTool(pool) {
105
+ const TYPE_SCHEMA_SHAPE = {
106
+ site_id: SITE_ID_SCHEMA,
107
+ // 1.0.1 cross-tool parameter naming alignment: every other
108
+ // tool in this domain uses `element_type` (element_add,
109
+ // element_update_settings, element_list rows). This tool
110
+ // originally shipped with `type_name`; we accept BOTH for
111
+ // backward-compatibility but the canonical key going
112
+ // forward is `element_type`.
113
+ element_type: z
114
+ .string()
115
+ .min(1)
116
+ .optional()
117
+ .describe('Element type name (e.g. "headline", "text", "grid"). Use ' +
118
+ 'yootheme_builder_element_types_list to discover.'),
119
+ type_name: z
120
+ .string()
121
+ .min(1)
122
+ .optional()
123
+ .describe('DEPRECATED alias of `element_type` — use `element_type` ' +
124
+ 'instead. Kept for 1.0.x backward-compatibility; will be ' +
125
+ 'removed in a future major.'),
126
+ };
127
+ const TYPE_SCHEMA_REFINED = z
128
+ .object(TYPE_SCHEMA_SHAPE)
129
+ .refine((args) => (typeof args.element_type === 'string' && args.element_type !== '') ||
130
+ (typeof args.type_name === 'string' && args.type_name !== ''), {
131
+ message: 'Provide either `element_type` (canonical) or ' +
132
+ '`type_name` (deprecated alias).',
133
+ });
134
+ return defineTool({
135
+ name: 'yootheme_builder_element_type_get_schema',
136
+ description: '**Call before every `element_add` / `_update_settings`** — unknown ' +
137
+ 'prop keys are silently dropped server-side, so guessing fails ' +
138
+ 'quietly. Returns `{name,type,label?}` field descriptors. Use ' +
139
+ '`element_type`; `type_name` is DEPRECATED. ' +
140
+ 'Operates on the default site unless site_id is provided.',
141
+ inputSchema: TYPE_SCHEMA_SHAPE,
142
+ // F-203 follow-up: the refined object is what the SDK actually
143
+ // validates. The raw shape above stays for handler-type inference.
144
+ inputObjectSchema: TYPE_SCHEMA_REFINED,
145
+ outputSchema: TYPE_SCHEMA_OUTPUT_SCHEMA,
146
+ annotations: readOnly('Get Element Type Schema'),
147
+ handler: async (args) => {
148
+ // Defensive re-assert of the refine — should never fire when
149
+ // reached through the SDK (the boundary rejects with -32602
150
+ // first), but in-process tests bypass the SDK and call the
151
+ // handler directly, so the structured error path stays
152
+ // reachable for unit-test coverage.
153
+ const typeNameInput = typeof args.element_type === 'string' && args.element_type !== ''
154
+ ? args.element_type
155
+ : typeof args.type_name === 'string'
156
+ ? args.type_name
157
+ : '';
158
+ if (typeNameInput === '') {
159
+ return errorResult({
160
+ error: new Error('Provide either `element_type` (canonical) or ' +
161
+ '`type_name` (deprecated alias).'),
162
+ context: { site_id: typeof args.site_id === 'string' ? args.site_id : null },
163
+ hint: 'Pass `element_type` (e.g. "headline"). Use ' +
164
+ 'yootheme_builder_element_types_list to discover valid values.',
165
+ });
166
+ }
167
+ const type_name = typeNameInput;
168
+ const r = await resolveSiteOrError(pool, typeof args.site_id === 'string' ? args.site_id : undefined);
169
+ if (!r.ok)
170
+ return r.error;
171
+ const { client: siteClient, site } = r;
172
+ try {
173
+ const data = await siteClient.get(`/element-types/${encodeURIComponent(type_name)}/schema`);
174
+ // The REST endpoint nests the type schema under `schema`:
175
+ // {type_name, schema:{name,label,origin,has_children,fields:[…]}}.
176
+ // Fall back to the top-level object for older backends.
177
+ const schema = data.schema !== null && typeof data.schema === 'object'
178
+ ? data.schema
179
+ : data;
180
+ const name = typeof schema.name === 'string' ? schema.name : type_name;
181
+ const label = typeof schema.label === 'string' ? schema.label : undefined;
182
+ const origin = typeof schema.origin === 'string' ? schema.origin : undefined;
183
+ // `fields` is a list of {name,type,label?} field descriptors.
184
+ const fields = Array.isArray(schema.fields)
185
+ ? schema.fields
186
+ : undefined;
187
+ const fieldCount = fields !== undefined ? fields.length : 0;
188
+ const toolkitResult = detailResult(buildTypeSchemaDetail({ name, label, origin, fields }));
189
+ return withSiteMeta(structuredResult(toolkitResult, {
190
+ name,
191
+ ...(label !== undefined ? { label } : {}),
192
+ ...(origin !== undefined ? { origin } : {}),
193
+ ...(fields !== undefined ? { fields } : {}),
194
+ field_count: fieldCount,
195
+ }), site);
196
+ }
197
+ catch (e) {
198
+ return withSiteMeta(errorResult({
199
+ error: e,
200
+ context: { element_type: type_name, site_id: site.id },
201
+ hint: 'Verify element_type via yootheme_builder_element_types_list — names ' +
202
+ 'are case-sensitive.',
203
+ }), site);
204
+ }
205
+ },
206
+ });
207
+ }
208
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACH,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACH,UAAU,EACV,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,YAAY,GAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,yBAAyB,EACzB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,wEAAwE;AAExE,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,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,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,kFAAkF;IAClF,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,qEAAqE;IACrE,wEAAwE;IACxE,oBAAoB;IACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACjD,OAAO;QACH,UAAU,CAAC;YACP,IAAI,EAAE,qCAAqC;YAC3C,WAAW,EACP,0DAA0D;gBAC1D,kEAAkE;gBAClE,mDAAmD;gBACnD,0DAA0D;YAC9D,WAAW,EAAE;gBACT,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE,MAAM;aACjB;YACD,YAAY,EAAE,wBAAwB;YACtC,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnC,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,CAAC,CAAC,CAAC,EAAE;oBAAE,OAAO,CAAC,CAAC,KAAK,CAAC;gBAC1B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBACpD,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACpC,MAAM,aAAa,GAAG,MAA8C,CAAC;oBACrE,MAAM,KAAK,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;oBAC9E,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;oBACpE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;oBAC3D,MAAM,WAAW,GACb,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;wBACxD,CAAC,CAAC,6BAA6B,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;wBACxH,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,EAAE;wBAC7C,OAAO,EAAE,CAAC,GAAG,mBAAmB,CAAC;wBACjC,cAAc,EAAE,CAAC,GAAG,qBAAqB,CAAC;wBAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE;wBACjE,MAAM,EAAE,iEAAiE;qBAC5E,CAAC,CAAC;oBACH,OAAO,YAAY,CAAC,gBAAgB,CAAC,aAAa,EAAE;wBAChD,KAAK;wBACL,KAAK,EAAE,KAAK,CAAC,MAAM;wBACnB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9D,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;4BACzB,gBAAgB,EAAE,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC;4BAChD,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC;yBAC/C,CAAC,CAAC,CAAC,EAAE,CAAC;qBACV,CAAC,EAAE,IAAI,CAAC,CAAC;gBACd,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,YAAY,CAAC,WAAW,CAAC;wBAC5B,KAAK,EAAE,CAAC;wBACR,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;wBAC7B,IAAI,EAAE,+CAA+C;qBACxD,CAAC,EAAE,IAAI,CAAC,CAAC;gBACd,CAAC;YACL,CAAC;SACJ,CAAC;QAEF,6BAA6B,CAAC,IAAI,CAAC;KACtC,CAAC;AACN,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,6BAA6B,CAAC,IAAgB;IACnD,MAAM,iBAAiB,GAAG;QACtB,OAAO,EAAE,cAAc;QACvB,2DAA2D;QAC3D,wDAAwD;QACxD,yDAAyD;QACzD,0DAA0D;QAC1D,qDAAqD;QACrD,6BAA6B;QAC7B,YAAY,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACL,2DAA2D;YACvD,kDAAkD,CACzD;QACL,SAAS,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACL,0DAA0D;YACtD,0DAA0D;YAC1D,4BAA4B,CACnC;KACC,CAAC;IACX,MAAM,mBAAmB,GAAG,CAAC;SACxB,MAAM,CAAC,iBAAiB,CAAC;SACzB,MAAM,CACH,CAAC,IAAI,EAAE,EAAE,CACL,CAAC,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACnE,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,EACjE;QACI,OAAO,EACH,+CAA+C;YAC/C,iCAAiC;KACxC,CACJ,CAAC;IACN,OAAO,UAAU,CAAC;QACd,IAAI,EAAE,0CAA0C;QAChD,WAAW,EACP,qEAAqE;YACrE,gEAAgE;YAChE,+DAA+D;YAC/D,6CAA6C;YAC7C,0DAA0D;QAC9D,WAAW,EAAE,iBAAiB;QAC9B,+DAA+D;QAC/D,mEAAmE;QACnE,iBAAiB,EAAE,mBAAmB;QACtC,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,QAAQ,CAAC,yBAAyB,CAAC;QAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,6DAA6D;YAC7D,4DAA4D;YAC5D,2DAA2D;YAC3D,uDAAuD;YACvD,oCAAoC;YACpC,MAAM,aAAa,GACf,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE;gBAC7D,CAAC,CAAC,IAAI,CAAC,YAAY;gBACnB,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;oBAClC,CAAC,CAAC,IAAI,CAAC,SAAS;oBAChB,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;gBACvB,OAAO,WAAW,CAAC;oBACf,KAAK,EAAE,IAAI,KAAK,CACZ,+CAA+C;wBAC3C,iCAAiC,CACxC;oBACD,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC5E,IAAI,EACA,6CAA6C;wBAC7C,+DAA+D;iBACtE,CAAC,CAAC;YACP,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAAC;YAChC,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAC9B,IAAI,EACJ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACF,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAC7B,kBAAkB,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAC3D,CAAC;gBACF,0DAA0D;gBAC1D,mEAAmE;gBACnE,wDAAwD;gBACxD,MAAM,MAAM,GACR,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;oBACnD,CAAC,CAAE,IAAI,CAAC,MAAkC;oBAC1C,CAAC,CAAC,IAAI,CAAC;gBACf,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1E,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7E,8DAA8D;gBAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;oBACvC,CAAC,CAAE,MAAM,CAAC,MAAoC;oBAC9C,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE5D,MAAM,aAAa,GAAG,YAAY,CAC9B,qBAAqB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CACzD,CAAC;gBACF,OAAO,YAAY,CAAC,gBAAgB,CAAC,aAAa,EAAE;oBAChD,IAAI;oBACJ,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,WAAW,EAAE,UAAU;iBAC1B,CAAC,EAAE,IAAI,CAAC,CAAC;YACd,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,YAAY,CAAC,WAAW,CAAC;oBAC5B,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtD,IAAI,EACA,sEAAsE;wBACtE,qBAAqB;iBAC5B,CAAC,EAAE,IAAI,CAAC,CAAC;YACd,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,75 @@
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
+ /** A single emitted record in the flattened layout. */
30
+ export interface FlatElement {
31
+ /** JSON-Pointer-style path, e.g. "/layout/0/children/2". */
32
+ path: string;
33
+ /**
34
+ * Path with the `/layout` prefix stripped, e.g. "/0/children/2".
35
+ * N-01 (Audit v4): mirrors the `rel_path` column element_list emits
36
+ * so `fields:["rel_path",...]` projection works on the flat layout.
37
+ */
38
+ rel_path: string;
39
+ /** Path of the parent element, or `null` for top-level entries. */
40
+ parent_path: string | null;
41
+ /** 0-based depth (top-level entries have depth 0). */
42
+ depth: number;
43
+ /** Element type string (the `type` field on the YT node, "" if missing). */
44
+ element_type: string;
45
+ /**
46
+ * True iff the node carries a source-binding. N-01 (Audit v4):
47
+ * derived via the same `hasSourceBinding` SSoT element_list uses,
48
+ * or an explicit REST-plugin boolean when present.
49
+ */
50
+ has_binding: boolean;
51
+ /** Element props (passthrough; `undefined` when the node has none). */
52
+ props?: Record<string, unknown>;
53
+ /**
54
+ * Children intentionally absent — see file-header. Kept in the type
55
+ * so consumers can confirm the field is `undefined` rather than
56
+ * assume it exists.
57
+ */
58
+ children?: undefined;
59
+ /**
60
+ * Allow passthrough of any other top-level fields the REST plugin
61
+ * may add in future (e.g. `label`, `has_binding`, `name`). The
62
+ * walker preserves these verbatim so projection via `pickFields`
63
+ * downstream stays meaningful.
64
+ */
65
+ [extra: string]: unknown;
66
+ }
67
+ /**
68
+ * Flatten a YOOtheme nested layout tree.
69
+ *
70
+ * @param layout - The top-level layout container. Accepts either an
71
+ * object keyed by stringified indices ("0","1",…) or an actual array.
72
+ * Returns `[]` for empty input or anything that isn't iterable.
73
+ */
74
+ export declare function flattenLayout(layout: unknown): FlatElement[];
75
+ //# sourceMappingURL=layout-flatten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-flatten.d.ts","sourceRoot":"","sources":["../../src/tools/layout-flatten.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,uDAAuD;AACvD,MAAM,WAAW,WAAW;IACxB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,EAAE,CAmB5D"}
@@ -0,0 +1,107 @@
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
+ import { hasSourceBinding } from './format/elements-format.js';
30
+ /**
31
+ * Flatten a YOOtheme nested layout tree.
32
+ *
33
+ * @param layout - The top-level layout container. Accepts either an
34
+ * object keyed by stringified indices ("0","1",…) or an actual array.
35
+ * Returns `[]` for empty input or anything that isn't iterable.
36
+ */
37
+ export function flattenLayout(layout) {
38
+ const out = [];
39
+ if (layout === null || typeof layout !== 'object') {
40
+ return out;
41
+ }
42
+ // Iterate top-level entries in insertion order. For arrays this gives
43
+ // numeric indices; for objects keyed by "0","1",… it gives the same
44
+ // ordering YT serialises.
45
+ const entries = Array.isArray(layout)
46
+ ? layout.map((v, i) => [String(i), v])
47
+ : Object.entries(layout);
48
+ for (const [key, node] of entries) {
49
+ walk(node, `/layout/${key}`, null, 0, out);
50
+ }
51
+ return out;
52
+ }
53
+ /**
54
+ * Depth-first walker. Emits the node, then recurses into its children.
55
+ * Skips non-object nodes silently while preserving child-index numbering.
56
+ */
57
+ function walk(node, path, parentPath, depth, out) {
58
+ if (node === null || typeof node !== 'object' || Array.isArray(node)) {
59
+ return;
60
+ }
61
+ const obj = node;
62
+ const elementType = typeof obj.type === 'string' ? obj.type : '';
63
+ const props = obj.props !== null && typeof obj.props === 'object' && !Array.isArray(obj.props)
64
+ ? obj.props
65
+ : undefined;
66
+ // N-01: derive the projection-relevant fields up-front so a
67
+ // `fields:["rel_path","has_binding",...]` projection finds them.
68
+ // `rel_path` strips the `/layout` prefix; `has_binding` honours an
69
+ // explicit REST boolean else derives via the shared SSoT.
70
+ const relPath = path.replace(/^\/layout/, '') || '/';
71
+ const hasBinding = typeof obj.has_binding === 'boolean'
72
+ ? obj.has_binding
73
+ : hasSourceBinding(obj);
74
+ // Build a passthrough shallow-clone WITHOUT the children field. We
75
+ // copy every other top-level key so future REST additions (label,
76
+ // …) survive the flatten.
77
+ const emitted = {
78
+ path,
79
+ rel_path: relPath,
80
+ parent_path: parentPath,
81
+ depth,
82
+ element_type: elementType,
83
+ has_binding: hasBinding,
84
+ };
85
+ for (const [k, v] of Object.entries(obj)) {
86
+ if (k === 'children' || k === 'type' || k === 'props' || k === 'has_binding') {
87
+ continue;
88
+ }
89
+ emitted[k] = v;
90
+ }
91
+ if (props !== undefined)
92
+ emitted.props = props;
93
+ out.push(emitted);
94
+ const children = obj.children;
95
+ if (Array.isArray(children)) {
96
+ for (let i = 0; i < children.length; i++) {
97
+ const child = children[i];
98
+ if (child === null || typeof child !== 'object' || Array.isArray(child)) {
99
+ // Skip non-object children; their index is preserved in
100
+ // the next sibling's path.
101
+ continue;
102
+ }
103
+ walk(child, `${path}/children/${String(i)}`, path, depth + 1, out);
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=layout-flatten.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-flatten.js","sourceRoot":"","sources":["../../src/tools/layout-flatten.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAyC/D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IACzC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAE9B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,oEAAoE;IACpE,0BAA0B;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,CAAC;IAExD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,IAAI,CACT,IAAa,EACb,IAAY,EACZ,UAAyB,EACzB,KAAa,EACb,GAAkB;IAElB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,KAAK,GACP,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5E,CAAC,CAAE,GAAG,CAAC,KAAiC;QACxC,CAAC,CAAC,SAAS,CAAC;IAEpB,4DAA4D;IAC5D,iEAAiE;IACjE,mEAAmE;IACnE,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IACrD,MAAM,UAAU,GACZ,OAAO,GAAG,CAAC,WAAW,KAAK,SAAS;QAChC,CAAC,CAAC,GAAG,CAAC,WAAW;QACjB,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEhC,mEAAmE;IACnE,kEAAkE;IAClE,0BAA0B;IAC1B,MAAM,OAAO,GAAgB;QACzB,IAAI;QACJ,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,UAAU;QACvB,KAAK;QACL,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;KAC1B,CAAC;IACF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;YAC3E,SAAS;QACb,CAAC;QACD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtE,wDAAwD;gBACxD,2BAA2B;gBAC3B,SAAS;YACb,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,aAAa,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Multi-Items tool builders.
3
+ *
4
+ * Surfaces two tools that operate on the YT-Pro Multi-Items binding
5
+ * pattern (container ↔ `*_item` pairings — see
6
+ * `./item-container-map.ts`):
7
+ *
8
+ * yootheme_builder_inspect_multi_items_binding
9
+ * → Reports the binding level (none/container/item), the matching
10
+ * container/item pair, and whether legacy implode directives are
11
+ * attached. Surfaces a `recommended_fix` when the binding sits on
12
+ * the container level.
13
+ *
14
+ * yootheme_builder_clean_implode_directives
15
+ * → Removes every `props.source.props.*.implode` directive from
16
+ * the addressed element. Returns the audit log + new etag.
17
+ *
18
+ * @license MIT
19
+ */
20
+ import type { ClientPool } from '../../sites/client-pool.js';
21
+ import { type AnyToolDefinition } from '../tool-builder.js';
22
+ export declare function buildMultiItemsTools(pool: ClientPool): readonly AnyToolDefinition[];
23
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../../src/tools/multi-items/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAKH,KAAK,iBAAiB,EACzB,MAAM,oBAAoB,CAAC;AAW5B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,iBAAiB,EAAE,CA0DnF"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Multi-Items tool builders.
3
+ *
4
+ * Surfaces two tools that operate on the YT-Pro Multi-Items binding
5
+ * pattern (container ↔ `*_item` pairings — see
6
+ * `./item-container-map.ts`):
7
+ *
8
+ * yootheme_builder_inspect_multi_items_binding
9
+ * → Reports the binding level (none/container/item), the matching
10
+ * container/item pair, and whether legacy implode directives are
11
+ * attached. Surfaces a `recommended_fix` when the binding sits on
12
+ * the container level.
13
+ *
14
+ * yootheme_builder_clean_implode_directives
15
+ * → Removes every `props.source.props.*.implode` directive from
16
+ * the addressed element. Returns the audit log + new etag.
17
+ *
18
+ * @license MIT
19
+ */
20
+ import { z } from 'zod';
21
+ import { withSiteRetry } from '../pool-resolve-helper.js';
22
+ import { ELEMENT_PATH, ETAG, SITE_ID_SCHEMA, TEMPLATE_ID } from '../shared-schemas.js';
23
+ import { defineTool, destructive, readOnly, withSiteMeta, } from '../tool-builder.js';
24
+ import { CLEAN_IMPLODE_OUTPUT_SCHEMA, handleCleanImplodeDirectives, } from './clean-implode-handler.js';
25
+ import { INSPECT_MULTI_ITEMS_OUTPUT_SCHEMA, handleInspectMultiItemsBinding, } from './inspect-handler.js';
26
+ export function buildMultiItemsTools(pool) {
27
+ // W6.3 — per-handler resolveSiteOrError. The handlers consume a
28
+ // single-field `MultiItemsHandlerDeps`, so we synthesise it inline
29
+ // with the resolved client.
30
+ return [
31
+ defineTool({
32
+ name: 'yootheme_builder_inspect_multi_items_binding',
33
+ description: 'Reports Multi-Items binding state: container/item pair (grid↔grid_item, ' +
34
+ 'slideshow↔slideshow_item, …), current binding level (none|container|item), ' +
35
+ 'and a recommended_fix when the binding sits on the container instead of the child. ' +
36
+ 'Operates on the default site unless site_id is provided.',
37
+ inputSchema: {
38
+ site_id: SITE_ID_SCHEMA,
39
+ template_id: TEMPLATE_ID,
40
+ element_path: ELEMENT_PATH,
41
+ },
42
+ outputSchema: INSPECT_MULTI_ITEMS_OUTPUT_SCHEMA,
43
+ annotations: readOnly('Inspect Multi-Items Binding'),
44
+ handler: async ({ site_id, ...rest }) => withSiteRetry(pool, site_id, async (client, site) => {
45
+ const deps = { client };
46
+ return withSiteMeta(await handleInspectMultiItemsBinding(deps, rest), site);
47
+ }),
48
+ }),
49
+ defineTool({
50
+ name: 'yootheme_builder_clean_implode_directives',
51
+ description: 'Strips `props.source.props.*.implode` directives from an element binding. ' +
52
+ 'Returns audit log + new ETag. Idempotent at the server (cleaned_count: 0 ' +
53
+ 'when nothing to remove) but classed as destructive because the affected ' +
54
+ 'binding cannot be restored without re-mapping. Always ask the user to ' +
55
+ 'confirm first, then call again with `confirm: true`. Requires ETag. ' +
56
+ 'Operates on the default site unless site_id is provided.',
57
+ inputSchema: {
58
+ site_id: SITE_ID_SCHEMA,
59
+ template_id: TEMPLATE_ID,
60
+ element_path: ELEMENT_PATH,
61
+ etag: ETAG,
62
+ confirm: z
63
+ .boolean()
64
+ .optional()
65
+ .describe('Must be true to execute. Without it the call returns a preview ' +
66
+ 'and makes NO server-side change; the agent must ask the user ' +
67
+ 'to confirm and retry with `confirm: true`.'),
68
+ },
69
+ outputSchema: CLEAN_IMPLODE_OUTPUT_SCHEMA,
70
+ annotations: destructive('Clean Implode Directives'),
71
+ handler: async ({ site_id, ...rest }) => withSiteRetry(pool, site_id, async (client, site) => {
72
+ const deps = { client };
73
+ return withSiteMeta(await handleCleanImplodeDirectives(deps, rest), site);
74
+ }),
75
+ }),
76
+ ];
77
+ }
78
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/tools/multi-items/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EACH,UAAU,EACV,WAAW,EACX,QAAQ,EACR,YAAY,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,iCAAiC,EACjC,8BAA8B,GAEjC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACjD,gEAAgE;IAChE,mEAAmE;IACnE,4BAA4B;IAC5B,OAAO;QACH,UAAU,CAAC;YACP,IAAI,EAAE,8CAA8C;YACpD,WAAW,EACP,0EAA0E;gBAC1E,6EAA6E;gBAC7E,qFAAqF;gBACrF,0DAA0D;YAC9D,WAAW,EAAE;gBACT,OAAO,EAAE,cAAc;gBACvB,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,YAAY;aAC7B;YACD,YAAY,EAAE,iCAAiC;YAC/C,WAAW,EAAE,QAAQ,CAAC,6BAA6B,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACpC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChD,MAAM,IAAI,GAA0B,EAAE,MAAM,EAAE,CAAC;gBAC/C,OAAO,YAAY,CAAC,MAAM,8BAA8B,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAChF,CAAC,CAAC;SACT,CAAC;QAEF,UAAU,CAAC;YACP,IAAI,EAAE,2CAA2C;YACjD,WAAW,EACP,4EAA4E;gBAC5E,2EAA2E;gBAC3E,0EAA0E;gBAC1E,wEAAwE;gBACxE,sEAAsE;gBACtE,0DAA0D;YAC9D,WAAW,EAAE;gBACT,OAAO,EAAE,cAAc;gBACvB,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,CAAC;qBACL,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACL,iEAAiE;oBAC7D,+DAA+D;oBAC/D,4CAA4C,CACnD;aACR;YACD,YAAY,EAAE,2BAA2B;YACzC,WAAW,EAAE,WAAW,CAAC,0BAA0B,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACpC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChD,MAAM,IAAI,GAA0B,EAAE,MAAM,EAAE,CAAC;gBAC/C,OAAO,YAAY,CAAC,MAAM,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9E,CAAC,CAAC;SACT,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `clean_implode_directives` handler — strip `props.source.props.*.implode`
3
+ * directives from an element binding via REST round-trip.
4
+ *
5
+ * Wave H5 (2026-05-26): destructive confirm-guard. The tool is now
6
+ * registered with `destructive()` annotation (was `mutating()`); per the
7
+ * MCP Goldstandard, every destructive tool MUST also expose a `confirm`
8
+ * input field + preview guard so an auto-acting agent cannot strip
9
+ * implode directives from a binding without an explicit second gate.
10
+ * Mirrors the `element_delete` pattern (handlers-write.ts).
11
+ *
12
+ * @license MIT
13
+ */
14
+ import { z } from 'zod';
15
+ import { type RestClient } from '../../client.js';
16
+ import { type ToolResult } from '../tool-builder.js';
17
+ export declare const CLEAN_IMPLODE_OUTPUT_SCHEMA: z.ZodObject<{
18
+ template_id: z.ZodString;
19
+ element_path: z.ZodString;
20
+ cleaned_count: z.ZodNumber;
21
+ removed_directives: z.ZodArray<z.ZodObject<{
22
+ prop_name: z.ZodString;
23
+ directive: z.ZodRecord<z.ZodString, z.ZodUnknown>;
24
+ }, z.core.$strip>>;
25
+ new_etag: z.ZodString;
26
+ }, z.core.$strip>;
27
+ export interface CleanImplodeHandlerDeps {
28
+ readonly client: RestClient;
29
+ }
30
+ export declare function handleCleanImplodeDirectives({ client }: CleanImplodeHandlerDeps, { template_id, element_path, etag, confirm, }: {
31
+ template_id: string;
32
+ element_path: string;
33
+ etag: string;
34
+ confirm?: boolean;
35
+ }): Promise<ToolResult>;
36
+ //# sourceMappingURL=clean-implode-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-implode-handler.d.ts","sourceRoot":"","sources":["../../../src/tools/multi-items/clean-implode-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAKH,KAAK,UAAU,EAClB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,2BAA2B;;;;;;;;;iBAWtC,CAAC;AAEH,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC/B;AAED,wBAAsB,4BAA4B,CAC9C,EAAE,MAAM,EAAE,EAAE,uBAAuB,EACnC,EACI,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,OAAO,GACV,EAAE;IACC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,GACF,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * `clean_implode_directives` handler — strip `props.source.props.*.implode`
3
+ * directives from an element binding via REST round-trip.
4
+ *
5
+ * Wave H5 (2026-05-26): destructive confirm-guard. The tool is now
6
+ * registered with `destructive()` annotation (was `mutating()`); per the
7
+ * MCP Goldstandard, every destructive tool MUST also expose a `confirm`
8
+ * input field + preview guard so an auto-acting agent cannot strip
9
+ * implode directives from a binding without an explicit second gate.
10
+ * Mirrors the `element_delete` pattern (handlers-write.ts).
11
+ *
12
+ * @license MIT
13
+ */
14
+ import { z } from 'zod';
15
+ import { encodeElementPath } from '../../client.js';
16
+ import { confirmGuard, errorResult, jsonResult, structuredResult, } from '../tool-builder.js';
17
+ export const CLEAN_IMPLODE_OUTPUT_SCHEMA = z.object({
18
+ template_id: z.string(),
19
+ element_path: z.string(),
20
+ cleaned_count: z.number(),
21
+ removed_directives: z.array(z.object({
22
+ prop_name: z.string(),
23
+ directive: z.record(z.string(), z.unknown()),
24
+ })),
25
+ new_etag: z.string(),
26
+ });
27
+ export async function handleCleanImplodeDirectives({ client }, { template_id, element_path, etag, confirm, }) {
28
+ // Wave H5 confirm-guard. Without `confirm: true` we return a preview
29
+ // payload and make NO HTTP call. The preview surfaces enough context
30
+ // (template + element_path + operation) for the host agent to ask the
31
+ // user to confirm. Symmetric with `element_delete` / `element_unbind_source`.
32
+ if (confirm !== true) {
33
+ return confirmGuard({
34
+ operation: 'strip implode directives from element binding',
35
+ details: { template_id, element_path },
36
+ });
37
+ }
38
+ const encoded = encodeElementPath(element_path);
39
+ try {
40
+ const data = await client.post(`/pages/${encodeURIComponent(template_id)}/elements/${encoded}/multi-items/clean-implode`, { body: {}, etag });
41
+ // The REST endpoint returns the canonical CLEAN_IMPLODE_OUTPUT_SCHEMA
42
+ // shape ({template_id, element_path, cleaned_count, removed_directives,
43
+ // new_etag}) — pass it through as structuredContent so the declared
44
+ // outputSchema is satisfied (a tool with an outputSchema MUST emit
45
+ // structuredContent, else the MCP SDK rejects with -32602).
46
+ return structuredResult(jsonResult(data), data);
47
+ }
48
+ catch (e) {
49
+ return errorResult({
50
+ error: e,
51
+ context: { template_id, element_path },
52
+ hint: 'On 412 refresh via yootheme_builder_get_etag and retry. On 404 verify the ' +
53
+ 'element_path via yootheme_builder_element_list.',
54
+ });
55
+ }
56
+ }
57
+ //# sourceMappingURL=clean-implode-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-implode-handler.js","sourceRoot":"","sources":["../../../src/tools/multi-items/clean-implode-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAmB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACH,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,kBAAkB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC,CAAC,MAAM,CAAC;QACL,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;KAC/C,CAAC,CACL;IACD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACvB,CAAC,CAAC;AAMH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAC9C,EAAE,MAAM,EAA2B,EACnC,EACI,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,OAAO,GAMV;IAED,qEAAqE;IACrE,qEAAqE;IACrE,sEAAsE;IACtE,8EAA8E;IAC9E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,YAAY,CAAC;YAChB,SAAS,EAAE,+CAA+C;YAC1D,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE;SACzC,CAAC,CAAC;IACP,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAC1B,UAAU,kBAAkB,CAAC,WAAW,CAAC,aAAa,OAAO,4BAA4B,EACzF,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CACrB,CAAC;QACF,sEAAsE;QACtE,wEAAwE;QACxE,oEAAoE;QACpE,mEAAmE;QACnE,4DAA4D;QAC5D,OAAO,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE;YACtC,IAAI,EACA,4EAA4E;gBAC5E,iDAAiD;SACxD,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}