@wootsup/yt-builder-mcp 1.11.0 → 2.0.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 (853) hide show
  1. package/README.md +131 -33
  2. package/bin/node-floor.d.ts +28 -0
  3. package/bin/node-floor.js +123 -0
  4. package/bin/yt-builder-mcp.js +52 -11
  5. package/dist/auth.d.ts +3 -121
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +40 -170
  8. package/dist/auth.js.map +1 -1
  9. package/dist/catalog/build-catalog.d.ts +4 -49
  10. package/dist/catalog/build-catalog.d.ts.map +1 -1
  11. package/dist/catalog/build-catalog.js +15 -126
  12. package/dist/catalog/build-catalog.js.map +1 -1
  13. package/dist/catalog/json-schema.d.ts +3 -0
  14. package/dist/catalog/json-schema.d.ts.map +1 -0
  15. package/dist/catalog/json-schema.js +68 -0
  16. package/dist/catalog/json-schema.js.map +1 -0
  17. package/dist/catalog/output-shapes.d.ts +6 -0
  18. package/dist/catalog/output-shapes.d.ts.map +1 -0
  19. package/dist/catalog/output-shapes.js +89 -0
  20. package/dist/catalog/output-shapes.js.map +1 -0
  21. package/dist/catalog/tool-catalog-markdown.d.ts +1 -37
  22. package/dist/catalog/tool-catalog-markdown.d.ts.map +1 -1
  23. package/dist/catalog/tool-catalog-markdown.js +9 -41
  24. package/dist/catalog/tool-catalog-markdown.js.map +1 -1
  25. package/dist/cli/doctor-command.d.ts +2 -7
  26. package/dist/cli/doctor-command.d.ts.map +1 -1
  27. package/dist/cli/doctor-command.js +33 -54
  28. package/dist/cli/doctor-command.js.map +1 -1
  29. package/dist/cli/invocation-decision.d.ts +4 -52
  30. package/dist/cli/invocation-decision.d.ts.map +1 -1
  31. package/dist/cli/invocation-decision.js +45 -54
  32. package/dist/cli/invocation-decision.js.map +1 -1
  33. package/dist/client.d.ts +3 -107
  34. package/dist/client.d.ts.map +1 -1
  35. package/dist/client.js +34 -115
  36. package/dist/client.js.map +1 -1
  37. package/dist/clients/claude-code.d.ts +0 -15
  38. package/dist/clients/claude-code.d.ts.map +1 -1
  39. package/dist/clients/claude-code.js +0 -22
  40. package/dist/clients/claude-code.js.map +1 -1
  41. package/dist/clients/claude-desktop.d.ts +0 -16
  42. package/dist/clients/claude-desktop.d.ts.map +1 -1
  43. package/dist/clients/claude-desktop.js +0 -18
  44. package/dist/clients/claude-desktop.js.map +1 -1
  45. package/dist/clients/cline.d.ts +0 -23
  46. package/dist/clients/cline.d.ts.map +1 -1
  47. package/dist/clients/cline.js +0 -33
  48. package/dist/clients/cline.js.map +1 -1
  49. package/dist/clients/codex-cli.d.ts +0 -39
  50. package/dist/clients/codex-cli.d.ts.map +1 -1
  51. package/dist/clients/codex-cli.js +0 -137
  52. package/dist/clients/codex-cli.js.map +1 -1
  53. package/dist/clients/continue.d.ts +0 -10
  54. package/dist/clients/continue.d.ts.map +1 -1
  55. package/dist/clients/continue.js +0 -26
  56. package/dist/clients/continue.js.map +1 -1
  57. package/dist/clients/cursor.d.ts +0 -9
  58. package/dist/clients/cursor.d.ts.map +1 -1
  59. package/dist/clients/cursor.js +0 -11
  60. package/dist/clients/cursor.js.map +1 -1
  61. package/dist/clients/gemini-cli.d.ts +0 -15
  62. package/dist/clients/gemini-cli.d.ts.map +1 -1
  63. package/dist/clients/gemini-cli.js +0 -17
  64. package/dist/clients/gemini-cli.js.map +1 -1
  65. package/dist/clients/home.d.ts +0 -12
  66. package/dist/clients/home.d.ts.map +1 -1
  67. package/dist/clients/home.js +0 -12
  68. package/dist/clients/home.js.map +1 -1
  69. package/dist/clients/index.d.ts +0 -150
  70. package/dist/clients/index.d.ts.map +1 -1
  71. package/dist/clients/index.js +0 -112
  72. package/dist/clients/index.js.map +1 -1
  73. package/dist/clients/roo-code.d.ts +0 -20
  74. package/dist/clients/roo-code.d.ts.map +1 -1
  75. package/dist/clients/roo-code.js +0 -22
  76. package/dist/clients/roo-code.js.map +1 -1
  77. package/dist/clients/zed.d.ts +0 -9
  78. package/dist/clients/zed.d.ts.map +1 -1
  79. package/dist/clients/zed.js +0 -18
  80. package/dist/clients/zed.js.map +1 -1
  81. package/dist/compat-floor.d.ts +35 -0
  82. package/dist/compat-floor.d.ts.map +1 -0
  83. package/dist/compat-floor.js +84 -0
  84. package/dist/compat-floor.js.map +1 -0
  85. package/dist/compat-probe.d.ts +6 -0
  86. package/dist/compat-probe.d.ts.map +1 -0
  87. package/dist/compat-probe.js +20 -0
  88. package/dist/compat-probe.js.map +1 -0
  89. package/dist/diagnostics/ca-reexec.d.ts +0 -30
  90. package/dist/diagnostics/ca-reexec.d.ts.map +1 -1
  91. package/dist/diagnostics/ca-reexec.js +0 -62
  92. package/dist/diagnostics/ca-reexec.js.map +1 -1
  93. package/dist/diagnostics/ca-trust.d.ts +0 -22
  94. package/dist/diagnostics/ca-trust.d.ts.map +1 -1
  95. package/dist/diagnostics/ca-trust.js +3 -42
  96. package/dist/diagnostics/ca-trust.js.map +1 -1
  97. package/dist/diagnostics/diagnose-network-error.d.ts +1 -38
  98. package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -1
  99. package/dist/diagnostics/diagnose-network-error.js +26 -37
  100. package/dist/diagnostics/diagnose-network-error.js.map +1 -1
  101. package/dist/diagnostics/doctor.d.ts +13 -65
  102. package/dist/diagnostics/doctor.d.ts.map +1 -1
  103. package/dist/diagnostics/doctor.js +46 -70
  104. package/dist/diagnostics/doctor.js.map +1 -1
  105. package/dist/diagnostics/startup-self-probe.d.ts +3 -25
  106. package/dist/diagnostics/startup-self-probe.d.ts.map +1 -1
  107. package/dist/diagnostics/startup-self-probe.js +11 -48
  108. package/dist/diagnostics/startup-self-probe.js.map +1 -1
  109. package/dist/errors/hints.d.ts +0 -44
  110. package/dist/errors/hints.d.ts.map +1 -1
  111. package/dist/errors/hints.js +0 -32
  112. package/dist/errors/hints.js.map +1 -1
  113. package/dist/errors/mask.d.ts +0 -31
  114. package/dist/errors/mask.d.ts.map +1 -1
  115. package/dist/errors/mask.js +0 -32
  116. package/dist/errors/mask.js.map +1 -1
  117. package/dist/errors/redact-credentials.d.ts +2 -0
  118. package/dist/errors/redact-credentials.d.ts.map +1 -0
  119. package/dist/errors/redact-credentials.js +13 -0
  120. package/dist/errors/redact-credentials.js.map +1 -0
  121. package/dist/errors/sanitize.d.ts +0 -29
  122. package/dist/errors/sanitize.d.ts.map +1 -1
  123. package/dist/errors/sanitize.js +0 -40
  124. package/dist/errors/sanitize.js.map +1 -1
  125. package/dist/errors.d.ts +6 -17
  126. package/dist/errors.d.ts.map +1 -1
  127. package/dist/errors.js +16 -21
  128. package/dist/errors.js.map +1 -1
  129. package/dist/gateway/advanced-read-tool.d.ts +0 -32
  130. package/dist/gateway/advanced-read-tool.d.ts.map +1 -1
  131. package/dist/gateway/advanced-read-tool.js +43 -111
  132. package/dist/gateway/advanced-read-tool.js.map +1 -1
  133. package/dist/gateway/advanced-tool/discovery.d.ts +1 -12
  134. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -1
  135. package/dist/gateway/advanced-tool/discovery.js +18 -16
  136. package/dist/gateway/advanced-tool/discovery.js.map +1 -1
  137. package/dist/gateway/advanced-tool/domains.d.ts +7 -66
  138. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  139. package/dist/gateway/advanced-tool/domains.js +36 -80
  140. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  141. package/dist/gateway/advanced-tool/execute.d.ts +0 -25
  142. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -1
  143. package/dist/gateway/advanced-tool/execute.js +13 -49
  144. package/dist/gateway/advanced-tool/execute.js.map +1 -1
  145. package/dist/gateway/advanced-tool/index.d.ts +1 -32
  146. package/dist/gateway/advanced-tool/index.d.ts.map +1 -1
  147. package/dist/gateway/advanced-tool/index.js +1 -35
  148. package/dist/gateway/advanced-tool/index.js.map +1 -1
  149. package/dist/gateway/advanced-tool/register.d.ts +0 -14
  150. package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
  151. package/dist/gateway/advanced-tool/register.js +22 -58
  152. package/dist/gateway/advanced-tool/register.js.map +1 -1
  153. package/dist/gateway/advanced-tool.d.ts +0 -11
  154. package/dist/gateway/advanced-tool.d.ts.map +1 -1
  155. package/dist/gateway/advanced-tool.js +0 -11
  156. package/dist/gateway/advanced-tool.js.map +1 -1
  157. package/dist/gateway/capturing-server.d.ts +3 -88
  158. package/dist/gateway/capturing-server.d.ts.map +1 -1
  159. package/dist/gateway/capturing-server.js +0 -77
  160. package/dist/gateway/capturing-server.js.map +1 -1
  161. package/dist/gateway/essentials.d.ts +1 -63
  162. package/dist/gateway/essentials.d.ts.map +1 -1
  163. package/dist/gateway/essentials.js +10 -174
  164. package/dist/gateway/essentials.js.map +1 -1
  165. package/dist/gateway/test-support.d.ts +0 -28
  166. package/dist/gateway/test-support.d.ts.map +1 -1
  167. package/dist/gateway/test-support.js +0 -29
  168. package/dist/gateway/test-support.js.map +1 -1
  169. package/dist/health-response.d.ts +2 -0
  170. package/dist/health-response.d.ts.map +1 -0
  171. package/dist/health-response.js +7 -0
  172. package/dist/health-response.js.map +1 -0
  173. package/dist/icon-data.js +0 -3
  174. package/dist/icon-data.js.map +1 -1
  175. package/dist/index.d.ts +7 -23
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +46 -130
  178. package/dist/index.js.map +1 -1
  179. package/dist/install-skill.d.ts +0 -44
  180. package/dist/install-skill.d.ts.map +1 -1
  181. package/dist/install-skill.js +5 -46
  182. package/dist/install-skill.js.map +1 -1
  183. package/dist/net/extra-headers.d.ts +0 -58
  184. package/dist/net/extra-headers.d.ts.map +1 -1
  185. package/dist/net/extra-headers.js +0 -67
  186. package/dist/net/extra-headers.js.map +1 -1
  187. package/dist/net/internal-host.d.ts +0 -31
  188. package/dist/net/internal-host.d.ts.map +1 -1
  189. package/dist/net/internal-host.js +7 -65
  190. package/dist/net/internal-host.js.map +1 -1
  191. package/dist/net/proxy-dispatcher.d.ts +0 -37
  192. package/dist/net/proxy-dispatcher.d.ts.map +1 -1
  193. package/dist/net/proxy-dispatcher.js +0 -40
  194. package/dist/net/proxy-dispatcher.js.map +1 -1
  195. package/dist/net/public-fetch.d.ts +53 -0
  196. package/dist/net/public-fetch.d.ts.map +1 -0
  197. package/dist/net/public-fetch.js +143 -0
  198. package/dist/net/public-fetch.js.map +1 -0
  199. package/dist/net/public-page-report.d.ts +26 -0
  200. package/dist/net/public-page-report.d.ts.map +1 -0
  201. package/dist/net/public-page-report.js +145 -0
  202. package/dist/net/public-page-report.js.map +1 -0
  203. package/dist/net/redirect-safe-fetch.d.ts +14 -0
  204. package/dist/net/redirect-safe-fetch.d.ts.map +1 -0
  205. package/dist/net/redirect-safe-fetch.js +61 -0
  206. package/dist/net/redirect-safe-fetch.js.map +1 -0
  207. package/dist/net/session-recovery-fetch.d.ts +7 -0
  208. package/dist/net/session-recovery-fetch.d.ts.map +1 -0
  209. package/dist/net/session-recovery-fetch.js +139 -0
  210. package/dist/net/session-recovery-fetch.js.map +1 -0
  211. package/dist/net/site-basic-auth.d.ts +1 -59
  212. package/dist/net/site-basic-auth.d.ts.map +1 -1
  213. package/dist/net/site-basic-auth.js +5 -94
  214. package/dist/net/site-basic-auth.js.map +1 -1
  215. package/dist/package-version.d.ts +2 -0
  216. package/dist/package-version.d.ts.map +1 -0
  217. package/dist/package-version.js +15 -0
  218. package/dist/package-version.js.map +1 -0
  219. package/dist/platform/detect.d.ts +0 -54
  220. package/dist/platform/detect.d.ts.map +1 -1
  221. package/dist/platform/detect.js +0 -53
  222. package/dist/platform/detect.js.map +1 -1
  223. package/dist/platform/index.d.ts +0 -100
  224. package/dist/platform/index.d.ts.map +1 -1
  225. package/dist/platform/index.js +0 -106
  226. package/dist/platform/index.js.map +1 -1
  227. package/dist/platform/joomla.d.ts +0 -35
  228. package/dist/platform/joomla.d.ts.map +1 -1
  229. package/dist/platform/joomla.js +0 -35
  230. package/dist/platform/joomla.js.map +1 -1
  231. package/dist/proxy/bridge.d.ts +36 -76
  232. package/dist/proxy/bridge.d.ts.map +1 -1
  233. package/dist/proxy/bridge.js +443 -136
  234. package/dist/proxy/bridge.js.map +1 -1
  235. package/dist/proxy/confirm-elicitation.d.ts +22 -0
  236. package/dist/proxy/confirm-elicitation.d.ts.map +1 -0
  237. package/dist/proxy/confirm-elicitation.js +170 -0
  238. package/dist/proxy/confirm-elicitation.js.map +1 -0
  239. package/dist/proxy/confirm-question-contract.d.ts +6 -0
  240. package/dist/proxy/confirm-question-contract.d.ts.map +1 -0
  241. package/dist/proxy/confirm-question-contract.js +9 -0
  242. package/dist/proxy/confirm-question-contract.js.map +1 -0
  243. package/dist/proxy/confirm-question.d.ts +2 -0
  244. package/dist/proxy/confirm-question.d.ts.map +1 -0
  245. package/dist/proxy/confirm-question.js +125 -0
  246. package/dist/proxy/confirm-question.js.map +1 -0
  247. package/dist/proxy/instructions.d.ts +4 -0
  248. package/dist/proxy/instructions.d.ts.map +1 -0
  249. package/dist/proxy/instructions.js +12 -0
  250. package/dist/proxy/instructions.js.map +1 -0
  251. package/dist/proxy/mode.d.ts +14 -9
  252. package/dist/proxy/mode.d.ts.map +1 -1
  253. package/dist/proxy/mode.js +58 -34
  254. package/dist/proxy/mode.js.map +1 -1
  255. package/dist/proxy/multi-site.d.ts +42 -0
  256. package/dist/proxy/multi-site.d.ts.map +1 -0
  257. package/dist/proxy/multi-site.js +134 -0
  258. package/dist/proxy/multi-site.js.map +1 -0
  259. package/dist/proxy/request-headers.d.ts +9 -0
  260. package/dist/proxy/request-headers.d.ts.map +1 -0
  261. package/dist/proxy/request-headers.js +17 -0
  262. package/dist/proxy/request-headers.js.map +1 -0
  263. package/dist/proxy/shadow-tools.d.ts +9 -0
  264. package/dist/proxy/shadow-tools.d.ts.map +1 -0
  265. package/dist/proxy/shadow-tools.js +42 -0
  266. package/dist/proxy/shadow-tools.js.map +1 -0
  267. package/dist/proxy/tools-list-cap.d.ts +7 -0
  268. package/dist/proxy/tools-list-cap.d.ts.map +1 -0
  269. package/dist/proxy/tools-list-cap.js +14 -0
  270. package/dist/proxy/tools-list-cap.js.map +1 -0
  271. package/dist/proxy/transport-uncertainty.d.ts +2 -0
  272. package/dist/proxy/transport-uncertainty.d.ts.map +1 -0
  273. package/dist/proxy/transport-uncertainty.js +8 -0
  274. package/dist/proxy/transport-uncertainty.js.map +1 -0
  275. package/dist/proxy/upstream-error.d.ts +7 -0
  276. package/dist/proxy/upstream-error.d.ts.map +1 -0
  277. package/dist/proxy/upstream-error.js +35 -0
  278. package/dist/proxy/upstream-error.js.map +1 -0
  279. package/dist/proxy/wire-dialect.d.ts +5 -0
  280. package/dist/proxy/wire-dialect.d.ts.map +1 -0
  281. package/dist/proxy/wire-dialect.js +33 -0
  282. package/dist/proxy/wire-dialect.js.map +1 -0
  283. package/dist/server.d.ts +14 -82
  284. package/dist/server.d.ts.map +1 -1
  285. package/dist/server.js +107 -203
  286. package/dist/server.js.map +1 -1
  287. package/dist/setup/banner-color.d.ts +13 -0
  288. package/dist/setup/banner-color.d.ts.map +1 -0
  289. package/dist/setup/banner-color.js +93 -0
  290. package/dist/setup/banner-color.js.map +1 -0
  291. package/dist/setup/banner.d.ts +22 -0
  292. package/dist/setup/banner.d.ts.map +1 -0
  293. package/dist/setup/banner.js +119 -0
  294. package/dist/setup/banner.js.map +1 -0
  295. package/dist/setup/ca-recovery.d.ts +20 -0
  296. package/dist/setup/ca-recovery.d.ts.map +1 -0
  297. package/dist/setup/ca-recovery.js +92 -0
  298. package/dist/setup/ca-recovery.js.map +1 -0
  299. package/dist/setup/closing.d.ts +15 -0
  300. package/dist/setup/closing.d.ts.map +1 -0
  301. package/dist/setup/closing.js +43 -0
  302. package/dist/setup/closing.js.map +1 -0
  303. package/dist/setup/corporate-ca.d.ts +16 -0
  304. package/dist/setup/corporate-ca.d.ts.map +1 -0
  305. package/dist/setup/corporate-ca.js +32 -0
  306. package/dist/setup/corporate-ca.js.map +1 -0
  307. package/dist/setup/host-platform.d.ts +8 -0
  308. package/dist/setup/host-platform.d.ts.map +1 -0
  309. package/dist/setup/host-platform.js +21 -0
  310. package/dist/setup/host-platform.js.map +1 -0
  311. package/dist/setup/install-configs.d.ts +18 -0
  312. package/dist/setup/install-configs.d.ts.map +1 -0
  313. package/dist/setup/install-configs.js +70 -0
  314. package/dist/setup/install-configs.js.map +1 -0
  315. package/dist/setup/multi-site-loop.d.ts +14 -0
  316. package/dist/setup/multi-site-loop.d.ts.map +1 -0
  317. package/dist/setup/multi-site-loop.js +20 -0
  318. package/dist/setup/multi-site-loop.js.map +1 -0
  319. package/dist/setup/phases.d.ts +18 -0
  320. package/dist/setup/phases.d.ts.map +1 -0
  321. package/dist/setup/phases.js +55 -0
  322. package/dist/setup/phases.js.map +1 -0
  323. package/dist/setup/registry-remedy.d.ts +12 -0
  324. package/dist/setup/registry-remedy.d.ts.map +1 -0
  325. package/dist/setup/registry-remedy.js +37 -0
  326. package/dist/setup/registry-remedy.js.map +1 -0
  327. package/dist/setup/resume.d.ts +28 -0
  328. package/dist/setup/resume.d.ts.map +1 -0
  329. package/dist/setup/resume.js +99 -0
  330. package/dist/setup/resume.js.map +1 -0
  331. package/dist/setup-ca-env.d.ts +0 -30
  332. package/dist/setup-ca-env.d.ts.map +1 -1
  333. package/dist/setup-ca-env.js +0 -28
  334. package/dist/setup-ca-env.js.map +1 -1
  335. package/dist/setup-ca-reprobe.d.ts +0 -25
  336. package/dist/setup-ca-reprobe.d.ts.map +1 -1
  337. package/dist/setup-ca-reprobe.js +0 -34
  338. package/dist/setup-ca-reprobe.js.map +1 -1
  339. package/dist/setup-cli-confirm.d.ts +0 -34
  340. package/dist/setup-cli-confirm.d.ts.map +1 -1
  341. package/dist/setup-cli-confirm.js +0 -36
  342. package/dist/setup-cli-confirm.js.map +1 -1
  343. package/dist/setup-cli.d.ts +6 -167
  344. package/dist/setup-cli.d.ts.map +1 -1
  345. package/dist/setup-cli.js +161 -173
  346. package/dist/setup-cli.js.map +1 -1
  347. package/dist/setup-npx-spec.d.ts +0 -36
  348. package/dist/setup-npx-spec.d.ts.map +1 -1
  349. package/dist/setup-npx-spec.js +0 -38
  350. package/dist/setup-npx-spec.js.map +1 -1
  351. package/dist/setup-prompts.d.ts +5 -70
  352. package/dist/setup-prompts.d.ts.map +1 -1
  353. package/dist/setup-prompts.js +67 -107
  354. package/dist/setup-prompts.js.map +1 -1
  355. package/dist/setup-token.d.ts +0 -34
  356. package/dist/setup-token.d.ts.map +1 -1
  357. package/dist/setup-token.js +0 -40
  358. package/dist/setup-token.js.map +1 -1
  359. package/dist/setup-wizard-defaults.d.ts +0 -36
  360. package/dist/setup-wizard-defaults.d.ts.map +1 -1
  361. package/dist/setup-wizard-defaults.js +0 -75
  362. package/dist/setup-wizard-defaults.js.map +1 -1
  363. package/dist/setup-wizard-handshake.d.ts +1 -19
  364. package/dist/setup-wizard-handshake.d.ts.map +1 -1
  365. package/dist/setup-wizard-handshake.js +8 -45
  366. package/dist/setup-wizard-handshake.js.map +1 -1
  367. package/dist/setup-wizard-types.d.ts +16 -209
  368. package/dist/setup-wizard-types.d.ts.map +1 -1
  369. package/dist/setup-wizard-types.js +0 -9
  370. package/dist/setup-wizard-types.js.map +1 -1
  371. package/dist/setup-wizard.d.ts +0 -28
  372. package/dist/setup-wizard.d.ts.map +1 -1
  373. package/dist/setup-wizard.js +167 -412
  374. package/dist/setup-wizard.js.map +1 -1
  375. package/dist/setup.d.ts +0 -15
  376. package/dist/setup.d.ts.map +1 -1
  377. package/dist/setup.js +0 -15
  378. package/dist/setup.js.map +1 -1
  379. package/dist/sites/bootstrap.d.ts +0 -38
  380. package/dist/sites/bootstrap.d.ts.map +1 -1
  381. package/dist/sites/bootstrap.js +0 -44
  382. package/dist/sites/bootstrap.js.map +1 -1
  383. package/dist/sites/cli/add-site.d.ts +0 -76
  384. package/dist/sites/cli/add-site.d.ts.map +1 -1
  385. package/dist/sites/cli/add-site.js +0 -71
  386. package/dist/sites/cli/add-site.js.map +1 -1
  387. package/dist/sites/cli/list-sites.d.ts +0 -31
  388. package/dist/sites/cli/list-sites.d.ts.map +1 -1
  389. package/dist/sites/cli/list-sites.js +0 -45
  390. package/dist/sites/cli/list-sites.js.map +1 -1
  391. package/dist/sites/cli/remove-site.d.ts +0 -37
  392. package/dist/sites/cli/remove-site.d.ts.map +1 -1
  393. package/dist/sites/cli/remove-site.js +0 -37
  394. package/dist/sites/cli/remove-site.js.map +1 -1
  395. package/dist/sites/cli/set-default.d.ts +0 -25
  396. package/dist/sites/cli/set-default.d.ts.map +1 -1
  397. package/dist/sites/cli/set-default.js +0 -22
  398. package/dist/sites/cli/set-default.js.map +1 -1
  399. package/dist/sites/cli/test-site.d.ts +0 -44
  400. package/dist/sites/cli/test-site.d.ts.map +1 -1
  401. package/dist/sites/cli/test-site.js +0 -39
  402. package/dist/sites/cli/test-site.js.map +1 -1
  403. package/dist/sites/client-pool.d.ts +11 -164
  404. package/dist/sites/client-pool.d.ts.map +1 -1
  405. package/dist/sites/client-pool.js +73 -194
  406. package/dist/sites/client-pool.js.map +1 -1
  407. package/dist/sites/config-problem.d.ts +2 -0
  408. package/dist/sites/config-problem.d.ts.map +1 -0
  409. package/dist/sites/config-problem.js +13 -0
  410. package/dist/sites/config-problem.js.map +1 -0
  411. package/dist/sites/env-bridge.d.ts +0 -69
  412. package/dist/sites/env-bridge.d.ts.map +1 -1
  413. package/dist/sites/env-bridge.js +2 -71
  414. package/dist/sites/env-bridge.js.map +1 -1
  415. package/dist/sites/op-inject.d.ts +23 -0
  416. package/dist/sites/op-inject.d.ts.map +1 -0
  417. package/dist/sites/op-inject.js +131 -0
  418. package/dist/sites/op-inject.js.map +1 -0
  419. package/dist/sites/paths.d.ts +0 -19
  420. package/dist/sites/paths.d.ts.map +1 -1
  421. package/dist/sites/paths.js +0 -19
  422. package/dist/sites/paths.js.map +1 -1
  423. package/dist/sites/probe.d.ts +1 -47
  424. package/dist/sites/probe.d.ts.map +1 -1
  425. package/dist/sites/probe.js +4 -46
  426. package/dist/sites/probe.js.map +1 -1
  427. package/dist/sites/registry.d.ts +4 -135
  428. package/dist/sites/registry.d.ts.map +1 -1
  429. package/dist/sites/registry.js +4 -98
  430. package/dist/sites/registry.js.map +1 -1
  431. package/dist/sites/schema.d.ts +3 -51
  432. package/dist/sites/schema.d.ts.map +1 -1
  433. package/dist/sites/schema.js +6 -52
  434. package/dist/sites/schema.js.map +1 -1
  435. package/dist/sites/secret-resolver.d.ts +6 -76
  436. package/dist/sites/secret-resolver.d.ts.map +1 -1
  437. package/dist/sites/secret-resolver.js +39 -104
  438. package/dist/sites/secret-resolver.js.map +1 -1
  439. package/dist/sites/store.d.ts +12 -69
  440. package/dist/sites/store.d.ts.map +1 -1
  441. package/dist/sites/store.js +37 -86
  442. package/dist/sites/store.js.map +1 -1
  443. package/dist/sites/substituted-registry.d.ts +11 -0
  444. package/dist/sites/substituted-registry.d.ts.map +1 -0
  445. package/dist/sites/substituted-registry.js +13 -0
  446. package/dist/sites/substituted-registry.js.map +1 -0
  447. package/dist/sites/tools/fetch-public-url.d.ts +4 -0
  448. package/dist/sites/tools/fetch-public-url.d.ts.map +1 -0
  449. package/dist/sites/tools/fetch-public-url.js +231 -0
  450. package/dist/sites/tools/fetch-public-url.js.map +1 -0
  451. package/dist/sites/tools/index.d.ts +2 -26
  452. package/dist/sites/tools/index.d.ts.map +1 -1
  453. package/dist/sites/tools/index.js +5 -28
  454. package/dist/sites/tools/index.js.map +1 -1
  455. package/dist/sites/tools/sites-list.d.ts +3 -47
  456. package/dist/sites/tools/sites-list.d.ts.map +1 -1
  457. package/dist/sites/tools/sites-list.js +68 -80
  458. package/dist/sites/tools/sites-list.js.map +1 -1
  459. package/dist/sites/tools/sites-overview.d.ts +4 -0
  460. package/dist/sites/tools/sites-overview.d.ts.map +1 -0
  461. package/dist/sites/tools/sites-overview.js +209 -0
  462. package/dist/sites/tools/sites-overview.js.map +1 -0
  463. package/dist/sites/tools/sites-test.d.ts +2 -45
  464. package/dist/sites/tools/sites-test.d.ts.map +1 -1
  465. package/dist/sites/tools/sites-test.js +1 -56
  466. package/dist/sites/tools/sites-test.js.map +1 -1
  467. package/dist/sites/tools/use-site.d.ts +2 -45
  468. package/dist/sites/tools/use-site.d.ts.map +1 -1
  469. package/dist/sites/tools/use-site.js +31 -80
  470. package/dist/sites/tools/use-site.js.map +1 -1
  471. package/dist/sites/unknown-name-result.d.ts +10 -0
  472. package/dist/sites/unknown-name-result.d.ts.map +1 -0
  473. package/dist/sites/unknown-name-result.js +13 -0
  474. package/dist/sites/unknown-name-result.js.map +1 -0
  475. package/dist/skill-instructions.d.ts +7 -0
  476. package/dist/skill-instructions.d.ts.map +1 -0
  477. package/dist/skill-instructions.js +84 -0
  478. package/dist/skill-instructions.js.map +1 -0
  479. package/dist/skill-loader.d.ts +0 -102
  480. package/dist/skill-loader.d.ts.map +1 -1
  481. package/dist/skill-loader.js +4 -142
  482. package/dist/skill-loader.js.map +1 -1
  483. package/dist/skill-manifest.d.ts +0 -20
  484. package/dist/skill-manifest.d.ts.map +1 -1
  485. package/dist/skill-manifest.js +1 -21
  486. package/dist/skill-manifest.js.map +1 -1
  487. package/dist/skill-topics.d.ts +19 -0
  488. package/dist/skill-topics.d.ts.map +1 -0
  489. package/dist/skill-topics.js +181 -0
  490. package/dist/skill-topics.js.map +1 -0
  491. package/dist/tools/active-site.d.ts +16 -0
  492. package/dist/tools/active-site.d.ts.map +1 -0
  493. package/dist/tools/active-site.js +55 -0
  494. package/dist/tools/active-site.js.map +1 -0
  495. package/dist/tools/bind-guidance.d.ts +2 -72
  496. package/dist/tools/bind-guidance.d.ts.map +1 -1
  497. package/dist/tools/bind-guidance.js +2 -72
  498. package/dist/tools/bind-guidance.js.map +1 -1
  499. package/dist/tools/budgeted-table.d.ts +16 -0
  500. package/dist/tools/budgeted-table.d.ts.map +1 -0
  501. package/dist/tools/budgeted-table.js +203 -0
  502. package/dist/tools/budgeted-table.js.map +1 -0
  503. package/dist/tools/elements/bind-output-schema.d.ts +69 -0
  504. package/dist/tools/elements/bind-output-schema.d.ts.map +1 -0
  505. package/dist/tools/elements/bind-output-schema.js +64 -0
  506. package/dist/tools/elements/bind-output-schema.js.map +1 -0
  507. package/dist/tools/elements/builders.d.ts +1 -22
  508. package/dist/tools/elements/builders.d.ts.map +1 -1
  509. package/dist/tools/elements/builders.js +171 -133
  510. package/dist/tools/elements/builders.js.map +1 -1
  511. package/dist/tools/elements/index.d.ts +0 -26
  512. package/dist/tools/elements/index.d.ts.map +1 -1
  513. package/dist/tools/elements/index.js +0 -25
  514. package/dist/tools/elements/index.js.map +1 -1
  515. package/dist/tools/elements/read-output-schemas.d.ts +121 -0
  516. package/dist/tools/elements/read-output-schemas.d.ts.map +1 -0
  517. package/dist/tools/elements/read-output-schemas.js +225 -0
  518. package/dist/tools/elements/read-output-schemas.js.map +1 -0
  519. package/dist/tools/elements/write-output-schemas.d.ts +185 -0
  520. package/dist/tools/elements/write-output-schemas.d.ts.map +1 -0
  521. package/dist/tools/elements/write-output-schemas.js +98 -0
  522. package/dist/tools/elements/write-output-schemas.js.map +1 -0
  523. package/dist/tools/elements.d.ts +0 -11
  524. package/dist/tools/elements.d.ts.map +1 -1
  525. package/dist/tools/elements.js +0 -11
  526. package/dist/tools/elements.js.map +1 -1
  527. package/dist/tools/format/health-format.d.ts +42 -43
  528. package/dist/tools/format/health-format.d.ts.map +1 -1
  529. package/dist/tools/format/health-format.js +32 -55
  530. package/dist/tools/format/health-format.js.map +1 -1
  531. package/dist/tools/format/inspection-format.d.ts +4 -49
  532. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  533. package/dist/tools/format/inspection-format.js +46 -114
  534. package/dist/tools/format/inspection-format.js.map +1 -1
  535. package/dist/tools/format/pages-format.d.ts +32 -69
  536. package/dist/tools/format/pages-format.d.ts.map +1 -1
  537. package/dist/tools/format/pages-format.js +115 -133
  538. package/dist/tools/format/pages-format.js.map +1 -1
  539. package/dist/tools/format/sources-format.d.ts +5 -39
  540. package/dist/tools/format/sources-format.d.ts.map +1 -1
  541. package/dist/tools/format/sources-format.js +57 -87
  542. package/dist/tools/format/sources-format.js.map +1 -1
  543. package/dist/tools/health-output-schemas.d.ts +82 -0
  544. package/dist/tools/health-output-schemas.d.ts.map +1 -0
  545. package/dist/tools/health-output-schemas.js +130 -0
  546. package/dist/tools/health-output-schemas.js.map +1 -0
  547. package/dist/tools/health.d.ts +2 -20
  548. package/dist/tools/health.d.ts.map +1 -1
  549. package/dist/tools/health.js +59 -184
  550. package/dist/tools/health.js.map +1 -1
  551. package/dist/tools/index.d.ts +1 -26
  552. package/dist/tools/index.d.ts.map +1 -1
  553. package/dist/tools/index.js +13 -33
  554. package/dist/tools/index.js.map +1 -1
  555. package/dist/tools/inspection.d.ts +21 -17
  556. package/dist/tools/inspection.d.ts.map +1 -1
  557. package/dist/tools/inspection.js +431 -268
  558. package/dist/tools/inspection.js.map +1 -1
  559. package/dist/tools/library.d.ts +118 -126
  560. package/dist/tools/library.d.ts.map +1 -1
  561. package/dist/tools/library.js +723 -456
  562. package/dist/tools/library.js.map +1 -1
  563. package/dist/tools/local-content/builders.d.ts +1 -17
  564. package/dist/tools/local-content/builders.d.ts.map +1 -1
  565. package/dist/tools/local-content/builders.js +105 -48
  566. package/dist/tools/local-content/builders.js.map +1 -1
  567. package/dist/tools/local-content/index.d.ts +0 -15
  568. package/dist/tools/local-content/index.d.ts.map +1 -1
  569. package/dist/tools/local-content/index.js +0 -14
  570. package/dist/tools/local-content/index.js.map +1 -1
  571. package/dist/tools/local-content/schemas.d.ts +31 -47
  572. package/dist/tools/local-content/schemas.d.ts.map +1 -1
  573. package/dist/tools/local-content/schemas.js +33 -62
  574. package/dist/tools/local-content/schemas.js.map +1 -1
  575. package/dist/tools/modules/builders.d.ts +4 -0
  576. package/dist/tools/modules/builders.d.ts.map +1 -0
  577. package/dist/tools/modules/builders.js +58 -0
  578. package/dist/tools/modules/builders.js.map +1 -0
  579. package/dist/tools/modules/index.d.ts +2 -0
  580. package/dist/tools/modules/index.d.ts.map +1 -0
  581. package/dist/tools/modules/index.js +2 -0
  582. package/dist/tools/modules/index.js.map +1 -0
  583. package/dist/tools/modules/module-id-schema.d.ts +4 -0
  584. package/dist/tools/modules/module-id-schema.d.ts.map +1 -0
  585. package/dist/tools/modules/module-id-schema.js +14 -0
  586. package/dist/tools/modules/module-id-schema.js.map +1 -0
  587. package/dist/tools/modules/module-type-fields.d.ts +10 -0
  588. package/dist/tools/modules/module-type-fields.d.ts.map +1 -0
  589. package/dist/tools/modules/module-type-fields.js +34 -0
  590. package/dist/tools/modules/module-type-fields.js.map +1 -0
  591. package/dist/tools/modules/modules-create.d.ts +59 -0
  592. package/dist/tools/modules/modules-create.d.ts.map +1 -0
  593. package/dist/tools/modules/modules-create.js +154 -0
  594. package/dist/tools/modules/modules-create.js.map +1 -0
  595. package/dist/tools/modules/modules-delete.d.ts +51 -0
  596. package/dist/tools/modules/modules-delete.d.ts.map +1 -0
  597. package/dist/tools/modules/modules-delete.js +180 -0
  598. package/dist/tools/modules/modules-delete.js.map +1 -0
  599. package/dist/tools/modules/modules-update.d.ts +43 -0
  600. package/dist/tools/modules/modules-update.d.ts.map +1 -0
  601. package/dist/tools/modules/modules-update.js +177 -0
  602. package/dist/tools/modules/modules-update.js.map +1 -0
  603. package/dist/tools/modules/placement-hints.d.ts +5 -0
  604. package/dist/tools/modules/placement-hints.d.ts.map +1 -0
  605. package/dist/tools/modules/placement-hints.js +90 -0
  606. package/dist/tools/modules/placement-hints.js.map +1 -0
  607. package/dist/tools/modules/placement-ways.d.ts +13 -0
  608. package/dist/tools/modules/placement-ways.d.ts.map +1 -0
  609. package/dist/tools/modules/placement-ways.js +61 -0
  610. package/dist/tools/modules/placement-ways.js.map +1 -0
  611. package/dist/tools/multi-items/builders.d.ts +1 -21
  612. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  613. package/dist/tools/multi-items/builders.js +22 -67
  614. package/dist/tools/multi-items/builders.js.map +1 -1
  615. package/dist/tools/multi-items/index.d.ts +0 -15
  616. package/dist/tools/multi-items/index.d.ts.map +1 -1
  617. package/dist/tools/multi-items/index.js +0 -15
  618. package/dist/tools/multi-items/index.js.map +1 -1
  619. package/dist/tools/multi-items/item-container-map.d.ts +0 -35
  620. package/dist/tools/multi-items/item-container-map.d.ts.map +1 -1
  621. package/dist/tools/multi-items/item-container-map.js +0 -35
  622. package/dist/tools/multi-items/item-container-map.js.map +1 -1
  623. package/dist/tools/multi-items/output-schemas.d.ts +101 -0
  624. package/dist/tools/multi-items/output-schemas.d.ts.map +1 -0
  625. package/dist/tools/multi-items/output-schemas.js +74 -0
  626. package/dist/tools/multi-items/output-schemas.js.map +1 -0
  627. package/dist/tools/navigation/builders.d.ts +3 -0
  628. package/dist/tools/navigation/builders.d.ts.map +1 -0
  629. package/dist/tools/navigation/builders.js +25 -0
  630. package/dist/tools/navigation/builders.js.map +1 -0
  631. package/dist/tools/navigation/index.d.ts +2 -0
  632. package/dist/tools/navigation/index.d.ts.map +1 -0
  633. package/dist/tools/navigation/index.js +2 -0
  634. package/dist/tools/navigation/index.js.map +1 -0
  635. package/dist/tools/navigation/schemas.d.ts +16 -0
  636. package/dist/tools/navigation/schemas.d.ts.map +1 -0
  637. package/dist/tools/navigation/schemas.js +11 -0
  638. package/dist/tools/navigation/schemas.js.map +1 -0
  639. package/dist/tools/output-schema-metadata.d.ts +5 -0
  640. package/dist/tools/output-schema-metadata.d.ts.map +1 -0
  641. package/dist/tools/output-schema-metadata.js +83 -0
  642. package/dist/tools/output-schema-metadata.js.map +1 -0
  643. package/dist/tools/pages/builders.d.ts +1 -41
  644. package/dist/tools/pages/builders.d.ts.map +1 -1
  645. package/dist/tools/pages/builders.js +373 -359
  646. package/dist/tools/pages/builders.js.map +1 -1
  647. package/dist/tools/pages/header-transparency.d.ts +34 -0
  648. package/dist/tools/pages/header-transparency.d.ts.map +1 -0
  649. package/dist/tools/pages/header-transparency.js +85 -0
  650. package/dist/tools/pages/header-transparency.js.map +1 -0
  651. package/dist/tools/pages/index.d.ts +1 -19
  652. package/dist/tools/pages/index.d.ts.map +1 -1
  653. package/dist/tools/pages/index.js +1 -19
  654. package/dist/tools/pages/index.js.map +1 -1
  655. package/dist/tools/pages/schemas.d.ts +392 -224
  656. package/dist/tools/pages/schemas.d.ts.map +1 -1
  657. package/dist/tools/pages/schemas.js +605 -458
  658. package/dist/tools/pages/schemas.js.map +1 -1
  659. package/dist/tools/pages/write-output-schemas.d.ts +139 -0
  660. package/dist/tools/pages/write-output-schemas.d.ts.map +1 -0
  661. package/dist/tools/pages/write-output-schemas.js +138 -0
  662. package/dist/tools/pages/write-output-schemas.js.map +1 -0
  663. package/dist/tools/pages.d.ts +0 -11
  664. package/dist/tools/pages.d.ts.map +1 -1
  665. package/dist/tools/pages.js +0 -11
  666. package/dist/tools/pages.js.map +1 -1
  667. package/dist/tools/pool-resolve-helper.d.ts +0 -52
  668. package/dist/tools/pool-resolve-helper.d.ts.map +1 -1
  669. package/dist/tools/pool-resolve-helper.js +29 -104
  670. package/dist/tools/pool-resolve-helper.js.map +1 -1
  671. package/dist/tools/progress-phases.d.ts +0 -42
  672. package/dist/tools/progress-phases.d.ts.map +1 -1
  673. package/dist/tools/progress-phases.js +0 -44
  674. package/dist/tools/progress-phases.js.map +1 -1
  675. package/dist/tools/response-budget.d.ts +8 -0
  676. package/dist/tools/response-budget.d.ts.map +1 -0
  677. package/dist/tools/response-budget.js +7 -0
  678. package/dist/tools/response-budget.js.map +1 -0
  679. package/dist/tools/shared-schemas.d.ts +12 -43
  680. package/dist/tools/shared-schemas.d.ts.map +1 -1
  681. package/dist/tools/shared-schemas.js +42 -97
  682. package/dist/tools/shared-schemas.js.map +1 -1
  683. package/dist/tools/skill/builders.d.ts +3 -0
  684. package/dist/tools/skill/builders.d.ts.map +1 -0
  685. package/dist/tools/skill/builders.js +81 -0
  686. package/dist/tools/skill/builders.js.map +1 -0
  687. package/dist/tools/sources/builders.d.ts +1 -11
  688. package/dist/tools/sources/builders.d.ts.map +1 -1
  689. package/dist/tools/sources/builders.js +195 -173
  690. package/dist/tools/sources/builders.js.map +1 -1
  691. package/dist/tools/sources/index.d.ts +0 -17
  692. package/dist/tools/sources/index.d.ts.map +1 -1
  693. package/dist/tools/sources/index.js +0 -16
  694. package/dist/tools/sources/index.js.map +1 -1
  695. package/dist/tools/sources/read-output-schemas.d.ts +101 -0
  696. package/dist/tools/sources/read-output-schemas.d.ts.map +1 -0
  697. package/dist/tools/sources/read-output-schemas.js +105 -0
  698. package/dist/tools/sources/read-output-schemas.js.map +1 -0
  699. package/dist/tools/sources/source-name-argument.d.ts +17 -0
  700. package/dist/tools/sources/source-name-argument.d.ts.map +1 -0
  701. package/dist/tools/sources/source-name-argument.js +64 -0
  702. package/dist/tools/sources/source-name-argument.js.map +1 -0
  703. package/dist/tools/sources/write-output-schemas.d.ts +100 -0
  704. package/dist/tools/sources/write-output-schemas.d.ts.map +1 -0
  705. package/dist/tools/sources/write-output-schemas.js +61 -0
  706. package/dist/tools/sources/write-output-schemas.js.map +1 -0
  707. package/dist/tools/sources.d.ts +0 -12
  708. package/dist/tools/sources.d.ts.map +1 -1
  709. package/dist/tools/sources.js +0 -12
  710. package/dist/tools/sources.js.map +1 -1
  711. package/dist/tools/sparse-fields.d.ts +19 -194
  712. package/dist/tools/sparse-fields.d.ts.map +1 -1
  713. package/dist/tools/sparse-fields.js +212 -196
  714. package/dist/tools/sparse-fields.js.map +1 -1
  715. package/dist/tools/strict-input.d.ts +5 -0
  716. package/dist/tools/strict-input.d.ts.map +1 -0
  717. package/dist/tools/strict-input.js +55 -0
  718. package/dist/tools/strict-input.js.map +1 -0
  719. package/dist/tools/sublayout/builders.d.ts +1 -21
  720. package/dist/tools/sublayout/builders.d.ts.map +1 -1
  721. package/dist/tools/sublayout/builders.js +10 -40
  722. package/dist/tools/sublayout/builders.js.map +1 -1
  723. package/dist/tools/sublayout/index.d.ts +1 -11
  724. package/dist/tools/sublayout/index.d.ts.map +1 -1
  725. package/dist/tools/sublayout/index.js +1 -11
  726. package/dist/tools/sublayout/index.js.map +1 -1
  727. package/dist/tools/sublayout/output-schemas.d.ts +57 -0
  728. package/dist/tools/sublayout/output-schemas.d.ts.map +1 -0
  729. package/dist/tools/sublayout/output-schemas.js +51 -0
  730. package/dist/tools/sublayout/output-schemas.js.map +1 -0
  731. package/dist/tools/tool-builder/annotations.d.ts +1 -49
  732. package/dist/tools/tool-builder/annotations.d.ts.map +1 -1
  733. package/dist/tools/tool-builder/annotations.js +9 -49
  734. package/dist/tools/tool-builder/annotations.js.map +1 -1
  735. package/dist/tools/tool-builder/confirm-preview.d.ts +24 -0
  736. package/dist/tools/tool-builder/confirm-preview.d.ts.map +1 -0
  737. package/dist/tools/tool-builder/confirm-preview.js +37 -0
  738. package/dist/tools/tool-builder/confirm-preview.js.map +1 -0
  739. package/dist/tools/tool-builder/define.d.ts +6 -26
  740. package/dist/tools/tool-builder/define.d.ts.map +1 -1
  741. package/dist/tools/tool-builder/define.js +0 -25
  742. package/dist/tools/tool-builder/define.js.map +1 -1
  743. package/dist/tools/tool-builder/index.d.ts +3 -26
  744. package/dist/tools/tool-builder/index.d.ts.map +1 -1
  745. package/dist/tools/tool-builder/index.js +2 -25
  746. package/dist/tools/tool-builder/index.js.map +1 -1
  747. package/dist/tools/tool-builder/results.d.ts +4 -111
  748. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  749. package/dist/tools/tool-builder/results.js +258 -250
  750. package/dist/tools/tool-builder/results.js.map +1 -1
  751. package/dist/tools/tool-builder/types.d.ts +5 -59
  752. package/dist/tools/tool-builder/types.d.ts.map +1 -1
  753. package/dist/tools/tool-builder/types.js +0 -7
  754. package/dist/tools/tool-builder/types.js.map +1 -1
  755. package/dist/tools/tool-builder.d.ts +0 -14
  756. package/dist/tools/tool-builder.d.ts.map +1 -1
  757. package/dist/tools/tool-builder.js +0 -14
  758. package/dist/tools/tool-builder.js.map +1 -1
  759. package/dist/uninstall-skill.d.ts +0 -41
  760. package/dist/uninstall-skill.d.ts.map +1 -1
  761. package/dist/uninstall-skill.js +0 -49
  762. package/dist/uninstall-skill.js.map +1 -1
  763. package/dist/uninstall.d.ts +0 -41
  764. package/dist/uninstall.d.ts.map +1 -1
  765. package/dist/uninstall.js +1 -29
  766. package/dist/uninstall.js.map +1 -1
  767. package/dist/update/update-check.d.ts +0 -26
  768. package/dist/update/update-check.d.ts.map +1 -1
  769. package/dist/update/update-check.js +0 -25
  770. package/dist/update/update-check.js.map +1 -1
  771. package/manifest.json +4 -5
  772. package/package.json +5 -5
  773. package/skills/yt-builder-mcp/SKILL.md +2958 -382
  774. package/dist/tools/elements/handlers-write.d.ts +0 -70
  775. package/dist/tools/elements/handlers-write.d.ts.map +0 -1
  776. package/dist/tools/elements/handlers-write.js +0 -700
  777. package/dist/tools/elements/handlers-write.js.map +0 -1
  778. package/dist/tools/elements/handlers.d.ts +0 -125
  779. package/dist/tools/elements/handlers.d.ts.map +0 -1
  780. package/dist/tools/elements/handlers.js +0 -571
  781. package/dist/tools/elements/handlers.js.map +0 -1
  782. package/dist/tools/elements/layout-hierarchy-rules.d.ts +0 -62
  783. package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +0 -1
  784. package/dist/tools/elements/layout-hierarchy-rules.js +0 -154
  785. package/dist/tools/elements/layout-hierarchy-rules.js.map +0 -1
  786. package/dist/tools/elements/schema-validation.d.ts +0 -96
  787. package/dist/tools/elements/schema-validation.d.ts.map +0 -1
  788. package/dist/tools/elements/schema-validation.js +0 -249
  789. package/dist/tools/elements/schema-validation.js.map +0 -1
  790. package/dist/tools/elicitation.d.ts +0 -87
  791. package/dist/tools/elicitation.d.ts.map +0 -1
  792. package/dist/tools/elicitation.js +0 -100
  793. package/dist/tools/elicitation.js.map +0 -1
  794. package/dist/tools/format/elements-format.d.ts +0 -75
  795. package/dist/tools/format/elements-format.d.ts.map +0 -1
  796. package/dist/tools/format/elements-format.js +0 -324
  797. package/dist/tools/format/elements-format.js.map +0 -1
  798. package/dist/tools/format/source-schema-format.d.ts +0 -74
  799. package/dist/tools/format/source-schema-format.d.ts.map +0 -1
  800. package/dist/tools/format/source-schema-format.js +0 -208
  801. package/dist/tools/format/source-schema-format.js.map +0 -1
  802. package/dist/tools/layout-flatten.d.ts +0 -84
  803. package/dist/tools/layout-flatten.d.ts.map +0 -1
  804. package/dist/tools/layout-flatten.js +0 -129
  805. package/dist/tools/layout-flatten.js.map +0 -1
  806. package/dist/tools/local-content/handlers.d.ts +0 -54
  807. package/dist/tools/local-content/handlers.d.ts.map +0 -1
  808. package/dist/tools/local-content/handlers.js +0 -316
  809. package/dist/tools/local-content/handlers.js.map +0 -1
  810. package/dist/tools/multi-items/clean-implode-handler.d.ts +0 -37
  811. package/dist/tools/multi-items/clean-implode-handler.d.ts.map +0 -1
  812. package/dist/tools/multi-items/clean-implode-handler.js +0 -65
  813. package/dist/tools/multi-items/clean-implode-handler.js.map +0 -1
  814. package/dist/tools/multi-items/format/inspection-format.d.ts +0 -41
  815. package/dist/tools/multi-items/format/inspection-format.d.ts.map +0 -1
  816. package/dist/tools/multi-items/format/inspection-format.js +0 -64
  817. package/dist/tools/multi-items/format/inspection-format.js.map +0 -1
  818. package/dist/tools/multi-items/inspect-handler.d.ts +0 -97
  819. package/dist/tools/multi-items/inspect-handler.d.ts.map +0 -1
  820. package/dist/tools/multi-items/inspect-handler.js +0 -323
  821. package/dist/tools/multi-items/inspect-handler.js.map +0 -1
  822. package/dist/tools/multi-items/inspection-cache.d.ts +0 -85
  823. package/dist/tools/multi-items/inspection-cache.d.ts.map +0 -1
  824. package/dist/tools/multi-items/inspection-cache.js +0 -126
  825. package/dist/tools/multi-items/inspection-cache.js.map +0 -1
  826. package/dist/tools/pages/handlers-audit.d.ts +0 -129
  827. package/dist/tools/pages/handlers-audit.d.ts.map +0 -1
  828. package/dist/tools/pages/handlers-audit.js +0 -704
  829. package/dist/tools/pages/handlers-audit.js.map +0 -1
  830. package/dist/tools/pages/handlers-read.d.ts +0 -95
  831. package/dist/tools/pages/handlers-read.d.ts.map +0 -1
  832. package/dist/tools/pages/handlers-read.js +0 -929
  833. package/dist/tools/pages/handlers-read.js.map +0 -1
  834. package/dist/tools/pages/handlers-write.d.ts +0 -212
  835. package/dist/tools/pages/handlers-write.d.ts.map +0 -1
  836. package/dist/tools/pages/handlers-write.js +0 -418
  837. package/dist/tools/pages/handlers-write.js.map +0 -1
  838. package/dist/tools/pages/target.d.ts +0 -162
  839. package/dist/tools/pages/target.d.ts.map +0 -1
  840. package/dist/tools/pages/target.js +0 -239
  841. package/dist/tools/pages/target.js.map +0 -1
  842. package/dist/tools/sources/handlers-bind.d.ts +0 -148
  843. package/dist/tools/sources/handlers-bind.d.ts.map +0 -1
  844. package/dist/tools/sources/handlers-bind.js +0 -655
  845. package/dist/tools/sources/handlers-bind.js.map +0 -1
  846. package/dist/tools/sources/handlers.d.ts +0 -114
  847. package/dist/tools/sources/handlers.d.ts.map +0 -1
  848. package/dist/tools/sources/handlers.js +0 -285
  849. package/dist/tools/sources/handlers.js.map +0 -1
  850. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +0 -95
  851. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +0 -1
  852. package/dist/tools/sublayout/inspect-sublayout-handler.js +0 -181
  853. package/dist/tools/sublayout/inspect-sublayout-handler.js.map +0 -1
@@ -1,50 +1,120 @@
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';
1
+ import { detailResult } from '@getimo/mcp-toolkit';
12
2
  import { z } from 'zod';
13
3
  import { BIND_VIA_GATEWAY_EXAMPLE } from './bind-guidance.js';
14
4
  import { TYPES_COMPACT_COLUMNS, TYPES_TABLE_COLUMNS, buildTypeSchemaDetail, flattenTypesPayload, mapTypeRow, } from './format/inspection-format.js';
15
- import { SITE_ID_SCHEMA } from './shared-schemas.js';
5
+ import { INCLUDE_META_SCHEMA, SITE_ID_SCHEMA } from './shared-schemas.js';
6
+ import { strictInputObject } from './strict-input.js';
16
7
  import { resolveSiteOrError } from './pool-resolve-helper.js';
17
8
  import { defineTool, errorResult, readOnly, structuredResult, withSiteMeta, } from './tool-builder.js';
18
- import { DEFAULT_FIELDS_TYPES_LIST, FIELDS, MAX_CHARS, applyMaxChars, projectFields, projectedFieldsEcho, projectionFeedback, projectionWarning, } from './sparse-fields.js';
9
+ import { DEFAULT_FIELDS_TYPES_LIST, FIELDS, FIELD_NAMES, FIELD_NAME_CONTAINS, FIELD_COVERAGE_SCHEMA, MAX_CHARS, applyMaxChars, projectFields, prependTextBlock, projectedFieldsEcho, projectionCoverageBlock, projectionDetailBlock, projectionFeedback, projectionInlineNote, projectionNoteText, selectDescriptorsByName, } from './sparse-fields.js';
19
10
  import { ITEM_CHILDREN_OF_CONTAINER } from './multi-items/item-container-map.js';
20
- // ─── outputSchemas (Wave G.2 §4) ─────────────────────────────────────
11
+ import { budgetedTableResult } from "./budgeted-table.js";
12
+ import { RESPONSE_BUDGET } from "./response-budget.js";
21
13
  const TYPES_LIST_OUTPUT_SCHEMA = z.object({
22
14
  items: z.array(z.record(z.string(), z.unknown())),
23
15
  total: z.number(),
24
16
  projected_fields: z.array(z.string()).optional(),
25
- // F-004 fix (2026-05-25 exhaustive audit): see sparse-fields::projectionFeedback.
26
17
  available_fields: z.array(z.string()).optional(),
18
+ available_fields_by_kind: z.record(z.string(), z.array(z.string())).optional(),
27
19
  unknown_fields: z.array(z.string()).optional(),
28
- // F23 (2026-06-10): the LOUD unknown-projection warning also rides in
29
- // structuredContent — hosts that surface structuredContent (not the
30
- // text leg) to the model would otherwise never see it.
20
+ field_coverage: FIELD_COVERAGE_SCHEMA,
31
21
  projection_warning: z.string().optional(),
32
22
  });
33
23
  const TYPE_SCHEMA_OUTPUT_SCHEMA = z.object({
34
- name: z.string(),
24
+ name: z.string().optional(),
25
+ element_types: z
26
+ .array(z.object({
27
+ name: z.string(),
28
+ label: z.string().optional(),
29
+ requires_child_type: z.string().optional(),
30
+ origin: z.string().optional(),
31
+ has_children: z.boolean().optional(),
32
+ }))
33
+ .optional(),
34
+ total: z.number().optional(),
35
35
  label: z.string().optional(),
36
36
  origin: z.string().optional(),
37
- // The REST endpoint returns `fields` as a list of {name,type,label?}
38
- // field descriptors — each `name` is a valid prop key for element_add /
39
- // _update_settings.
37
+ has_children: z.boolean().optional(),
38
+ semantic_role: z.string().nullable().optional(),
39
+ available_fields: z.array(z.string()).optional(),
40
+ available_fields_by_kind: z.record(z.string(), z.array(z.string())).optional(),
41
+ unknown_fields: z.array(z.string()).optional(),
42
+ field_coverage: FIELD_COVERAGE_SCHEMA,
43
+ projection_warning: z.string().optional(),
44
+ projected_fields: z.array(z.string()).optional(),
40
45
  fields: z.array(z.record(z.string(), z.unknown())).optional(),
41
- field_count: z.number(),
42
- // Wave-6 R3 (2026-05-29): binding contract annotation. Surfaces the
43
- // Multi-Items binding pattern for container types (grid/slider/switcher/
44
- // list/accordion/gallery/panel/overlay), and identifies content-binding
45
- // prop keys for leaf types (headline/text/button/image). Cold-AI #4 had
46
- // to reverse-engineer this from inspect_multi_items_binding + page
47
- // layout — this annotation eliminates that step.
46
+ groups: z
47
+ .array(z.object({
48
+ name: z.string().describe('Matches a field descriptor\'s `group`.'),
49
+ description: z
50
+ .string()
51
+ .describe("The fieldset group's own sentence, as YOOtheme ships it."),
52
+ }))
53
+ .optional()
54
+ .describe('Fieldset groups that carry a rule of their own, stated once each. ' +
55
+ 'YOOtheme parks the semantics of a whole class of fields on the ' +
56
+ 'GROUP rather than on the field — grid.image_width/image_height ' +
57
+ 'declare no description and the crop rule lives here — so a ' +
58
+ 'descriptor with no `description` is not undocumented, you are ' +
59
+ 'reading at the wrong level. Join on the field\'s `group`. ' +
60
+ 'Narrows with field_names/name_contains.'),
61
+ renders_only_if: z
62
+ .array(z.array(z.string()))
63
+ .optional()
64
+ .describe('ALL groups need >=1 non-empty member or YOOtheme DELETES this element at ' +
65
+ 'render (no error; an emptied parent then collapses too). Applies to ' +
66
+ 'PRESENT-but-empty props; for ABSENT ones see placeholder_fallback. A ' +
67
+ "member may be `a&&b`; `parent.` prefixes the container's prop."),
68
+ placeholder_fallback: z
69
+ .object({ suppressed_by: z.array(z.string()), fills: z.array(z.string()) })
70
+ .optional()
71
+ .describe('Why renders_only_if often does NOT delete: leave every suppressed_by key ' +
72
+ "UNSET and YOOtheme merges its placeholder (prerender, front end too), so " +
73
+ 'fills render as lorem ipsum/"Title"/a placeholder image on the LIVE page. ' +
74
+ 'Write any suppressed_by key, even "", to suppress the merge and get deletion.'),
75
+ blanked_by_parent: z
76
+ .record(z.string(), z.array(z.string()))
77
+ .optional()
78
+ .describe('Container show_* flag -> props of THIS element the RENDER blanks (not ' +
79
+ 'CSS-hide). Blanks the OUTPUT only: your stored value survives and the ' +
80
+ 'flag is reversible. Runs before renders_only_if, so clearing one can ' +
81
+ 'drop the whole item — intersect the two to see which.'),
82
+ media_autoswap: z
83
+ .object({
84
+ precedence: z.array(z.string()),
85
+ sniffed: z.array(z.string()).optional(),
86
+ clears_on_conflict: z.array(z.string()).optional(),
87
+ })
88
+ .optional()
89
+ .describe('Image/video collision, per element — not uniform across YOOtheme. ' +
90
+ 'precedence: first non-empty renders. sniffed: URL-sniffed, value MOVED ' +
91
+ 'between image/video. clears_on_conflict: prop SET FALSE, not just skipped.'),
92
+ rules: z
93
+ .array(z.string())
94
+ .optional()
95
+ .describe('Shared render-rule ids — resolve each in `rule_notes`. Each marks a case ' +
96
+ 'where the write succeeds and the render differs; read before writing ' +
97
+ 'that prop.'),
98
+ rule_notes: z
99
+ .record(z.string(), z.string())
100
+ .optional()
101
+ .describe('id -> rule text, for the ids this response references. Element-level ids ' +
102
+ 'always resolve; a field-level one only while its field is returned.'),
103
+ claims_verified_on: z
104
+ .object({
105
+ build: z.string(),
106
+ here: z.string().nullable(),
107
+ status: z.enum(['match', 'differs', 'unknown']),
108
+ keys: z.array(z.string()),
109
+ })
110
+ .optional()
111
+ .describe('Build the keys named in `keys` were READ on vs this site — those ' +
112
+ 'ONLY, never the whole response. "differs"/"unknown" = NOT ' +
113
+ 're-checked here, so they are reports, not facts, and no_effect ' +
114
+ 'ships as no_effect_unverified.'),
115
+ field_count: z.number().optional(),
116
+ returned_count: z.number().optional(),
117
+ next_step: z.string().optional(),
48
118
  binding_contract: z
49
119
  .object({
50
120
  kind: z.enum(['container', 'item', 'leaf', 'none']),
@@ -52,67 +122,40 @@ const TYPE_SCHEMA_OUTPUT_SCHEMA = z.object({
52
122
  child_type: z.string().optional(),
53
123
  child_required: z.boolean().optional(),
54
124
  binding_target_props: z.array(z.string()).optional(),
55
- // F151 (2026-06-11): the single canonical text prop for this
56
- // element type (e.g. grid_item → "title", list_item/headline →
57
- // "content"). Names the right key so the agent does not guess.
58
125
  canonical_text_prop: z.string().optional(),
59
- // F143 (2026-06-11): map_item's single combined "lat,lng"
60
- // location prop contract — present only for location-bearing
61
- // item types.
62
126
  location_prop: z
63
127
  .object({ prop: z.string(), format: z.string() })
64
128
  .optional(),
65
129
  minimal_layout: z.record(z.string(), z.unknown()).optional(),
66
130
  set_via_tool: z.string().optional(),
67
131
  discover_source_tool: z.string().optional(),
68
- // Wave-7 (2026-05-29): explicit anti-patterns. Cold-AI #5 misread
69
- // the minimal_layout and produced `props.source` nesting instead of
70
- // sibling — YT-Pro silently ignored the binding and rendered 0 rows.
71
132
  do_not: z.array(z.string()).optional(),
72
133
  })
73
134
  .optional(),
135
+ })
136
+ .superRefine((v, ctx) => {
137
+ if (v.element_types !== undefined)
138
+ return;
139
+ for (const key of ['name', 'field_count', 'returned_count']) {
140
+ if (v[key] === undefined) {
141
+ ctx.addIssue({
142
+ code: 'custom',
143
+ path: [key],
144
+ message: `${key} is required when a single element type was read`,
145
+ });
146
+ }
147
+ }
74
148
  });
75
- // Wave-6 R3 (2026-05-29): Binding-contract derivation.
76
- //
77
- // Container types are the Multi-Items hosts — when bound to a source they
78
- // clone their *_item child once per source row. The binding LIVES on the
79
- // child item, not the container.
80
- //
81
- // Wave-13 A5 (2026-05-31): the canonical 16-pair map lives in
82
- // `multi-items/item-container-map.ts` (TypeScript mirror of the PHP
83
- // `ItemContainerMap` constant, pinned via Joomla/WP cross-platform tests).
84
- // Re-aliased here as CONTAINER_TO_ITEM_TYPE so the binding-contract derivation
85
- // always agrees with the rest of the surface. The previous inline 10-entry
86
- // map had drifted (missing button/description_list/nav/popover/social/subnav/
87
- // table; routed `slider`/`panel`/`overlay` to non-existent item types).
88
- //
89
- // Leaf types (headline, text, image) cannot host Multi-Items but they DO
90
- // accept per-prop source bindings (e.g. `content` of a headline maps to a
91
- // single source field). We surface the canonical prop keys below so the
92
- // agent knows which keys to bind without guessing.
93
149
  const CONTAINER_TO_ITEM_TYPE = ITEM_CHILDREN_OF_CONTAINER;
94
150
  const ITEM_TO_CONTAINER_TYPE = Object.fromEntries(Object.entries(CONTAINER_TO_ITEM_TYPE).map(([k, v]) => [v, k]));
95
- /** Canonical binding-target props per leaf type. Empty array → leaf type has no clear single-field binding. */
96
151
  const LEAF_BINDING_TARGETS = {
97
- headline: ['content', 'title_dynamic'],
152
+ headline: ['content'],
98
153
  text: ['content'],
99
154
  button: ['content', 'link'],
100
155
  image: ['image'],
101
156
  icon: ['icon'],
102
- quote: ['content'],
103
- subtitle: ['content'],
157
+ quotation: ['content'],
104
158
  };
105
- // F151 (2026-06-11): the SINGLE canonical text prop per element type.
106
- //
107
- // Prop names diverge across types — a `grid_item` carries its primary
108
- // text on `title`, while `list_item`/`headline`/`text` carry it on
109
- // `content`. A cold agent that guesses one key consistently writes a
110
- // DEAD prop (silent placeholder, no error). The F129 bind-time validator
111
- // (Wave 4) already WARNS on unknown prop keys after the fact; this map is
112
- // the SCHEMA side — it names the right key UP FRONT so the agent never
113
- // guesses. Only types with an unambiguous single text carrier are listed;
114
- // types with no clear single text prop are simply omitted (no
115
- // `canonical_text_prop` emitted).
116
159
  const CANONICAL_TEXT_PROP = {
117
160
  grid_item: 'title',
118
161
  list_item: 'content',
@@ -120,21 +163,13 @@ const CANONICAL_TEXT_PROP = {
120
163
  slideshow_item: 'title',
121
164
  switcher_item: 'title',
122
165
  gallery_item: 'title',
123
- panel_item: 'title',
166
+ 'panel-slider_item': 'title',
124
167
  headline: 'content',
125
168
  text: 'content',
126
- quote: 'content',
127
- subtitle: 'content',
169
+ quotation: 'content',
128
170
  button: 'content',
129
171
  button_item: 'content',
130
172
  };
131
- // F143 (2026-06-11): `map_item` renders a marker off a SINGLE `location`
132
- // prop that wants ONE combined "lat,lng" string. Sources almost always
133
- // supply latitude and longitude as two separate fields, so the natural
134
- // (wrong) move is to map two props — which leaves the map with zero pins
135
- // and no error. Surface the contract on the schema so the agent maps one
136
- // combined value instead. See also the inspect_multi_items_binding hard
137
- // warning (PHP MultiItemsInspector) for the post-bind safety net.
138
173
  const LOCATION_PROP_CONTRACT = {
139
174
  map_item: {
140
175
  prop: 'location',
@@ -145,12 +180,6 @@ const LOCATION_PROP_CONTRACT = {
145
180
  'location binding the map renders 0 markers.',
146
181
  },
147
182
  };
148
- /**
149
- * F151/F143 — attach the canonical single text prop and (for map_item)
150
- * the location-prop contract to whatever contract `deriveBindingContract`
151
- * built. Pure: returns a new object, only sets the keys when a mapping
152
- * exists for `elementType`.
153
- */
154
183
  function withPropContracts(contract, elementType) {
155
184
  const textProp = CANONICAL_TEXT_PROP[elementType];
156
185
  const location = LOCATION_PROP_CONTRACT[elementType];
@@ -160,6 +189,10 @@ function withPropContracts(contract, elementType) {
160
189
  ...(location !== undefined ? { location_prop: { ...location } } : {}),
161
190
  };
162
191
  }
192
+ const DISCOVER_SOURCE_TOOL = 'apimapper_yootheme_binding_for_flow({ flow_id }) — a tool of the SEPARATE API Mapper ' +
193
+ 'MCP server, available only when that server is connected alongside this one. If it ' +
194
+ 'is not, read the published source and its fields with yootheme_builder_sources_list ' +
195
+ 'and yootheme_builder_source_get_schema instead.';
163
196
  function deriveBindingContract(elementType) {
164
197
  const built = deriveBindingContractBase(elementType);
165
198
  return built !== undefined ? withPropContracts(built, elementType) : built;
@@ -180,40 +213,24 @@ function deriveBindingContractBase(elementType) {
180
213
  `N siblings.`,
181
214
  child_type: itemType,
182
215
  child_required: true,
183
- // F132 (Wave 4a): the example shows a BARE container + child —
184
- // NO populated `source` block. element_add's children-guard now
185
- // rejects a hand-authored `source` anywhere in the tree (it
186
- // silently renders 0 rows in a stored layout), so teaching the
187
- // populated shape here would hand the agent a guaranteed reject /
188
- // broken render. Build this bare structure first, THEN bind the
189
- // source through the dedicated bind tool — see `set_via_tool`
190
- // and `do_not` below. The binding lands on the *_item as a
191
- // SIBLING of `props`/`children`; the bind tool writes it at the
192
- // correct nesting level so you never hand-author it.
193
216
  minimal_layout: {
194
217
  type: elementType,
195
- // Container is bare — it never holds a `source` of its own.
196
218
  children: [
197
219
  {
198
220
  type: itemType,
199
- // `props` stays minimal — settings only. NO `source`
200
- // here: add the structure first, then bind via
201
- // yootheme_builder_element_bind_source (see set_via_tool).
202
221
  props: {},
203
222
  children: [],
204
223
  },
205
224
  ],
206
- // After this structure exists, bind the source:
207
225
  bind_after_create: 'Call yootheme_builder_element_bind_source on the *_item child ' +
208
- '(NOT this container). Discover the binding shape with ' +
209
- 'apimapper_yootheme_binding_for_flow({ flow_id }). Do NOT add `source` ' +
210
- 'to this layout by hand.',
226
+ '(NOT this container). Discover the binding shape via ' +
227
+ '`discover_source_tool` below. Do NOT add `source` to this layout by hand.',
211
228
  },
212
- set_via_tool: 'yootheme_builder_element_bind_source({ template_id, element_path, ' +
229
+ set_via_tool: 'yootheme_builder_element_bind_source({ layout_id, element_path, ' +
213
230
  'source_name, field_mappings }) — REQUIRED. The bind tool is a first-class ' +
214
231
  'tool in tools/list (since F116); call it directly. Hand-authoring source via ' +
215
232
  'element_update_settings is rejected (props-schema does not include source).',
216
- discover_source_tool: 'apimapper_yootheme_binding_for_flow({ flow_id }) — returns ready-to-paste binding shapes.',
233
+ discover_source_tool: DISCOVER_SOURCE_TOOL,
217
234
  do_not: [
218
235
  `Do NOT set \`source\` on the container (${elementType}) itself — only on the *_item child.`,
219
236
  `Do NOT nest \`source\` under \`props\` on the ${itemType} — it must be a sibling of props.`,
@@ -232,16 +249,16 @@ function deriveBindingContractBase(elementType) {
232
249
  `— do NOT hand-author the source via element_update_settings.** The source must ` +
233
250
  `be set on THIS element (as a SIBLING of \`props\`/\`children\`, not nested ` +
234
251
  `inside \`props\`), not on the parent ${containerType}.`,
235
- set_via_tool: 'yootheme_builder_element_bind_source({ template_id, element_path, ' +
252
+ set_via_tool: 'yootheme_builder_element_bind_source({ layout_id, element_path, ' +
236
253
  'source_name, field_mappings }) — REQUIRED. The bind tool is a first-class ' +
237
254
  'tool in tools/list (since F116); call it directly. Hand-authoring source via ' +
238
255
  'element_update_settings is rejected (props-schema does not include source).',
239
- discover_source_tool: 'apimapper_yootheme_binding_for_flow({ flow_id })',
256
+ discover_source_tool: DISCOVER_SOURCE_TOOL,
240
257
  do_not: [
241
258
  `Do NOT set \`source\` on the parent ${containerType} — only on this ${elementType}.`,
242
259
  'Do NOT nest `source` under `props` — it must be a sibling of `props`/`children`.',
243
260
  'Do NOT call element_update_settings with {source} or {source_extended} — bind via ' +
244
- 'yootheme_builder_element_bind_source({ template_id, element_path, source_name, field_mappings }).',
261
+ 'yootheme_builder_element_bind_source({ layout_id, element_path, source_name, field_mappings }).',
245
262
  'Do NOT add child leaves with their own per-prop `source` + `${builder.source}` placeholders.',
246
263
  ],
247
264
  };
@@ -254,7 +271,7 @@ function deriveBindingContractBase(elementType) {
254
271
  `listed in \`binding_target_props\`. NOT a Multi-Items host.`,
255
272
  binding_target_props: [...leafTargets],
256
273
  set_via_tool: BIND_VIA_GATEWAY_EXAMPLE,
257
- discover_source_tool: 'apimapper_yootheme_binding_for_flow({ flow_id })',
274
+ discover_source_tool: DISCOVER_SOURCE_TOOL,
258
275
  };
259
276
  }
260
277
  return {
@@ -264,28 +281,10 @@ function deriveBindingContractBase(elementType) {
264
281
  '(the bind tool is a first-class tool in tools/list since F116).',
265
282
  };
266
283
  }
267
- /**
268
- * Test-only re-export of the module-private `deriveBindingContract`. Kept
269
- * out of the public tool surface; consumed by the F132 minimal_layout pin
270
- * (tests/tools/inspection-minimal-layout-bare.test.ts).
271
- */
272
284
  export const __test_deriveBindingContract = deriveBindingContract;
273
- /**
274
- * ELEMENT_WRITE-4 (part 1) — the node-level keys the YT schema serializer lists
275
- * in `fields[]` even though they are SIBLINGS of `props` on the node, not props.
276
- * Writing `props.name` via element_add is silently accepted (the key IS in
277
- * fields[]) but never renders as the builder label. Annotating them steers the
278
- * agent to set them OUTSIDE props (a first-class `name` arg is the cross-file
279
- * follow-up owned by the element_add builder schema).
280
- */
285
+ export const __test_CANONICAL_TEXT_PROP = CANONICAL_TEXT_PROP;
286
+ export const __test_LEAF_BINDING_TARGETS = LEAF_BINDING_TARGETS;
281
287
  const NODE_LEVEL_FIELD_KEYS = new Set(['name', 'status', 'source', 'id']);
282
- /**
283
- * Annotate node-level descriptors (`name`/`status`/`source`/`id`) with
284
- * `group:'node-level'` + a value_hint so the agent knows they live OUTSIDE
285
- * `props`. Non-destructive: returns a shallow-cloned array; other descriptors
286
- * pass through untouched, and a descriptor that already declares a group keeps
287
- * it (we only fill an ABSENT group).
288
- */
289
288
  function annotateNodeLevelFields(fields) {
290
289
  return fields.map((field) => {
291
290
  const name = field.name;
@@ -294,7 +293,7 @@ function annotateNodeLevelFields(fields) {
294
293
  }
295
294
  return {
296
295
  ...field,
297
- ...(field.group === undefined || field.group === '' ? { group: 'node-level' } : {}),
296
+ group: 'node-level',
298
297
  value_hint: typeof field.value_hint === 'string' && field.value_hint !== ''
299
298
  ? field.value_hint
300
299
  : 'builder label / node metadata — lives OUTSIDE `props` (a SIBLING of ' +
@@ -303,29 +302,124 @@ function annotateNodeLevelFields(fields) {
303
302
  };
304
303
  });
305
304
  }
305
+ function narrowGroupsToSelection(raw, selected) {
306
+ if (!Array.isArray(raw))
307
+ return undefined;
308
+ const groups = [];
309
+ for (const entry of raw) {
310
+ if (entry === null || typeof entry !== 'object')
311
+ continue;
312
+ const { name, description } = entry;
313
+ if (typeof name === 'string' && name !== '' && typeof description === 'string') {
314
+ groups.push({ name, description });
315
+ }
316
+ }
317
+ if (groups.length === 0)
318
+ return undefined;
319
+ if (selected === undefined)
320
+ return groups;
321
+ const named = new Set();
322
+ for (const field of selected) {
323
+ if (typeof field.group === 'string')
324
+ named.add(field.group);
325
+ }
326
+ return groups.filter((g) => named.has(g.name));
327
+ }
328
+ function extractRenderRules(schema) {
329
+ const out = {};
330
+ const isStringList = (v) => Array.isArray(v) && v.every((s) => typeof s === 'string');
331
+ const gate = schema.renders_only_if;
332
+ if (Array.isArray(gate) && gate.length > 0 && gate.every(isStringList)) {
333
+ out.renders_only_if = gate;
334
+ }
335
+ const blanked = schema.blanked_by_parent;
336
+ if (blanked !== null && typeof blanked === 'object' && !Array.isArray(blanked)) {
337
+ const map = {};
338
+ for (const [flag, props] of Object.entries(blanked)) {
339
+ if (isStringList(props))
340
+ map[flag] = props;
341
+ }
342
+ if (Object.keys(map).length > 0)
343
+ out.blanked_by_parent = map;
344
+ }
345
+ const media = schema.media_autoswap;
346
+ if (media !== null && typeof media === 'object' && !Array.isArray(media)) {
347
+ const { precedence, sniffed, clears_on_conflict } = media;
348
+ if (isStringList(precedence) && precedence.length > 0) {
349
+ out.media_autoswap = {
350
+ precedence,
351
+ ...(isStringList(sniffed) ? { sniffed } : {}),
352
+ ...(isStringList(clears_on_conflict) ? { clears_on_conflict } : {}),
353
+ };
354
+ }
355
+ }
356
+ const fallback = schema.placeholder_fallback;
357
+ if (fallback !== null && typeof fallback === 'object' && !Array.isArray(fallback)) {
358
+ const { suppressed_by, fills } = fallback;
359
+ if (isStringList(suppressed_by) && suppressed_by.length > 0 && isStringList(fills)) {
360
+ out.placeholder_fallback = { suppressed_by, fills };
361
+ }
362
+ }
363
+ return out;
364
+ }
365
+ function extractClaimProvenance(schema) {
366
+ const raw = schema.claims_verified_on;
367
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
368
+ return undefined;
369
+ const { build, here, status, keys } = raw;
370
+ if (typeof build !== 'string' || build === '')
371
+ return undefined;
372
+ if (status !== 'match' && status !== 'differs' && status !== 'unknown')
373
+ return undefined;
374
+ if (here !== null && typeof here !== 'string')
375
+ return undefined;
376
+ if (!Array.isArray(keys) || keys.length === 0)
377
+ return undefined;
378
+ if (!keys.every((k) => typeof k === 'string'))
379
+ return undefined;
380
+ return { build, here, status, keys };
381
+ }
382
+ function extractSharedRuleNotes(schema, selected) {
383
+ const isStringList = (v) => Array.isArray(v) && v.every((s) => typeof s === 'string');
384
+ const elementRules = isStringList(schema.rules) ? schema.rules : [];
385
+ const referenced = new Set(elementRules);
386
+ for (const field of selected ?? []) {
387
+ const refs = field.rules;
388
+ if (isStringList(refs)) {
389
+ for (const id of refs)
390
+ referenced.add(id);
391
+ }
392
+ }
393
+ const rawNotes = schema.rule_notes;
394
+ const notes = {};
395
+ if (rawNotes !== null && typeof rawNotes === 'object' && !Array.isArray(rawNotes)) {
396
+ for (const [id, text] of Object.entries(rawNotes)) {
397
+ if (typeof text === 'string' && text !== '' && referenced.has(id)) {
398
+ notes[id] = text;
399
+ }
400
+ }
401
+ }
402
+ return {
403
+ ...(elementRules.length > 0 ? { rules: elementRules } : {}),
404
+ ...(Object.keys(notes).length > 0 ? { rule_notes: notes } : {}),
405
+ };
406
+ }
306
407
  export function buildInspectionTools(pool) {
307
408
  return [
308
409
  defineTool({
309
410
  name: 'yootheme_builder_element_types_list',
310
- description: 'List element types registered on this site (built-ins + ' +
311
- 'YOOessentials/uEssentials extras). Names feed `element_type` of ' +
312
- 'element_add. Pass `fields[]` to narrow each row. ' +
313
- // F61: "slider"/"carousel" are customer words, not element
314
- // names. F62: prop keys are per-element (grid_item `title` vs
315
- // headline `content`) — call element_type_get_schema first.
316
- 'Keywords: "slider"/"carousel" → `slideshow`/`panel-slider`/`overlay-slider`. ' +
317
- 'Prop keys differ per element (grid_item `title` vs headline `content`) — ' +
318
- 'use element_type_get_schema before element_add/bind. Container rows carry ' +
319
- '`requires_child_type` (grid→grid_item); `has_children`/`has_children_support` ' +
320
- 'are aliases (same value). ' +
321
- 'Operates on the default site unless site_id is provided.',
411
+ description: 'List element types registered on this site (built-ins + YOOessentials extras). ' +
412
+ 'Names feed `element_type` of element_add. ' +
413
+ '"slider"/"carousel" `slideshow`/`panel-slider`/`overlay-slider`. Prop keys ' +
414
+ 'differ per element use element_type_get_schema before element_add/bind.',
322
415
  inputSchema: {
323
416
  site_id: SITE_ID_SCHEMA,
324
417
  fields: FIELDS,
418
+ include_meta: INCLUDE_META_SCHEMA,
325
419
  },
326
420
  outputSchema: TYPES_LIST_OUTPUT_SCHEMA,
327
421
  annotations: readOnly('List Element Types'),
328
- handler: async ({ site_id, fields }) => {
422
+ handler: async ({ site_id, fields, include_meta }) => {
329
423
  const r = await resolveSiteOrError(pool, site_id);
330
424
  if (!r.ok)
331
425
  return r.error;
@@ -334,10 +428,6 @@ export function buildInspectionTools(pool) {
334
428
  const data = await siteClient.get('/element-types');
335
429
  const flat = flattenTypesPayload(data);
336
430
  const mapped = flat.map(mapTypeRow);
337
- // ELEMENT_WRITE-26: surface the container→item pairing per row
338
- // (grid→grid_item, button→button_item) so the Multi-Items child
339
- // requirement is visible WITHOUT opening each type's schema.
340
- // Present only on container rows; leaf/item rows stay unchanged.
341
431
  const mappedRecords = mapped.map((row) => {
342
432
  const child = CONTAINER_TO_ITEM_TYPE[row.name];
343
433
  return child !== undefined
@@ -347,14 +437,17 @@ export function buildInspectionTools(pool) {
347
437
  const items = projectFields(mappedRecords, fields, DEFAULT_FIELDS_TYPES_LIST);
348
438
  const echo = projectedFieldsEcho(fields, DEFAULT_FIELDS_TYPES_LIST);
349
439
  const feedback = projectionFeedback(mappedRecords, fields);
350
- // F23 (2026-06-09): shared loud-warning helper.
351
- const unknownNote = projectionWarning(feedback);
352
- const toolkitResult = tableResult(mappedRecords, {
440
+ const unknownNote = projectionInlineNote(feedback, fields);
441
+ const coverageBlock = projectionCoverageBlock(feedback?.field_coverage, feedback?.unknown_fields);
442
+ const projectionNote = projectionNoteText(coverageBlock, unknownNote);
443
+ const toolkitResult = budgetedTableResult(mappedRecords, {
353
444
  columns: [...TYPES_TABLE_COLUMNS],
354
445
  compactColumns: [...TYPES_COMPACT_COLUMNS],
355
- header: (count) => `${String(count)} element types${unknownNote}`,
356
- footer: 'Use yootheme_builder_element_type_get_schema <name> for fields.',
357
- });
446
+ header: (count) => `${coverageBlock}${String(count)} element types${unknownNote}`,
447
+ footer: 'Fields of a type: yootheme_builder_element_type_get_schema(' +
448
+ '{element_type: "<NAME column>"}).',
449
+ includeMeta: include_meta,
450
+ }, RESPONSE_BUDGET.BULKY);
358
451
  return withSiteMeta(structuredResult(toolkitResult, {
359
452
  items,
360
453
  total: items.length,
@@ -362,8 +455,9 @@ export function buildInspectionTools(pool) {
362
455
  ...(feedback !== undefined ? {
363
456
  available_fields: [...feedback.available_fields],
364
457
  unknown_fields: [...feedback.unknown_fields],
365
- ...(unknownNote.trim() !== '' ? { projection_warning: unknownNote.trim() } : {}),
458
+ field_coverage: { ...feedback.field_coverage },
366
459
  } : {}),
460
+ ...(projectionNote !== '' ? { projection_warning: projectionNote } : {}),
367
461
  }), site);
368
462
  }
369
463
  catch (e) {
@@ -378,24 +472,9 @@ export function buildInspectionTools(pool) {
378
472
  buildElementTypeGetSchemaTool(pool),
379
473
  ];
380
474
  }
381
- /**
382
- * F-203 follow-up (Audit 2026-05-26 reviewer Gap 2): factored out of
383
- * `buildInspectionTools` so the shape + refined ZodObject pair lives in
384
- * one place. The SDK's pre-handler validator honours the top-level
385
- * `.refine()` on `TYPE_SCHEMA_REFINED` and raises
386
- * JSON-RPC `-32602 InvalidParams` when violated — hosts see the
387
- * failure BEFORE the handler ever runs. The raw shape stays for
388
- * handler-type inference (see `inputSchema`).
389
- */
390
475
  function buildElementTypeGetSchemaTool(pool) {
391
476
  const TYPE_SCHEMA_SHAPE = {
392
477
  site_id: SITE_ID_SCHEMA,
393
- // 1.0.1 cross-tool parameter naming alignment: every other
394
- // tool in this domain uses `element_type` (element_add,
395
- // element_update_settings, element_list rows). This tool
396
- // originally shipped with `type_name`; we accept BOTH for
397
- // backward-compatibility but the canonical key going
398
- // forward is `element_type`.
399
478
  element_type: z
400
479
  .string()
401
480
  .min(1)
@@ -409,148 +488,232 @@ function buildElementTypeGetSchemaTool(pool) {
409
488
  .describe('DEPRECATED alias of `element_type` — use `element_type` ' +
410
489
  'instead. Kept for 1.0.x backward-compatibility; will be ' +
411
490
  'removed in a future major.'),
412
- // ELEMENT_WRITE-17 / SOURCES_BINDING-23: this was the only read tool with
413
- // NO way to bound its response (grid returns ~154 field descriptors in one
414
- // blob). `fields[]` sparse-projects each field descriptor to the requested
415
- // sub-keys; `max_chars` caps the text leg — mirroring the sibling reads.
416
491
  fields: FIELDS,
492
+ field_names: FIELD_NAMES,
493
+ name_contains: FIELD_NAME_CONTAINS,
494
+ include_fields: z
495
+ .boolean()
496
+ .optional()
497
+ .describe('Return the full field-descriptor list (e.g. 147 for `grid`). ' +
498
+ 'Default: head data only — binding_contract, minimal_layout ' +
499
+ 'and field_count. `field_names`/`name_contains` also return ' +
500
+ 'descriptors, narrowed to what they select.'),
417
501
  max_chars: MAX_CHARS,
418
502
  };
419
- const TYPE_SCHEMA_REFINED = z
420
- .object(TYPE_SCHEMA_SHAPE)
421
- .refine((args) => (typeof args.element_type === 'string' && args.element_type !== '') ||
422
- (typeof args.type_name === 'string' && args.type_name !== ''), {
423
- message: 'Provide either `element_type` (canonical) or ' +
424
- '`type_name` (deprecated alias).',
425
- });
503
+ const TYPE_SCHEMA_REFINED = strictInputObject('yootheme_builder_element_type_get_schema', TYPE_SCHEMA_SHAPE);
426
504
  return defineTool({
427
505
  name: 'yootheme_builder_element_type_get_schema',
428
- description: 'Fetch a type\'s prop schema before element_add/element_update_settings: ' +
429
- 'unknown prop keys are hard-rejected (error lists valid_prop_keys + ' +
430
- 'did_you_mean). Returns each field as {name,type,label?,enum?,value_hint?,' +
431
- 'group?}, field_count, and a binding_contract for container/item types. Read ' +
432
- 'value_hint+enum first some defaults are SEO-fatal (headline.title_element' +
433
- '→h1); checkbox = boolean true/false; group:"runtime-accepted" = honoured at ' +
434
- 'render but hidden in the builder UI. Bound size with fields[]/max_chars. ' +
435
- 'Operates on the default site unless site_id is provided.',
506
+ description: 'Prop schema; read before element_add/element_update_settings: ' +
507
+ 'undeclared keys are STORED, not refused: warns unknown_prop_keys. ' +
508
+ 'NO element_type: lists the types. With one: head only ' +
509
+ ' binding_contract (containers/items) + groups[] + field_count. ' +
510
+ 'include_fields:true adds every descriptor {name,type,label?,text?,' +
511
+ 'description?,enum?,value_hint?,group?,no_effect?}; ' +
512
+ 'Select descriptors: field_names/name_contains, answered with ' +
513
+ 'field_count/returned_count. value_hint+enum first: some ' +
514
+ 'defaults are SEO-fatal (headline.title_element→h1); checkbox = boolean ' +
515
+ 'true/false; no_effect = read by nothing, never write it; ' +
516
+ 'group:"runtime-accepted" = honoured at render, hidden in UI. ' +
517
+ 'Bound size with fields[]/max_chars.',
436
518
  inputSchema: TYPE_SCHEMA_SHAPE,
437
- // F-203 follow-up: the refined object is what the SDK actually
438
- // validates. The raw shape above stays for handler-type inference.
439
519
  inputObjectSchema: TYPE_SCHEMA_REFINED,
440
520
  outputSchema: TYPE_SCHEMA_OUTPUT_SCHEMA,
441
521
  annotations: readOnly('Get Element Type Schema'),
442
522
  handler: async (args) => {
443
- // Defensive re-assert of the refine — should never fire when
444
- // reached through the SDK (the boundary rejects with -32602
445
- // first), but in-process tests bypass the SDK and call the
446
- // handler directly, so the structured error path stays
447
- // reachable for unit-test coverage.
448
523
  const typeNameInput = typeof args.element_type === 'string' && args.element_type !== ''
449
524
  ? args.element_type
450
525
  : typeof args.type_name === 'string'
451
526
  ? args.type_name
452
527
  : '';
453
- if (typeNameInput === '') {
454
- return errorResult({
455
- error: new Error('Provide either `element_type` (canonical) or ' +
456
- '`type_name` (deprecated alias).'),
457
- context: { site_id: typeof args.site_id === 'string' ? args.site_id : null },
458
- hint: 'Pass `element_type` (e.g. "headline"). Use ' +
459
- 'yootheme_builder_element_types_list to discover valid values.',
460
- });
461
- }
462
- const type_name = typeNameInput;
463
528
  const r = await resolveSiteOrError(pool, typeof args.site_id === 'string' ? args.site_id : undefined);
464
529
  if (!r.ok)
465
530
  return r.error;
466
531
  const { client: siteClient, site } = r;
532
+ if (typeNameInput === '') {
533
+ try {
534
+ const listData = await siteClient.get('/element-types');
535
+ const rows = flattenTypesPayload(listData).map(mapTypeRow);
536
+ const types = rows.map((row) => {
537
+ const child = CONTAINER_TO_ITEM_TYPE[row.name];
538
+ return {
539
+ name: row.name,
540
+ ...(typeof row.label === 'string' && row.label !== ''
541
+ ? { label: row.label }
542
+ : {}),
543
+ ...(child !== undefined ? { requires_child_type: child } : {}),
544
+ };
545
+ });
546
+ const lines = types
547
+ .map((t) => t.requires_child_type !== undefined
548
+ ? `${t.name} (needs a ${t.requires_child_type} child)`
549
+ : t.name)
550
+ .join('\n');
551
+ return withSiteMeta(structuredResult({
552
+ content: [
553
+ {
554
+ type: 'text',
555
+ text: `${String(types.length)} element types. Read one ` +
556
+ 'with yootheme_builder_element_type_get_schema(' +
557
+ '{ element_type: "<NAME>" }) — that returns the ' +
558
+ 'binding contract and the field COUNT; add ' +
559
+ 'include_fields:true for the descriptors.' +
560
+ `\n\n${lines}`,
561
+ },
562
+ ],
563
+ }, { element_types: types, total: types.length }), site);
564
+ }
565
+ catch (e) {
566
+ return withSiteMeta(errorResult({
567
+ error: e,
568
+ context: { site_id: site.id },
569
+ hint: 'Use yootheme_builder_health to check connectivity + auth.',
570
+ }), site);
571
+ }
572
+ }
573
+ const type_name = typeNameInput;
467
574
  try {
468
575
  const data = await siteClient.get(`/element-types/${encodeURIComponent(type_name)}/schema`);
469
- // The REST endpoint nests the type schema under `schema`:
470
- // {type_name, schema:{name,label,origin,has_children,fields:[…]}}.
471
- // Fall back to the top-level object for older backends.
472
576
  const schema = data.schema !== null && typeof data.schema === 'object'
473
577
  ? data.schema
474
578
  : data;
475
579
  const name = typeof schema.name === 'string' ? schema.name : type_name;
476
580
  const label = typeof schema.label === 'string' ? schema.label : undefined;
477
581
  const origin = typeof schema.origin === 'string' ? schema.origin : undefined;
478
- // `fields` is a list of {name,type,label?} field descriptors.
479
582
  const rawFields = Array.isArray(schema.fields)
480
583
  ? schema.fields
481
584
  : undefined;
482
- // ELEMENT_WRITE-4 (part 1): the node-level keys {name,status,
483
- // source,id} are siblings of `props`, NOT props — but they render
484
- // in the Fields table with no group, so an agent writes props.name
485
- // via element_add and it is silently accepted (name is a fields[]
486
- // entry). Annotate them so the agent knows they live OUTSIDE props.
487
585
  const annotatedFields = rawFields !== undefined ? annotateNodeLevelFields(rawFields) : undefined;
488
- // ELEMENT_WRITE-17 / SOURCES_BINDING-23: project each descriptor to
489
- // the requested sub-keys when `fields[]` was passed (bounds the
490
- // structured leg); `max_chars` bounds the text leg below.
491
586
  const fieldsParam = Array.isArray(args.fields) &&
492
587
  args.fields.every((f) => typeof f === 'string')
493
588
  ? args.fields
494
589
  : undefined;
495
590
  const maxChars = typeof args.max_chars === 'number' ? args.max_chars : undefined;
496
- const fields = annotatedFields !== undefined
497
- ? projectFields(annotatedFields, fieldsParam, [])
591
+ const fieldNamesParam = Array.isArray(args.field_names) &&
592
+ args.field_names.every((f) => typeof f === 'string')
593
+ ? args.field_names
498
594
  : undefined;
595
+ const nameContains = typeof args.name_contains === 'string' ? args.name_contains : undefined;
596
+ const wantsDescriptors = args.include_fields === true ||
597
+ fieldsParam !== undefined ||
598
+ fieldNamesParam !== undefined ||
599
+ nameContains !== undefined;
600
+ const selected = annotatedFields !== undefined && wantsDescriptors
601
+ ? selectDescriptorsByName(annotatedFields, fieldNamesParam, nameContains)
602
+ : undefined;
603
+ const fields = selected !== undefined
604
+ ? projectFields(selected, fieldsParam, [])
605
+ : undefined;
606
+ const descriptorFeedback = projectionFeedback(selected ?? [], fieldsParam);
607
+ const descriptorNote = projectionNoteText(projectionCoverageBlock(descriptorFeedback?.field_coverage, descriptorFeedback?.unknown_fields), projectionInlineNote(descriptorFeedback, fieldsParam));
608
+ const descriptorNoteBlock = projectionDetailBlock(descriptorFeedback, fieldsParam);
499
609
  const fieldCount = annotatedFields !== undefined ? annotatedFields.length : 0;
500
- // Wave-6 R3 (2026-05-29): attach a binding contract so
501
- // the agent doesn't have to reverse-engineer the
502
- // Multi-Items pattern from layout + inspection probes.
610
+ const returnedCount = selected !== undefined ? selected.length : 0;
611
+ const nextStep = wantsDescriptors
612
+ ? undefined
613
+ : `yootheme_builder_element_type_get_schema({ element_type: "${name}", ` +
614
+ `include_fields: true }) returns all ${String(fieldCount)} field ` +
615
+ 'descriptors; field_names/name_contains return a subset.';
616
+ const groups = narrowGroupsToSelection(schema.groups, selected);
617
+ const renderRules = extractRenderRules(schema);
618
+ const sharedRules = extractSharedRuleNotes(schema, selected);
619
+ const claimProvenance = extractClaimProvenance(schema);
503
620
  const bindingContract = deriveBindingContract(name);
504
- const toolkitResult = detailResult(buildTypeSchemaDetail({
621
+ const toolkitResult = detailResult({
622
+ ...buildTypeSchemaDetail({
623
+ name,
624
+ label,
625
+ origin,
626
+ fields,
627
+ fieldCount,
628
+ returnedCount,
629
+ ...(fieldsParam !== undefined && fieldsParam.length > 0 && selected !== undefined
630
+ ? {
631
+ descriptorNames: selected.map((d) => typeof d.name === 'string' ? d.name : ''),
632
+ projectedFields: fieldsParam,
633
+ }
634
+ : {}),
635
+ ...(bindingContract !== undefined
636
+ ? {
637
+ bindingContract: {
638
+ kind: bindingContract.kind,
639
+ pattern: bindingContract.pattern,
640
+ ...(bindingContract.child_type !== undefined
641
+ ? { child_type: bindingContract.child_type }
642
+ : {}),
643
+ ...(bindingContract.binding_target_props !== undefined
644
+ ? {
645
+ binding_target_props: bindingContract.binding_target_props,
646
+ }
647
+ : {}),
648
+ ...(bindingContract.canonical_text_prop !== undefined
649
+ ? {
650
+ canonical_text_prop: bindingContract.canonical_text_prop,
651
+ }
652
+ : {}),
653
+ ...(bindingContract.location_prop !== undefined
654
+ ? { location_prop: bindingContract.location_prop }
655
+ : {}),
656
+ ...(bindingContract.set_via_tool !== undefined
657
+ ? { set_via_tool: bindingContract.set_via_tool }
658
+ : {}),
659
+ ...(bindingContract.discover_source_tool !== undefined
660
+ ? {
661
+ discover_source_tool: bindingContract.discover_source_tool,
662
+ }
663
+ : {}),
664
+ ...(bindingContract.do_not !== undefined
665
+ ? { do_not: bindingContract.do_not }
666
+ : {}),
667
+ ...(bindingContract.minimal_layout !== undefined
668
+ ? { minimal_layout: bindingContract.minimal_layout }
669
+ : {}),
670
+ },
671
+ }
672
+ : {}),
673
+ }),
674
+ includeMeta: false,
675
+ });
676
+ return withSiteMeta(structuredResult(applyMaxChars(prependTextBlock(toolkitResult, descriptorNoteBlock), maxChars), {
505
677
  name,
506
- label,
507
- origin,
508
- fields,
509
- ...(bindingContract !== undefined
678
+ ...(label !== undefined ? { label } : {}),
679
+ ...(origin !== undefined ? { origin } : {}),
680
+ ...(descriptorFeedback !== undefined
510
681
  ? {
511
- bindingContract: {
512
- kind: bindingContract.kind,
513
- pattern: bindingContract.pattern,
514
- ...(bindingContract.child_type !== undefined
515
- ? { child_type: bindingContract.child_type }
516
- : {}),
517
- ...(bindingContract.binding_target_props !== undefined
518
- ? {
519
- binding_target_props: bindingContract.binding_target_props,
520
- }
521
- : {}),
522
- ...(bindingContract.canonical_text_prop !== undefined
523
- ? {
524
- canonical_text_prop: bindingContract.canonical_text_prop,
525
- }
526
- : {}),
527
- ...(bindingContract.location_prop !== undefined
528
- ? { location_prop: bindingContract.location_prop }
529
- : {}),
530
- ...(bindingContract.set_via_tool !== undefined
531
- ? { set_via_tool: bindingContract.set_via_tool }
532
- : {}),
533
- ...(bindingContract.discover_source_tool !== undefined
534
- ? {
535
- discover_source_tool: bindingContract.discover_source_tool,
536
- }
537
- : {}),
538
- ...(bindingContract.do_not !== undefined
539
- ? { do_not: bindingContract.do_not }
540
- : {}),
541
- ...(bindingContract.minimal_layout !== undefined
542
- ? { minimal_layout: bindingContract.minimal_layout }
543
- : {}),
544
- },
682
+ available_fields: [...descriptorFeedback.available_fields],
683
+ unknown_fields: [...descriptorFeedback.unknown_fields],
684
+ field_coverage: { ...descriptorFeedback.field_coverage },
545
685
  }
546
686
  : {}),
547
- }));
548
- return withSiteMeta(structuredResult(applyMaxChars(toolkitResult, maxChars), {
549
- name,
550
- ...(label !== undefined ? { label } : {}),
551
- ...(origin !== undefined ? { origin } : {}),
687
+ ...(descriptorNote !== ''
688
+ ? { projection_warning: descriptorNote }
689
+ : {}),
690
+ ...(fieldsParam !== undefined && fieldsParam.length > 0
691
+ ? { projected_fields: [...fieldsParam] }
692
+ : {}),
693
+ ...(groups !== undefined ? { groups } : {}),
694
+ ...(renderRules.renders_only_if !== undefined
695
+ ? { renders_only_if: renderRules.renders_only_if }
696
+ : {}),
697
+ ...(renderRules.blanked_by_parent !== undefined
698
+ ? { blanked_by_parent: renderRules.blanked_by_parent }
699
+ : {}),
700
+ ...(renderRules.media_autoswap !== undefined
701
+ ? { media_autoswap: renderRules.media_autoswap }
702
+ : {}),
703
+ ...(renderRules.placeholder_fallback !== undefined
704
+ ? { placeholder_fallback: renderRules.placeholder_fallback }
705
+ : {}),
706
+ ...(sharedRules.rules !== undefined ? { rules: sharedRules.rules } : {}),
707
+ ...(sharedRules.rule_notes !== undefined
708
+ ? { rule_notes: sharedRules.rule_notes }
709
+ : {}),
710
+ ...(claimProvenance !== undefined
711
+ ? { claims_verified_on: claimProvenance }
712
+ : {}),
552
713
  ...(fields !== undefined ? { fields } : {}),
553
714
  field_count: fieldCount,
715
+ returned_count: returnedCount,
716
+ ...(nextStep !== undefined ? { next_step: nextStep } : {}),
554
717
  ...(bindingContract !== undefined
555
718
  ? { binding_contract: bindingContract }
556
719
  : {}),