@wootsup/yt-builder-mcp 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +18 -6
  2. package/bin/yt-builder-mcp.js +6 -0
  3. package/dist/auth.d.ts +119 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +226 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +84 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +151 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/clients/claude-code.d.ts +18 -0
  12. package/dist/clients/claude-code.d.ts.map +1 -0
  13. package/dist/clients/claude-code.js +53 -0
  14. package/dist/clients/claude-code.js.map +1 -0
  15. package/dist/clients/claude-desktop.d.ts +19 -0
  16. package/dist/clients/claude-desktop.d.ts.map +1 -0
  17. package/dist/clients/claude-desktop.js +56 -0
  18. package/dist/clients/claude-desktop.js.map +1 -0
  19. package/dist/clients/cline.d.ts +26 -0
  20. package/dist/clients/cline.d.ts.map +1 -0
  21. package/dist/clients/cline.js +80 -0
  22. package/dist/clients/cline.js.map +1 -0
  23. package/dist/clients/codex-cli.d.ts +42 -0
  24. package/dist/clients/codex-cli.d.ts.map +1 -0
  25. package/dist/clients/codex-cli.js +194 -0
  26. package/dist/clients/codex-cli.js.map +1 -0
  27. package/dist/clients/continue.d.ts +13 -0
  28. package/dist/clients/continue.d.ts.map +1 -0
  29. package/dist/clients/continue.js +52 -0
  30. package/dist/clients/continue.js.map +1 -0
  31. package/dist/clients/cursor.d.ts +12 -0
  32. package/dist/clients/cursor.d.ts.map +1 -0
  33. package/dist/clients/cursor.js +38 -0
  34. package/dist/clients/cursor.js.map +1 -0
  35. package/dist/clients/gemini-cli.d.ts +18 -0
  36. package/dist/clients/gemini-cli.d.ts.map +1 -0
  37. package/dist/clients/gemini-cli.js +44 -0
  38. package/dist/clients/gemini-cli.js.map +1 -0
  39. package/dist/clients/home.d.ts +14 -0
  40. package/dist/clients/home.d.ts.map +1 -0
  41. package/dist/clients/home.js +20 -0
  42. package/dist/clients/home.js.map +1 -0
  43. package/dist/clients/index.d.ts +52 -0
  44. package/dist/clients/index.d.ts.map +1 -0
  45. package/dist/clients/index.js +72 -0
  46. package/dist/clients/index.js.map +1 -0
  47. package/dist/clients/roo-code.d.ts +23 -0
  48. package/dist/clients/roo-code.d.ts.map +1 -0
  49. package/dist/clients/roo-code.js +69 -0
  50. package/dist/clients/roo-code.js.map +1 -0
  51. package/dist/clients/zed.d.ts +12 -0
  52. package/dist/clients/zed.d.ts.map +1 -0
  53. package/dist/clients/zed.js +41 -0
  54. package/dist/clients/zed.js.map +1 -0
  55. package/dist/errors/hints.d.ts +51 -0
  56. package/dist/errors/hints.d.ts.map +1 -0
  57. package/dist/errors/hints.js +95 -0
  58. package/dist/errors/hints.js.map +1 -0
  59. package/dist/errors/mask.d.ts +35 -0
  60. package/dist/errors/mask.d.ts.map +1 -0
  61. package/dist/errors/mask.js +49 -0
  62. package/dist/errors/mask.js.map +1 -0
  63. package/dist/errors/sanitize.d.ts +31 -0
  64. package/dist/errors/sanitize.d.ts.map +1 -0
  65. package/dist/errors/sanitize.js +100 -0
  66. package/dist/errors/sanitize.js.map +1 -0
  67. package/dist/errors.d.ts +42 -0
  68. package/dist/errors.d.ts.map +1 -0
  69. package/dist/errors.js +61 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
  72. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
  73. package/dist/gateway/advanced-tool/discovery.js +53 -0
  74. package/dist/gateway/advanced-tool/discovery.js.map +1 -0
  75. package/dist/gateway/advanced-tool/domains.d.ts +47 -0
  76. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
  77. package/dist/gateway/advanced-tool/domains.js +94 -0
  78. package/dist/gateway/advanced-tool/domains.js.map +1 -0
  79. package/dist/gateway/advanced-tool/execute.d.ts +29 -0
  80. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
  81. package/dist/gateway/advanced-tool/execute.js +54 -0
  82. package/dist/gateway/advanced-tool/execute.js.map +1 -0
  83. package/dist/gateway/advanced-tool/index.d.ts +36 -0
  84. package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
  85. package/dist/gateway/advanced-tool/index.js +39 -0
  86. package/dist/gateway/advanced-tool/index.js.map +1 -0
  87. package/dist/gateway/advanced-tool/register.d.ts +18 -0
  88. package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
  89. package/dist/gateway/advanced-tool/register.js +69 -0
  90. package/dist/gateway/advanced-tool/register.js.map +1 -0
  91. package/dist/gateway/advanced-tool.d.ts +13 -0
  92. package/dist/gateway/advanced-tool.d.ts.map +1 -0
  93. package/dist/gateway/advanced-tool.js +13 -0
  94. package/dist/gateway/advanced-tool.js.map +1 -0
  95. package/dist/gateway/capturing-server.d.ts +117 -0
  96. package/dist/gateway/capturing-server.d.ts.map +1 -0
  97. package/dist/gateway/capturing-server.js +103 -0
  98. package/dist/gateway/capturing-server.js.map +1 -0
  99. package/dist/gateway/essentials.d.ts +49 -0
  100. package/dist/gateway/essentials.d.ts.map +1 -0
  101. package/dist/gateway/essentials.js +92 -0
  102. package/dist/gateway/essentials.js.map +1 -0
  103. package/dist/gateway/test-support.d.ts +41 -0
  104. package/dist/gateway/test-support.d.ts.map +1 -0
  105. package/dist/gateway/test-support.js +60 -0
  106. package/dist/gateway/test-support.js.map +1 -0
  107. package/dist/index.d.ts +29 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +113 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/install-skill.d.ts +43 -0
  112. package/dist/install-skill.d.ts.map +1 -0
  113. package/dist/install-skill.js +118 -0
  114. package/dist/install-skill.js.map +1 -0
  115. package/dist/platform/detect.d.ts +64 -0
  116. package/dist/platform/detect.d.ts.map +1 -0
  117. package/dist/platform/detect.js +98 -0
  118. package/dist/platform/detect.js.map +1 -0
  119. package/dist/platform/index.d.ts +121 -0
  120. package/dist/platform/index.d.ts.map +1 -0
  121. package/dist/platform/index.js +176 -0
  122. package/dist/platform/index.js.map +1 -0
  123. package/dist/platform/joomla.d.ts +44 -0
  124. package/dist/platform/joomla.d.ts.map +1 -0
  125. package/dist/platform/joomla.js +46 -0
  126. package/dist/platform/joomla.js.map +1 -0
  127. package/dist/server.d.ts +109 -0
  128. package/dist/server.d.ts.map +1 -0
  129. package/dist/server.js +237 -0
  130. package/dist/server.js.map +1 -0
  131. package/dist/setup-cli-confirm.d.ts +36 -0
  132. package/dist/setup-cli-confirm.d.ts.map +1 -0
  133. package/dist/setup-cli-confirm.js +59 -0
  134. package/dist/setup-cli-confirm.js.map +1 -0
  135. package/dist/setup-cli.d.ts +152 -0
  136. package/dist/setup-cli.d.ts.map +1 -0
  137. package/dist/setup-cli.js +870 -0
  138. package/dist/setup-cli.js.map +1 -0
  139. package/dist/setup-prompts.d.ts +41 -0
  140. package/dist/setup-prompts.d.ts.map +1 -0
  141. package/dist/setup-prompts.js +146 -0
  142. package/dist/setup-prompts.js.map +1 -0
  143. package/dist/setup-token.d.ts +38 -0
  144. package/dist/setup-token.d.ts.map +1 -0
  145. package/dist/setup-token.js +106 -0
  146. package/dist/setup-token.js.map +1 -0
  147. package/dist/setup-wizard-defaults.d.ts +43 -0
  148. package/dist/setup-wizard-defaults.d.ts.map +1 -0
  149. package/dist/setup-wizard-defaults.js +160 -0
  150. package/dist/setup-wizard-defaults.js.map +1 -0
  151. package/dist/setup-wizard-handshake.d.ts +25 -0
  152. package/dist/setup-wizard-handshake.d.ts.map +1 -0
  153. package/dist/setup-wizard-handshake.js +103 -0
  154. package/dist/setup-wizard-handshake.js.map +1 -0
  155. package/dist/setup-wizard-types.d.ts +164 -0
  156. package/dist/setup-wizard-types.d.ts.map +1 -0
  157. package/dist/setup-wizard-types.js +11 -0
  158. package/dist/setup-wizard-types.js.map +1 -0
  159. package/dist/setup-wizard.d.ts +33 -0
  160. package/dist/setup-wizard.d.ts.map +1 -0
  161. package/dist/setup-wizard.js +199 -0
  162. package/dist/setup-wizard.js.map +1 -0
  163. package/dist/setup.d.ts +17 -0
  164. package/dist/setup.d.ts.map +1 -0
  165. package/dist/setup.js +33 -0
  166. package/dist/setup.js.map +1 -0
  167. package/dist/sites/cli/add-site.d.ts +106 -0
  168. package/dist/sites/cli/add-site.d.ts.map +1 -0
  169. package/dist/sites/cli/add-site.js +185 -0
  170. package/dist/sites/cli/add-site.js.map +1 -0
  171. package/dist/sites/cli/list-sites.d.ts +40 -0
  172. package/dist/sites/cli/list-sites.d.ts.map +1 -0
  173. package/dist/sites/cli/list-sites.js +117 -0
  174. package/dist/sites/cli/list-sites.js.map +1 -0
  175. package/dist/sites/cli/remove-site.d.ts +60 -0
  176. package/dist/sites/cli/remove-site.d.ts.map +1 -0
  177. package/dist/sites/cli/remove-site.js +120 -0
  178. package/dist/sites/cli/remove-site.js.map +1 -0
  179. package/dist/sites/cli/set-default.d.ts +47 -0
  180. package/dist/sites/cli/set-default.d.ts.map +1 -0
  181. package/dist/sites/cli/set-default.js +69 -0
  182. package/dist/sites/cli/set-default.js.map +1 -0
  183. package/dist/sites/cli/test-site.d.ts +77 -0
  184. package/dist/sites/cli/test-site.d.ts.map +1 -0
  185. package/dist/sites/cli/test-site.js +146 -0
  186. package/dist/sites/cli/test-site.js.map +1 -0
  187. package/dist/sites/client-pool.d.ts +124 -0
  188. package/dist/sites/client-pool.d.ts.map +1 -0
  189. package/dist/sites/client-pool.js +172 -0
  190. package/dist/sites/client-pool.js.map +1 -0
  191. package/dist/sites/env-bridge.d.ts +55 -0
  192. package/dist/sites/env-bridge.d.ts.map +1 -0
  193. package/dist/sites/env-bridge.js +94 -0
  194. package/dist/sites/env-bridge.js.map +1 -0
  195. package/dist/sites/paths.d.ts +21 -0
  196. package/dist/sites/paths.d.ts.map +1 -0
  197. package/dist/sites/paths.js +37 -0
  198. package/dist/sites/paths.js.map +1 -0
  199. package/dist/sites/probe.d.ts +60 -0
  200. package/dist/sites/probe.d.ts.map +1 -0
  201. package/dist/sites/probe.js +112 -0
  202. package/dist/sites/probe.js.map +1 -0
  203. package/dist/sites/registry.d.ts +142 -0
  204. package/dist/sites/registry.d.ts.map +1 -0
  205. package/dist/sites/registry.js +163 -0
  206. package/dist/sites/registry.js.map +1 -0
  207. package/dist/sites/schema.d.ts +90 -0
  208. package/dist/sites/schema.d.ts.map +1 -0
  209. package/dist/sites/schema.js +71 -0
  210. package/dist/sites/schema.js.map +1 -0
  211. package/dist/sites/secret-resolver.d.ts +109 -0
  212. package/dist/sites/secret-resolver.d.ts.map +1 -0
  213. package/dist/sites/secret-resolver.js +189 -0
  214. package/dist/sites/secret-resolver.js.map +1 -0
  215. package/dist/sites/store.d.ts +82 -0
  216. package/dist/sites/store.d.ts.map +1 -0
  217. package/dist/sites/store.js +198 -0
  218. package/dist/sites/store.js.map +1 -0
  219. package/dist/sites/tools/index.d.ts +28 -0
  220. package/dist/sites/tools/index.d.ts.map +1 -0
  221. package/dist/sites/tools/index.js +30 -0
  222. package/dist/sites/tools/index.js.map +1 -0
  223. package/dist/sites/tools/sites-list.d.ts +48 -0
  224. package/dist/sites/tools/sites-list.d.ts.map +1 -0
  225. package/dist/sites/tools/sites-list.js +135 -0
  226. package/dist/sites/tools/sites-list.js.map +1 -0
  227. package/dist/sites/tools/sites-test.d.ts +47 -0
  228. package/dist/sites/tools/sites-test.d.ts.map +1 -0
  229. package/dist/sites/tools/sites-test.js +148 -0
  230. package/dist/sites/tools/sites-test.js.map +1 -0
  231. package/dist/skill-loader.d.ts +111 -0
  232. package/dist/skill-loader.d.ts.map +1 -0
  233. package/dist/skill-loader.js +191 -0
  234. package/dist/skill-loader.js.map +1 -0
  235. package/dist/tools/elements/builders.d.ts +24 -0
  236. package/dist/tools/elements/builders.d.ts.map +1 -0
  237. package/dist/tools/elements/builders.js +199 -0
  238. package/dist/tools/elements/builders.js.map +1 -0
  239. package/dist/tools/elements/handlers-write.d.ts +49 -0
  240. package/dist/tools/elements/handlers-write.d.ts.map +1 -0
  241. package/dist/tools/elements/handlers-write.js +148 -0
  242. package/dist/tools/elements/handlers-write.js.map +1 -0
  243. package/dist/tools/elements/handlers.d.ts +68 -0
  244. package/dist/tools/elements/handlers.d.ts.map +1 -0
  245. package/dist/tools/elements/handlers.js +206 -0
  246. package/dist/tools/elements/handlers.js.map +1 -0
  247. package/dist/tools/elements/index.d.ts +28 -0
  248. package/dist/tools/elements/index.d.ts.map +1 -0
  249. package/dist/tools/elements/index.js +27 -0
  250. package/dist/tools/elements/index.js.map +1 -0
  251. package/dist/tools/elements.d.ts +13 -0
  252. package/dist/tools/elements.d.ts.map +1 -0
  253. package/dist/tools/elements.js +13 -0
  254. package/dist/tools/elements.js.map +1 -0
  255. package/dist/tools/elicitation.d.ts +87 -0
  256. package/dist/tools/elicitation.d.ts.map +1 -0
  257. package/dist/tools/elicitation.js +100 -0
  258. package/dist/tools/elicitation.js.map +1 -0
  259. package/dist/tools/format/elements-format.d.ts +40 -0
  260. package/dist/tools/format/elements-format.d.ts.map +1 -0
  261. package/dist/tools/format/elements-format.js +194 -0
  262. package/dist/tools/format/elements-format.js.map +1 -0
  263. package/dist/tools/format/health-format.d.ts +79 -0
  264. package/dist/tools/format/health-format.d.ts.map +1 -0
  265. package/dist/tools/format/health-format.js +181 -0
  266. package/dist/tools/format/health-format.js.map +1 -0
  267. package/dist/tools/format/inspection-format.d.ts +58 -0
  268. package/dist/tools/format/inspection-format.d.ts.map +1 -0
  269. package/dist/tools/format/inspection-format.js +164 -0
  270. package/dist/tools/format/inspection-format.js.map +1 -0
  271. package/dist/tools/format/pages-format.d.ts +48 -0
  272. package/dist/tools/format/pages-format.d.ts.map +1 -0
  273. package/dist/tools/format/pages-format.js +137 -0
  274. package/dist/tools/format/pages-format.js.map +1 -0
  275. package/dist/tools/format/sources-format.d.ts +25 -0
  276. package/dist/tools/format/sources-format.d.ts.map +1 -0
  277. package/dist/tools/format/sources-format.js +208 -0
  278. package/dist/tools/format/sources-format.js.map +1 -0
  279. package/dist/tools/health.d.ts +22 -0
  280. package/dist/tools/health.d.ts.map +1 -0
  281. package/dist/tools/health.js +220 -0
  282. package/dist/tools/health.js.map +1 -0
  283. package/dist/tools/index.d.ts +30 -0
  284. package/dist/tools/index.d.ts.map +1 -0
  285. package/dist/tools/index.js +39 -0
  286. package/dist/tools/index.js.map +1 -0
  287. package/dist/tools/inspection.d.ts +14 -0
  288. package/dist/tools/inspection.d.ts.map +1 -0
  289. package/dist/tools/inspection.js +170 -0
  290. package/dist/tools/inspection.js.map +1 -0
  291. package/dist/tools/layout-flatten.d.ts +75 -0
  292. package/dist/tools/layout-flatten.d.ts.map +1 -0
  293. package/dist/tools/layout-flatten.js +107 -0
  294. package/dist/tools/layout-flatten.js.map +1 -0
  295. package/dist/tools/multi-items/builders.d.ts +23 -0
  296. package/dist/tools/multi-items/builders.d.ts.map +1 -0
  297. package/dist/tools/multi-items/builders.js +69 -0
  298. package/dist/tools/multi-items/builders.js.map +1 -0
  299. package/dist/tools/multi-items/clean-implode-handler.d.ts +28 -0
  300. package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -0
  301. package/dist/tools/multi-items/clean-implode-handler.js +40 -0
  302. package/dist/tools/multi-items/clean-implode-handler.js.map +1 -0
  303. package/dist/tools/multi-items/index.d.ts +18 -0
  304. package/dist/tools/multi-items/index.d.ts.map +1 -0
  305. package/dist/tools/multi-items/index.js +18 -0
  306. package/dist/tools/multi-items/index.js.map +1 -0
  307. package/dist/tools/multi-items/inspect-handler.d.ts +41 -0
  308. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
  309. package/dist/tools/multi-items/inspect-handler.js +50 -0
  310. package/dist/tools/multi-items/inspect-handler.js.map +1 -0
  311. package/dist/tools/multi-items/item-container-map.d.ts +41 -0
  312. package/dist/tools/multi-items/item-container-map.d.ts.map +1 -0
  313. package/dist/tools/multi-items/item-container-map.js +73 -0
  314. package/dist/tools/multi-items/item-container-map.js.map +1 -0
  315. package/dist/tools/pages/builders.d.ts +14 -0
  316. package/dist/tools/pages/builders.d.ts.map +1 -0
  317. package/dist/tools/pages/builders.js +127 -0
  318. package/dist/tools/pages/builders.js.map +1 -0
  319. package/dist/tools/pages/handlers-read.d.ts +33 -0
  320. package/dist/tools/pages/handlers-read.d.ts.map +1 -0
  321. package/dist/tools/pages/handlers-read.js +171 -0
  322. package/dist/tools/pages/handlers-read.js.map +1 -0
  323. package/dist/tools/pages/handlers-write.d.ts +21 -0
  324. package/dist/tools/pages/handlers-write.d.ts.map +1 -0
  325. package/dist/tools/pages/handlers-write.js +52 -0
  326. package/dist/tools/pages/handlers-write.js.map +1 -0
  327. package/dist/tools/pages/index.d.ts +17 -0
  328. package/dist/tools/pages/index.d.ts.map +1 -0
  329. package/dist/tools/pages/index.js +17 -0
  330. package/dist/tools/pages/index.js.map +1 -0
  331. package/dist/tools/pages/schemas.d.ts +30 -0
  332. package/dist/tools/pages/schemas.d.ts.map +1 -0
  333. package/dist/tools/pages/schemas.js +48 -0
  334. package/dist/tools/pages/schemas.js.map +1 -0
  335. package/dist/tools/pages.d.ts +13 -0
  336. package/dist/tools/pages.d.ts.map +1 -0
  337. package/dist/tools/pages.js +13 -0
  338. package/dist/tools/pages.js.map +1 -0
  339. package/dist/tools/pool-resolve-helper.d.ts +83 -0
  340. package/dist/tools/pool-resolve-helper.d.ts.map +1 -0
  341. package/dist/tools/pool-resolve-helper.js +148 -0
  342. package/dist/tools/pool-resolve-helper.js.map +1 -0
  343. package/dist/tools/progress-phases.d.ts +46 -0
  344. package/dist/tools/progress-phases.d.ts.map +1 -0
  345. package/dist/tools/progress-phases.js +48 -0
  346. package/dist/tools/progress-phases.js.map +1 -0
  347. package/dist/tools/shared-schemas.d.ts +25 -0
  348. package/dist/tools/shared-schemas.d.ts.map +1 -0
  349. package/dist/tools/shared-schemas.js +48 -0
  350. package/dist/tools/shared-schemas.js.map +1 -0
  351. package/dist/tools/sources/builders.d.ts +13 -0
  352. package/dist/tools/sources/builders.d.ts.map +1 -0
  353. package/dist/tools/sources/builders.js +115 -0
  354. package/dist/tools/sources/builders.js.map +1 -0
  355. package/dist/tools/sources/handlers-bind.d.ts +28 -0
  356. package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
  357. package/dist/tools/sources/handlers-bind.js +129 -0
  358. package/dist/tools/sources/handlers-bind.js.map +1 -0
  359. package/dist/tools/sources/handlers.d.ts +45 -0
  360. package/dist/tools/sources/handlers.d.ts.map +1 -0
  361. package/dist/tools/sources/handlers.js +91 -0
  362. package/dist/tools/sources/handlers.js.map +1 -0
  363. package/dist/tools/sources/index.d.ts +19 -0
  364. package/dist/tools/sources/index.d.ts.map +1 -0
  365. package/dist/tools/sources/index.js +18 -0
  366. package/dist/tools/sources/index.js.map +1 -0
  367. package/dist/tools/sources.d.ts +14 -0
  368. package/dist/tools/sources.d.ts.map +1 -0
  369. package/dist/tools/sources.js +14 -0
  370. package/dist/tools/sources.js.map +1 -0
  371. package/dist/tools/sparse-fields.d.ts +80 -0
  372. package/dist/tools/sparse-fields.d.ts.map +1 -0
  373. package/dist/tools/sparse-fields.js +144 -0
  374. package/dist/tools/sparse-fields.js.map +1 -0
  375. package/dist/tools/tool-builder/annotations.d.ts +55 -0
  376. package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
  377. package/dist/tools/tool-builder/annotations.js +86 -0
  378. package/dist/tools/tool-builder/annotations.js.map +1 -0
  379. package/dist/tools/tool-builder/define.d.ts +31 -0
  380. package/dist/tools/tool-builder/define.d.ts.map +1 -0
  381. package/dist/tools/tool-builder/define.js +31 -0
  382. package/dist/tools/tool-builder/define.js.map +1 -0
  383. package/dist/tools/tool-builder/index.d.ts +28 -0
  384. package/dist/tools/tool-builder/index.d.ts.map +1 -0
  385. package/dist/tools/tool-builder/index.js +27 -0
  386. package/dist/tools/tool-builder/index.js.map +1 -0
  387. package/dist/tools/tool-builder/results.d.ts +93 -0
  388. package/dist/tools/tool-builder/results.d.ts.map +1 -0
  389. package/dist/tools/tool-builder/results.js +211 -0
  390. package/dist/tools/tool-builder/results.js.map +1 -0
  391. package/dist/tools/tool-builder/types.d.ts +82 -0
  392. package/dist/tools/tool-builder/types.d.ts.map +1 -0
  393. package/dist/tools/tool-builder/types.js +9 -0
  394. package/dist/tools/tool-builder/types.js.map +1 -0
  395. package/dist/tools/tool-builder.d.ts +16 -0
  396. package/dist/tools/tool-builder.d.ts.map +1 -0
  397. package/dist/tools/tool-builder.js +16 -0
  398. package/dist/tools/tool-builder.js.map +1 -0
  399. package/manifest.json +27 -10
  400. package/package.json +3 -1
  401. package/skills/yt-builder-mcp/SKILL.md +397 -138
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Health & diagnostics tools.
3
+ *
4
+ * yootheme_builder_health
5
+ * → GET /health (unauthenticated). Verifies the plugin is
6
+ * installed and reachable. Returns plugin/YT/WP/PHP versions
7
+ * + available endpoints.
8
+ *
9
+ * yootheme_builder_diagnose
10
+ * → Aggregates health + a Bearer-auth probe so the agent can
11
+ * distinguish "plugin missing" from "wrong key".
12
+ *
13
+ * Both tools emit `detailResult` (Wave G.2) so hosts that support
14
+ * structured content render a Detail-Card; the LLM still reads the text
15
+ * leg from `content[0].text`.
16
+ *
17
+ * @license MIT
18
+ */
19
+ import { detailResult, statsResult } from '@getimo/mcp-toolkit';
20
+ import { z } from 'zod';
21
+ import { RestError } from '../errors.js';
22
+ import { buildDiagnoseDetail, buildHealthStats, } from './format/health-format.js';
23
+ import { SITE_ID_SCHEMA } from './shared-schemas.js';
24
+ import { resolveSiteOrError } from './pool-resolve-helper.js';
25
+ import { defineTool, errorResult, jsonResult, readOnly, structuredResult, withSiteMeta, } from './tool-builder.js';
26
+ // ─── outputSchemas (Wave G.2 §4) ─────────────────────────────────────
27
+ const HEALTH_OUTPUT_SCHEMA = z.object({
28
+ plugin_version: z.string(),
29
+ // Cross-platform note (Wave 7): the anonymous health payload only carries
30
+ // {plugin_version, status, yootheme_loaded}; the rest is disclosed ONLY
31
+ // with a valid Bearer (server-side fingerprint-reduction). On Joomla the
32
+ // augmented payload uses `cms`/`cms_version` and emits NEITHER `wp_version`
33
+ // NOR `yootheme_version`. All platform-/tier-variable fields are therefore
34
+ // optional so the same MCP tool validates against WP and Joomla, anon and
35
+ // authenticated.
36
+ yootheme_version: z.string().nullable().optional(),
37
+ wp_version: z.string().nullable().optional(),
38
+ cms: z.string().optional(),
39
+ cms_version: z.string().optional(),
40
+ php_version: z.string().optional(),
41
+ storage_type: z.string().optional(),
42
+ storage_target: z.string().optional(),
43
+ yootheme_loaded: z.boolean(),
44
+ available_endpoints: z.array(z.string()).optional(),
45
+ // 1.0.1 — surface canonical WP URLs so an agent can deep-link the
46
+ // customer to the live site without a separate REST round-trip.
47
+ // Both fields are optional in the schema for back-compat with older
48
+ // 1.0.0 PHP servers that don't yet emit them.
49
+ site_url: z
50
+ .string()
51
+ .nullable()
52
+ .optional()
53
+ .describe('Canonical WordPress install URL including any subpath ' +
54
+ '(e.g. `https://example.com/wordpress`). Authenticated payload only.'),
55
+ home_url: z
56
+ .string()
57
+ .nullable()
58
+ .optional()
59
+ .describe('Front-end home URL — use this to deep-link the user to the live ' +
60
+ 'site they edited.'),
61
+ });
62
+ const DIAGNOSE_OUTPUT_SCHEMA = z.object({
63
+ plugin_reachable: z.boolean(),
64
+ plugin_version: z.string().optional(),
65
+ yootheme_loaded: z.boolean().optional(),
66
+ yootheme_version: z.string().nullable().optional(),
67
+ endpoint_count: z.number().optional(),
68
+ plugin_error: z.string().optional(),
69
+ bearer_valid: z.boolean().optional(),
70
+ bearer_error: z.string().optional(),
71
+ summary: z.string().optional(),
72
+ // 1.0.1 — mirror the health fields for parity. Diagnose calls /health
73
+ // internally so it has the values; surfacing them avoids forcing the
74
+ // agent to call both tools to get URL info + bearer status.
75
+ site_url: z
76
+ .string()
77
+ .nullable()
78
+ .optional()
79
+ .describe('Canonical WordPress install URL including any subpath ' +
80
+ '(e.g. `https://example.com/wordpress`). Mirrored from /health so an ' +
81
+ 'agent gets URL info + bearer status in one call.'),
82
+ home_url: z
83
+ .string()
84
+ .nullable()
85
+ .optional()
86
+ .describe('Front-end home URL — use this to deep-link the user to the live ' +
87
+ 'site they edited.'),
88
+ });
89
+ export function buildHealthTools(pool) {
90
+ return [
91
+ defineTool({
92
+ name: 'yootheme_builder_health',
93
+ description: 'Check plugin installed/reachable. Returns plugin version, YT Pro version, REST ' +
94
+ 'endpoints. Authenticated payload adds site_url + home_url for deep-linking. ' +
95
+ 'See yootheme_builder_diagnose for Bearer-validity + connectivity summary. ' +
96
+ 'Operates on the default site unless site_id is provided.',
97
+ inputSchema: {
98
+ site_id: SITE_ID_SCHEMA,
99
+ },
100
+ outputSchema: HEALTH_OUTPUT_SCHEMA,
101
+ annotations: readOnly('Health Check'),
102
+ handler: async ({ site_id }) => {
103
+ const r = await resolveSiteOrError(pool, site_id);
104
+ if (!r.ok)
105
+ return r.error;
106
+ const { client: siteClient, site } = r;
107
+ try {
108
+ const data = await siteClient.get('/health');
109
+ // Round-1 audit I1 fix: spec §3.2 row 1 calls for
110
+ // `statsResult` (flat metrics). Earlier shipped
111
+ // `detailResult` — that's a Detail-Card variant, not
112
+ // the stats-display the spec asked for. The flat
113
+ // shape is built by `buildHealthStats`.
114
+ const toolkitResult = statsResult(buildHealthStats(data));
115
+ // Only surface fields the server actually returned — the
116
+ // anonymous tier and Joomla omit different subsets, and the
117
+ // output schema now marks all platform-/tier-variable fields
118
+ // optional (Wave 7 cross-platform parity).
119
+ return withSiteMeta(structuredResult(toolkitResult, {
120
+ plugin_version: data.plugin_version,
121
+ yootheme_loaded: data.yootheme_loaded,
122
+ ...(data.yootheme_version !== undefined ? { yootheme_version: data.yootheme_version } : {}),
123
+ ...(data.wp_version !== undefined ? { wp_version: data.wp_version } : {}),
124
+ ...(data.cms !== undefined ? { cms: data.cms } : {}),
125
+ ...(data.cms_version !== undefined ? { cms_version: data.cms_version } : {}),
126
+ ...(data.php_version !== undefined ? { php_version: data.php_version } : {}),
127
+ ...(data.storage_type !== undefined ? { storage_type: data.storage_type } : {}),
128
+ ...(data.storage_target !== undefined ? { storage_target: data.storage_target } : {}),
129
+ ...(data.available_endpoints !== undefined ? { available_endpoints: data.available_endpoints } : {}),
130
+ ...(data.site_url !== undefined ? { site_url: data.site_url } : {}),
131
+ ...(data.home_url !== undefined ? { home_url: data.home_url } : {}),
132
+ }), site);
133
+ }
134
+ catch (e) {
135
+ return withSiteMeta(errorResult({
136
+ error: e,
137
+ context: { site_id: site.id },
138
+ hint: 'Verify YTB_MCP_SITE_URL points at a WordPress or Joomla site with the ' +
139
+ 'yt-builder-mcp plugin active. Try opening ' +
140
+ '<site_url>/wp-json/yt-builder-mcp/v1/health (WP) or ' +
141
+ '<site_url>/api/index.php/v1/yt-builder-mcp/health (Joomla) in a browser.',
142
+ }), site);
143
+ }
144
+ },
145
+ }),
146
+ defineTool({
147
+ name: 'yootheme_builder_diagnose',
148
+ description: 'Full diagnostic: /health + authenticated /etag probe. Returns site_url, ' +
149
+ 'home_url, plugin reachability, Bearer validity in one call. First call when ' +
150
+ 'you need to know where the site lives. For per-template URLs see pages_list. ' +
151
+ 'Operates on the default site unless site_id is provided.',
152
+ inputSchema: {
153
+ site_id: SITE_ID_SCHEMA,
154
+ },
155
+ outputSchema: DIAGNOSE_OUTPUT_SCHEMA,
156
+ annotations: readOnly('Diagnose Connection'),
157
+ handler: async ({ site_id }) => {
158
+ const r = await resolveSiteOrError(pool, site_id);
159
+ if (!r.ok)
160
+ return r.error;
161
+ const { client: siteClient, site } = r;
162
+ const checks = { plugin_reachable: false };
163
+ try {
164
+ const health = await siteClient.get('/health');
165
+ checks.plugin_reachable = true;
166
+ checks.plugin_version = health.plugin_version;
167
+ checks.yootheme_loaded = health.yootheme_loaded;
168
+ checks.yootheme_version = health.yootheme_version;
169
+ checks.endpoint_count = (health.available_endpoints ?? []).length;
170
+ // 1.0.1 — mirror health URLs into diagnose output so an
171
+ // agent gets URL info AND bearer-status in one call.
172
+ if (health.site_url !== undefined) {
173
+ checks.site_url = health.site_url;
174
+ }
175
+ if (health.home_url !== undefined) {
176
+ checks.home_url = health.home_url;
177
+ }
178
+ }
179
+ catch (e) {
180
+ checks.plugin_reachable = false;
181
+ checks.plugin_error = e instanceof Error ? e.message : String(e);
182
+ // Plugin-unreachable path stays on jsonResult so the LLM
183
+ // sees the structured error hint inline (detailResult would
184
+ // hide the actionable "verify YTB_MCP_SITE_URL" hint inside
185
+ // a sub-group). isError=true preserves SDK semantics.
186
+ return withSiteMeta(jsonResult({
187
+ ...checks,
188
+ hint: 'Plugin not reachable. Verify YTB_MCP_SITE_URL and that the ' +
189
+ 'yt-builder-mcp plugin is active on this site.',
190
+ }, { isError: true }), site);
191
+ }
192
+ try {
193
+ await siteClient.get('/etag');
194
+ checks.bearer_valid = true;
195
+ }
196
+ catch (e) {
197
+ checks.bearer_valid = false;
198
+ if (e instanceof RestError) {
199
+ checks.bearer_error = `HTTP ${String(e.status)}: ${e.message}`;
200
+ }
201
+ else {
202
+ checks.bearer_error = e instanceof Error ? e.message : String(e);
203
+ }
204
+ return withSiteMeta(jsonResult({
205
+ ...checks,
206
+ hint: 'Bearer key rejected. Regenerate the key in wp-admin → Tools → ' +
207
+ '"YT Builder MCP" → Bearer Keys (or Joomla Components → YT Builder MCP) ' +
208
+ 'and re-run `yt-builder-mcp setup`.',
209
+ }, { isError: true }), site);
210
+ }
211
+ const toolkitResult = detailResult(buildDiagnoseDetail(checks));
212
+ return withSiteMeta(structuredResult(toolkitResult, {
213
+ ...checks,
214
+ summary: 'OK — plugin reachable and Bearer key accepted.',
215
+ }), site);
216
+ },
217
+ }),
218
+ ];
219
+ }
220
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Tool aggregator — collects all domain tools into a single list.
3
+ * The MCP server iterates this list at startup to register handlers
4
+ * with `@modelcontextprotocol/sdk`.
5
+ *
6
+ * @license MIT
7
+ */
8
+ import type { ClientPool } from '../sites/client-pool.js';
9
+ import type { McpServerWithElicitation } from './elicitation.js';
10
+ import type { AnyToolDefinition } from './tool-builder.js';
11
+ export interface BuildAllToolsOptions {
12
+ /**
13
+ * Optional MCP elicitation capability — see
14
+ * `src/tools/elicitation.ts` for the adapter. When supplied,
15
+ * destructive + ambiguity-resolution tools prompt the user via the
16
+ * elicitation channel; when omitted, they fall back to the
17
+ * preview-then-retry / `ambiguityFallbackError` flow.
18
+ */
19
+ readonly elicitation?: McpServerWithElicitation;
20
+ }
21
+ /**
22
+ * W6 — pool-based registration entrypoint. Pre-W6 this took a bare
23
+ * `RestClient`; W6 introduces the {@link ClientPool} as the single
24
+ * source of REST clients (multi-site). Each domain builder now
25
+ * resolves the pool per-handler via `resolveSiteOrError` and wraps
26
+ * every result in `withSiteMeta` (Commit 3 of the W6 trio).
27
+ */
28
+ export declare function buildAllTools(pool: ClientPool, options?: BuildAllToolsOptions): readonly AnyToolDefinition[];
29
+ export type { AnyToolDefinition, ToolDefinition } from './tool-builder.js';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAMjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,oBAAyB,GACnC,SAAS,iBAAiB,EAAE,CAgB9B;AAED,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Tool aggregator — collects all domain tools into a single list.
3
+ * The MCP server iterates this list at startup to register handlers
4
+ * with `@modelcontextprotocol/sdk`.
5
+ *
6
+ * @license MIT
7
+ */
8
+ import { buildSitesTools } from '../sites/tools/index.js';
9
+ import { buildElementsTools } from './elements/index.js';
10
+ import { buildHealthTools } from './health.js';
11
+ import { buildInspectionTools } from './inspection.js';
12
+ import { buildMultiItemsTools } from './multi-items/index.js';
13
+ import { buildPagesTools } from './pages.js';
14
+ import { buildSourcesTools } from './sources/index.js';
15
+ /**
16
+ * W6 — pool-based registration entrypoint. Pre-W6 this took a bare
17
+ * `RestClient`; W6 introduces the {@link ClientPool} as the single
18
+ * source of REST clients (multi-site). Each domain builder now
19
+ * resolves the pool per-handler via `resolveSiteOrError` and wraps
20
+ * every result in `withSiteMeta` (Commit 3 of the W6 trio).
21
+ */
22
+ export function buildAllTools(pool, options = {}) {
23
+ const deps = options.elicitation !== undefined ? { elicitation: options.elicitation } : {};
24
+ return [
25
+ ...buildHealthTools(pool),
26
+ ...buildPagesTools(pool),
27
+ ...buildElementsTools(pool, deps),
28
+ ...buildSourcesTools(pool, deps),
29
+ ...buildMultiItemsTools(pool),
30
+ ...buildInspectionTools(pool),
31
+ // W7 — Multi-Site registry tools (L1). The aggregator pulls
32
+ // `pool.registry` internally (W12-R1.3); the sites_list handler
33
+ // reads the registry without ever resolving a bearer or hitting
34
+ // the network, while sites_test threads the pool through to
35
+ // probe one specific site.
36
+ ...buildSitesTools(pool),
37
+ ];
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CACzB,IAAgB,EAChB,UAAgC,EAAE;IAElC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO;QACH,GAAG,gBAAgB,CAAC,IAAI,CAAC;QACzB,GAAG,eAAe,CAAC,IAAI,CAAC;QACxB,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;QAChC,GAAG,oBAAoB,CAAC,IAAI,CAAC;QAC7B,GAAG,oBAAoB,CAAC,IAAI,CAAC;QAC7B,4DAA4D;QAC5D,gEAAgE;QAChE,gEAAgE;QAChE,4DAA4D;QAC5D,2BAA2B;QAC3B,GAAG,eAAe,CAAC,IAAI,CAAC;KAC3B,CAAC;AACN,CAAC"}
@@ -0,0 +1,14 @@
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 type { ClientPool } from '../sites/client-pool.js';
12
+ import { type AnyToolDefinition } from './tool-builder.js';
13
+ export declare function buildInspectionTools(pool: ClientPool): readonly AnyToolDefinition[];
14
+ //# sourceMappingURL=inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1D,OAAO,EAMH,KAAK,iBAAiB,EACzB,MAAM,mBAAmB,CAAC;AA2B3B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,iBAAiB,EAAE,CAwJnF"}
@@ -0,0 +1,170 @@
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, } 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
+ });
24
+ const TYPE_SCHEMA_OUTPUT_SCHEMA = z.object({
25
+ name: z.string(),
26
+ label: z.string().optional(),
27
+ origin: z.string().optional(),
28
+ // The REST endpoint returns `fields` as a list of {name,type,label?}
29
+ // field descriptors — each `name` is a valid prop key for element_add /
30
+ // _update_settings.
31
+ fields: z.array(z.record(z.string(), z.unknown())).optional(),
32
+ field_count: z.number(),
33
+ });
34
+ export function buildInspectionTools(pool) {
35
+ return [
36
+ defineTool({
37
+ name: 'yootheme_builder_element_types_list',
38
+ description: 'List element types registered on this site (built-ins + ' +
39
+ 'YOOessentials/uEssentials extras). Names feed `element_type` of ' +
40
+ 'element_add. Pass `fields[]` to narrow each row. ' +
41
+ 'Operates on the default site unless site_id is provided.',
42
+ inputSchema: {
43
+ site_id: SITE_ID_SCHEMA,
44
+ fields: FIELDS,
45
+ },
46
+ outputSchema: TYPES_LIST_OUTPUT_SCHEMA,
47
+ annotations: readOnly('List Element Types'),
48
+ handler: async ({ site_id, fields }) => {
49
+ const r = await resolveSiteOrError(pool, site_id);
50
+ if (!r.ok)
51
+ return r.error;
52
+ const { client: siteClient, site } = r;
53
+ try {
54
+ const data = await siteClient.get('/element-types');
55
+ const flat = flattenTypesPayload(data);
56
+ const mapped = flat.map(mapTypeRow);
57
+ const mappedRecords = mapped;
58
+ const items = projectFields(mappedRecords, fields, DEFAULT_FIELDS_TYPES_LIST);
59
+ const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_TYPES_LIST);
60
+ const toolkitResult = tableResult(mappedRecords, {
61
+ columns: [...TYPES_TABLE_COLUMNS],
62
+ compactColumns: [...TYPES_COMPACT_COLUMNS],
63
+ header: (count) => `${String(count)} element types`,
64
+ footer: 'Use yootheme_builder_element_type_get_schema <name> for fields.',
65
+ });
66
+ return withSiteMeta(structuredResult(toolkitResult, {
67
+ items,
68
+ total: items.length,
69
+ ...(echo !== undefined ? { projected_fields: [...echo] } : {}),
70
+ }), site);
71
+ }
72
+ catch (e) {
73
+ return withSiteMeta(errorResult({
74
+ error: e,
75
+ context: { site_id: site.id },
76
+ hint: 'Run yootheme_builder_diagnose to verify auth.',
77
+ }), site);
78
+ }
79
+ },
80
+ }),
81
+ defineTool({
82
+ name: 'yootheme_builder_element_type_get_schema',
83
+ description: '**Call before every `element_add` / `_update_settings`** — unknown ' +
84
+ 'prop keys are silently dropped server-side, so guessing fails ' +
85
+ 'quietly. Returns `{name,type,label?}` field descriptors. Use ' +
86
+ '`element_type`; `type_name` is DEPRECATED. ' +
87
+ 'Operates on the default site unless site_id is provided.',
88
+ inputSchema: {
89
+ site_id: SITE_ID_SCHEMA,
90
+ // 1.0.1 cross-tool parameter naming alignment: every other
91
+ // tool in this domain uses `element_type` (element_add,
92
+ // element_update_settings, element_list rows). This tool
93
+ // originally shipped with `type_name`; we accept BOTH for
94
+ // backward-compatibility but the canonical key going
95
+ // forward is `element_type`.
96
+ element_type: z
97
+ .string()
98
+ .min(1)
99
+ .optional()
100
+ .describe('Element type name (e.g. "headline", "text", "grid"). Use ' +
101
+ 'yootheme_builder_element_types_list to discover.'),
102
+ type_name: z
103
+ .string()
104
+ .min(1)
105
+ .optional()
106
+ .describe('DEPRECATED alias of `element_type` — use `element_type` ' +
107
+ 'instead. Kept for 1.0.x backward-compatibility; will be ' +
108
+ 'removed in a future major.'),
109
+ },
110
+ outputSchema: TYPE_SCHEMA_OUTPUT_SCHEMA,
111
+ annotations: readOnly('Get Element Type Schema'),
112
+ handler: async (args) => {
113
+ // Accept either `element_type` (canonical) or `type_name`
114
+ // (deprecated alias). Empty/missing → 400-shaped error below.
115
+ const typeNameInput = typeof args.element_type === 'string' && args.element_type !== ''
116
+ ? args.element_type
117
+ : typeof args.type_name === 'string'
118
+ ? args.type_name
119
+ : '';
120
+ if (typeNameInput === '') {
121
+ return errorResult({
122
+ error: new Error('`element_type` is required (alias `type_name` also accepted).'),
123
+ context: { site_id: typeof args.site_id === 'string' ? args.site_id : null },
124
+ hint: 'Pass `element_type` (e.g. "headline"). Use ' +
125
+ 'yootheme_builder_element_types_list to discover valid values.',
126
+ });
127
+ }
128
+ const type_name = typeNameInput;
129
+ const r = await resolveSiteOrError(pool, typeof args.site_id === 'string' ? args.site_id : undefined);
130
+ if (!r.ok)
131
+ return r.error;
132
+ const { client: siteClient, site } = r;
133
+ try {
134
+ const data = await siteClient.get(`/element-types/${encodeURIComponent(type_name)}/schema`);
135
+ // The REST endpoint nests the type schema under `schema`:
136
+ // {type_name, schema:{name,label,origin,has_children,fields:[…]}}.
137
+ // Fall back to the top-level object for older backends.
138
+ const schema = data.schema !== null && typeof data.schema === 'object'
139
+ ? data.schema
140
+ : data;
141
+ const name = typeof schema.name === 'string' ? schema.name : type_name;
142
+ const label = typeof schema.label === 'string' ? schema.label : undefined;
143
+ const origin = typeof schema.origin === 'string' ? schema.origin : undefined;
144
+ // `fields` is a list of {name,type,label?} field descriptors.
145
+ const fields = Array.isArray(schema.fields)
146
+ ? schema.fields
147
+ : undefined;
148
+ const fieldCount = fields !== undefined ? fields.length : 0;
149
+ const toolkitResult = detailResult(buildTypeSchemaDetail({ name, label, origin, fields }));
150
+ return withSiteMeta(structuredResult(toolkitResult, {
151
+ name,
152
+ ...(label !== undefined ? { label } : {}),
153
+ ...(origin !== undefined ? { origin } : {}),
154
+ ...(fields !== undefined ? { fields } : {}),
155
+ field_count: fieldCount,
156
+ }), site);
157
+ }
158
+ catch (e) {
159
+ return withSiteMeta(errorResult({
160
+ error: e,
161
+ context: { element_type: type_name, site_id: site.id },
162
+ hint: 'Verify element_type via yootheme_builder_element_types_list — names ' +
163
+ 'are case-sensitive.',
164
+ }), site);
165
+ }
166
+ },
167
+ }),
168
+ ];
169
+ }
170
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../src/tools/inspection.ts"],"names":[],"mappings":"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"}
@@ -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"}