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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -0
  3. package/bin/yt-builder-mcp.js +59 -0
  4. package/dist/auth.d.ts +39 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.js +93 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/client.d.ts +84 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +151 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/clients/claude-code.d.ts +18 -0
  13. package/dist/clients/claude-code.d.ts.map +1 -0
  14. package/dist/clients/claude-code.js +53 -0
  15. package/dist/clients/claude-code.js.map +1 -0
  16. package/dist/clients/claude-desktop.d.ts +19 -0
  17. package/dist/clients/claude-desktop.d.ts.map +1 -0
  18. package/dist/clients/claude-desktop.js +56 -0
  19. package/dist/clients/claude-desktop.js.map +1 -0
  20. package/dist/clients/cline.d.ts +26 -0
  21. package/dist/clients/cline.d.ts.map +1 -0
  22. package/dist/clients/cline.js +80 -0
  23. package/dist/clients/cline.js.map +1 -0
  24. package/dist/clients/codex-cli.d.ts +42 -0
  25. package/dist/clients/codex-cli.d.ts.map +1 -0
  26. package/dist/clients/codex-cli.js +194 -0
  27. package/dist/clients/codex-cli.js.map +1 -0
  28. package/dist/clients/continue.d.ts +13 -0
  29. package/dist/clients/continue.d.ts.map +1 -0
  30. package/dist/clients/continue.js +52 -0
  31. package/dist/clients/continue.js.map +1 -0
  32. package/dist/clients/cursor.d.ts +12 -0
  33. package/dist/clients/cursor.d.ts.map +1 -0
  34. package/dist/clients/cursor.js +38 -0
  35. package/dist/clients/cursor.js.map +1 -0
  36. package/dist/clients/gemini-cli.d.ts +18 -0
  37. package/dist/clients/gemini-cli.d.ts.map +1 -0
  38. package/dist/clients/gemini-cli.js +44 -0
  39. package/dist/clients/gemini-cli.js.map +1 -0
  40. package/dist/clients/home.d.ts +14 -0
  41. package/dist/clients/home.d.ts.map +1 -0
  42. package/dist/clients/home.js +20 -0
  43. package/dist/clients/home.js.map +1 -0
  44. package/dist/clients/index.d.ts +52 -0
  45. package/dist/clients/index.d.ts.map +1 -0
  46. package/dist/clients/index.js +72 -0
  47. package/dist/clients/index.js.map +1 -0
  48. package/dist/clients/roo-code.d.ts +23 -0
  49. package/dist/clients/roo-code.d.ts.map +1 -0
  50. package/dist/clients/roo-code.js +69 -0
  51. package/dist/clients/roo-code.js.map +1 -0
  52. package/dist/clients/zed.d.ts +12 -0
  53. package/dist/clients/zed.d.ts.map +1 -0
  54. package/dist/clients/zed.js +41 -0
  55. package/dist/clients/zed.js.map +1 -0
  56. package/dist/errors/hints.d.ts +51 -0
  57. package/dist/errors/hints.d.ts.map +1 -0
  58. package/dist/errors/hints.js +95 -0
  59. package/dist/errors/hints.js.map +1 -0
  60. package/dist/errors/mask.d.ts +35 -0
  61. package/dist/errors/mask.d.ts.map +1 -0
  62. package/dist/errors/mask.js +49 -0
  63. package/dist/errors/mask.js.map +1 -0
  64. package/dist/errors/sanitize.d.ts +31 -0
  65. package/dist/errors/sanitize.d.ts.map +1 -0
  66. package/dist/errors/sanitize.js +90 -0
  67. package/dist/errors/sanitize.js.map +1 -0
  68. package/dist/errors.d.ts +42 -0
  69. package/dist/errors.d.ts.map +1 -0
  70. package/dist/errors.js +61 -0
  71. package/dist/errors.js.map +1 -0
  72. package/dist/gateway/advanced-tool/discovery.d.ts +19 -0
  73. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -0
  74. package/dist/gateway/advanced-tool/discovery.js +53 -0
  75. package/dist/gateway/advanced-tool/discovery.js.map +1 -0
  76. package/dist/gateway/advanced-tool/domains.d.ts +42 -0
  77. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -0
  78. package/dist/gateway/advanced-tool/domains.js +88 -0
  79. package/dist/gateway/advanced-tool/domains.js.map +1 -0
  80. package/dist/gateway/advanced-tool/execute.d.ts +29 -0
  81. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -0
  82. package/dist/gateway/advanced-tool/execute.js +54 -0
  83. package/dist/gateway/advanced-tool/execute.js.map +1 -0
  84. package/dist/gateway/advanced-tool/index.d.ts +36 -0
  85. package/dist/gateway/advanced-tool/index.d.ts.map +1 -0
  86. package/dist/gateway/advanced-tool/index.js +39 -0
  87. package/dist/gateway/advanced-tool/index.js.map +1 -0
  88. package/dist/gateway/advanced-tool/register.d.ts +18 -0
  89. package/dist/gateway/advanced-tool/register.d.ts.map +1 -0
  90. package/dist/gateway/advanced-tool/register.js +62 -0
  91. package/dist/gateway/advanced-tool/register.js.map +1 -0
  92. package/dist/gateway/advanced-tool.d.ts +13 -0
  93. package/dist/gateway/advanced-tool.d.ts.map +1 -0
  94. package/dist/gateway/advanced-tool.js +13 -0
  95. package/dist/gateway/advanced-tool.js.map +1 -0
  96. package/dist/gateway/capturing-server.d.ts +117 -0
  97. package/dist/gateway/capturing-server.d.ts.map +1 -0
  98. package/dist/gateway/capturing-server.js +103 -0
  99. package/dist/gateway/capturing-server.js.map +1 -0
  100. package/dist/gateway/essentials.d.ts +49 -0
  101. package/dist/gateway/essentials.d.ts.map +1 -0
  102. package/dist/gateway/essentials.js +62 -0
  103. package/dist/gateway/essentials.js.map +1 -0
  104. package/dist/gateway/test-support.d.ts +41 -0
  105. package/dist/gateway/test-support.d.ts.map +1 -0
  106. package/dist/gateway/test-support.js +60 -0
  107. package/dist/gateway/test-support.js.map +1 -0
  108. package/dist/index.d.ts +25 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +77 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/install-skill.d.ts +35 -0
  113. package/dist/install-skill.d.ts.map +1 -0
  114. package/dist/install-skill.js +107 -0
  115. package/dist/install-skill.js.map +1 -0
  116. package/dist/platform/index.d.ts +49 -0
  117. package/dist/platform/index.d.ts.map +1 -0
  118. package/dist/platform/index.js +38 -0
  119. package/dist/platform/index.js.map +1 -0
  120. package/dist/server.d.ts +50 -0
  121. package/dist/server.d.ts.map +1 -0
  122. package/dist/server.js +117 -0
  123. package/dist/server.js.map +1 -0
  124. package/dist/setup-cli.d.ts +100 -0
  125. package/dist/setup-cli.d.ts.map +1 -0
  126. package/dist/setup-cli.js +355 -0
  127. package/dist/setup-cli.js.map +1 -0
  128. package/dist/setup-prompts.d.ts +41 -0
  129. package/dist/setup-prompts.d.ts.map +1 -0
  130. package/dist/setup-prompts.js +142 -0
  131. package/dist/setup-prompts.js.map +1 -0
  132. package/dist/setup-token.d.ts +38 -0
  133. package/dist/setup-token.d.ts.map +1 -0
  134. package/dist/setup-token.js +106 -0
  135. package/dist/setup-token.js.map +1 -0
  136. package/dist/setup-wizard-defaults.d.ts +43 -0
  137. package/dist/setup-wizard-defaults.d.ts.map +1 -0
  138. package/dist/setup-wizard-defaults.js +160 -0
  139. package/dist/setup-wizard-defaults.js.map +1 -0
  140. package/dist/setup-wizard-handshake.d.ts +25 -0
  141. package/dist/setup-wizard-handshake.d.ts.map +1 -0
  142. package/dist/setup-wizard-handshake.js +103 -0
  143. package/dist/setup-wizard-handshake.js.map +1 -0
  144. package/dist/setup-wizard-types.d.ts +148 -0
  145. package/dist/setup-wizard-types.d.ts.map +1 -0
  146. package/dist/setup-wizard-types.js +11 -0
  147. package/dist/setup-wizard-types.js.map +1 -0
  148. package/dist/setup-wizard.d.ts +33 -0
  149. package/dist/setup-wizard.d.ts.map +1 -0
  150. package/dist/setup-wizard.js +166 -0
  151. package/dist/setup-wizard.js.map +1 -0
  152. package/dist/setup.d.ts +17 -0
  153. package/dist/setup.d.ts.map +1 -0
  154. package/dist/setup.js +33 -0
  155. package/dist/setup.js.map +1 -0
  156. package/dist/tools/elements/builders.d.ts +24 -0
  157. package/dist/tools/elements/builders.d.ts.map +1 -0
  158. package/dist/tools/elements/builders.js +150 -0
  159. package/dist/tools/elements/builders.js.map +1 -0
  160. package/dist/tools/elements/handlers-write.d.ts +48 -0
  161. package/dist/tools/elements/handlers-write.d.ts.map +1 -0
  162. package/dist/tools/elements/handlers-write.js +141 -0
  163. package/dist/tools/elements/handlers-write.js.map +1 -0
  164. package/dist/tools/elements/handlers.d.ts +56 -0
  165. package/dist/tools/elements/handlers.d.ts.map +1 -0
  166. package/dist/tools/elements/handlers.js +113 -0
  167. package/dist/tools/elements/handlers.js.map +1 -0
  168. package/dist/tools/elements/index.d.ts +28 -0
  169. package/dist/tools/elements/index.d.ts.map +1 -0
  170. package/dist/tools/elements/index.js +27 -0
  171. package/dist/tools/elements/index.js.map +1 -0
  172. package/dist/tools/elements.d.ts +13 -0
  173. package/dist/tools/elements.d.ts.map +1 -0
  174. package/dist/tools/elements.js +13 -0
  175. package/dist/tools/elements.js.map +1 -0
  176. package/dist/tools/elicitation.d.ts +87 -0
  177. package/dist/tools/elicitation.d.ts.map +1 -0
  178. package/dist/tools/elicitation.js +100 -0
  179. package/dist/tools/elicitation.js.map +1 -0
  180. package/dist/tools/format/elements-format.d.ts +34 -0
  181. package/dist/tools/format/elements-format.d.ts.map +1 -0
  182. package/dist/tools/format/elements-format.js +112 -0
  183. package/dist/tools/format/elements-format.js.map +1 -0
  184. package/dist/tools/format/health-format.d.ts +73 -0
  185. package/dist/tools/format/health-format.d.ts.map +1 -0
  186. package/dist/tools/format/health-format.js +178 -0
  187. package/dist/tools/format/health-format.js.map +1 -0
  188. package/dist/tools/format/inspection-format.d.ts +45 -0
  189. package/dist/tools/format/inspection-format.d.ts.map +1 -0
  190. package/dist/tools/format/inspection-format.js +125 -0
  191. package/dist/tools/format/inspection-format.js.map +1 -0
  192. package/dist/tools/format/pages-format.d.ts +39 -0
  193. package/dist/tools/format/pages-format.d.ts.map +1 -0
  194. package/dist/tools/format/pages-format.js +110 -0
  195. package/dist/tools/format/pages-format.js.map +1 -0
  196. package/dist/tools/format/sources-format.d.ts +25 -0
  197. package/dist/tools/format/sources-format.d.ts.map +1 -0
  198. package/dist/tools/format/sources-format.js +113 -0
  199. package/dist/tools/format/sources-format.js.map +1 -0
  200. package/dist/tools/health.d.ts +22 -0
  201. package/dist/tools/health.d.ts.map +1 -0
  202. package/dist/tools/health.js +147 -0
  203. package/dist/tools/health.js.map +1 -0
  204. package/dist/tools/index.d.ts +23 -0
  205. package/dist/tools/index.d.ts.map +1 -0
  206. package/dist/tools/index.js +23 -0
  207. package/dist/tools/index.js.map +1 -0
  208. package/dist/tools/inspection.d.ts +14 -0
  209. package/dist/tools/inspection.d.ts.map +1 -0
  210. package/dist/tools/inspection.js +115 -0
  211. package/dist/tools/inspection.js.map +1 -0
  212. package/dist/tools/layout-flatten.d.ts +63 -0
  213. package/dist/tools/layout-flatten.d.ts.map +1 -0
  214. package/dist/tools/layout-flatten.js +95 -0
  215. package/dist/tools/layout-flatten.js.map +1 -0
  216. package/dist/tools/pages/builders.d.ts +14 -0
  217. package/dist/tools/pages/builders.d.ts.map +1 -0
  218. package/dist/tools/pages/builders.js +97 -0
  219. package/dist/tools/pages/builders.js.map +1 -0
  220. package/dist/tools/pages/handlers-read.d.ts +24 -0
  221. package/dist/tools/pages/handlers-read.d.ts.map +1 -0
  222. package/dist/tools/pages/handlers-read.js +141 -0
  223. package/dist/tools/pages/handlers-read.js.map +1 -0
  224. package/dist/tools/pages/handlers-write.d.ts +21 -0
  225. package/dist/tools/pages/handlers-write.d.ts.map +1 -0
  226. package/dist/tools/pages/handlers-write.js +52 -0
  227. package/dist/tools/pages/handlers-write.js.map +1 -0
  228. package/dist/tools/pages/index.d.ts +17 -0
  229. package/dist/tools/pages/index.d.ts.map +1 -0
  230. package/dist/tools/pages/index.js +17 -0
  231. package/dist/tools/pages/index.js.map +1 -0
  232. package/dist/tools/pages/schemas.d.ts +30 -0
  233. package/dist/tools/pages/schemas.d.ts.map +1 -0
  234. package/dist/tools/pages/schemas.js +30 -0
  235. package/dist/tools/pages/schemas.js.map +1 -0
  236. package/dist/tools/pages.d.ts +13 -0
  237. package/dist/tools/pages.d.ts.map +1 -0
  238. package/dist/tools/pages.js +13 -0
  239. package/dist/tools/pages.js.map +1 -0
  240. package/dist/tools/progress-phases.d.ts +46 -0
  241. package/dist/tools/progress-phases.d.ts.map +1 -0
  242. package/dist/tools/progress-phases.js +48 -0
  243. package/dist/tools/progress-phases.js.map +1 -0
  244. package/dist/tools/shared-schemas.d.ts +15 -0
  245. package/dist/tools/shared-schemas.d.ts.map +1 -0
  246. package/dist/tools/shared-schemas.js +30 -0
  247. package/dist/tools/shared-schemas.js.map +1 -0
  248. package/dist/tools/sources/builders.d.ts +13 -0
  249. package/dist/tools/sources/builders.d.ts.map +1 -0
  250. package/dist/tools/sources/builders.js +88 -0
  251. package/dist/tools/sources/builders.js.map +1 -0
  252. package/dist/tools/sources/handlers-bind.d.ts +26 -0
  253. package/dist/tools/sources/handlers-bind.d.ts.map +1 -0
  254. package/dist/tools/sources/handlers-bind.js +123 -0
  255. package/dist/tools/sources/handlers-bind.js.map +1 -0
  256. package/dist/tools/sources/handlers.d.ts +45 -0
  257. package/dist/tools/sources/handlers.d.ts.map +1 -0
  258. package/dist/tools/sources/handlers.js +84 -0
  259. package/dist/tools/sources/handlers.js.map +1 -0
  260. package/dist/tools/sources/index.d.ts +19 -0
  261. package/dist/tools/sources/index.d.ts.map +1 -0
  262. package/dist/tools/sources/index.js +18 -0
  263. package/dist/tools/sources/index.js.map +1 -0
  264. package/dist/tools/sources.d.ts +14 -0
  265. package/dist/tools/sources.d.ts.map +1 -0
  266. package/dist/tools/sources.js +14 -0
  267. package/dist/tools/sources.js.map +1 -0
  268. package/dist/tools/sparse-fields.d.ts +80 -0
  269. package/dist/tools/sparse-fields.d.ts.map +1 -0
  270. package/dist/tools/sparse-fields.js +144 -0
  271. package/dist/tools/sparse-fields.js.map +1 -0
  272. package/dist/tools/tool-builder/annotations.d.ts +22 -0
  273. package/dist/tools/tool-builder/annotations.d.ts.map +1 -0
  274. package/dist/tools/tool-builder/annotations.js +35 -0
  275. package/dist/tools/tool-builder/annotations.js.map +1 -0
  276. package/dist/tools/tool-builder/define.d.ts +31 -0
  277. package/dist/tools/tool-builder/define.d.ts.map +1 -0
  278. package/dist/tools/tool-builder/define.js +31 -0
  279. package/dist/tools/tool-builder/define.js.map +1 -0
  280. package/dist/tools/tool-builder/index.d.ts +28 -0
  281. package/dist/tools/tool-builder/index.d.ts.map +1 -0
  282. package/dist/tools/tool-builder/index.js +27 -0
  283. package/dist/tools/tool-builder/index.js.map +1 -0
  284. package/dist/tools/tool-builder/results.d.ts +59 -0
  285. package/dist/tools/tool-builder/results.d.ts.map +1 -0
  286. package/dist/tools/tool-builder/results.js +125 -0
  287. package/dist/tools/tool-builder/results.js.map +1 -0
  288. package/dist/tools/tool-builder/types.d.ts +82 -0
  289. package/dist/tools/tool-builder/types.d.ts.map +1 -0
  290. package/dist/tools/tool-builder/types.js +9 -0
  291. package/dist/tools/tool-builder/types.js.map +1 -0
  292. package/dist/tools/tool-builder.d.ts +16 -0
  293. package/dist/tools/tool-builder.d.ts.map +1 -0
  294. package/dist/tools/tool-builder.js +16 -0
  295. package/dist/tools/tool-builder.js.map +1 -0
  296. package/icon.png +0 -0
  297. package/manifest.json +63 -0
  298. package/package.json +81 -0
  299. package/skills/yootheme-builder/SKILL.md +582 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Gateway discovery-mode dispatch — handles `{ tool }`-only invocations
3
+ * by returning the target tool's description, JSON-schema, and
4
+ * annotations. Never invokes the target handler.
5
+ *
6
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
7
+ *
8
+ * @license MIT
9
+ */
10
+ import { z } from 'zod';
11
+ /** Reads the captured config's inputSchema as a Zod raw-shape (or empty). */
12
+ export function shapeOf(entry) {
13
+ const schema = entry.config.inputSchema;
14
+ if (schema && typeof schema === 'object')
15
+ return schema;
16
+ return {};
17
+ }
18
+ /** Builds a JSON-schema for a captured tool's inputs, with a defensive fallback. */
19
+ export function inputSchemaJson(entry) {
20
+ try {
21
+ return z.toJSONSchema(z.object(shapeOf(entry)));
22
+ }
23
+ catch {
24
+ // A schema that cannot be JSON-projected still yields a usable
25
+ // discovery payload — description + annotations carry the rest.
26
+ return { note: 'input schema could not be derived' };
27
+ }
28
+ }
29
+ /** Builds the discovery-mode result for a target tool. */
30
+ export function discoveryResult(toolName, entry) {
31
+ const cfg = entry.config;
32
+ const schema = inputSchemaJson(entry);
33
+ const payload = {
34
+ tool: toolName,
35
+ description: cfg.description ?? '',
36
+ inputSchema: schema,
37
+ annotations: cfg.annotations ?? {},
38
+ };
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text',
43
+ text: `Discovery for ${toolName}\n\n` +
44
+ `${cfg.description ?? ''}\n\n` +
45
+ `Annotations: ${JSON.stringify(cfg.annotations ?? {})}\n\n` +
46
+ `Input schema:\n${JSON.stringify(schema, null, 2)}\n\n` +
47
+ `Call yootheme_builder_advanced again with { tool: "${toolName}", arguments: {...} } to run it.`,
48
+ },
49
+ ],
50
+ structuredContent: payload,
51
+ };
52
+ }
53
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,CAAC,EAAoB,MAAM,KAAK,CAAC;AAI1C,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,KAAwB;IAC5C,MAAM,MAAM,GAAI,KAAK,CAAC,MAAoC,CAAC,WAAW,CAAC;IACvE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAqB,CAAC;IACvE,OAAO,EAAE,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,KAAwB;IACpD,IAAI,CAAC;QACD,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACL,+DAA+D;QAC/D,gEAAgE;QAChE,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE,CAAC;IACzD,CAAC;AACL,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAwB;IACtE,MAAM,GAAG,GAAG,KAAK,CAAC,MAGjB,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG;QACZ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QAClC,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;KACrC,CAAC;IACF,OAAO;QACH,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EACA,iBAAiB,QAAQ,MAAM;oBAC/B,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,MAAM;oBAC9B,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,MAAM;oBAC3D,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM;oBACvD,sDAAsD,QAAQ,kCAAkC;aACvG;SACJ;QACD,iBAAiB,EAAE,OAAO;KAC7B,CAAC;AACN,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Gateway domain taxonomy — single source of truth for grouping
3
+ * advanced tools by domain in description, errors, and discovery
4
+ * payloads.
5
+ *
6
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`
7
+ * to keep that file ≤ 200 LoC per Architecture §11.
8
+ *
9
+ * The 4-entry `DOMAIN_ORDER` contract is pinned by
10
+ * `tests/gateway/domain-order.test.ts` — any change here MUST update
11
+ * that pin-test (Round-2 audit follow-up R2-A1-N1).
12
+ *
13
+ * @license MIT
14
+ */
15
+ import type { AdvancedToolEntry } from '../capturing-server.js';
16
+ /**
17
+ * Domains used to group advanced tool names. Order = display order in
18
+ * gateway description, errors, and discovery responses. Aligned with
19
+ * YOOtheme builder concepts (Design-Doc §3.1.1). Round-1 I4 trimmed
20
+ * from 8→4 (singular forms now route via DOMAIN_PREFIX_MAP, not
21
+ * duplicate entries). Pinned by `tests/gateway/domain-order.test.ts`.
22
+ */
23
+ export declare const DOMAIN_ORDER: readonly ["pages", "elements", "sources", "inspection"];
24
+ /**
25
+ * Prefix→domain routing table. Each domain accepts plural
26
+ * (`pages_list`) + singular (`page_save`, `element_add`, `source_…`)
27
+ * stems via `stem.startsWith(prefix + '_')` or full-equality. Anything
28
+ * outside the taxonomy falls through to 'misc'.
29
+ */
30
+ export declare const DOMAIN_PREFIX_MAP: Record<(typeof DOMAIN_ORDER)[number], readonly string[]>;
31
+ export declare const TOOL_PREFIX = "yootheme_builder_";
32
+ /** Maps a tool name to its display domain (the first underscore-segment after the prefix). */
33
+ export declare function domainOf(toolName: string): string;
34
+ /** Groups tool names by domain, in DOMAIN_ORDER, for stable output. */
35
+ export declare function groupByDomain(toolNames: string[]): Map<string, string[]>;
36
+ /** Renders the grouped tool list as readable text (used in description + errors). */
37
+ export declare function renderGroupedList(toolNames: string[]): string;
38
+ /** Builds the gateway tool's description, grouping every advanced tool by domain. */
39
+ export declare function buildDescription(toolNames: string[]): string;
40
+ /** Re-export the AdvancedToolEntry type so consumers don't need a second import path. */
41
+ export type { AdvancedToolEntry };
42
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/domains.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,yDAA0D,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAKtF,CAAC;AAEF,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAE/C,8FAA8F;AAC9F,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYxE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAO7D;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAe5D;AAED,yFAAyF;AACzF,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Gateway domain taxonomy — single source of truth for grouping
3
+ * advanced tools by domain in description, errors, and discovery
4
+ * payloads.
5
+ *
6
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`
7
+ * to keep that file ≤ 200 LoC per Architecture §11.
8
+ *
9
+ * The 4-entry `DOMAIN_ORDER` contract is pinned by
10
+ * `tests/gateway/domain-order.test.ts` — any change here MUST update
11
+ * that pin-test (Round-2 audit follow-up R2-A1-N1).
12
+ *
13
+ * @license MIT
14
+ */
15
+ /**
16
+ * Domains used to group advanced tool names. Order = display order in
17
+ * gateway description, errors, and discovery responses. Aligned with
18
+ * YOOtheme builder concepts (Design-Doc §3.1.1). Round-1 I4 trimmed
19
+ * from 8→4 (singular forms now route via DOMAIN_PREFIX_MAP, not
20
+ * duplicate entries). Pinned by `tests/gateway/domain-order.test.ts`.
21
+ */
22
+ export const DOMAIN_ORDER = ['pages', 'elements', 'sources', 'inspection'];
23
+ /**
24
+ * Prefix→domain routing table. Each domain accepts plural
25
+ * (`pages_list`) + singular (`page_save`, `element_add`, `source_…`)
26
+ * stems via `stem.startsWith(prefix + '_')` or full-equality. Anything
27
+ * outside the taxonomy falls through to 'misc'.
28
+ */
29
+ export const DOMAIN_PREFIX_MAP = {
30
+ pages: ['pages', 'page'],
31
+ elements: ['elements', 'element'],
32
+ sources: ['sources', 'source'],
33
+ inspection: ['inspection'],
34
+ };
35
+ export const TOOL_PREFIX = 'yootheme_builder_';
36
+ /** Maps a tool name to its display domain (the first underscore-segment after the prefix). */
37
+ export function domainOf(toolName) {
38
+ const stem = toolName.startsWith(TOOL_PREFIX) ? toolName.slice(TOOL_PREFIX.length) : toolName;
39
+ for (const domain of DOMAIN_ORDER) {
40
+ for (const prefix of DOMAIN_PREFIX_MAP[domain]) {
41
+ if (stem === prefix || stem.startsWith(`${prefix}_`))
42
+ return domain;
43
+ }
44
+ }
45
+ return 'misc';
46
+ }
47
+ /** Groups tool names by domain, in DOMAIN_ORDER, for stable output. */
48
+ export function groupByDomain(toolNames) {
49
+ const groups = new Map();
50
+ for (const domain of DOMAIN_ORDER)
51
+ groups.set(domain, []);
52
+ for (const name of [...toolNames].sort()) {
53
+ const domain = domainOf(name);
54
+ const bucket = groups.get(domain);
55
+ if (bucket)
56
+ bucket.push(name);
57
+ }
58
+ for (const [domain, names] of groups) {
59
+ if (names.length === 0)
60
+ groups.delete(domain);
61
+ }
62
+ return groups;
63
+ }
64
+ /** Renders the grouped tool list as readable text (used in description + errors). */
65
+ export function renderGroupedList(toolNames) {
66
+ const groups = groupByDomain(toolNames);
67
+ const lines = [];
68
+ for (const [domain, names] of groups) {
69
+ lines.push(` ${domain}: ${names.join(', ')}`);
70
+ }
71
+ return lines.join('\n');
72
+ }
73
+ /** Builds the gateway tool's description, grouping every advanced tool by domain. */
74
+ export function buildDescription(toolNames) {
75
+ const toolCount = toolNames.length;
76
+ const domains = [...groupByDomain(toolNames).keys()];
77
+ const domainCount = domains.length;
78
+ const domainList = domains.join(', ');
79
+ return (`Routes to ${String(toolCount)} advanced YOOtheme Builder tools across ${String(domainCount)} ` +
80
+ `domain${domainCount === 1 ? '' : 's'}${domainCount > 0 ? ` (${domainList})` : ''}. ` +
81
+ 'Call with { tool } for a target\'s schema + annotations, or ' +
82
+ '{ tool, arguments } to run it. The target tool\'s own confirmation ' +
83
+ 'guards and behavior stay in effect.\n\n' +
84
+ 'Available advanced tools by domain:\n' +
85
+ `${renderGroupedList(toolNames)}\n\n` +
86
+ 'For connectivity diagnostics use yootheme_builder_health or yootheme_builder_diagnose (top-level).');
87
+ }
88
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Gateway execute-mode dispatch — handles `{ tool, arguments }`
3
+ * invocations by validating `arguments` against the target tool's Zod
4
+ * schema in `.strict()` mode, then invoking the captured handler with
5
+ * the parsed args and the original SDK `extra` (so progress/elicitation/
6
+ * AbortSignal of the target tool keep working).
7
+ *
8
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
9
+ *
10
+ * @license MIT
11
+ */
12
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
13
+ import type { AdvancedToolEntry } from '../capturing-server.js';
14
+ /** Builds an error CallToolResult with structured payload (echoed into text + structuredContent). */
15
+ export declare function errorResult(payload: {
16
+ message: string;
17
+ code: string;
18
+ suggestion: string;
19
+ details?: Record<string, unknown>;
20
+ }): CallToolResult;
21
+ /**
22
+ * Executes a captured advanced tool with strict-validated arguments.
23
+ *
24
+ * Returns a structured `invalid_arguments` error on Zod-validation
25
+ * failure; otherwise invokes `entry.handler` with `(parsedArgs, extra)`
26
+ * and returns its CallToolResult verbatim.
27
+ */
28
+ export declare function executeAdvancedTool(toolName: string, entry: AdvancedToolEntry, rawArgs: Record<string, unknown>, extra: unknown): Promise<CallToolResult>;
29
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/execute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,GAAG,cAAc,CAYjB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Gateway execute-mode dispatch — handles `{ tool, arguments }`
3
+ * invocations by validating `arguments` against the target tool's Zod
4
+ * schema in `.strict()` mode, then invoking the captured handler with
5
+ * the parsed args and the original SDK `extra` (so progress/elicitation/
6
+ * AbortSignal of the target tool keep working).
7
+ *
8
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
9
+ *
10
+ * @license MIT
11
+ */
12
+ import { z } from 'zod';
13
+ import { inputSchemaJson, shapeOf } from './discovery.js';
14
+ /** Builds an error CallToolResult with structured payload (echoed into text + structuredContent). */
15
+ export function errorResult(payload) {
16
+ const body = {
17
+ error: payload.message,
18
+ code: payload.code,
19
+ suggestion: payload.suggestion,
20
+ ...(payload.details !== undefined ? { details: payload.details } : {}),
21
+ };
22
+ return {
23
+ content: [{ type: 'text', text: JSON.stringify(body, null, 2) }],
24
+ structuredContent: body,
25
+ isError: true,
26
+ };
27
+ }
28
+ /**
29
+ * Executes a captured advanced tool with strict-validated arguments.
30
+ *
31
+ * Returns a structured `invalid_arguments` error on Zod-validation
32
+ * failure; otherwise invokes `entry.handler` with `(parsedArgs, extra)`
33
+ * and returns its CallToolResult verbatim.
34
+ */
35
+ export async function executeAdvancedTool(toolName, entry, rawArgs, extra) {
36
+ // strict() surfaces unknown keys as Zod issues rather than silently
37
+ // dropping them, so callers can self-correct when they pass schema-
38
+ // extra keys.
39
+ const parsed = z.object(shapeOf(entry)).strict().safeParse(rawArgs);
40
+ if (!parsed.success) {
41
+ return errorResult({
42
+ message: `Invalid arguments for "${toolName}".`,
43
+ code: 'invalid_arguments',
44
+ suggestion: `Call yootheme_builder_advanced with { tool: "${toolName}" } to see ` +
45
+ 'the expected schema, then retry with corrected arguments.',
46
+ details: {
47
+ issues: parsed.error.issues,
48
+ expected_schema: inputSchemaJson(entry),
49
+ },
50
+ });
51
+ }
52
+ return entry.handler(parsed.data, extra);
53
+ }
54
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/execute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1D,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,OAK3B;IACG,MAAM,IAAI,GAAG;QACT,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC;IACF,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,IAAI;KAChB,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,QAAgB,EAChB,KAAwB,EACxB,OAAgC,EAChC,KAAc;IAEd,oEAAoE;IACpE,oEAAoE;IACpE,cAAc;IACd,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC;YACf,OAAO,EAAE,0BAA0B,QAAQ,IAAI;YAC/C,IAAI,EAAE,mBAAmB;YACzB,UAAU,EACN,gDAAgD,QAAQ,aAAa;gBACrE,2DAA2D;YAC/D,OAAO,EAAE;gBACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC3B,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;aAC1C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `yootheme_builder_advanced` gateway tool — Wave G.1 / Design-Doc §3.1.1.
3
+ *
4
+ * Single entry-point to every L2 (non-essential, non-direct) tool. Cursor
5
+ * caps MCP servers at ~40 tools; routing 12 advanced tools through one
6
+ * gateway keeps `tools/list` at 10 (7 L1 + 2 L3 + 1 gateway).
7
+ *
8
+ * Two modes:
9
+ * { tool } → discovery: returns the target's description,
10
+ * a JSON-schema derived from its Zod inputSchema,
11
+ * and its annotation flags. The target handler
12
+ * is NOT invoked.
13
+ * { tool, arguments } → execution: `arguments` is validated against
14
+ * the target's Zod inputSchema in `.strict()`
15
+ * mode (unknown keys surface as Zod issues), then
16
+ * the target handler is invoked with the parsed
17
+ * args and the same `extra` object — so the
18
+ * target tool's progress, elicitation and
19
+ * AbortSignal keep working.
20
+ *
21
+ * Errors are structured ({ error, code, suggestion, details }). The gateway
22
+ * cannot route to itself: `yootheme_builder_advanced` is never in the
23
+ * advanced registry (the CapturingServer never sees its name — it's
24
+ * registered after the CapturingServer hands off).
25
+ *
26
+ * Round-2 (R2-A2-CRIT2): split into 5 files under `advanced-tool/`
27
+ * (this barrel + `domains.ts` + `discovery.ts` + `execute.ts` +
28
+ * `register.ts`) to keep each file ≤ 100 LoC per Architecture §11.
29
+ *
30
+ * @license MIT
31
+ */
32
+ export { DOMAIN_ORDER, DOMAIN_PREFIX_MAP, TOOL_PREFIX, buildDescription, domainOf, groupByDomain, renderGroupedList, } from './domains.js';
33
+ export { discoveryResult, inputSchemaJson, shapeOf } from './discovery.js';
34
+ export { errorResult, executeAdvancedTool } from './execute.js';
35
+ export { registerAdvancedTool } from './register.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAKH,OAAO,EACH,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,iBAAiB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `yootheme_builder_advanced` gateway tool — Wave G.1 / Design-Doc §3.1.1.
3
+ *
4
+ * Single entry-point to every L2 (non-essential, non-direct) tool. Cursor
5
+ * caps MCP servers at ~40 tools; routing 12 advanced tools through one
6
+ * gateway keeps `tools/list` at 10 (7 L1 + 2 L3 + 1 gateway).
7
+ *
8
+ * Two modes:
9
+ * { tool } → discovery: returns the target's description,
10
+ * a JSON-schema derived from its Zod inputSchema,
11
+ * and its annotation flags. The target handler
12
+ * is NOT invoked.
13
+ * { tool, arguments } → execution: `arguments` is validated against
14
+ * the target's Zod inputSchema in `.strict()`
15
+ * mode (unknown keys surface as Zod issues), then
16
+ * the target handler is invoked with the parsed
17
+ * args and the same `extra` object — so the
18
+ * target tool's progress, elicitation and
19
+ * AbortSignal keep working.
20
+ *
21
+ * Errors are structured ({ error, code, suggestion, details }). The gateway
22
+ * cannot route to itself: `yootheme_builder_advanced` is never in the
23
+ * advanced registry (the CapturingServer never sees its name — it's
24
+ * registered after the CapturingServer hands off).
25
+ *
26
+ * Round-2 (R2-A2-CRIT2): split into 5 files under `advanced-tool/`
27
+ * (this barrel + `domains.ts` + `discovery.ts` + `execute.ts` +
28
+ * `register.ts`) to keep each file ≤ 100 LoC per Architecture §11.
29
+ *
30
+ * @license MIT
31
+ */
32
+ // Re-exports — keep the public surface that `advanced-tool.ts` exposed
33
+ // before the split, so downstream importers keep working through the
34
+ // `./advanced-tool.js` backward-compat shim.
35
+ export { DOMAIN_ORDER, DOMAIN_PREFIX_MAP, TOOL_PREFIX, buildDescription, domainOf, groupByDomain, renderGroupedList, } from './domains.js';
36
+ export { discoveryResult, inputSchemaJson, shapeOf } from './discovery.js';
37
+ export { errorResult, executeAdvancedTool } from './execute.js';
38
+ export { registerAdvancedTool } from './register.js';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,uEAAuE;AACvE,qEAAqE;AACrE,6CAA6C;AAC7C,OAAO,EACH,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,iBAAiB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Gateway tool registration — wires `yootheme_builder_advanced` onto the
3
+ * real McpServer, with discovery-mode + execute-mode dispatch.
4
+ *
5
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
6
+ *
7
+ * @license MIT
8
+ */
9
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ import type { AdvancedToolEntry } from '../capturing-server.js';
11
+ /**
12
+ * Registers `yootheme_builder_advanced` on the real McpServer.
13
+ *
14
+ * @param realServer the McpServer that exposes the gateway tool
15
+ * @param advancedRegistry the captured non-essential tools (from CapturingServer)
16
+ */
17
+ export declare function registerAdvancedTool(realServer: McpServer, advancedRegistry: Map<string, AdvancedToolEntry>): void;
18
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/register.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAmBhE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,SAAS,EACrB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACjD,IAAI,CAwCN"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Gateway tool registration — wires `yootheme_builder_advanced` onto the
3
+ * real McpServer, with discovery-mode + execute-mode dispatch.
4
+ *
5
+ * Round-2 (R2-A2-CRIT2) extracted from `gateway/advanced-tool.ts`.
6
+ *
7
+ * @license MIT
8
+ */
9
+ import { z } from 'zod';
10
+ import { buildDescription, renderGroupedList } from './domains.js';
11
+ import { discoveryResult } from './discovery.js';
12
+ import { errorResult, executeAdvancedTool } from './execute.js';
13
+ /** Builds the gateway tool's Zod inputSchema for a given non-empty enum of advanced names. */
14
+ function gatewayInputSchema(enumValues) {
15
+ return {
16
+ tool: z.enum(enumValues).describe('Advanced tool to route to (e.g. "yootheme_builder_page_save"). ' +
17
+ 'Omit `arguments` to discover its schema first.'),
18
+ arguments: z.record(z.string(), z.unknown()).optional().describe('Arguments for the target tool. Omit for discovery mode ' +
19
+ "(returns the tool's schema + annotations)."),
20
+ };
21
+ }
22
+ /**
23
+ * Registers `yootheme_builder_advanced` on the real McpServer.
24
+ *
25
+ * @param realServer the McpServer that exposes the gateway tool
26
+ * @param advancedRegistry the captured non-essential tools (from CapturingServer)
27
+ */
28
+ export function registerAdvancedTool(realServer, advancedRegistry) {
29
+ const advancedNames = [...advancedRegistry.keys()].sort();
30
+ // z.enum needs a non-empty tuple. The empty-registry arm is exercised
31
+ // only by defensive test wiring; production always populates the
32
+ // registry. Keeping the guard means a zero-tool wiring still yields a
33
+ // valid (if inert) gateway schema rather than a z.enum crash.
34
+ const enumValues = advancedNames.length > 0 ? advancedNames : ['__none__'];
35
+ realServer.registerTool('yootheme_builder_advanced', {
36
+ title: 'Advanced Tool Gateway',
37
+ description: buildDescription(advancedNames),
38
+ inputSchema: gatewayInputSchema(enumValues),
39
+ annotations: {
40
+ title: 'Advanced Tool Gateway',
41
+ readOnlyHint: false,
42
+ openWorldHint: true,
43
+ idempotentHint: false,
44
+ },
45
+ }, async (args, extra) => {
46
+ const entry = advancedRegistry.get(args.tool);
47
+ if (!entry) {
48
+ return errorResult({
49
+ message: `Unknown advanced tool: "${args.tool}".`,
50
+ code: 'unknown_tool',
51
+ suggestion: 'Pick one of the valid advanced tool names below, or call ' +
52
+ 'yootheme_builder_health to verify connectivity.\n\n' +
53
+ `Valid advanced tools by domain:\n${renderGroupedList(advancedNames)}`,
54
+ details: { valid_tools_by_domain: renderGroupedList(advancedNames) },
55
+ });
56
+ }
57
+ if (args.arguments === undefined)
58
+ return discoveryResult(args.tool, entry);
59
+ return executeAdvancedTool(args.tool, entry, args.arguments, extra);
60
+ });
61
+ }
62
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/register.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEhE,8FAA8F;AAC9F,SAAS,kBAAkB,CAAC,UAAiC;IACzD,OAAO;QACH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAC7B,iEAAiE;YAC7D,gDAAgD,CACvD;QACD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5D,yDAAyD;YACrD,4CAA4C,CACnD;KACJ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAChC,UAAqB,EACrB,gBAAgD;IAEhD,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,UAAU,GACZ,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,aAAuC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEvF,UAAU,CAAC,YAAY,CACnB,2BAA2B,EAC3B;QACI,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC;QAC5C,WAAW,EAAE,kBAAkB,CAAC,UAAU,CAAC;QAC3C,WAAW,EAAE;YACT,KAAK,EAAE,uBAAuB;YAC9B,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,KAAK;SACxB;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAA2B,EAAE;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,WAAW,CAAC;gBACf,OAAO,EAAE,2BAA2B,IAAI,CAAC,IAAI,IAAI;gBACjD,IAAI,EAAE,cAAc;gBACpB,UAAU,EACN,2DAA2D;oBAC3D,qDAAqD;oBACrD,oCAAoC,iBAAiB,CAAC,aAAa,CAAC,EAAE;gBAC1E,OAAO,EAAE,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAE;aACvE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC,CACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Backward-compat shim for `gateway/advanced-tool.ts`.
3
+ *
4
+ * The original 283-LoC module was split into `gateway/advanced-tool/`
5
+ * (4 files, each ≤ 100 LoC) per Architecture §11 cap (Round-2
6
+ * R2-A2-CRIT2 audit fix). This shim preserves the public import path
7
+ * (`from '../gateway/advanced-tool.js'`) so server.ts, src/index.ts,
8
+ * and the test suite keep working unchanged.
9
+ *
10
+ * @license MIT
11
+ */
12
+ export * from './advanced-tool/index.js';
13
+ //# sourceMappingURL=advanced-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-tool.d.ts","sourceRoot":"","sources":["../../src/gateway/advanced-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Backward-compat shim for `gateway/advanced-tool.ts`.
3
+ *
4
+ * The original 283-LoC module was split into `gateway/advanced-tool/`
5
+ * (4 files, each ≤ 100 LoC) per Architecture §11 cap (Round-2
6
+ * R2-A2-CRIT2 audit fix). This shim preserves the public import path
7
+ * (`from '../gateway/advanced-tool.js'`) so server.ts, src/index.ts,
8
+ * and the test suite keep working unchanged.
9
+ *
10
+ * @license MIT
11
+ */
12
+ export * from './advanced-tool/index.js';
13
+ //# sourceMappingURL=advanced-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-tool.js","sourceRoot":"","sources":["../../src/gateway/advanced-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * CapturingServer — registration interceptor wrapping a real McpServer.
3
+ *
4
+ * Tool routing (Wave G.1 / Design-Doc §3.1.1):
5
+ * - L3 direct (yootheme_builder_health, yootheme_builder_diagnose):
6
+ * skipped — no forward, no capture. These tools must already be
7
+ * registered directly on the real server BEFORE the CapturingServer
8
+ * wraps it, so the SDK never sees a duplicate name.
9
+ * - L1 essential (ESSENTIAL_TOOLS): forwarded to the real server as a
10
+ * first-class MCP tool reachable from `tools/list`.
11
+ * - L2 advanced (everything else): captured into the in-process
12
+ * advanced registry, reachable through the single
13
+ * `yootheme_builder_advanced` gateway tool.
14
+ *
15
+ * This is a typed wrapper, NOT a JS Proxy — TypeScript stays strict.
16
+ *
17
+ * Typing approach (mirrors the reference apimapper-mcp implementation):
18
+ * `ToolRegistrar` is the McpServer subsurface modules consume:
19
+ * `registerTool` + `registerResource`. `registerTool` is a hand-written
20
+ * generic mirroring the SDK signature EXCEPT its return type is `void`
21
+ * — captured tools have no live `RegisteredTool`, and no module reads
22
+ * the return value. A real `McpServer` is still assignable to
23
+ * `ToolRegistrar` (return-type bivariance for `void`), so every
24
+ * call-site accepts both shapes cast-free.
25
+ *
26
+ * Casts in this file (each documented + justified inline):
27
+ * 1. forwarded-essential — erases the handler's `InputArgs` generic to
28
+ * the SDK default when `config` is the erased `CapturedToolConfig`.
29
+ * 2. registry storage — erases the generic handler to the homogeneous
30
+ * `CapturedToolHandler` shape so one Map type fits all entries.
31
+ * 3. `registerResource` field — the SDK declares two overloads; a
32
+ * single spread-arg arrow cannot re-express the pair.
33
+ *
34
+ * @license MIT
35
+ */
36
+ import type { McpServer, ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js';
37
+ import type { AnySchema, ZodRawShapeCompat } from '@modelcontextprotocol/sdk/server/zod-compat.js';
38
+ import type { CallToolResult, ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
39
+ /**
40
+ * The input-schema constraint the SDK's `registerTool` accepts — a raw Zod
41
+ * shape, a Zod schema, or `undefined` (zero-arg tools). Reused so the
42
+ * `ToolRegistrar.registerTool` generic stays in lockstep with `ToolCallback`.
43
+ */
44
+ type ToolInputArgs = undefined | ZodRawShapeCompat | AnySchema;
45
+ /**
46
+ * The config object accepted by `registerTool` — mirrors the SDK's 2nd arg.
47
+ * `inputSchema` is generic so per-tool handler args stay strongly inferred.
48
+ */
49
+ interface RegisterToolConfig<InputArgs extends ToolInputArgs> {
50
+ title?: string;
51
+ description?: string;
52
+ inputSchema?: InputArgs;
53
+ outputSchema?: ZodRawShapeCompat | AnySchema;
54
+ annotations?: ToolAnnotations;
55
+ _meta?: Record<string, unknown>;
56
+ }
57
+ /**
58
+ * The McpServer subsurface our `registerXTools` builders consume.
59
+ *
60
+ * `registerTool` is a hand-written generic mirroring the SDK signature with a
61
+ * `void` return type. A real `McpServer` (whose method returns
62
+ * `RegisteredTool`) is still assignable here because a value-returning method
63
+ * satisfies a `void`-returning member. The `InputArgs` generic preserves
64
+ * per-tool `ToolCallback` argument inference at every call-site.
65
+ */
66
+ export interface ToolRegistrar {
67
+ registerTool<InputArgs extends ToolInputArgs = undefined>(name: string, config: RegisterToolConfig<InputArgs>, cb: ToolCallback<InputArgs>): void;
68
+ registerResource: McpServer['registerResource'];
69
+ }
70
+ /** Config object passed to `registerTool` (the SDK's 2nd arg). */
71
+ export type CapturedToolConfig = Parameters<McpServer['registerTool']>[1];
72
+ /**
73
+ * Captured-handler shape. The SDK's `registerTool` is generic over the input
74
+ * shape, so a captured handler is stored with its args erased to
75
+ * `Record<string, unknown>`. The gateway validates `arguments` against the
76
+ * tool's Zod schema before calling the handler, so the runtime contract holds.
77
+ */
78
+ export type CapturedToolHandler = (args: Record<string, unknown>, extra: unknown) => CallToolResult | Promise<CallToolResult>;
79
+ /** A captured advanced tool: its registration config and its handler. */
80
+ export interface AdvancedToolEntry {
81
+ config: CapturedToolConfig;
82
+ handler: CapturedToolHandler;
83
+ }
84
+ /**
85
+ * Wraps a real McpServer. Forwards L1 essentials (and all resources) to it,
86
+ * captures L2 non-essentials into an in-process registry, and silently
87
+ * skips L3 direct top-level names that must already be on the real server.
88
+ */
89
+ export declare class CapturingServer implements ToolRegistrar {
90
+ private readonly realServer;
91
+ private readonly advancedRegistry;
92
+ constructor(realServer: McpServer);
93
+ /**
94
+ * Routes a tool registration by name. Returns `void`: captured tools
95
+ * have no `RegisteredTool` and no `registerXTools` module reads the
96
+ * return value.
97
+ *
98
+ * Routing order matters: the L3-direct check is FIRST so a caller
99
+ * cannot accidentally re-route a direct-registered name through the
100
+ * gateway just by re-naming a future tool builder.
101
+ */
102
+ registerTool<InputArgs extends ToolInputArgs = undefined>(name: string, config: CapturedToolConfig, handler: ToolCallback<InputArgs>): void;
103
+ /**
104
+ * Resources are always forwarded — they are not part of the tool cap.
105
+ *
106
+ * Cast: the SDK declares `registerResource` as two overloads; a single
107
+ * spread `(...args: RegisterResourceArgs)` arrow cannot re-express that
108
+ * overload pair, so the field is asserted to the SDK's exact member
109
+ * type. The spread forwards every argument verbatim, so the runtime
110
+ * contract is unchanged.
111
+ */
112
+ registerResource: McpServer['registerResource'];
113
+ /** The captured non-essential tools, keyed by tool name. */
114
+ getAdvancedRegistry(): Map<string, AdvancedToolEntry>;
115
+ }
116
+ export {};
117
+ //# sourceMappingURL=capturing-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capturing-server.d.ts","sourceRoot":"","sources":["../../src/gateway/capturing-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAI1F;;;;GAIG;AACH,KAAK,aAAa,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAE/D;;;GAGG;AACH,UAAU,kBAAkB,CAAC,SAAS,SAAS,aAAa;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC7C,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC1B,YAAY,CAAC,SAAS,SAAS,aAAa,GAAG,SAAS,EACpD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,EACrC,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC,GAC5B,IAAI,CAAC;IACR,gBAAgB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;CACnD;AAED,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI1E;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,OAAO,KACb,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,aAAa;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwC;gBAE7D,UAAU,EAAE,SAAS;IAIjC;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,SAAS,aAAa,GAAG,SAAS,EACpD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GACjC,IAAI;IAkCP;;;;;;;;OAQG;IACH,gBAAgB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CACiC;IAEhF,4DAA4D;IAC5D,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAGxD"}