@wootsup/yt-builder-mcp 1.1.6 → 1.2.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 (430) hide show
  1. package/README.md +7 -7
  2. package/bin/yt-builder-mcp.js +55 -40
  3. package/dist/auth.d.ts +137 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +244 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/cli/invocation-decision.d.ts +57 -0
  8. package/dist/cli/invocation-decision.d.ts.map +1 -0
  9. package/dist/cli/invocation-decision.js +86 -0
  10. package/dist/cli/invocation-decision.js.map +1 -0
  11. package/dist/client.d.ts +112 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +190 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/clients/claude-code.d.ts +18 -0
  16. package/dist/clients/claude-code.d.ts.map +1 -0
  17. package/dist/clients/claude-code.js +55 -0
  18. package/dist/clients/claude-code.js.map +1 -0
  19. package/dist/clients/claude-desktop.d.ts +19 -0
  20. package/dist/clients/claude-desktop.d.ts.map +1 -0
  21. package/dist/clients/claude-desktop.js +58 -0
  22. package/dist/clients/claude-desktop.js.map +1 -0
  23. package/dist/clients/cline.d.ts +26 -0
  24. package/dist/clients/cline.d.ts.map +1 -0
  25. package/dist/clients/cline.js +82 -0
  26. package/dist/clients/cline.js.map +1 -0
  27. package/dist/clients/codex-cli.d.ts +42 -0
  28. package/dist/clients/codex-cli.d.ts.map +1 -0
  29. package/dist/clients/codex-cli.js +292 -0
  30. package/dist/clients/codex-cli.js.map +1 -0
  31. package/dist/clients/continue.d.ts +13 -0
  32. package/dist/clients/continue.d.ts.map +1 -0
  33. package/dist/clients/continue.js +121 -0
  34. package/dist/clients/continue.js.map +1 -0
  35. package/dist/clients/cursor.d.ts +12 -0
  36. package/dist/clients/cursor.d.ts.map +1 -0
  37. package/dist/clients/cursor.js +40 -0
  38. package/dist/clients/cursor.js.map +1 -0
  39. package/dist/clients/gemini-cli.d.ts +18 -0
  40. package/dist/clients/gemini-cli.d.ts.map +1 -0
  41. package/dist/clients/gemini-cli.js +46 -0
  42. package/dist/clients/gemini-cli.js.map +1 -0
  43. package/dist/clients/home.d.ts +14 -0
  44. package/dist/clients/home.d.ts.map +1 -0
  45. package/dist/clients/home.js +20 -0
  46. package/dist/clients/home.js.map +1 -0
  47. package/dist/clients/index.d.ts +156 -0
  48. package/dist/clients/index.d.ts.map +1 -0
  49. package/dist/clients/index.js +213 -0
  50. package/dist/clients/index.js.map +1 -0
  51. package/dist/clients/roo-code.d.ts +23 -0
  52. package/dist/clients/roo-code.d.ts.map +1 -0
  53. package/dist/clients/roo-code.js +71 -0
  54. package/dist/clients/roo-code.js.map +1 -0
  55. package/dist/clients/zed.d.ts +12 -0
  56. package/dist/clients/zed.d.ts.map +1 -0
  57. package/dist/clients/zed.js +43 -0
  58. package/dist/clients/zed.js.map +1 -0
  59. package/dist/errors/hints.d.ts +51 -0
  60. package/dist/errors/hints.d.ts.map +1 -0
  61. package/dist/errors/hints.js +95 -0
  62. package/dist/errors/hints.js.map +1 -0
  63. package/dist/errors/mask.d.ts +35 -0
  64. package/dist/errors/mask.d.ts.map +1 -0
  65. package/dist/errors/mask.js +49 -0
  66. package/dist/errors/mask.js.map +1 -0
  67. package/dist/errors/sanitize.d.ts +31 -0
  68. package/dist/errors/sanitize.d.ts.map +1 -0
  69. package/dist/errors/sanitize.js +100 -0
  70. package/dist/errors/sanitize.js.map +1 -0
  71. package/dist/errors.d.ts +42 -0
  72. package/dist/errors.d.ts.map +1 -0
  73. package/dist/errors.js +61 -0
  74. package/dist/errors.js.map +1 -0
  75. package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
  76. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
  77. package/dist/gateway/advanced-tool/discovery.js +53 -0
  78. package/dist/gateway/advanced-tool/discovery.js.map +1 -0
  79. package/dist/gateway/advanced-tool/domains.d.ts +47 -0
  80. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
  81. package/dist/gateway/advanced-tool/domains.js +94 -0
  82. package/dist/gateway/advanced-tool/domains.js.map +1 -0
  83. package/dist/gateway/advanced-tool/execute.d.ts +29 -0
  84. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
  85. package/dist/gateway/advanced-tool/execute.js +54 -0
  86. package/dist/gateway/advanced-tool/execute.js.map +1 -0
  87. package/dist/gateway/advanced-tool/index.d.ts +36 -0
  88. package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
  89. package/dist/gateway/advanced-tool/index.js +39 -0
  90. package/dist/gateway/advanced-tool/index.js.map +1 -0
  91. package/dist/gateway/advanced-tool/register.d.ts +18 -0
  92. package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
  93. package/dist/gateway/advanced-tool/register.js +69 -0
  94. package/dist/gateway/advanced-tool/register.js.map +1 -0
  95. package/dist/gateway/advanced-tool.d.ts +13 -0
  96. package/dist/gateway/advanced-tool.d.ts.map +1 -0
  97. package/dist/gateway/advanced-tool.js +13 -0
  98. package/dist/gateway/advanced-tool.js.map +1 -0
  99. package/dist/gateway/capturing-server.d.ts +117 -0
  100. package/dist/gateway/capturing-server.d.ts.map +1 -0
  101. package/dist/gateway/capturing-server.js +103 -0
  102. package/dist/gateway/capturing-server.js.map +1 -0
  103. package/dist/gateway/essentials.d.ts +50 -0
  104. package/dist/gateway/essentials.d.ts.map +1 -0
  105. package/dist/gateway/essentials.js +108 -0
  106. package/dist/gateway/essentials.js.map +1 -0
  107. package/dist/gateway/test-support.d.ts +41 -0
  108. package/dist/gateway/test-support.d.ts.map +1 -0
  109. package/dist/gateway/test-support.js +60 -0
  110. package/dist/gateway/test-support.js.map +1 -0
  111. package/dist/index.d.ts +30 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +119 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/install-skill.d.ts +43 -0
  116. package/dist/install-skill.d.ts.map +1 -0
  117. package/dist/install-skill.js +118 -0
  118. package/dist/install-skill.js.map +1 -0
  119. package/dist/platform/detect.d.ts +64 -0
  120. package/dist/platform/detect.d.ts.map +1 -0
  121. package/dist/platform/detect.js +98 -0
  122. package/dist/platform/detect.js.map +1 -0
  123. package/dist/platform/index.d.ts +121 -0
  124. package/dist/platform/index.d.ts.map +1 -0
  125. package/dist/platform/index.js +176 -0
  126. package/dist/platform/index.js.map +1 -0
  127. package/dist/platform/joomla.d.ts +44 -0
  128. package/dist/platform/joomla.d.ts.map +1 -0
  129. package/dist/platform/joomla.js +46 -0
  130. package/dist/platform/joomla.js.map +1 -0
  131. package/dist/server.d.ts +110 -0
  132. package/dist/server.d.ts.map +1 -0
  133. package/dist/server.js +274 -0
  134. package/dist/server.js.map +1 -0
  135. package/dist/setup-cli-confirm.d.ts +36 -0
  136. package/dist/setup-cli-confirm.d.ts.map +1 -0
  137. package/dist/setup-cli-confirm.js +59 -0
  138. package/dist/setup-cli-confirm.js.map +1 -0
  139. package/dist/setup-cli.d.ts +193 -0
  140. package/dist/setup-cli.d.ts.map +1 -0
  141. package/dist/setup-cli.js +1032 -0
  142. package/dist/setup-cli.js.map +1 -0
  143. package/dist/setup-prompts.d.ts +64 -0
  144. package/dist/setup-prompts.d.ts.map +1 -0
  145. package/dist/setup-prompts.js +221 -0
  146. package/dist/setup-prompts.js.map +1 -0
  147. package/dist/setup-token.d.ts +38 -0
  148. package/dist/setup-token.d.ts.map +1 -0
  149. package/dist/setup-token.js +106 -0
  150. package/dist/setup-token.js.map +1 -0
  151. package/dist/setup-wizard-defaults.d.ts +43 -0
  152. package/dist/setup-wizard-defaults.d.ts.map +1 -0
  153. package/dist/setup-wizard-defaults.js +160 -0
  154. package/dist/setup-wizard-defaults.js.map +1 -0
  155. package/dist/setup-wizard-handshake.d.ts +25 -0
  156. package/dist/setup-wizard-handshake.d.ts.map +1 -0
  157. package/dist/setup-wizard-handshake.js +103 -0
  158. package/dist/setup-wizard-handshake.js.map +1 -0
  159. package/dist/setup-wizard-types.d.ts +164 -0
  160. package/dist/setup-wizard-types.d.ts.map +1 -0
  161. package/dist/setup-wizard-types.js +11 -0
  162. package/dist/setup-wizard-types.js.map +1 -0
  163. package/dist/setup-wizard.d.ts +33 -0
  164. package/dist/setup-wizard.d.ts.map +1 -0
  165. package/dist/setup-wizard.js +199 -0
  166. package/dist/setup-wizard.js.map +1 -0
  167. package/dist/setup.d.ts +17 -0
  168. package/dist/setup.d.ts.map +1 -0
  169. package/dist/setup.js +33 -0
  170. package/dist/setup.js.map +1 -0
  171. package/dist/sites/bootstrap.d.ts +41 -0
  172. package/dist/sites/bootstrap.d.ts.map +1 -0
  173. package/dist/sites/bootstrap.js +58 -0
  174. package/dist/sites/bootstrap.js.map +1 -0
  175. package/dist/sites/cli/add-site.d.ts +106 -0
  176. package/dist/sites/cli/add-site.d.ts.map +1 -0
  177. package/dist/sites/cli/add-site.js +185 -0
  178. package/dist/sites/cli/add-site.js.map +1 -0
  179. package/dist/sites/cli/list-sites.d.ts +40 -0
  180. package/dist/sites/cli/list-sites.d.ts.map +1 -0
  181. package/dist/sites/cli/list-sites.js +116 -0
  182. package/dist/sites/cli/list-sites.js.map +1 -0
  183. package/dist/sites/cli/remove-site.d.ts +60 -0
  184. package/dist/sites/cli/remove-site.d.ts.map +1 -0
  185. package/dist/sites/cli/remove-site.js +120 -0
  186. package/dist/sites/cli/remove-site.js.map +1 -0
  187. package/dist/sites/cli/set-default.d.ts +47 -0
  188. package/dist/sites/cli/set-default.d.ts.map +1 -0
  189. package/dist/sites/cli/set-default.js +69 -0
  190. package/dist/sites/cli/set-default.js.map +1 -0
  191. package/dist/sites/cli/test-site.d.ts +77 -0
  192. package/dist/sites/cli/test-site.d.ts.map +1 -0
  193. package/dist/sites/cli/test-site.js +146 -0
  194. package/dist/sites/cli/test-site.js.map +1 -0
  195. package/dist/sites/client-pool.d.ts +157 -0
  196. package/dist/sites/client-pool.d.ts.map +1 -0
  197. package/dist/sites/client-pool.js +222 -0
  198. package/dist/sites/client-pool.js.map +1 -0
  199. package/dist/sites/env-bridge.d.ts +55 -0
  200. package/dist/sites/env-bridge.d.ts.map +1 -0
  201. package/dist/sites/env-bridge.js +94 -0
  202. package/dist/sites/env-bridge.js.map +1 -0
  203. package/dist/sites/paths.d.ts +21 -0
  204. package/dist/sites/paths.d.ts.map +1 -0
  205. package/dist/sites/paths.js +37 -0
  206. package/dist/sites/paths.js.map +1 -0
  207. package/dist/sites/probe.d.ts +60 -0
  208. package/dist/sites/probe.d.ts.map +1 -0
  209. package/dist/sites/probe.js +112 -0
  210. package/dist/sites/probe.js.map +1 -0
  211. package/dist/sites/registry.d.ts +142 -0
  212. package/dist/sites/registry.d.ts.map +1 -0
  213. package/dist/sites/registry.js +163 -0
  214. package/dist/sites/registry.js.map +1 -0
  215. package/dist/sites/schema.d.ts +90 -0
  216. package/dist/sites/schema.d.ts.map +1 -0
  217. package/dist/sites/schema.js +71 -0
  218. package/dist/sites/schema.js.map +1 -0
  219. package/dist/sites/secret-resolver.d.ts +115 -0
  220. package/dist/sites/secret-resolver.d.ts.map +1 -0
  221. package/dist/sites/secret-resolver.js +225 -0
  222. package/dist/sites/secret-resolver.js.map +1 -0
  223. package/dist/sites/store.d.ts +82 -0
  224. package/dist/sites/store.d.ts.map +1 -0
  225. package/dist/sites/store.js +198 -0
  226. package/dist/sites/store.js.map +1 -0
  227. package/dist/sites/tools/index.d.ts +28 -0
  228. package/dist/sites/tools/index.d.ts.map +1 -0
  229. package/dist/sites/tools/index.js +38 -0
  230. package/dist/sites/tools/index.js.map +1 -0
  231. package/dist/sites/tools/sites-list.d.ts +48 -0
  232. package/dist/sites/tools/sites-list.d.ts.map +1 -0
  233. package/dist/sites/tools/sites-list.js +137 -0
  234. package/dist/sites/tools/sites-list.js.map +1 -0
  235. package/dist/sites/tools/sites-test.d.ts +47 -0
  236. package/dist/sites/tools/sites-test.d.ts.map +1 -0
  237. package/dist/sites/tools/sites-test.js +148 -0
  238. package/dist/sites/tools/sites-test.js.map +1 -0
  239. package/dist/sites/tools/use-site.d.ts +47 -0
  240. package/dist/sites/tools/use-site.d.ts.map +1 -0
  241. package/dist/sites/tools/use-site.js +183 -0
  242. package/dist/sites/tools/use-site.js.map +1 -0
  243. package/dist/skill-loader.d.ts +111 -0
  244. package/dist/skill-loader.d.ts.map +1 -0
  245. package/dist/skill-loader.js +191 -0
  246. package/dist/skill-loader.js.map +1 -0
  247. package/dist/tools/elements/builders.d.ts +24 -0
  248. package/dist/tools/elements/builders.d.ts.map +1 -0
  249. package/dist/tools/elements/builders.js +208 -0
  250. package/dist/tools/elements/builders.js.map +1 -0
  251. package/dist/tools/elements/handlers-write.d.ts +49 -0
  252. package/dist/tools/elements/handlers-write.d.ts.map +1 -0
  253. package/dist/tools/elements/handlers-write.js +341 -0
  254. package/dist/tools/elements/handlers-write.js.map +1 -0
  255. package/dist/tools/elements/handlers.d.ts +70 -0
  256. package/dist/tools/elements/handlers.d.ts.map +1 -0
  257. package/dist/tools/elements/handlers.js +292 -0
  258. package/dist/tools/elements/handlers.js.map +1 -0
  259. package/dist/tools/elements/index.d.ts +28 -0
  260. package/dist/tools/elements/index.d.ts.map +1 -0
  261. package/dist/tools/elements/index.js +27 -0
  262. package/dist/tools/elements/index.js.map +1 -0
  263. package/dist/tools/elements.d.ts +13 -0
  264. package/dist/tools/elements.d.ts.map +1 -0
  265. package/dist/tools/elements.js +13 -0
  266. package/dist/tools/elements.js.map +1 -0
  267. package/dist/tools/elicitation.d.ts +87 -0
  268. package/dist/tools/elicitation.d.ts.map +1 -0
  269. package/dist/tools/elicitation.js +100 -0
  270. package/dist/tools/elicitation.js.map +1 -0
  271. package/dist/tools/format/elements-format.d.ts +40 -0
  272. package/dist/tools/format/elements-format.d.ts.map +1 -0
  273. package/dist/tools/format/elements-format.js +193 -0
  274. package/dist/tools/format/elements-format.js.map +1 -0
  275. package/dist/tools/format/health-format.d.ts +79 -0
  276. package/dist/tools/format/health-format.d.ts.map +1 -0
  277. package/dist/tools/format/health-format.js +181 -0
  278. package/dist/tools/format/health-format.js.map +1 -0
  279. package/dist/tools/format/inspection-format.d.ts +70 -0
  280. package/dist/tools/format/inspection-format.d.ts.map +1 -0
  281. package/dist/tools/format/inspection-format.js +359 -0
  282. package/dist/tools/format/inspection-format.js.map +1 -0
  283. package/dist/tools/format/pages-format.d.ts +57 -0
  284. package/dist/tools/format/pages-format.d.ts.map +1 -0
  285. package/dist/tools/format/pages-format.js +157 -0
  286. package/dist/tools/format/pages-format.js.map +1 -0
  287. package/dist/tools/format/sources-format.d.ts +44 -0
  288. package/dist/tools/format/sources-format.d.ts.map +1 -0
  289. package/dist/tools/format/sources-format.js +242 -0
  290. package/dist/tools/format/sources-format.js.map +1 -0
  291. package/dist/tools/health.d.ts +22 -0
  292. package/dist/tools/health.d.ts.map +1 -0
  293. package/dist/tools/health.js +220 -0
  294. package/dist/tools/health.js.map +1 -0
  295. package/dist/tools/index.d.ts +30 -0
  296. package/dist/tools/index.d.ts.map +1 -0
  297. package/dist/tools/index.js +39 -0
  298. package/dist/tools/index.js.map +1 -0
  299. package/dist/tools/inspection.d.ts +14 -0
  300. package/dist/tools/inspection.d.ts.map +1 -0
  301. package/dist/tools/inspection.js +401 -0
  302. package/dist/tools/inspection.js.map +1 -0
  303. package/dist/tools/layout-flatten.d.ts +75 -0
  304. package/dist/tools/layout-flatten.d.ts.map +1 -0
  305. package/dist/tools/layout-flatten.js +107 -0
  306. package/dist/tools/layout-flatten.js.map +1 -0
  307. package/dist/tools/multi-items/builders.d.ts +23 -0
  308. package/dist/tools/multi-items/builders.d.ts.map +1 -0
  309. package/dist/tools/multi-items/builders.js +84 -0
  310. package/dist/tools/multi-items/builders.js.map +1 -0
  311. package/dist/tools/multi-items/clean-implode-handler.d.ts +36 -0
  312. package/dist/tools/multi-items/clean-implode-handler.d.ts.map +1 -0
  313. package/dist/tools/multi-items/clean-implode-handler.js +57 -0
  314. package/dist/tools/multi-items/clean-implode-handler.js.map +1 -0
  315. package/dist/tools/multi-items/format/inspection-format.d.ts +41 -0
  316. package/dist/tools/multi-items/format/inspection-format.d.ts.map +1 -0
  317. package/dist/tools/multi-items/format/inspection-format.js +64 -0
  318. package/dist/tools/multi-items/format/inspection-format.js.map +1 -0
  319. package/dist/tools/multi-items/index.d.ts +18 -0
  320. package/dist/tools/multi-items/index.d.ts.map +1 -0
  321. package/dist/tools/multi-items/index.js +18 -0
  322. package/dist/tools/multi-items/index.js.map +1 -0
  323. package/dist/tools/multi-items/inspect-handler.d.ts +76 -0
  324. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -0
  325. package/dist/tools/multi-items/inspect-handler.js +133 -0
  326. package/dist/tools/multi-items/inspect-handler.js.map +1 -0
  327. package/dist/tools/multi-items/inspection-cache.d.ts +85 -0
  328. package/dist/tools/multi-items/inspection-cache.d.ts.map +1 -0
  329. package/dist/tools/multi-items/inspection-cache.js +126 -0
  330. package/dist/tools/multi-items/inspection-cache.js.map +1 -0
  331. package/dist/tools/multi-items/item-container-map.d.ts +41 -0
  332. package/dist/tools/multi-items/item-container-map.d.ts.map +1 -0
  333. package/dist/tools/multi-items/item-container-map.js +73 -0
  334. package/dist/tools/multi-items/item-container-map.js.map +1 -0
  335. package/dist/tools/pages/builders.d.ts +43 -0
  336. package/dist/tools/pages/builders.d.ts.map +1 -0
  337. package/dist/tools/pages/builders.js +229 -0
  338. package/dist/tools/pages/builders.js.map +1 -0
  339. package/dist/tools/pages/handlers-read.d.ts +33 -0
  340. package/dist/tools/pages/handlers-read.d.ts.map +1 -0
  341. package/dist/tools/pages/handlers-read.js +260 -0
  342. package/dist/tools/pages/handlers-read.js.map +1 -0
  343. package/dist/tools/pages/handlers-write.d.ts +63 -0
  344. package/dist/tools/pages/handlers-write.d.ts.map +1 -0
  345. package/dist/tools/pages/handlers-write.js +127 -0
  346. package/dist/tools/pages/handlers-write.js.map +1 -0
  347. package/dist/tools/pages/index.d.ts +17 -0
  348. package/dist/tools/pages/index.d.ts.map +1 -0
  349. package/dist/tools/pages/index.js +17 -0
  350. package/dist/tools/pages/index.js.map +1 -0
  351. package/dist/tools/pages/schemas.d.ts +157 -0
  352. package/dist/tools/pages/schemas.d.ts.map +1 -0
  353. package/dist/tools/pages/schemas.js +232 -0
  354. package/dist/tools/pages/schemas.js.map +1 -0
  355. package/dist/tools/pages.d.ts +13 -0
  356. package/dist/tools/pages.d.ts.map +1 -0
  357. package/dist/tools/pages.js +13 -0
  358. package/dist/tools/pages.js.map +1 -0
  359. package/dist/tools/pool-resolve-helper.d.ts +83 -0
  360. package/dist/tools/pool-resolve-helper.d.ts.map +1 -0
  361. package/dist/tools/pool-resolve-helper.js +148 -0
  362. package/dist/tools/pool-resolve-helper.js.map +1 -0
  363. package/dist/tools/progress-phases.d.ts +46 -0
  364. package/dist/tools/progress-phases.d.ts.map +1 -0
  365. package/dist/tools/progress-phases.js +48 -0
  366. package/dist/tools/progress-phases.js.map +1 -0
  367. package/dist/tools/shared-schemas.d.ts +25 -0
  368. package/dist/tools/shared-schemas.d.ts.map +1 -0
  369. package/dist/tools/shared-schemas.js +72 -0
  370. package/dist/tools/shared-schemas.js.map +1 -0
  371. package/dist/tools/sources/builders.d.ts +13 -0
  372. package/dist/tools/sources/builders.d.ts.map +1 -0
  373. package/dist/tools/sources/builders.js +118 -0
  374. package/dist/tools/sources/builders.js.map +1 -0
  375. package/dist/tools/sources/handlers-bind.d.ts +28 -0
  376. package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
  377. package/dist/tools/sources/handlers-bind.js +181 -0
  378. package/dist/tools/sources/handlers-bind.js.map +1 -0
  379. package/dist/tools/sources/handlers.d.ts +47 -0
  380. package/dist/tools/sources/handlers.d.ts.map +1 -0
  381. package/dist/tools/sources/handlers.js +108 -0
  382. package/dist/tools/sources/handlers.js.map +1 -0
  383. package/dist/tools/sources/index.d.ts +19 -0
  384. package/dist/tools/sources/index.d.ts.map +1 -0
  385. package/dist/tools/sources/index.js +18 -0
  386. package/dist/tools/sources/index.js.map +1 -0
  387. package/dist/tools/sources.d.ts +14 -0
  388. package/dist/tools/sources.d.ts.map +1 -0
  389. package/dist/tools/sources.js +14 -0
  390. package/dist/tools/sources.js.map +1 -0
  391. package/dist/tools/sparse-fields.d.ts +106 -0
  392. package/dist/tools/sparse-fields.d.ts.map +1 -0
  393. package/dist/tools/sparse-fields.js +165 -0
  394. package/dist/tools/sparse-fields.js.map +1 -0
  395. package/dist/tools/tool-builder/annotations.d.ts +55 -0
  396. package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
  397. package/dist/tools/tool-builder/annotations.js +86 -0
  398. package/dist/tools/tool-builder/annotations.js.map +1 -0
  399. package/dist/tools/tool-builder/define.d.ts +31 -0
  400. package/dist/tools/tool-builder/define.d.ts.map +1 -0
  401. package/dist/tools/tool-builder/define.js +31 -0
  402. package/dist/tools/tool-builder/define.js.map +1 -0
  403. package/dist/tools/tool-builder/index.d.ts +28 -0
  404. package/dist/tools/tool-builder/index.d.ts.map +1 -0
  405. package/dist/tools/tool-builder/index.js +27 -0
  406. package/dist/tools/tool-builder/index.js.map +1 -0
  407. package/dist/tools/tool-builder/results.d.ts +104 -0
  408. package/dist/tools/tool-builder/results.d.ts.map +1 -0
  409. package/dist/tools/tool-builder/results.js +224 -0
  410. package/dist/tools/tool-builder/results.js.map +1 -0
  411. package/dist/tools/tool-builder/types.d.ts +97 -0
  412. package/dist/tools/tool-builder/types.d.ts.map +1 -0
  413. package/dist/tools/tool-builder/types.js +9 -0
  414. package/dist/tools/tool-builder/types.js.map +1 -0
  415. package/dist/tools/tool-builder.d.ts +16 -0
  416. package/dist/tools/tool-builder.d.ts.map +1 -0
  417. package/dist/tools/tool-builder.js +16 -0
  418. package/dist/tools/tool-builder.js.map +1 -0
  419. package/dist/uninstall-skill.d.ts +52 -0
  420. package/dist/uninstall-skill.d.ts.map +1 -0
  421. package/dist/uninstall-skill.js +146 -0
  422. package/dist/uninstall-skill.js.map +1 -0
  423. package/dist/uninstall.d.ts +73 -0
  424. package/dist/uninstall.d.ts.map +1 -0
  425. package/dist/uninstall.js +82 -0
  426. package/dist/uninstall.js.map +1 -0
  427. package/icon.png +0 -0
  428. package/manifest.json +10 -10
  429. package/package.json +4 -1
  430. package/skills/yt-builder-mcp/SKILL.md +30 -26
@@ -0,0 +1,142 @@
1
+ /**
2
+ * W3 — Site Registry + Platform-Cache.
3
+ *
4
+ * Wraps a parsed {@link SitesFileT} and provides:
5
+ * - O(1) {@link SiteRegistry.get|get(site_id)} lookup.
6
+ * - Insertion-order {@link SiteRegistry.listIds|listIds()} for stable
7
+ * UX in the W7 `sites_list` tool.
8
+ * - {@link SiteRegistry.defaultSiteId|defaultSiteId()} that respects
9
+ * the explicit `default_site_id` first, then falls back to the
10
+ * flagged `is_default:true` entry, then `null`. Auto-promotion of a
11
+ * lone site to default is intentionally NOT done here — that policy
12
+ * belongs to the W4 caller layer.
13
+ * - {@link SiteRegistry.platformFor|platformFor(site_id)} that
14
+ * memoises the resolved {@link Platform} via a
15
+ * `Map<string, Promise<Platform>>`. Storing the **Promise** (not the
16
+ * resolved value) is load-bearing: N parallel first-time callers
17
+ * share the SAME probe (`platformForUrlAsync`) instead of racing N
18
+ * probes against the same site origin. The plan §W3 calls this out
19
+ * explicitly ("Promise-cache, not just result-cache").
20
+ * - {@link SiteRegistry.listForDisplay|listForDisplay()} that surfaces
21
+ * a tabular view for the upcoming W7 sites_list tool. The
22
+ * `platform_resolved` field is intentionally only populated AFTER
23
+ * {@link SiteRegistry.platformFor|platformFor()} has been called for
24
+ * that site_id — listForDisplay() must NEVER trigger a probe on its
25
+ * own (that would defeat the "no surprise network calls in
26
+ * list-tools" contract).
27
+ *
28
+ * @license MIT
29
+ */
30
+ import { type Platform, type PlatformKind } from '../platform/index.js';
31
+ import type { SiteEntryT, SitesFileT } from './schema.js';
32
+ /**
33
+ * Display-side row used by the W7 `sites_list` tool. `bearer_source` is
34
+ * derived from whether the underlying {@link SiteEntryT} has `bearer`
35
+ * (plain) or `bearer_ref` (1Password); the resolver itself is not
36
+ * needed to compute this hint, so we can render the list without ever
37
+ * invoking the 1Password CLI.
38
+ *
39
+ * `platform_resolved` is only set once {@link SiteRegistry.platformFor}
40
+ * has run for that site_id at least once — it is a "peek" into the
41
+ * memo cache, never a trigger for a new probe.
42
+ */
43
+ export interface SiteRowT {
44
+ site_id: string;
45
+ url: string;
46
+ platform_resolved?: 'wordpress' | 'joomla';
47
+ platform_hint: 'wordpress' | 'joomla' | 'auto';
48
+ is_default: boolean;
49
+ label?: string;
50
+ bearer_source: 'plain' | 'op';
51
+ }
52
+ /**
53
+ * Caller-side projection of a registry entry, with the `Platform`
54
+ * already resolved and the bearer-source flagged for downstream logs.
55
+ * Reserved for future call-sites that want the fully-resolved bundle
56
+ * in a single object — the tool builder layer will populate this.
57
+ */
58
+ export interface ResolvedSite {
59
+ readonly id: string;
60
+ readonly url: string;
61
+ readonly platform: Platform;
62
+ readonly isDefault: boolean;
63
+ readonly label?: string;
64
+ readonly bearerSource: 'plain' | 'op';
65
+ }
66
+ /**
67
+ * Optional injection point for tests. Production callers should never
68
+ * pass this — they get the default `platformForUrlAsync` from the
69
+ * platform barrel, which itself does the runtime probe.
70
+ */
71
+ export interface SiteRegistryOptions {
72
+ readonly platformForUrlAsync?: (url: string, hint?: PlatformKind) => Promise<Platform>;
73
+ }
74
+ /**
75
+ * In-memory registry around a parsed sites file. NEVER mutates the
76
+ * input `file`; all "writes" go through {@link saveSitesFile} on the
77
+ * store side, which produces a fresh `SitesFileT` to wrap in a new
78
+ * registry instance.
79
+ */
80
+ export declare class SiteRegistry {
81
+ private readonly file;
82
+ /**
83
+ * Promise-memo for platform resolution. The KEY is the site_id;
84
+ * the VALUE is the in-flight or already-resolved Promise. Parallel
85
+ * callers for the same site_id all receive the same promise and
86
+ * therefore share the one probe.
87
+ */
88
+ private readonly platformCache;
89
+ /**
90
+ * Sync-side mirror of `platformCache` that records the resolved
91
+ * `PlatformKind` once the probe completes. Powers
92
+ * {@link listForDisplay} without forcing it to await or to trigger
93
+ * a probe. Entries land here only AFTER the probe resolves
94
+ * successfully; rejected probes leave the entry absent.
95
+ */
96
+ private readonly resolvedKinds;
97
+ private readonly probe;
98
+ constructor(file: SitesFileT, opts?: SiteRegistryOptions);
99
+ /**
100
+ * Returns the configured default site_id. Resolution order:
101
+ * 1. `file.default_site_id` if set AND points at an entry that
102
+ * actually exists in `file.sites`.
103
+ * 2. The first `is_default:true` entry (W1 schema guarantees at
104
+ * most one).
105
+ * 3. `null` — no default; the W4 caller layer decides whether
106
+ * to auto-promote a lone site.
107
+ */
108
+ defaultSiteId(): string | null;
109
+ /**
110
+ * site_id list in insertion order (the order they appear in
111
+ * `file.sites`). Stable across registry rebuilds because the
112
+ * store preserves array order on save.
113
+ */
114
+ listIds(): readonly string[];
115
+ /**
116
+ * Returns the raw entry for a site_id, or `null` when unknown.
117
+ * O(n) on the entry count — fine for the realistic upper bound
118
+ * (~100 sites per customer).
119
+ */
120
+ get(siteId: string): SiteEntryT | null;
121
+ /**
122
+ * Resolves the {@link Platform} for `siteId` and memoises the
123
+ * Promise. Subsequent calls (including ones still in-flight)
124
+ * return the same Promise — exactly one probe per site_id, even
125
+ * across N parallel callers.
126
+ *
127
+ * @throws Error when the site_id is unknown. Callers should
128
+ * pre-check with {@link get}.
129
+ */
130
+ platformFor(siteId: string): Promise<Platform>;
131
+ /**
132
+ * Map view of the registry for the W7 `sites_list` tool. NEVER
133
+ * triggers a probe: `platform_resolved` is undefined for any site
134
+ * whose `platformFor()` has not yet been called.
135
+ *
136
+ * `bearer_source` is derived from the W1 schema invariant
137
+ * (exactly one of `bearer`/`bearer_ref` is set) so listing never
138
+ * needs to consult the W2 secret-resolver.
139
+ */
140
+ listForDisplay(): readonly SiteRowT[];
141
+ }
142
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACH,KAAK,QAAQ,EAEb,KAAK,YAAY,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC3C,aAAa,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,YAAY,KAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAwBjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAvBzB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;IAEtE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGC;gBAGF,IAAI,EAAE,UAAU,EACjC,IAAI,GAAE,mBAAwB;IAKlC;;;;;;;;OAQG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAY9B;;;;OAIG;IACH,OAAO,IAAI,SAAS,MAAM,EAAE;IAI5B;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAItC;;;;;;;;OAQG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyCpD;;;;;;;;OAQG;IACH,cAAc,IAAI,SAAS,QAAQ,EAAE;CAkBxC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * W3 — Site Registry + Platform-Cache.
3
+ *
4
+ * Wraps a parsed {@link SitesFileT} and provides:
5
+ * - O(1) {@link SiteRegistry.get|get(site_id)} lookup.
6
+ * - Insertion-order {@link SiteRegistry.listIds|listIds()} for stable
7
+ * UX in the W7 `sites_list` tool.
8
+ * - {@link SiteRegistry.defaultSiteId|defaultSiteId()} that respects
9
+ * the explicit `default_site_id` first, then falls back to the
10
+ * flagged `is_default:true` entry, then `null`. Auto-promotion of a
11
+ * lone site to default is intentionally NOT done here — that policy
12
+ * belongs to the W4 caller layer.
13
+ * - {@link SiteRegistry.platformFor|platformFor(site_id)} that
14
+ * memoises the resolved {@link Platform} via a
15
+ * `Map<string, Promise<Platform>>`. Storing the **Promise** (not the
16
+ * resolved value) is load-bearing: N parallel first-time callers
17
+ * share the SAME probe (`platformForUrlAsync`) instead of racing N
18
+ * probes against the same site origin. The plan §W3 calls this out
19
+ * explicitly ("Promise-cache, not just result-cache").
20
+ * - {@link SiteRegistry.listForDisplay|listForDisplay()} that surfaces
21
+ * a tabular view for the upcoming W7 sites_list tool. The
22
+ * `platform_resolved` field is intentionally only populated AFTER
23
+ * {@link SiteRegistry.platformFor|platformFor()} has been called for
24
+ * that site_id — listForDisplay() must NEVER trigger a probe on its
25
+ * own (that would defeat the "no surprise network calls in
26
+ * list-tools" contract).
27
+ *
28
+ * @license MIT
29
+ */
30
+ import { platformForUrlAsync, } from '../platform/index.js';
31
+ /**
32
+ * In-memory registry around a parsed sites file. NEVER mutates the
33
+ * input `file`; all "writes" go through {@link saveSitesFile} on the
34
+ * store side, which produces a fresh `SitesFileT` to wrap in a new
35
+ * registry instance.
36
+ */
37
+ export class SiteRegistry {
38
+ file;
39
+ /**
40
+ * Promise-memo for platform resolution. The KEY is the site_id;
41
+ * the VALUE is the in-flight or already-resolved Promise. Parallel
42
+ * callers for the same site_id all receive the same promise and
43
+ * therefore share the one probe.
44
+ */
45
+ platformCache = new Map();
46
+ /**
47
+ * Sync-side mirror of `platformCache` that records the resolved
48
+ * `PlatformKind` once the probe completes. Powers
49
+ * {@link listForDisplay} without forcing it to await or to trigger
50
+ * a probe. Entries land here only AFTER the probe resolves
51
+ * successfully; rejected probes leave the entry absent.
52
+ */
53
+ resolvedKinds = new Map();
54
+ probe;
55
+ constructor(file, opts = {}) {
56
+ this.file = file;
57
+ this.probe = opts.platformForUrlAsync ?? platformForUrlAsync;
58
+ }
59
+ /**
60
+ * Returns the configured default site_id. Resolution order:
61
+ * 1. `file.default_site_id` if set AND points at an entry that
62
+ * actually exists in `file.sites`.
63
+ * 2. The first `is_default:true` entry (W1 schema guarantees at
64
+ * most one).
65
+ * 3. `null` — no default; the W4 caller layer decides whether
66
+ * to auto-promote a lone site.
67
+ */
68
+ defaultSiteId() {
69
+ const explicit = this.file.default_site_id;
70
+ if (explicit !== null
71
+ && this.file.sites.some((s) => s.site_id === explicit)) {
72
+ return explicit;
73
+ }
74
+ const flagged = this.file.sites.find((s) => s.is_default);
75
+ return flagged ? flagged.site_id : null;
76
+ }
77
+ /**
78
+ * site_id list in insertion order (the order they appear in
79
+ * `file.sites`). Stable across registry rebuilds because the
80
+ * store preserves array order on save.
81
+ */
82
+ listIds() {
83
+ return this.file.sites.map((s) => s.site_id);
84
+ }
85
+ /**
86
+ * Returns the raw entry for a site_id, or `null` when unknown.
87
+ * O(n) on the entry count — fine for the realistic upper bound
88
+ * (~100 sites per customer).
89
+ */
90
+ get(siteId) {
91
+ return this.file.sites.find((s) => s.site_id === siteId) ?? null;
92
+ }
93
+ /**
94
+ * Resolves the {@link Platform} for `siteId` and memoises the
95
+ * Promise. Subsequent calls (including ones still in-flight)
96
+ * return the same Promise — exactly one probe per site_id, even
97
+ * across N parallel callers.
98
+ *
99
+ * @throws Error when the site_id is unknown. Callers should
100
+ * pre-check with {@link get}.
101
+ */
102
+ async platformFor(siteId) {
103
+ const cached = this.platformCache.get(siteId);
104
+ if (cached !== undefined)
105
+ return cached;
106
+ const entry = this.get(siteId);
107
+ if (entry === null) {
108
+ throw new Error(`SiteRegistry: unknown site_id "${siteId}"`);
109
+ }
110
+ // Build the promise synchronously and insert into the cache
111
+ // BEFORE awaiting anything — this is what makes parallel
112
+ // callers share the probe. If `entry.platform` is a concrete
113
+ // hint we still wrap in Promise.resolve so the cache type is
114
+ // uniform.
115
+ const probePromise = entry.platform === 'auto'
116
+ ? this.probe(entry.url)
117
+ : this.probe(entry.url, entry.platform);
118
+ // Tee off a side-channel that records the resolved kind into
119
+ // the sync mirror map so `listForDisplay()` can surface it
120
+ // without awaiting. We swallow rejections here because the
121
+ // original caller (the awaiter of `platformFor`) owns the
122
+ // error contract; the mirror map simply stays empty on
123
+ // failure.
124
+ const memoised = probePromise.then((platform) => {
125
+ this.resolvedKinds.set(siteId, platform.kind);
126
+ return platform;
127
+ }, (err) => {
128
+ // Re-throw so awaiters see the failure, but do not
129
+ // populate the sync mirror.
130
+ throw err instanceof Error ? err : new Error(String(err));
131
+ });
132
+ this.platformCache.set(siteId, memoised);
133
+ return memoised;
134
+ }
135
+ /**
136
+ * Map view of the registry for the W7 `sites_list` tool. NEVER
137
+ * triggers a probe: `platform_resolved` is undefined for any site
138
+ * whose `platformFor()` has not yet been called.
139
+ *
140
+ * `bearer_source` is derived from the W1 schema invariant
141
+ * (exactly one of `bearer`/`bearer_ref` is set) so listing never
142
+ * needs to consult the W2 secret-resolver.
143
+ */
144
+ listForDisplay() {
145
+ return this.file.sites.map((entry) => {
146
+ const resolved = this.resolvedKinds.get(entry.site_id);
147
+ const bearerSource = entry.bearer !== undefined ? 'plain' : 'op';
148
+ const row = {
149
+ site_id: entry.site_id,
150
+ url: entry.url,
151
+ platform_hint: entry.platform,
152
+ is_default: entry.is_default,
153
+ bearer_source: bearerSource,
154
+ };
155
+ if (resolved !== undefined)
156
+ row.platform_resolved = resolved;
157
+ if (entry.label !== undefined)
158
+ row.label = entry.label;
159
+ return row;
160
+ });
161
+ }
162
+ }
163
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sites/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * W1 — Sites-Storage Foundation: Zod schemas for the on-disk sites file.
3
+ *
4
+ * Schema spec frozen by `2026-05-25-04-yt-builder-mcp-multi-site-implementation.md`
5
+ * §W1. Do NOT rename fields without bumping `schema_version` and adding a
6
+ * migration in W3 (registry).
7
+ *
8
+ * The on-disk format is JSON. Each entry represents one connected
9
+ * YOOtheme-Pro-equipped site. A site MUST carry either an inline `bearer`
10
+ * (plain text, for local-dev) OR an `op://` 1Password Secret Reference
11
+ * (`bearer_ref`), never both — enforced via {@link SiteEntry}'s refine().
12
+ *
13
+ * @license MIT
14
+ */
15
+ import { z } from 'zod';
16
+ /**
17
+ * Allowed character set for a `site_id`. Letters, digits, underscore,
18
+ * dash — no spaces, no path separators, no shell metacharacters.
19
+ *
20
+ * Surface: filename-safe, URL-path-safe, log-safe.
21
+ */
22
+ export declare const SITE_ID_REGEX: RegExp;
23
+ /**
24
+ * 1Password Secret Reference shape (`op://<vault>/<item>/<field>` and
25
+ * deeper). Letters, digits, underscore, slash, dot, dash only — same
26
+ * defence-in-depth set the W2 SecretResolver will re-validate before
27
+ * shelling out to `op`.
28
+ *
29
+ * W12-R1.3 (A2-L1): the previous pattern allowed `..` path segments
30
+ * because `.` was in the character class. The `op` CLI does not honour
31
+ * filesystem-style traversal but the input was reaching shell argv
32
+ * verbatim, so a ref like `op://vault/../something` (or worse, encoded
33
+ * in a hand-edited sites.json) muddied the trust boundary. The
34
+ * negative lookahead `(?!.*\/\.\.\/)` rejects any ref containing a
35
+ * `/../` segment without disallowing legitimate `.` in vault/item
36
+ * names (e.g. `op://team.acme/...`).
37
+ */
38
+ export declare const OP_REF_REGEX: RegExp;
39
+ /**
40
+ * Bearer-token shape produced by `KeyService.php`:
41
+ * `ytb_(live|test)_<payloadB64Url>.<sigB64Url>`. Re-validated here so a
42
+ * hand-edited sites.json can never inject a token shape the server would
43
+ * reject anyway.
44
+ */
45
+ export declare const BEARER_REGEX: RegExp;
46
+ /**
47
+ * One site entry. Carries identity (`site_id`), reachability (`url` +
48
+ * `platform`), credential (exactly one of `bearer`/`bearer_ref`), and
49
+ * presentation metadata (`is_default`, `label`, `added_at`).
50
+ */
51
+ export declare const SiteEntry: z.ZodObject<{
52
+ site_id: z.ZodString;
53
+ url: z.ZodString;
54
+ platform: z.ZodDefault<z.ZodEnum<{
55
+ wordpress: "wordpress";
56
+ joomla: "joomla";
57
+ auto: "auto";
58
+ }>>;
59
+ bearer: z.ZodOptional<z.ZodString>;
60
+ bearer_ref: z.ZodOptional<z.ZodString>;
61
+ is_default: z.ZodDefault<z.ZodBoolean>;
62
+ label: z.ZodOptional<z.ZodString>;
63
+ added_at: z.ZodOptional<z.ZodString>;
64
+ }, z.core.$strip>;
65
+ /**
66
+ * The on-disk sites-file root. `schema_version` is a literal `1` for now;
67
+ * future schema migrations bump it AND add a migration step in the W3
68
+ * registry loader.
69
+ */
70
+ export declare const SitesFile: z.ZodObject<{
71
+ schema_version: z.ZodLiteral<1>;
72
+ default_site_id: z.ZodNullable<z.ZodString>;
73
+ sites: z.ZodArray<z.ZodObject<{
74
+ site_id: z.ZodString;
75
+ url: z.ZodString;
76
+ platform: z.ZodDefault<z.ZodEnum<{
77
+ wordpress: "wordpress";
78
+ joomla: "joomla";
79
+ auto: "auto";
80
+ }>>;
81
+ bearer: z.ZodOptional<z.ZodString>;
82
+ bearer_ref: z.ZodOptional<z.ZodString>;
83
+ is_default: z.ZodDefault<z.ZodBoolean>;
84
+ label: z.ZodOptional<z.ZodString>;
85
+ added_at: z.ZodOptional<z.ZodString>;
86
+ }, z.core.$strip>>;
87
+ }, z.core.$strip>;
88
+ export type SiteEntryT = z.infer<typeof SiteEntry>;
89
+ export type SitesFileT = z.infer<typeof SitesFile>;
90
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/sites/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAAqB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,QAA4C,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAqD,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;iBAYrB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;iBAOrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * W1 — Sites-Storage Foundation: Zod schemas for the on-disk sites file.
3
+ *
4
+ * Schema spec frozen by `2026-05-25-04-yt-builder-mcp-multi-site-implementation.md`
5
+ * §W1. Do NOT rename fields without bumping `schema_version` and adding a
6
+ * migration in W3 (registry).
7
+ *
8
+ * The on-disk format is JSON. Each entry represents one connected
9
+ * YOOtheme-Pro-equipped site. A site MUST carry either an inline `bearer`
10
+ * (plain text, for local-dev) OR an `op://` 1Password Secret Reference
11
+ * (`bearer_ref`), never both — enforced via {@link SiteEntry}'s refine().
12
+ *
13
+ * @license MIT
14
+ */
15
+ import { z } from 'zod';
16
+ /**
17
+ * Allowed character set for a `site_id`. Letters, digits, underscore,
18
+ * dash — no spaces, no path separators, no shell metacharacters.
19
+ *
20
+ * Surface: filename-safe, URL-path-safe, log-safe.
21
+ */
22
+ export const SITE_ID_REGEX = /^[a-zA-Z0-9_-]+$/;
23
+ /**
24
+ * 1Password Secret Reference shape (`op://<vault>/<item>/<field>` and
25
+ * deeper). Letters, digits, underscore, slash, dot, dash only — same
26
+ * defence-in-depth set the W2 SecretResolver will re-validate before
27
+ * shelling out to `op`.
28
+ *
29
+ * W12-R1.3 (A2-L1): the previous pattern allowed `..` path segments
30
+ * because `.` was in the character class. The `op` CLI does not honour
31
+ * filesystem-style traversal but the input was reaching shell argv
32
+ * verbatim, so a ref like `op://vault/../something` (or worse, encoded
33
+ * in a hand-edited sites.json) muddied the trust boundary. The
34
+ * negative lookahead `(?!.*\/\.\.\/)` rejects any ref containing a
35
+ * `/../` segment without disallowing legitimate `.` in vault/item
36
+ * names (e.g. `op://team.acme/...`).
37
+ */
38
+ export const OP_REF_REGEX = /^op:\/\/(?!.*\/\.\.\/)[A-Za-z0-9_/.-]+$/;
39
+ /**
40
+ * Bearer-token shape produced by `KeyService.php`:
41
+ * `ytb_(live|test)_<payloadB64Url>.<sigB64Url>`. Re-validated here so a
42
+ * hand-edited sites.json can never inject a token shape the server would
43
+ * reject anyway.
44
+ */
45
+ export const BEARER_REGEX = /^ytb_(live|test)_[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
46
+ /**
47
+ * One site entry. Carries identity (`site_id`), reachability (`url` +
48
+ * `platform`), credential (exactly one of `bearer`/`bearer_ref`), and
49
+ * presentation metadata (`is_default`, `label`, `added_at`).
50
+ */
51
+ export const SiteEntry = z.object({
52
+ site_id: z.string().min(1).max(64).regex(SITE_ID_REGEX),
53
+ url: z.string().url(),
54
+ platform: z.enum(['wordpress', 'joomla', 'auto']).default('auto'),
55
+ bearer: z.string().regex(BEARER_REGEX).optional(),
56
+ bearer_ref: z.string().regex(OP_REF_REGEX).optional(),
57
+ is_default: z.boolean().default(false),
58
+ label: z.string().max(120).optional(),
59
+ added_at: z.string().datetime().optional(),
60
+ }).refine((s) => (s.bearer !== undefined) !== (s.bearer_ref !== undefined), { message: 'Exactly one of bearer or bearer_ref must be set' });
61
+ /**
62
+ * The on-disk sites-file root. `schema_version` is a literal `1` for now;
63
+ * future schema migrations bump it AND add a migration step in the W3
64
+ * registry loader.
65
+ */
66
+ export const SitesFile = z.object({
67
+ schema_version: z.literal(1),
68
+ default_site_id: z.string().regex(SITE_ID_REGEX).nullable(),
69
+ sites: z.array(SiteEntry),
70
+ }).refine((f) => f.sites.filter((s) => s.is_default).length <= 1, { message: 'At most one site can have is_default:true' });
71
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sites/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,kDAAkD,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IACvD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;IACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;IACrD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,EAChE,EAAE,OAAO,EAAE,iDAAiD,EAAE,CACjE,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE;IAC3D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC,CAAC,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,EACtD,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAC3D,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * W2 — Secret-Resolver: produce a bearer-token for a `SiteEntryT` at call
3
+ * time, supporting either a plain in-file token (`bearer`) or a 1Password
4
+ * Secret Reference (`bearer_ref`) resolved through the `op` CLI.
5
+ *
6
+ * Design choices (per plan §W2):
7
+ * - **`execFile`, never `exec`/`spawn` with `shell:true`.** `op read <ref>`
8
+ * must run as a direct `execve` with an argv array — no shell, no
9
+ * metacharacter expansion. The W1 schema already enforces
10
+ * {@link OP_REF_REGEX}; this module re-enforces it at the call site as
11
+ * defence-in-depth (a hand-edited sites.json could otherwise sneak a
12
+ * payload past validation).
13
+ * - **5-second hard timeout.** `op` is interactive in some failure modes
14
+ * (Touch-ID, biometric retry). We cap with a real timer + `kill()` to
15
+ * avoid agent-loop wedging on a stalled subprocess.
16
+ * - **Pluggable for testing.** The OpSecretResolver accepts an injected
17
+ * `execFile` callback so tests can mock subprocess invocation without
18
+ * monkey-patching the global `node:child_process` module.
19
+ *
20
+ * @license MIT
21
+ */
22
+ import { type SiteEntryT } from './schema.js';
23
+ /**
24
+ * Resolve the `op` binary to an absolute path so it works under a
25
+ * stripped-down GUI PATH. Precedence: explicit `YTB_MCP_OP_BINARY` env
26
+ * override → first existing well-known absolute path → bare `op` (PATH).
27
+ */
28
+ export declare function resolveOpBinary(env?: NodeJS.ProcessEnv): string;
29
+ /**
30
+ * Shape returned by every resolver. W12-R1.2 (A5-S3): the planned TTL
31
+ * cache that was the original justification for `resolvedAt` never
32
+ * shipped — the W4 ClientPool caches the `RestClient` itself, not the
33
+ * bearer — so the field was dead weight. Dropped to keep the contract
34
+ * minimal. Re-add ONLY when a real consumer appears.
35
+ */
36
+ export interface ResolvedBearer {
37
+ readonly token: string;
38
+ readonly source: 'plain' | 'op';
39
+ }
40
+ /**
41
+ * Pluggable resolver contract. Implementations MUST NOT log the token,
42
+ * MUST NOT mutate the input site, and MUST throw {@link SecretResolverError}
43
+ * on any failure (never return an empty/placeholder bearer).
44
+ */
45
+ export interface SecretResolver {
46
+ resolve(site: SiteEntryT): Promise<ResolvedBearer>;
47
+ }
48
+ /** Domain-tagged error so callers (auth, client) can branch on `code`. */
49
+ export declare class SecretResolverError extends Error {
50
+ readonly code: string;
51
+ constructor(code: string, message: string);
52
+ }
53
+ /**
54
+ * Signature of `node:child_process.execFile` reduced to the callback we
55
+ * actually rely on. Injecting this lets tests provide a deterministic
56
+ * substitute without `vi.mock('node:child_process')` side-effects.
57
+ *
58
+ * The real `execFile` overload returns a `ChildProcess` and accepts
59
+ * many option shapes; we accept the broadest superset and only use the
60
+ * pieces the resolver needs (`timeout`, `signal`, callback args).
61
+ */
62
+ export type ExecFileLike = (file: string, args: readonly string[], options: {
63
+ timeout?: number;
64
+ maxBuffer?: number;
65
+ }, callback: (error: (Error & {
66
+ code?: string | number;
67
+ signal?: string;
68
+ }) | null, stdout: string, stderr: string) => void) => void;
69
+ /**
70
+ * Plain in-file bearer — used when `site.bearer` is populated. Returns the
71
+ * stored token verbatim, with `source:'plain'`.
72
+ */
73
+ export declare class PlainSecretResolver implements SecretResolver {
74
+ resolve(site: SiteEntryT): Promise<ResolvedBearer>;
75
+ }
76
+ /**
77
+ * Resolves `bearer_ref` (`op://vault/item/field`) through the 1Password CLI.
78
+ *
79
+ * Failure surface:
80
+ * - Missing `bearer_ref` → `OP_REF_MISSING`
81
+ * - Malformed ref at call site → `OP_REF_INVALID`
82
+ * - `op` binary not on PATH (ENOENT) → `OP_CLI_MISSING`
83
+ * - `op` exit-code 6 (not signed in) → `OP_NOT_SIGNED_IN`
84
+ * - 5-second timeout exceeded → `OP_TIMEOUT`
85
+ * - Empty/whitespace stdout → `OP_EMPTY_OUTPUT`
86
+ * - Any other non-zero exit → `OP_EXEC_FAILED`
87
+ */
88
+ export declare class OpSecretResolver implements SecretResolver {
89
+ private readonly opBinary;
90
+ private readonly execFile;
91
+ private readonly timeoutMs;
92
+ constructor(opBinary?: string, execFile?: ExecFileLike, timeoutMs?: number);
93
+ resolve(site: SiteEntryT): Promise<ResolvedBearer>;
94
+ /**
95
+ * Invokes `op read <ref>` with a hard timeout. The promise is wrapped
96
+ * so a stalled subprocess (e.g. waiting on biometric prompt) cannot
97
+ * outlive {@link timeoutMs}.
98
+ */
99
+ private runOpRead;
100
+ private mapExecError;
101
+ }
102
+ /**
103
+ * Composite resolver — chooses Plain/Op per site at resolve-time. This is
104
+ * the resolver wired into the registry in W4; W2 ships it standalone so
105
+ * unit tests cover the routing logic in isolation from any caching.
106
+ */
107
+ export declare class CompositeSecretResolver implements SecretResolver {
108
+ private readonly plain;
109
+ private readonly op;
110
+ constructor(plain?: SecretResolver, op?: SecretResolver);
111
+ resolve(site: SiteEntryT): Promise<ResolvedBearer>;
112
+ }
113
+ /** Default factory consumed by the W4 registry / W5 auth pipeline. */
114
+ export declare function defaultSecretResolver(): CompositeSecretResolver;
115
+ //# sourceMappingURL=secret-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-resolver.d.ts","sourceRoot":"","sources":["../../src/sites/secret-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB5D;;;;GAIG;AACH,wBAAgB,eAAe,CAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,MAAM,CAWR;AAQD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACtD;AAED,0EAA0E;AAC1E,qBAAa,mBAAoB,SAAQ,KAAK;aACd,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACjD,QAAQ,EAAE,CACN,KAAK,EAAE,CAAC,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,EACnE,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACb,IAAI,KACR,IAAI,CAAC;AAqBV;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAChD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CAa3D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,QAAQ,GAAE,MAA0B,EACpC,QAAQ,GAAE,YAA8B,EACxC,SAAS,GAAE,MAAsB;IAGhD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAmCxD;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,YAAY;CAoDvB;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,cAAc;IAEtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBADF,KAAK,GAAE,cAA0C,EACjD,EAAE,GAAE,cAAuC;IAG1D,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CAM3D;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,IAAI,uBAAuB,CAE/D"}