@wootsup/yt-builder-mcp 1.2.0 → 1.4.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 (241) hide show
  1. package/README.md +16 -12
  2. package/dist/catalog/build-catalog.d.ts +63 -0
  3. package/dist/catalog/build-catalog.d.ts.map +1 -0
  4. package/dist/catalog/build-catalog.js +166 -0
  5. package/dist/catalog/build-catalog.js.map +1 -0
  6. package/dist/cli/doctor-command.d.ts +21 -0
  7. package/dist/cli/doctor-command.d.ts.map +1 -0
  8. package/dist/cli/doctor-command.js +111 -0
  9. package/dist/cli/doctor-command.js.map +1 -0
  10. package/dist/cli/invocation-decision.d.ts.map +1 -1
  11. package/dist/cli/invocation-decision.js +2 -0
  12. package/dist/cli/invocation-decision.js.map +1 -1
  13. package/dist/client.d.ts +14 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +9 -0
  16. package/dist/client.js.map +1 -1
  17. package/dist/diagnostics/ca-trust.d.ts +16 -0
  18. package/dist/diagnostics/ca-trust.d.ts.map +1 -0
  19. package/dist/diagnostics/ca-trust.js +54 -0
  20. package/dist/diagnostics/ca-trust.js.map +1 -0
  21. package/dist/diagnostics/diagnose-network-error.d.ts +37 -0
  22. package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -0
  23. package/dist/diagnostics/diagnose-network-error.js +158 -0
  24. package/dist/diagnostics/diagnose-network-error.js.map +1 -0
  25. package/dist/diagnostics/doctor.d.ts +62 -0
  26. package/dist/diagnostics/doctor.d.ts.map +1 -0
  27. package/dist/diagnostics/doctor.js +165 -0
  28. package/dist/diagnostics/doctor.js.map +1 -0
  29. package/dist/gateway/advanced-read-tool.d.ts +37 -0
  30. package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
  31. package/dist/gateway/advanced-read-tool.js +156 -0
  32. package/dist/gateway/advanced-read-tool.js.map +1 -0
  33. package/dist/gateway/advanced-tool/domains.d.ts +18 -3
  34. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  35. package/dist/gateway/advanced-tool/domains.js +28 -9
  36. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  37. package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
  38. package/dist/gateway/advanced-tool/register.js +43 -11
  39. package/dist/gateway/advanced-tool/register.js.map +1 -1
  40. package/dist/gateway/essentials.d.ts +14 -4
  41. package/dist/gateway/essentials.d.ts.map +1 -1
  42. package/dist/gateway/essentials.js +46 -5
  43. package/dist/gateway/essentials.js.map +1 -1
  44. package/dist/gateway/test-support.d.ts +2 -2
  45. package/dist/gateway/test-support.js +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +45 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/install-skill.d.ts +1 -1
  50. package/dist/install-skill.js +2 -2
  51. package/dist/net/extra-headers.d.ts +66 -0
  52. package/dist/net/extra-headers.d.ts.map +1 -0
  53. package/dist/net/extra-headers.js +164 -0
  54. package/dist/net/extra-headers.js.map +1 -0
  55. package/dist/net/internal-host.d.ts +45 -0
  56. package/dist/net/internal-host.d.ts.map +1 -0
  57. package/dist/net/internal-host.js +164 -0
  58. package/dist/net/internal-host.js.map +1 -0
  59. package/dist/net/proxy-dispatcher.d.ts +40 -0
  60. package/dist/net/proxy-dispatcher.d.ts.map +1 -0
  61. package/dist/net/proxy-dispatcher.js +65 -0
  62. package/dist/net/proxy-dispatcher.js.map +1 -0
  63. package/dist/proxy/bridge.d.ts +43 -0
  64. package/dist/proxy/bridge.d.ts.map +1 -0
  65. package/dist/proxy/bridge.js +155 -0
  66. package/dist/proxy/bridge.js.map +1 -0
  67. package/dist/proxy/mode.d.ts +10 -0
  68. package/dist/proxy/mode.d.ts.map +1 -0
  69. package/dist/proxy/mode.js +20 -0
  70. package/dist/proxy/mode.js.map +1 -0
  71. package/dist/server.d.ts +5 -3
  72. package/dist/server.d.ts.map +1 -1
  73. package/dist/server.js +13 -3
  74. package/dist/server.js.map +1 -1
  75. package/dist/setup-ca-env.d.ts +40 -0
  76. package/dist/setup-ca-env.d.ts.map +1 -0
  77. package/dist/setup-ca-env.js +58 -0
  78. package/dist/setup-ca-env.js.map +1 -0
  79. package/dist/setup-ca-reprobe.d.ts +38 -0
  80. package/dist/setup-ca-reprobe.d.ts.map +1 -0
  81. package/dist/setup-ca-reprobe.js +68 -0
  82. package/dist/setup-ca-reprobe.js.map +1 -0
  83. package/dist/setup-cli.d.ts +37 -2
  84. package/dist/setup-cli.d.ts.map +1 -1
  85. package/dist/setup-cli.js +178 -4
  86. package/dist/setup-cli.js.map +1 -1
  87. package/dist/setup-npx-spec.d.ts +44 -0
  88. package/dist/setup-npx-spec.d.ts.map +1 -0
  89. package/dist/setup-npx-spec.js +66 -0
  90. package/dist/setup-npx-spec.js.map +1 -0
  91. package/dist/setup-prompts.d.ts +14 -1
  92. package/dist/setup-prompts.d.ts.map +1 -1
  93. package/dist/setup-prompts.js +53 -1
  94. package/dist/setup-prompts.js.map +1 -1
  95. package/dist/setup-wizard-defaults.d.ts.map +1 -1
  96. package/dist/setup-wizard-defaults.js +29 -5
  97. package/dist/setup-wizard-defaults.js.map +1 -1
  98. package/dist/setup-wizard-handshake.d.ts +4 -4
  99. package/dist/setup-wizard-handshake.d.ts.map +1 -1
  100. package/dist/setup-wizard-handshake.js +46 -12
  101. package/dist/setup-wizard-handshake.js.map +1 -1
  102. package/dist/setup-wizard-types.d.ts +81 -0
  103. package/dist/setup-wizard-types.d.ts.map +1 -1
  104. package/dist/setup-wizard.d.ts +2 -2
  105. package/dist/setup-wizard.d.ts.map +1 -1
  106. package/dist/setup-wizard.js +140 -18
  107. package/dist/setup-wizard.js.map +1 -1
  108. package/dist/sites/client-pool.d.ts +8 -1
  109. package/dist/sites/client-pool.d.ts.map +1 -1
  110. package/dist/sites/client-pool.js +34 -4
  111. package/dist/sites/client-pool.js.map +1 -1
  112. package/dist/sites/registry.d.ts +30 -0
  113. package/dist/sites/registry.d.ts.map +1 -1
  114. package/dist/sites/registry.js.map +1 -1
  115. package/dist/sites/store.d.ts +8 -1
  116. package/dist/sites/store.d.ts.map +1 -1
  117. package/dist/sites/store.js +17 -2
  118. package/dist/sites/store.js.map +1 -1
  119. package/dist/sites/tools/use-site.d.ts.map +1 -1
  120. package/dist/sites/tools/use-site.js +26 -6
  121. package/dist/sites/tools/use-site.js.map +1 -1
  122. package/dist/tools/bind-guidance.d.ts +80 -0
  123. package/dist/tools/bind-guidance.d.ts.map +1 -0
  124. package/dist/tools/bind-guidance.js +95 -0
  125. package/dist/tools/bind-guidance.js.map +1 -0
  126. package/dist/tools/elements/builders.d.ts.map +1 -1
  127. package/dist/tools/elements/builders.js +63 -13
  128. package/dist/tools/elements/builders.js.map +1 -1
  129. package/dist/tools/elements/handlers-write.d.ts +19 -2
  130. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  131. package/dist/tools/elements/handlers-write.js +179 -10
  132. package/dist/tools/elements/handlers-write.js.map +1 -1
  133. package/dist/tools/elements/handlers.d.ts +8 -2
  134. package/dist/tools/elements/handlers.d.ts.map +1 -1
  135. package/dist/tools/elements/handlers.js +76 -28
  136. package/dist/tools/elements/handlers.js.map +1 -1
  137. package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
  138. package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
  139. package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
  140. package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
  141. package/dist/tools/format/elements-format.d.ts +35 -0
  142. package/dist/tools/format/elements-format.d.ts.map +1 -1
  143. package/dist/tools/format/elements-format.js +124 -1
  144. package/dist/tools/format/elements-format.js.map +1 -1
  145. package/dist/tools/format/health-format.d.ts +3 -0
  146. package/dist/tools/format/health-format.d.ts.map +1 -1
  147. package/dist/tools/format/health-format.js +21 -4
  148. package/dist/tools/format/health-format.js.map +1 -1
  149. package/dist/tools/format/inspection-format.d.ts +18 -0
  150. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  151. package/dist/tools/format/inspection-format.js +22 -1
  152. package/dist/tools/format/inspection-format.js.map +1 -1
  153. package/dist/tools/format/pages-format.d.ts.map +1 -1
  154. package/dist/tools/format/pages-format.js +7 -0
  155. package/dist/tools/format/pages-format.js.map +1 -1
  156. package/dist/tools/format/sources-format.d.ts +8 -0
  157. package/dist/tools/format/sources-format.d.ts.map +1 -1
  158. package/dist/tools/format/sources-format.js +10 -0
  159. package/dist/tools/format/sources-format.js.map +1 -1
  160. package/dist/tools/health.d.ts.map +1 -1
  161. package/dist/tools/health.js +56 -0
  162. package/dist/tools/health.js.map +1 -1
  163. package/dist/tools/index.d.ts.map +1 -1
  164. package/dist/tools/index.js +4 -0
  165. package/dist/tools/index.js.map +1 -1
  166. package/dist/tools/inspection.d.ts +24 -0
  167. package/dist/tools/inspection.d.ts.map +1 -1
  168. package/dist/tools/inspection.js +140 -41
  169. package/dist/tools/inspection.js.map +1 -1
  170. package/dist/tools/layout-flatten.d.ts +11 -8
  171. package/dist/tools/layout-flatten.d.ts.map +1 -1
  172. package/dist/tools/layout-flatten.js +17 -6
  173. package/dist/tools/layout-flatten.js.map +1 -1
  174. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  175. package/dist/tools/multi-items/builders.js +11 -2
  176. package/dist/tools/multi-items/builders.js.map +1 -1
  177. package/dist/tools/multi-items/inspect-handler.d.ts +13 -0
  178. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
  179. package/dist/tools/multi-items/inspect-handler.js +147 -3
  180. package/dist/tools/multi-items/inspect-handler.js.map +1 -1
  181. package/dist/tools/pages/builders.d.ts.map +1 -1
  182. package/dist/tools/pages/builders.js +153 -39
  183. package/dist/tools/pages/builders.js.map +1 -1
  184. package/dist/tools/pages/handlers-read.d.ts +40 -5
  185. package/dist/tools/pages/handlers-read.d.ts.map +1 -1
  186. package/dist/tools/pages/handlers-read.js +404 -76
  187. package/dist/tools/pages/handlers-read.js.map +1 -1
  188. package/dist/tools/pages/handlers-write.d.ts +95 -1
  189. package/dist/tools/pages/handlers-write.d.ts.map +1 -1
  190. package/dist/tools/pages/handlers-write.js +137 -8
  191. package/dist/tools/pages/handlers-write.js.map +1 -1
  192. package/dist/tools/pages/index.d.ts +1 -1
  193. package/dist/tools/pages/index.d.ts.map +1 -1
  194. package/dist/tools/pages/index.js +1 -1
  195. package/dist/tools/pages/index.js.map +1 -1
  196. package/dist/tools/pages/schemas.d.ts +74 -5
  197. package/dist/tools/pages/schemas.d.ts.map +1 -1
  198. package/dist/tools/pages/schemas.js +243 -8
  199. package/dist/tools/pages/schemas.js.map +1 -1
  200. package/dist/tools/shared-schemas.d.ts +3 -0
  201. package/dist/tools/shared-schemas.d.ts.map +1 -1
  202. package/dist/tools/shared-schemas.js +43 -13
  203. package/dist/tools/shared-schemas.js.map +1 -1
  204. package/dist/tools/sources/builders.d.ts.map +1 -1
  205. package/dist/tools/sources/builders.js +93 -10
  206. package/dist/tools/sources/builders.js.map +1 -1
  207. package/dist/tools/sources/handlers-bind.d.ts +13 -1
  208. package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
  209. package/dist/tools/sources/handlers-bind.js +163 -1
  210. package/dist/tools/sources/handlers-bind.js.map +1 -1
  211. package/dist/tools/sources/handlers.d.ts +12 -1
  212. package/dist/tools/sources/handlers.d.ts.map +1 -1
  213. package/dist/tools/sources/handlers.js +103 -16
  214. package/dist/tools/sources/handlers.js.map +1 -1
  215. package/dist/tools/sparse-fields.d.ts +73 -0
  216. package/dist/tools/sparse-fields.d.ts.map +1 -1
  217. package/dist/tools/sparse-fields.js +136 -0
  218. package/dist/tools/sparse-fields.js.map +1 -1
  219. package/dist/tools/sublayout/builders.d.ts +23 -0
  220. package/dist/tools/sublayout/builders.d.ts.map +1 -0
  221. package/dist/tools/sublayout/builders.js +54 -0
  222. package/dist/tools/sublayout/builders.js.map +1 -0
  223. package/dist/tools/sublayout/index.d.ts +13 -0
  224. package/dist/tools/sublayout/index.d.ts.map +1 -0
  225. package/dist/tools/sublayout/index.js +13 -0
  226. package/dist/tools/sublayout/index.js.map +1 -0
  227. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
  228. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
  229. package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
  230. package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
  231. package/dist/tools/tool-builder/results.d.ts +31 -0
  232. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  233. package/dist/tools/tool-builder/results.js +95 -4
  234. package/dist/tools/tool-builder/results.js.map +1 -1
  235. package/dist/update/update-check.d.ts +56 -0
  236. package/dist/update/update-check.d.ts.map +1 -0
  237. package/dist/update/update-check.js +155 -0
  238. package/dist/update/update-check.js.map +1 -0
  239. package/manifest.json +1 -1
  240. package/package.json +5 -2
  241. package/skills/yt-builder-mcp/SKILL.md +148 -82
@@ -0,0 +1,54 @@
1
+ // packages/mcp/src/diagnostics/ca-trust.ts
2
+ /**
3
+ * Shared helpers for the corporate TLS-inspection (CA-trust) install path.
4
+ *
5
+ * G-D #6/#7 — two questions the wizard + CLI both need answered:
6
+ * 1. "Did this connection fail because of a TLS-inspection root CA?"
7
+ * → {@link isCaTrustError}, classifying against the canonical
8
+ * {@link CA_TRUST_CODES} (no duplicate set).
9
+ * 2. "Can this Node read the OS trust store natively (`--use-system-ca`)?"
10
+ * → {@link supportsSystemCa}, a real numeric semver compare against the
11
+ * backport floor — never a string comparison.
12
+ *
13
+ * Node's `--use-system-ca` (reads Windows CryptoAPI + macOS Keychain) was
14
+ * stabilised on the 24.x line and backported to 22.15.0, so the floor is
15
+ * 22.15.0. Below that floor, a corporate CA must be supplied as a `.pem`
16
+ * via NODE_EXTRA_CA_CERTS. Neither path ever disables TLS verification.
17
+ */
18
+ import { CA_TRUST_CODES, collectCodes } from './diagnose-network-error.js';
19
+ /**
20
+ * True when `err` (or anything in its `.cause` / `AggregateError.errors`
21
+ * chain) carries a TLS chain-of-trust failure code — the signature of a
22
+ * corporate TLS-inspection proxy injecting its own root CA. Pure; reuses the
23
+ * same walker + code set as {@link diagnoseNetworkError}.
24
+ */
25
+ export function isCaTrustError(err) {
26
+ return collectCodes(err).some((c) => CA_TRUST_CODES.has(c));
27
+ }
28
+ /** Node version that first reads the OS trust store via `--use-system-ca`. */
29
+ export const SYSTEM_CA_NODE_FLOOR = [22, 15, 0];
30
+ function parseNodeVersion(v) {
31
+ const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec(v);
32
+ if (m === null)
33
+ return null;
34
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
35
+ }
36
+ /**
37
+ * Does `nodeVersion` (default `process.version`) support `--use-system-ca`?
38
+ * A real numeric triple compare against {@link SYSTEM_CA_NODE_FLOOR} —
39
+ * fail-closed (`false`) on unparseable input.
40
+ */
41
+ export function supportsSystemCa(nodeVersion = process.version) {
42
+ const v = parseNodeVersion(nodeVersion);
43
+ if (v === null)
44
+ return false;
45
+ const floor = SYSTEM_CA_NODE_FLOOR;
46
+ for (let i = 0; i < 3; i++) {
47
+ if (v[i] > floor[i])
48
+ return true;
49
+ if (v[i] < floor[i])
50
+ return false;
51
+ }
52
+ return true; // exactly equal to the floor
53
+ }
54
+ //# sourceMappingURL=ca-trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ca-trust.js","sourceRoot":"","sources":["../../src/diagnostics/ca-trust.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAsC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnF,SAAS,gBAAgB,CAAC,CAAS;IAC/B,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAsB,OAAO,CAAC,OAAO;IAClE,MAAM,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,KAAK,GAAG,oBAAoB,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,6BAA6B;AAC9C,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * A human-actionable diagnosis of an outbound-connection failure.
3
+ *
4
+ * The Glöckle corporate stress-test failed with an opaque 30-second timeout
5
+ * that "looked like an auth or server problem" when the real cause was a
6
+ * TLS-inspection root CA. Mapping the low-level `.code` to a copy-pasteable fix
7
+ * is the difference between a 5-minute self-serve and a support ticket.
8
+ */
9
+ export interface NetworkDiagnosis {
10
+ /** The matched low-level code, e.g. `SELF_SIGNED_CERT_IN_CHAIN`, `ENOTFOUND`, `HTTP_401`. */
11
+ readonly code: string;
12
+ /** One-line summary of what went wrong. */
13
+ readonly summary: string;
14
+ /** Actionable, copy-pasteable fix. NEVER suggests disabling TLS verification. */
15
+ readonly fix: string;
16
+ }
17
+ /**
18
+ * TLS chain-of-trust failures — the corporate-CA / TLS-inspection signature.
19
+ *
20
+ * Exported so the wizard's CA-detection path (`isCaTrustError`) classifies an
21
+ * outbound failure against the SAME canonical set — there is exactly one
22
+ * definition of "this is a TLS-inspection CA problem" in the package.
23
+ */
24
+ export declare const CA_TRUST_CODES: ReadonlySet<string>;
25
+ /**
26
+ * Walk `err`, its `.cause` chain, and any `AggregateError.errors`, collecting
27
+ * every `.code` string. A Node global-fetch failure (`TypeError: fetch failed`)
28
+ * hides the real TLS/socket code one or more `.cause` levels down.
29
+ */
30
+ export declare function collectCodes(err: unknown, depth?: number): string[];
31
+ /**
32
+ * Classify an outbound-connection failure into an actionable diagnosis, or
33
+ * `null` when nothing specific matches (the caller should fall back to the raw
34
+ * error message). Pure — `env` is injectable for tests.
35
+ */
36
+ export declare function diagnoseNetworkError(err: unknown, env?: NodeJS.ProcessEnv): NetworkDiagnosis | null;
37
+ //# sourceMappingURL=diagnose-network-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose-network-error.d.ts","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAO7C,CAAC;AAmCH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAa9D;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,gBAAgB,GAAG,IAAI,CAqFzB"}
@@ -0,0 +1,158 @@
1
+ // packages/mcp/src/diagnostics/diagnose-network-error.ts
2
+ /**
3
+ * TLS chain-of-trust failures — the corporate-CA / TLS-inspection signature.
4
+ *
5
+ * Exported so the wizard's CA-detection path (`isCaTrustError`) classifies an
6
+ * outbound failure against the SAME canonical set — there is exactly one
7
+ * definition of "this is a TLS-inspection CA problem" in the package.
8
+ */
9
+ export const CA_TRUST_CODES = new Set([
10
+ 'SELF_SIGNED_CERT_IN_CHAIN',
11
+ 'DEPTH_ZERO_SELF_SIGNED_CERT',
12
+ 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
13
+ 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',
14
+ 'SELF_SIGNED_CERT',
15
+ 'CERT_UNTRUSTED',
16
+ ]);
17
+ const TIMEOUT_CODES = new Set([
18
+ 'UND_ERR_CONNECT_TIMEOUT',
19
+ 'ETIMEDOUT',
20
+ 'UND_ERR_HEADERS_TIMEOUT',
21
+ 'UND_ERR_BODY_TIMEOUT',
22
+ ]);
23
+ const DNS_CODES = new Set(['ENOTFOUND', 'EAI_AGAIN']);
24
+ const CA_FIX = 'On Node ≥ 22.15, the zero-export fix is `npx -y @wootsup/yt-builder-mcp setup --use-system-ca` (Node reads your OS ' +
25
+ 'trust store / Windows cert store / macOS Keychain). Otherwise export your corporate/proxy root CA to a .pem file and ' +
26
+ 'set NODE_EXTRA_CA_CERTS=/path/to/corp-root-ca.pem in the server entry\'s env block (re-run setup with `--ca <path>`, ' +
27
+ 'or `… doctor` to detect it), then restart your AI client. Never disable TLS verification.';
28
+ /** Read a string `.code` off an unknown value, or null. */
29
+ function codeOf(value) {
30
+ if (value !== null && typeof value === 'object' && 'code' in value) {
31
+ const c = value.code;
32
+ if (typeof c === 'string' && c !== '')
33
+ return c;
34
+ }
35
+ return null;
36
+ }
37
+ /** Read a numeric `.status` off an unknown value (RestError-like), or null. */
38
+ function statusOf(value) {
39
+ if (value !== null && typeof value === 'object' && 'status' in value) {
40
+ const s = value.status;
41
+ if (typeof s === 'number' && Number.isFinite(s))
42
+ return s;
43
+ }
44
+ return null;
45
+ }
46
+ /**
47
+ * Walk `err`, its `.cause` chain, and any `AggregateError.errors`, collecting
48
+ * every `.code` string. A Node global-fetch failure (`TypeError: fetch failed`)
49
+ * hides the real TLS/socket code one or more `.cause` levels down.
50
+ */
51
+ export function collectCodes(err, depth = 0) {
52
+ if (err === null || typeof err !== 'object' || depth > 6)
53
+ return [];
54
+ const codes = [];
55
+ const c = codeOf(err);
56
+ if (c !== null)
57
+ codes.push(c);
58
+ if ('cause' in err)
59
+ codes.push(...collectCodes(err.cause, depth + 1));
60
+ if ('errors' in err) {
61
+ const list = err.errors;
62
+ if (Array.isArray(list)) {
63
+ for (const inner of list)
64
+ codes.push(...collectCodes(inner, depth + 1));
65
+ }
66
+ }
67
+ return codes;
68
+ }
69
+ /** Does the environment have any forward-proxy configured? */
70
+ function configuredProxy(env) {
71
+ return env.HTTPS_PROXY ?? env.https_proxy ?? env.HTTP_PROXY ?? env.http_proxy ?? null;
72
+ }
73
+ /**
74
+ * Classify an outbound-connection failure into an actionable diagnosis, or
75
+ * `null` when nothing specific matches (the caller should fall back to the raw
76
+ * error message). Pure — `env` is injectable for tests.
77
+ */
78
+ export function diagnoseNetworkError(err, env = process.env) {
79
+ // HTTP-status failures (RestError-like) take precedence — the request DID
80
+ // reach the server, so it is not a transport problem.
81
+ const status = statusOf(err);
82
+ if (status === 401 || status === 403) {
83
+ return {
84
+ code: `HTTP_${status}`,
85
+ summary: `The site rejected the bearer token (HTTP ${status}).`,
86
+ fix: 'Re-issue an MCP key in the plugin admin (YT Builder MCP → Keys) and update YTB_MCP_BEARER_TOKEN, then restart.',
87
+ };
88
+ }
89
+ if (status === 404) {
90
+ return {
91
+ code: 'HTTP_404',
92
+ summary: 'The MCP endpoint was not found (HTTP 404).',
93
+ fix: 'Confirm the plugin is installed + active and YTB_MCP_SITE_URL points at the site root (not wp-admin). Run `… doctor`.',
94
+ };
95
+ }
96
+ if (status !== null && status >= 500) {
97
+ return {
98
+ code: `HTTP_${status}`,
99
+ summary: `The site returned a server error (HTTP ${status}).`,
100
+ fix: 'Check the site\'s PHP error log; retry once it recovers. If it persists, the plugin may have crashed on this request.',
101
+ };
102
+ }
103
+ const codes = collectCodes(err);
104
+ const has = (set) => codes.find((c) => set.has(c)) ?? null;
105
+ const caCode = has(CA_TRUST_CODES);
106
+ if (caCode !== null) {
107
+ return {
108
+ code: caCode,
109
+ summary: 'The TLS certificate could not be verified — the signature of a corporate TLS-inspection proxy that injects its own root CA.',
110
+ fix: CA_FIX,
111
+ };
112
+ }
113
+ if (codes.includes('CERT_HAS_EXPIRED')) {
114
+ return {
115
+ code: 'CERT_HAS_EXPIRED',
116
+ summary: 'The TLS certificate presented for the site has expired.',
117
+ fix: 'Renew the site certificate. If a corporate proxy presents it, update the CA in NODE_EXTRA_CA_CERTS.',
118
+ };
119
+ }
120
+ const proxy = configuredProxy(env);
121
+ if (codes.includes('ECONNREFUSED')) {
122
+ return proxy !== null
123
+ ? {
124
+ code: 'ECONNREFUSED',
125
+ summary: `The configured proxy (${proxy}) refused the connection.`,
126
+ fix: `Verify HTTPS_PROXY=${proxy} is correct and reachable, and set NO_PROXY for internal hosts that must bypass it.`,
127
+ }
128
+ : {
129
+ code: 'ECONNREFUSED',
130
+ summary: 'The target host refused the connection.',
131
+ fix: 'Check YTB_MCP_SITE_URL is correct and the site is up and reachable from this machine.',
132
+ };
133
+ }
134
+ const timeoutCode = has(TIMEOUT_CODES);
135
+ if (timeoutCode !== null) {
136
+ return proxy !== null
137
+ ? {
138
+ code: timeoutCode,
139
+ summary: `The connection through the proxy (${proxy}) timed out.`,
140
+ fix: `Confirm HTTPS_PROXY=${proxy} can reach the site, and set NO_PROXY for internal hosts. Run \`… doctor\`.`,
141
+ }
142
+ : {
143
+ code: timeoutCode,
144
+ summary: 'The connection timed out.',
145
+ fix: 'The site may be internal (VPN needed) or require a proxy (set HTTPS_PROXY). Run `npx -y @wootsup/yt-builder-mcp doctor` to diagnose.',
146
+ };
147
+ }
148
+ const dnsCode = has(DNS_CODES);
149
+ if (dnsCode !== null) {
150
+ return {
151
+ code: dnsCode,
152
+ summary: 'DNS lookup failed for the site host.',
153
+ fix: 'Check the host in YTB_MCP_SITE_URL is spelled correctly and resolvable from this machine (VPN/DNS).',
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+ //# sourceMappingURL=diagnose-network-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose-network-error.js","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ export type DoctorStatus = 'ok' | 'warn' | 'fail' | 'info';
2
+ export interface DoctorCheck {
3
+ readonly name: string;
4
+ readonly label: string;
5
+ readonly status: DoctorStatus;
6
+ readonly detail: string;
7
+ /** Actionable fix when status is warn/fail. */
8
+ readonly fix?: string;
9
+ }
10
+ export interface DoctorReport {
11
+ readonly checks: readonly DoctorCheck[];
12
+ /** True when no check failed (warnings are tolerated). */
13
+ readonly ok: boolean;
14
+ }
15
+ export interface DoctorConfig {
16
+ readonly url?: string;
17
+ readonly token?: string;
18
+ /** Defaults to `process.version`. */
19
+ readonly nodeVersion?: string;
20
+ /** Defaults to `process.env`. */
21
+ readonly env?: NodeJS.ProcessEnv;
22
+ readonly currentVersion: string;
23
+ readonly packageName: string;
24
+ }
25
+ export interface DoctorDeps {
26
+ /** Probe `<url>/wp-json/yt-builder-mcp/v1/health`. */
27
+ probeHealth: (url: string) => Promise<{
28
+ ok: true;
29
+ pluginVersion?: string;
30
+ } | {
31
+ ok: false;
32
+ error: unknown;
33
+ }>;
34
+ /** Probe an authenticated endpoint with the bearer. */
35
+ probeBearer: (url: string, token: string) => Promise<{
36
+ ok: boolean;
37
+ status?: number;
38
+ error?: unknown;
39
+ }>;
40
+ /** Latest version on npm, or null. */
41
+ fetchLatest: (packageName: string) => Promise<string | null>;
42
+ /**
43
+ * G-D #10 — probe `registry.npmjs.org` reachability + TLS chain. Optional
44
+ * for back-compat (older deps bags / tests). When wired, doctor runs the
45
+ * network-error classifier on a failure and surfaces the SAME CA fix as the
46
+ * site check — a corporate TLS-inspection CA usually breaks BOTH the site
47
+ * and the npm registry, but the old code swallowed the registry error into
48
+ * a generic "could not reach npm".
49
+ */
50
+ probeRegistry?: () => Promise<{
51
+ ok: boolean;
52
+ error?: unknown;
53
+ }>;
54
+ }
55
+ /**
56
+ * Run the self-diagnostic. Pure decision core — all network probes are
57
+ * injected via {@link DoctorDeps}, so the logic is fully testable offline.
58
+ */
59
+ export declare function runDoctor(config: DoctorConfig, deps: DoctorDeps): Promise<DoctorReport>;
60
+ /** Render a {@link DoctorReport} as a readable, fixed-width-ish text block. */
61
+ export declare function formatDoctorReport(report: DoctorReport): string;
62
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACvB,sDAAsD;IACtD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5G,uDAAuD;IACvD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxG,sCAAsC;IACtC,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnE;AAsBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAiI7F;AAID,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAS/D"}
@@ -0,0 +1,165 @@
1
+ // packages/mcp/src/diagnostics/doctor.ts
2
+ import { diagnoseNetworkError } from './diagnose-network-error.js';
3
+ import { isVersionNewer } from '../update/update-check.js';
4
+ /** Minimum supported Node — must match package.json engines.node. */
5
+ const NODE_FLOOR = [18, 17, 0];
6
+ function parseNodeVersion(v) {
7
+ const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec(v);
8
+ return m === null ? null : [Number(m[1]), Number(m[2]), Number(m[3])];
9
+ }
10
+ function meetsFloor(v, floor) {
11
+ for (let i = 0; i < 3; i++) {
12
+ if (v[i] > floor[i])
13
+ return true;
14
+ if (v[i] < floor[i])
15
+ return false;
16
+ }
17
+ return true;
18
+ }
19
+ function proxyOf(env) {
20
+ return env.HTTPS_PROXY ?? env.https_proxy ?? env.HTTP_PROXY ?? env.http_proxy ?? null;
21
+ }
22
+ /**
23
+ * Run the self-diagnostic. Pure decision core — all network probes are
24
+ * injected via {@link DoctorDeps}, so the logic is fully testable offline.
25
+ */
26
+ export async function runDoctor(config, deps) {
27
+ const env = config.env ?? process.env;
28
+ const nodeVersion = config.nodeVersion ?? process.version;
29
+ const checks = [];
30
+ // 1. Node version vs the engines floor.
31
+ const parsed = parseNodeVersion(nodeVersion);
32
+ if (parsed !== null && meetsFloor(parsed, NODE_FLOOR)) {
33
+ checks.push({ name: 'node', label: 'Node.js', status: 'ok', detail: `${nodeVersion} (≥ 18.17.0)` });
34
+ }
35
+ else {
36
+ checks.push({
37
+ name: 'node',
38
+ label: 'Node.js',
39
+ status: 'fail',
40
+ detail: `${nodeVersion} is below the required 18.17.0`,
41
+ fix: 'Install Node.js 18.17+ (LTS recommended) and re-run your AI client.',
42
+ });
43
+ }
44
+ // 2. Proxy env (informational).
45
+ const proxy = proxyOf(env);
46
+ checks.push(proxy !== null
47
+ ? { name: 'proxy', label: 'Proxy', status: 'info', detail: `Forward proxy configured: ${proxy}` }
48
+ : { name: 'proxy', label: 'Proxy', status: 'info', detail: 'No proxy configured (direct connection).' });
49
+ // 3. Config presence — without url+token we cannot probe the site.
50
+ const url = config.url;
51
+ const token = config.token;
52
+ if (url === undefined || url === '' || token === undefined || token === '') {
53
+ checks.push({
54
+ name: 'config',
55
+ label: 'Configuration',
56
+ status: 'fail',
57
+ detail: 'Missing site URL and/or bearer token.',
58
+ fix: 'Pass --url <site> --token <key>, or run `npx -y @wootsup/yt-builder-mcp setup` first.',
59
+ });
60
+ }
61
+ else {
62
+ checks.push({ name: 'config', label: 'Configuration', status: 'ok', detail: `Target: ${url}` });
63
+ // 4. Reachability + TLS.
64
+ const health = await deps.probeHealth(url);
65
+ if (health.ok) {
66
+ checks.push({
67
+ name: 'reachability',
68
+ label: 'Plugin reachable',
69
+ status: 'ok',
70
+ detail: health.pluginVersion !== undefined ? `OK — plugin ${health.pluginVersion}` : 'OK',
71
+ });
72
+ }
73
+ else {
74
+ const diag = diagnoseNetworkError(health.error, env);
75
+ checks.push({
76
+ name: 'reachability',
77
+ label: 'Plugin reachable',
78
+ status: 'fail',
79
+ detail: diag !== null ? diag.summary : 'Could not reach the plugin health endpoint.',
80
+ fix: diag !== null ? diag.fix : 'Verify the site URL and that the yt-builder-mcp plugin is active.',
81
+ });
82
+ }
83
+ // 5. Bearer validity (only meaningful if the site was reachable).
84
+ if (health.ok) {
85
+ const bearer = await deps.probeBearer(url, token);
86
+ if (bearer.ok) {
87
+ checks.push({ name: 'bearer', label: 'Bearer key', status: 'ok', detail: 'Accepted.' });
88
+ }
89
+ else {
90
+ const diag = diagnoseNetworkError(bearer.error ?? { status: bearer.status }, env);
91
+ checks.push({
92
+ name: 'bearer',
93
+ label: 'Bearer key',
94
+ status: 'fail',
95
+ detail: bearer.status !== undefined ? `Rejected (HTTP ${bearer.status}).` : 'Rejected.',
96
+ fix: diag !== null && diag.fix.toLowerCase().includes('key')
97
+ ? diag.fix
98
+ : 'Re-issue an MCP key in the plugin admin (YT Builder MCP → Keys) and update the token.',
99
+ });
100
+ }
101
+ }
102
+ }
103
+ // 6. npm registry reachability + cert chain (G-D #10). Run the same
104
+ // classifier as the site check: a corporate TLS-inspection CA breaks the
105
+ // registry too, and the operator must see that fix here, not a generic
106
+ // "could not reach npm". A CA error FAILS (it blocks `npx` upgrades and
107
+ // self-serve); any other failure is a soft WARN (update-check is a
108
+ // courtesy). Skipped entirely when no probeRegistry dep is wired.
109
+ if (deps.probeRegistry !== undefined) {
110
+ const reg = await deps.probeRegistry();
111
+ if (reg.ok) {
112
+ checks.push({ name: 'registry', label: 'npm registry', status: 'ok', detail: 'registry.npmjs.org reachable (TLS chain verified).' });
113
+ }
114
+ else {
115
+ const diag = diagnoseNetworkError(reg.error, env);
116
+ const isCa = diag !== null && diag.fix.includes('NODE_EXTRA_CA_CERTS');
117
+ checks.push({
118
+ name: 'registry',
119
+ label: 'npm registry',
120
+ status: isCa ? 'fail' : 'warn',
121
+ detail: diag !== null ? `registry.npmjs.org: ${diag.summary}` : 'Could not reach registry.npmjs.org.',
122
+ fix: diag !== null
123
+ ? diag.fix
124
+ : 'Check network/proxy access to registry.npmjs.org (npx pulls @latest from there).',
125
+ });
126
+ }
127
+ }
128
+ // 7. Update status (fail-silent — never a hard failure).
129
+ const latest = await deps.fetchLatest(config.packageName).catch(() => null);
130
+ if (latest === null) {
131
+ checks.push({
132
+ name: 'update',
133
+ label: 'Version',
134
+ status: 'info',
135
+ detail: `Running ${config.currentVersion} (could not reach npm to check for updates).`,
136
+ });
137
+ }
138
+ else if (isVersionNewer(latest, config.currentVersion)) {
139
+ checks.push({
140
+ name: 'update',
141
+ label: 'Version',
142
+ status: 'warn',
143
+ detail: `Update available: ${config.currentVersion} → ${latest}.`,
144
+ fix: 'Restart your AI client (npx pulls @latest), or `npm i -g @wootsup/yt-builder-mcp@latest`.',
145
+ });
146
+ }
147
+ else {
148
+ checks.push({ name: 'update', label: 'Version', status: 'ok', detail: `${config.currentVersion} (latest).` });
149
+ }
150
+ return { checks, ok: !checks.some((c) => c.status === 'fail') };
151
+ }
152
+ const GLYPH = { ok: '✓', warn: '!', fail: '✗', info: 'ℹ' };
153
+ /** Render a {@link DoctorReport} as a readable, fixed-width-ish text block. */
154
+ export function formatDoctorReport(report) {
155
+ const lines = ['yt-builder-mcp doctor', ''];
156
+ for (const c of report.checks) {
157
+ lines.push(` ${GLYPH[c.status]} ${c.label}: ${c.detail}`);
158
+ if (c.fix !== undefined)
159
+ lines.push(` → ${c.fix}`);
160
+ }
161
+ lines.push('');
162
+ lines.push(report.ok ? '✓ All critical checks passed.' : '✗ One or more checks failed — see the fixes above.');
163
+ return lines.join('\n');
164
+ }
165
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/diagnostics/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `yootheme_builder_advanced_read` — a READ-ONLY sibling of the
3
+ * `yootheme_builder_advanced` gateway (F200a, 2026-06-12).
4
+ *
5
+ * The Desktop-E2E #2 forensic showed approval-gates firing on EVERY advanced
6
+ * call. Root cause: the single `yootheme_builder_advanced` gateway is annotated
7
+ * `readOnlyHint:false` + `destructiveHint:true` (correctly — it can route into
8
+ * delete / unbind handlers), so spec-compliant MCP hosts gate it
9
+ * conservatively. The read-only L2 subtools (page_get_schema,
10
+ * element_get_binding, inspect_sublayout) inherited that gate even though they
11
+ * mutate nothing — a per-call approval tax on pure inspection.
12
+ *
13
+ * This second gateway WHITELISTS only read-only advanced entries (annotation
14
+ * `readOnlyHint:true`) and is itself annotated `readOnly()`, so hosts can
15
+ * auto-allow it. Writing subtools (unbind, clean-implode) stay reachable ONLY
16
+ * through the existing (gated) `yootheme_builder_advanced` — defense-in-depth:
17
+ * the read gateway physically cannot route to them (they are not in its
18
+ * registry view).
19
+ *
20
+ * Two modes mirror the write gateway:
21
+ * { tool } → discovery (target schema + annotations; no invoke).
22
+ * { tool, arguments } → execution (strict-validated, then handler called).
23
+ *
24
+ * @license MIT
25
+ */
26
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
27
+ import type { AdvancedToolEntry } from './capturing-server.js';
28
+ /** The pinned name — never rename (host configs + skill docs reference it). */
29
+ export declare const ADVANCED_READ_TOOL_NAME = "yootheme_builder_advanced_read";
30
+ /**
31
+ * Registers `yootheme_builder_advanced_read` on the real McpServer.
32
+ *
33
+ * @param realServer the McpServer that exposes the read gateway tool
34
+ * @param advancedRegistry the captured non-essential tools (from CapturingServer)
35
+ */
36
+ export declare function registerAdvancedReadTool(realServer: McpServer, advancedRegistry: Map<string, AdvancedToolEntry>): void;
37
+ //# sourceMappingURL=advanced-read-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-read-tool.d.ts","sourceRoot":"","sources":["../../src/gateway/advanced-read-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAgExE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,UAAU,EAAE,SAAS,EACrB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACjD,IAAI,CAwEN"}