@mapbox/mcp-docs-server 0.1.0-dev

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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +196 -0
  3. package/dist/commonjs/config/toolConfig.d.ts +8 -0
  4. package/dist/commonjs/config/toolConfig.d.ts.map +1 -0
  5. package/dist/commonjs/config/toolConfig.js +41 -0
  6. package/dist/commonjs/config/toolConfig.js.map +1 -0
  7. package/dist/commonjs/constants/mapboxStreetsV8Fields.trimmed.d.ts +306 -0
  8. package/dist/commonjs/constants/mapboxStreetsV8Fields.trimmed.d.ts.map +1 -0
  9. package/dist/commonjs/constants/mapboxStreetsV8Fields.trimmed.js +2069 -0
  10. package/dist/commonjs/constants/mapboxStreetsV8Fields.trimmed.js.map +1 -0
  11. package/dist/commonjs/index.d.ts +2 -0
  12. package/dist/commonjs/index.d.ts.map +1 -0
  13. package/dist/commonjs/index.js +82 -0
  14. package/dist/commonjs/index.js.map +1 -0
  15. package/dist/commonjs/package.json +3 -0
  16. package/dist/commonjs/resources/BaseResource.d.ts +21 -0
  17. package/dist/commonjs/resources/BaseResource.d.ts.map +1 -0
  18. package/dist/commonjs/resources/BaseResource.js +21 -0
  19. package/dist/commonjs/resources/BaseResource.js.map +1 -0
  20. package/dist/commonjs/resources/index.d.ts +3 -0
  21. package/dist/commonjs/resources/index.d.ts.map +1 -0
  22. package/dist/commonjs/resources/index.js +9 -0
  23. package/dist/commonjs/resources/index.js.map +1 -0
  24. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +19 -0
  25. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -0
  26. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +61 -0
  27. package/dist/commonjs/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -0
  28. package/dist/commonjs/resources/mapbox-documentation-resource/MapboxDocumentationResource.d.ts +29 -0
  29. package/dist/commonjs/resources/mapbox-documentation-resource/MapboxDocumentationResource.d.ts.map +1 -0
  30. package/dist/commonjs/resources/mapbox-documentation-resource/MapboxDocumentationResource.js +66 -0
  31. package/dist/commonjs/resources/mapbox-documentation-resource/MapboxDocumentationResource.js.map +1 -0
  32. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +19 -0
  33. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -0
  34. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js +61 -0
  35. package/dist/commonjs/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -0
  36. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +19 -0
  37. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -0
  38. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js +61 -0
  39. package/dist/commonjs/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -0
  40. package/dist/commonjs/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.d.ts +19 -0
  41. package/dist/commonjs/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.d.ts.map +1 -0
  42. package/dist/commonjs/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.js +170 -0
  43. package/dist/commonjs/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.js.map +1 -0
  44. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +19 -0
  45. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -0
  46. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js +61 -0
  47. package/dist/commonjs/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -0
  48. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +19 -0
  49. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -0
  50. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +61 -0
  51. package/dist/commonjs/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -0
  52. package/dist/commonjs/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.d.ts +19 -0
  53. package/dist/commonjs/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.d.ts.map +1 -0
  54. package/dist/commonjs/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.js +30 -0
  55. package/dist/commonjs/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.js.map +1 -0
  56. package/dist/commonjs/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.d.ts +20 -0
  57. package/dist/commonjs/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.d.ts.map +1 -0
  58. package/dist/commonjs/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.js +323 -0
  59. package/dist/commonjs/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.js.map +1 -0
  60. package/dist/commonjs/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.d.ts +20 -0
  61. package/dist/commonjs/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.d.ts.map +1 -0
  62. package/dist/commonjs/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.js +108 -0
  63. package/dist/commonjs/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.js.map +1 -0
  64. package/dist/commonjs/resources/resourceRegistry.d.ts +15 -0
  65. package/dist/commonjs/resources/resourceRegistry.d.ts.map +1 -0
  66. package/dist/commonjs/resources/resourceRegistry.js +39 -0
  67. package/dist/commonjs/resources/resourceRegistry.js.map +1 -0
  68. package/dist/commonjs/resources/utils/docParser.d.ts +28 -0
  69. package/dist/commonjs/resources/utils/docParser.d.ts.map +1 -0
  70. package/dist/commonjs/resources/utils/docParser.js +94 -0
  71. package/dist/commonjs/resources/utils/docParser.js.map +1 -0
  72. package/dist/commonjs/tools/BaseTool.d.ts +30 -0
  73. package/dist/commonjs/tools/BaseTool.d.ts.map +1 -0
  74. package/dist/commonjs/tools/BaseTool.js +63 -0
  75. package/dist/commonjs/tools/BaseTool.js.map +1 -0
  76. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts +21 -0
  77. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -0
  78. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.d.ts +6 -0
  79. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.d.ts.map +1 -0
  80. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.js +14 -0
  81. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.js.map +1 -0
  82. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +94 -0
  83. package/dist/commonjs/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -0
  84. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.d.ts +21 -0
  85. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -0
  86. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.input.schema.d.ts +6 -0
  87. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.input.schema.d.ts.map +1 -0
  88. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.input.schema.js +13 -0
  89. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.input.schema.js.map +1 -0
  90. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js +80 -0
  91. package/dist/commonjs/tools/get-document-tool/GetDocumentTool.js.map +1 -0
  92. package/dist/commonjs/tools/index.d.ts +3 -0
  93. package/dist/commonjs/tools/index.d.ts.map +1 -0
  94. package/dist/commonjs/tools/index.js +10 -0
  95. package/dist/commonjs/tools/index.js.map +1 -0
  96. package/dist/commonjs/tools/toolRegistry.d.ts +12 -0
  97. package/dist/commonjs/tools/toolRegistry.d.ts.map +1 -0
  98. package/dist/commonjs/tools/toolRegistry.js +29 -0
  99. package/dist/commonjs/tools/toolRegistry.js.map +1 -0
  100. package/dist/commonjs/utils/docCache.d.ts +28 -0
  101. package/dist/commonjs/utils/docCache.d.ts.map +1 -0
  102. package/dist/commonjs/utils/docCache.js +129 -0
  103. package/dist/commonjs/utils/docCache.js.map +1 -0
  104. package/dist/commonjs/utils/httpPipeline.d.ts +39 -0
  105. package/dist/commonjs/utils/httpPipeline.d.ts.map +1 -0
  106. package/dist/commonjs/utils/httpPipeline.js +112 -0
  107. package/dist/commonjs/utils/httpPipeline.js.map +1 -0
  108. package/dist/commonjs/utils/index.d.ts +4 -0
  109. package/dist/commonjs/utils/index.d.ts.map +1 -0
  110. package/dist/commonjs/utils/index.js +12 -0
  111. package/dist/commonjs/utils/index.js.map +1 -0
  112. package/dist/commonjs/utils/types.d.ts +7 -0
  113. package/dist/commonjs/utils/types.d.ts.map +1 -0
  114. package/dist/commonjs/utils/types.js +5 -0
  115. package/dist/commonjs/utils/types.js.map +1 -0
  116. package/dist/commonjs/utils/versionUtils.d.ts +9 -0
  117. package/dist/commonjs/utils/versionUtils.d.ts.map +1 -0
  118. package/dist/commonjs/utils/versionUtils.js +34 -0
  119. package/dist/commonjs/utils/versionUtils.js.map +1 -0
  120. package/dist/commonjs/version.json +6 -0
  121. package/dist/esm/config/toolConfig.d.ts +8 -0
  122. package/dist/esm/config/toolConfig.d.ts.map +1 -0
  123. package/dist/esm/config/toolConfig.js +37 -0
  124. package/dist/esm/config/toolConfig.js.map +1 -0
  125. package/dist/esm/constants/mapboxStreetsV8Fields.trimmed.d.ts +306 -0
  126. package/dist/esm/constants/mapboxStreetsV8Fields.trimmed.d.ts.map +1 -0
  127. package/dist/esm/constants/mapboxStreetsV8Fields.trimmed.js +2066 -0
  128. package/dist/esm/constants/mapboxStreetsV8Fields.trimmed.js.map +1 -0
  129. package/dist/esm/index.d.ts +2 -0
  130. package/dist/esm/index.d.ts.map +1 -0
  131. package/dist/esm/index.js +80 -0
  132. package/dist/esm/index.js.map +1 -0
  133. package/dist/esm/package.json +3 -0
  134. package/dist/esm/resources/BaseResource.d.ts +21 -0
  135. package/dist/esm/resources/BaseResource.d.ts.map +1 -0
  136. package/dist/esm/resources/BaseResource.js +17 -0
  137. package/dist/esm/resources/BaseResource.js.map +1 -0
  138. package/dist/esm/resources/index.d.ts +3 -0
  139. package/dist/esm/resources/index.d.ts.map +1 -0
  140. package/dist/esm/resources/index.js +4 -0
  141. package/dist/esm/resources/index.js.map +1 -0
  142. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts +19 -0
  143. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.d.ts.map +1 -0
  144. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js +57 -0
  145. package/dist/esm/resources/mapbox-api-reference-resource/MapboxApiReferenceResource.js.map +1 -0
  146. package/dist/esm/resources/mapbox-documentation-resource/MapboxDocumentationResource.d.ts +29 -0
  147. package/dist/esm/resources/mapbox-documentation-resource/MapboxDocumentationResource.d.ts.map +1 -0
  148. package/dist/esm/resources/mapbox-documentation-resource/MapboxDocumentationResource.js +62 -0
  149. package/dist/esm/resources/mapbox-documentation-resource/MapboxDocumentationResource.js.map +1 -0
  150. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts +19 -0
  151. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.d.ts.map +1 -0
  152. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js +57 -0
  153. package/dist/esm/resources/mapbox-examples-resource/MapboxExamplesResource.js.map +1 -0
  154. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts +19 -0
  155. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.d.ts.map +1 -0
  156. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js +57 -0
  157. package/dist/esm/resources/mapbox-guides-resource/MapboxGuidesResource.js.map +1 -0
  158. package/dist/esm/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.d.ts +19 -0
  159. package/dist/esm/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.d.ts.map +1 -0
  160. package/dist/esm/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.js +166 -0
  161. package/dist/esm/resources/mapbox-layer-type-mapping-resource/MapboxLayerTypeMappingResource.js.map +1 -0
  162. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts +19 -0
  163. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.d.ts.map +1 -0
  164. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js +57 -0
  165. package/dist/esm/resources/mapbox-reference-resource/MapboxReferenceResource.js.map +1 -0
  166. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts +19 -0
  167. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.d.ts.map +1 -0
  168. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js +57 -0
  169. package/dist/esm/resources/mapbox-sdk-docs-resource/MapboxSdkDocsResource.js.map +1 -0
  170. package/dist/esm/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.d.ts +19 -0
  171. package/dist/esm/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.d.ts.map +1 -0
  172. package/dist/esm/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.js +26 -0
  173. package/dist/esm/resources/mapbox-streets-v8-fields-resource/MapboxStreetsV8FieldsResource.js.map +1 -0
  174. package/dist/esm/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.d.ts +20 -0
  175. package/dist/esm/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.d.ts.map +1 -0
  176. package/dist/esm/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.js +319 -0
  177. package/dist/esm/resources/mapbox-style-layers-resource/MapboxStyleLayersResource.js.map +1 -0
  178. package/dist/esm/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.d.ts +20 -0
  179. package/dist/esm/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.d.ts.map +1 -0
  180. package/dist/esm/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.js +104 -0
  181. package/dist/esm/resources/mapbox-token-scopes-resource/MapboxTokenScopesResource.js.map +1 -0
  182. package/dist/esm/resources/resourceRegistry.d.ts +15 -0
  183. package/dist/esm/resources/resourceRegistry.d.ts.map +1 -0
  184. package/dist/esm/resources/resourceRegistry.js +34 -0
  185. package/dist/esm/resources/resourceRegistry.js.map +1 -0
  186. package/dist/esm/resources/utils/docParser.d.ts +28 -0
  187. package/dist/esm/resources/utils/docParser.d.ts.map +1 -0
  188. package/dist/esm/resources/utils/docParser.js +88 -0
  189. package/dist/esm/resources/utils/docParser.js.map +1 -0
  190. package/dist/esm/tools/BaseTool.d.ts +30 -0
  191. package/dist/esm/tools/BaseTool.d.ts.map +1 -0
  192. package/dist/esm/tools/BaseTool.js +59 -0
  193. package/dist/esm/tools/BaseTool.js.map +1 -0
  194. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts +21 -0
  195. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.d.ts.map +1 -0
  196. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.d.ts +6 -0
  197. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.d.ts.map +1 -0
  198. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.js +11 -0
  199. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.js.map +1 -0
  200. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js +90 -0
  201. package/dist/esm/tools/batch-get-documents-tool/BatchGetDocumentsTool.js.map +1 -0
  202. package/dist/esm/tools/get-document-tool/GetDocumentTool.d.ts +21 -0
  203. package/dist/esm/tools/get-document-tool/GetDocumentTool.d.ts.map +1 -0
  204. package/dist/esm/tools/get-document-tool/GetDocumentTool.input.schema.d.ts +6 -0
  205. package/dist/esm/tools/get-document-tool/GetDocumentTool.input.schema.d.ts.map +1 -0
  206. package/dist/esm/tools/get-document-tool/GetDocumentTool.input.schema.js +10 -0
  207. package/dist/esm/tools/get-document-tool/GetDocumentTool.input.schema.js.map +1 -0
  208. package/dist/esm/tools/get-document-tool/GetDocumentTool.js +76 -0
  209. package/dist/esm/tools/get-document-tool/GetDocumentTool.js.map +1 -0
  210. package/dist/esm/tools/index.d.ts +3 -0
  211. package/dist/esm/tools/index.d.ts.map +1 -0
  212. package/dist/esm/tools/index.js +4 -0
  213. package/dist/esm/tools/index.js.map +1 -0
  214. package/dist/esm/tools/toolRegistry.d.ts +12 -0
  215. package/dist/esm/tools/toolRegistry.d.ts.map +1 -0
  216. package/dist/esm/tools/toolRegistry.js +23 -0
  217. package/dist/esm/tools/toolRegistry.js.map +1 -0
  218. package/dist/esm/utils/docCache.d.ts +28 -0
  219. package/dist/esm/utils/docCache.d.ts.map +1 -0
  220. package/dist/esm/utils/docCache.js +124 -0
  221. package/dist/esm/utils/docCache.js.map +1 -0
  222. package/dist/esm/utils/httpPipeline.d.ts +39 -0
  223. package/dist/esm/utils/httpPipeline.d.ts.map +1 -0
  224. package/dist/esm/utils/httpPipeline.js +106 -0
  225. package/dist/esm/utils/httpPipeline.js.map +1 -0
  226. package/dist/esm/utils/index.d.ts +4 -0
  227. package/dist/esm/utils/index.d.ts.map +1 -0
  228. package/dist/esm/utils/index.js +5 -0
  229. package/dist/esm/utils/index.js.map +1 -0
  230. package/dist/esm/utils/types.d.ts +7 -0
  231. package/dist/esm/utils/types.d.ts.map +1 -0
  232. package/dist/esm/utils/types.js +4 -0
  233. package/dist/esm/utils/types.js.map +1 -0
  234. package/dist/esm/utils/versionUtils.d.ts +9 -0
  235. package/dist/esm/utils/versionUtils.d.ts.map +1 -0
  236. package/dist/esm/utils/versionUtils.js +28 -0
  237. package/dist/esm/utils/versionUtils.js.map +1 -0
  238. package/dist/esm/version.json +6 -0
  239. package/package.json +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docParser.js","sourceRoot":"","sources":["../../../../src/resources/utils/docParser.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAelC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,cAAc,GAAsB,IAAI,CAAC;IAC7C,IAAI,cAAc,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,kDAAkD;QAClD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,kCAAkC;YAClC,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1D,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChC,CAAC;YAED,oBAAoB;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,cAAc,GAAG;gBACf,KAAK;gBACL,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,cAAc,GAAG,EAAE,CAAC;QACtB,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,iCAAiC;YACjC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAElC,gBAAgB;IAChB,IACE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7B,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,IACE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oBAAoB;IACpB,IACE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EACzB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,kBAAkB;IAClB,IACE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EACvB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAsB,EACtB,QAAqB;IAErB,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,CAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,KAAK,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC7D,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
3
+ import { CallToolResult, ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
4
+ import { z, ZodTypeAny } from 'zod';
5
+ export declare abstract class BaseTool<InputSchema extends ZodTypeAny, OutputSchema extends ZodTypeAny = ZodTypeAny> {
6
+ abstract readonly name: string;
7
+ abstract readonly description: string;
8
+ abstract readonly annotations: ToolAnnotations;
9
+ readonly inputSchema: InputSchema;
10
+ readonly outputSchema?: OutputSchema;
11
+ protected server: McpServer | null;
12
+ constructor(params: {
13
+ inputSchema: InputSchema;
14
+ outputSchema?: OutputSchema;
15
+ });
16
+ /**
17
+ * Tool logic to be implemented by subclasses.
18
+ */
19
+ run(rawInput: unknown, _extra?: RequestHandlerExtra<any, any>): Promise<CallToolResult>;
20
+ protected abstract execute(inputSchema: z.infer<InputSchema>): Promise<CallToolResult>;
21
+ /**
22
+ * Installs the tool to the given MCP server.
23
+ */
24
+ installTo(server: McpServer): RegisteredTool;
25
+ /**
26
+ * Helper method to send logging messages
27
+ */
28
+ protected log(level: 'debug' | 'info' | 'warning' | 'error', data: string | Record<string, unknown>): void;
29
+ }
30
+ //# sourceMappingURL=BaseTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseTool.d.ts","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,cAAc,EACf,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EACL,cAAc,EACd,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAEpC,8BAAsB,QAAQ,CAC5B,WAAW,SAAS,UAAU,EAC9B,YAAY,SAAS,UAAU,GAAG,UAAU;IAE5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IAE/C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;gBAE9B,MAAM,EAAE;QAClB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B;IAKD;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,OAAO,EAEjB,MAAM,CAAC,EAAE,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,GACrC,OAAO,CAAC,cAAc,CAAC;IAY1B,SAAS,CAAC,QAAQ,CAAC,OAAO,CACxB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc;IAkC5C;;OAEG;IACH,SAAS,CAAC,GAAG,CACX,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,EAC7C,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,IAAI;CAKR"}
@@ -0,0 +1,59 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ export class BaseTool {
4
+ inputSchema;
5
+ outputSchema;
6
+ server = null;
7
+ constructor(params) {
8
+ this.inputSchema = params.inputSchema;
9
+ this.outputSchema = params.outputSchema;
10
+ }
11
+ /**
12
+ * Tool logic to be implemented by subclasses.
13
+ */
14
+ async run(rawInput,
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ _extra) {
17
+ try {
18
+ const input = this.inputSchema.parse(rawInput);
19
+ return this.execute(input);
20
+ }
21
+ catch (error) {
22
+ return {
23
+ isError: true,
24
+ content: [{ type: 'text', text: error.message }]
25
+ };
26
+ }
27
+ }
28
+ /**
29
+ * Installs the tool to the given MCP server.
30
+ */
31
+ installTo(server) {
32
+ this.server = server;
33
+ const config = {
34
+ title: this.annotations.title,
35
+ description: this.description,
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ inputSchema: this.inputSchema.shape,
38
+ annotations: this.annotations
39
+ };
40
+ // Add outputSchema if provided
41
+ if (this.outputSchema) {
42
+ config.outputSchema =
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ this.outputSchema.shape;
45
+ }
46
+ return server.registerTool(this.name, config,
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ (args, extra) => this.run(args, extra));
49
+ }
50
+ /**
51
+ * Helper method to send logging messages
52
+ */
53
+ log(level, data) {
54
+ if (this.server?.server) {
55
+ this.server.server.sendLoggingMessage({ level, data });
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=BaseTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseTool.js","sourceRoot":"","sources":["../../../src/tools/BaseTool.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAalC,MAAM,OAAgB,QAAQ;IAQnB,WAAW,CAAc;IACzB,YAAY,CAAgB;IAC3B,MAAM,GAAqB,IAAI,CAAC;IAE1C,YAAY,MAGX;QACC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,QAAiB;IACjB,8DAA8D;IAC9D,MAAsC;QAEtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;IACH,CAAC;IAMD;;OAEG;IACH,SAAS,CAAC,MAAiB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,MAAM,GAQR;YACF,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,8DAA8D;YAC9D,WAAW,EAAG,IAAI,CAAC,WAA2C,CAAC,KAAK;YACpE,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;QAEF,+BAA+B;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY;gBACjB,8DAA8D;gBAC7D,IAAI,CAAC,YAA4C,CAAC,KAAK,CAAC;QAC7D,CAAC;QAED,OAAO,MAAM,CAAC,YAAY,CACxB,IAAI,CAAC,IAAI,EACT,MAAM;QACN,8DAA8D;QAC9D,CAAC,IAAS,EAAE,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CACjD,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,GAAG,CACX,KAA6C,EAC7C,IAAsC;QAEtC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { HttpRequest } from '../../utils/types.js';
3
+ import { BaseTool } from '../BaseTool.js';
4
+ import { BatchGetDocumentsSchema, BatchGetDocumentsInput } from './BatchGetDocumentsTool.input.schema.js';
5
+ export declare class BatchGetDocumentsTool extends BaseTool<typeof BatchGetDocumentsSchema> {
6
+ name: string;
7
+ description: string;
8
+ readonly annotations: {
9
+ readOnlyHint: boolean;
10
+ destructiveHint: boolean;
11
+ idempotentHint: boolean;
12
+ openWorldHint: boolean;
13
+ title: string;
14
+ };
15
+ private httpRequest;
16
+ constructor(params: {
17
+ httpRequest: HttpRequest;
18
+ });
19
+ protected execute(input: BatchGetDocumentsInput): Promise<CallToolResult>;
20
+ }
21
+ //# sourceMappingURL=BatchGetDocumentsTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchGetDocumentsTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AAejD,qBAAa,qBAAsB,SAAQ,QAAQ,CACjD,OAAO,uBAAuB,CAC/B;IACC,IAAI,SAA8B;IAClC,WAAW,SACyP;IACpQ,QAAQ,CAAC,WAAW;;;;;;MAMlB;IAEF,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAKhC,OAAO,CACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,cAAc,CAAC;CAsE3B"}
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ export declare const BatchGetDocumentsSchema: z.ZodObject<{
3
+ urls: z.ZodArray<z.ZodString>;
4
+ }, z.core.$strip>;
5
+ export type BatchGetDocumentsInput = z.infer<typeof BatchGetDocumentsSchema>;
6
+ //# sourceMappingURL=BatchGetDocumentsTool.input.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchGetDocumentsTool.input.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;iBAQlC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { z } from 'zod';
4
+ export const BatchGetDocumentsSchema = z.object({
5
+ urls: z
6
+ .array(z.string().url())
7
+ .min(1)
8
+ .max(20)
9
+ .describe('Array of Mapbox documentation page URLs to fetch (max 20). All must be mapbox.com URLs.')
10
+ });
11
+ //# sourceMappingURL=BatchGetDocumentsTool.input.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchGetDocumentsTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CACP,yFAAyF,CAC1F;CACJ,CAAC,CAAC"}
@@ -0,0 +1,90 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { docCache, normalizeCacheKey, MAX_ENTRY_BYTES, readBodyWithLimit } from '../../utils/docCache.js';
4
+ import { BaseTool } from '../BaseTool.js';
5
+ import { BatchGetDocumentsSchema } from './BatchGetDocumentsTool.input.schema.js';
6
+ function isMapboxUrl(url) {
7
+ try {
8
+ const { hostname } = new URL(url);
9
+ return hostname === 'mapbox.com' || hostname.endsWith('.mapbox.com');
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ export class BatchGetDocumentsTool extends BaseTool {
16
+ name = 'batch_get_documents_tool';
17
+ description = 'Fetch the full content of multiple Mapbox documentation pages in a single call (max 20). More efficient than calling get_document_tool multiple times. Returns an array of results — failed pages include an error message rather than failing the whole batch.';
18
+ annotations = {
19
+ readOnlyHint: true,
20
+ destructiveHint: false,
21
+ idempotentHint: true,
22
+ openWorldHint: true,
23
+ title: 'Batch Get Mapbox Documents Tool'
24
+ };
25
+ httpRequest;
26
+ constructor(params) {
27
+ super({ inputSchema: BatchGetDocumentsSchema });
28
+ this.httpRequest = params.httpRequest;
29
+ }
30
+ async execute(input) {
31
+ const invalidUrls = input.urls.filter((url) => !isMapboxUrl(url));
32
+ if (invalidUrls.length > 0) {
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: `Invalid URLs: only mapbox.com URLs are supported. Invalid: ${invalidUrls.join(', ')}`
38
+ }
39
+ ],
40
+ isError: true
41
+ };
42
+ }
43
+ // One in-flight fetch per unique normalized URL. Multiple input URLs that
44
+ // normalize to the same key (e.g. cache-busting query params) share a
45
+ // single HTTP request and a single buffered body.
46
+ const inflightByKey = new Map();
47
+ const fetchOne = (url) => {
48
+ const cached = docCache.get(url);
49
+ if (cached !== null)
50
+ return Promise.resolve(cached);
51
+ const key = normalizeCacheKey(url);
52
+ const existing = inflightByKey.get(key);
53
+ if (existing)
54
+ return existing;
55
+ const promise = (async () => {
56
+ const response = await this.httpRequest(url, {
57
+ headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
58
+ });
59
+ if (!response.ok) {
60
+ throw new Error(`${response.status} ${response.statusText}`);
61
+ }
62
+ const content = await readBodyWithLimit(response, MAX_ENTRY_BYTES);
63
+ docCache.set(url, content);
64
+ return content;
65
+ })();
66
+ inflightByKey.set(key, promise);
67
+ return promise;
68
+ };
69
+ const results = await Promise.allSettled(input.urls.map(async (url) => {
70
+ const content = await fetchOne(url);
71
+ return { url, content };
72
+ }));
73
+ const output = results.map((result, i) => {
74
+ if (result.status === 'fulfilled') {
75
+ return result.value;
76
+ }
77
+ return {
78
+ url: input.urls[i],
79
+ error: result.reason instanceof Error
80
+ ? result.reason.message
81
+ : 'Unknown error'
82
+ };
83
+ });
84
+ return {
85
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
86
+ isError: false
87
+ };
88
+ }
89
+ }
90
+ //# sourceMappingURL=BatchGetDocumentsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchGetDocumentsTool.js","sourceRoot":"","sources":["../../../../src/tools/batch-get-documents-tool/BatchGetDocumentsTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { HttpRequest } from '../../utils/types.js';
3
+ import { BaseTool } from '../BaseTool.js';
4
+ import { GetDocumentSchema, GetDocumentInput } from './GetDocumentTool.input.schema.js';
5
+ export declare class GetDocumentTool extends BaseTool<typeof GetDocumentSchema> {
6
+ name: string;
7
+ description: string;
8
+ readonly annotations: {
9
+ readOnlyHint: boolean;
10
+ destructiveHint: boolean;
11
+ idempotentHint: boolean;
12
+ openWorldHint: boolean;
13
+ title: string;
14
+ };
15
+ private httpRequest;
16
+ constructor(params: {
17
+ httpRequest: HttpRequest;
18
+ });
19
+ protected execute(input: GetDocumentInput): Promise<CallToolResult>;
20
+ }
21
+ //# sourceMappingURL=GetDocumentTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetDocumentTool.d.ts","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAMpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAW3C,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,OAAO,iBAAiB,CAAC;IACrE,IAAI,SAAuB;IAC3B,WAAW,SAC8P;IACzQ,QAAQ,CAAC,WAAW;;;;;;MAMlB;IAEF,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE;cAKhC,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;CAkD1E"}
@@ -0,0 +1,6 @@
1
+ import { z } from 'zod';
2
+ export declare const GetDocumentSchema: z.ZodObject<{
3
+ url: z.ZodString;
4
+ }, z.core.$strip>;
5
+ export type GetDocumentInput = z.infer<typeof GetDocumentSchema>;
6
+ //# sourceMappingURL=GetDocumentTool.input.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetDocumentTool.input.schema.d.ts","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.input.schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;iBAO5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { z } from 'zod';
4
+ export const GetDocumentSchema = z.object({
5
+ url: z
6
+ .string()
7
+ .url()
8
+ .describe('URL of a Mapbox documentation page to fetch. Must be a mapbox.com URL (e.g. https://docs.mapbox.com/api/search/geocoding/).')
9
+ });
10
+ //# sourceMappingURL=GetDocumentTool.input.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetDocumentTool.input.schema.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.input.schema.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,CACP,6HAA6H,CAC9H;CACJ,CAAC,CAAC"}
@@ -0,0 +1,76 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { docCache, MAX_ENTRY_BYTES, readBodyWithLimit } from '../../utils/docCache.js';
4
+ import { BaseTool } from '../BaseTool.js';
5
+ import { GetDocumentSchema } from './GetDocumentTool.input.schema.js';
6
+ function isMapboxUrl(url) {
7
+ try {
8
+ const { hostname } = new URL(url);
9
+ return hostname === 'mapbox.com' || hostname.endsWith('.mapbox.com');
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ export class GetDocumentTool extends BaseTool {
16
+ name = 'get_document_tool';
17
+ description = 'Fetch the full content of a specific Mapbox documentation page by URL. Use this after get_latest_mapbox_docs_tool to follow a link from the index and retrieve the complete page content. For fetching multiple pages at once, use batch_get_documents_tool instead.';
18
+ annotations = {
19
+ readOnlyHint: true,
20
+ destructiveHint: false,
21
+ idempotentHint: true,
22
+ openWorldHint: true,
23
+ title: 'Get Mapbox Document Tool'
24
+ };
25
+ httpRequest;
26
+ constructor(params) {
27
+ super({ inputSchema: GetDocumentSchema });
28
+ this.httpRequest = params.httpRequest;
29
+ }
30
+ async execute(input) {
31
+ if (!isMapboxUrl(input.url)) {
32
+ return {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text: `Invalid URL: only mapbox.com URLs are supported. Received: ${input.url}`
37
+ }
38
+ ],
39
+ isError: true
40
+ };
41
+ }
42
+ const cached = docCache.get(input.url);
43
+ if (cached !== null) {
44
+ return { content: [{ type: 'text', text: cached }], isError: false };
45
+ }
46
+ try {
47
+ const response = await this.httpRequest(input.url, {
48
+ headers: { Accept: 'text/markdown, text/plain;q=0.9, */*;q=0.8' }
49
+ });
50
+ if (!response.ok) {
51
+ return {
52
+ content: [
53
+ {
54
+ type: 'text',
55
+ text: `Failed to fetch document: ${response.status} ${response.statusText}`
56
+ }
57
+ ],
58
+ isError: true
59
+ };
60
+ }
61
+ const content = await readBodyWithLimit(response, MAX_ENTRY_BYTES);
62
+ docCache.set(input.url, content);
63
+ return { content: [{ type: 'text', text: content }], isError: false };
64
+ }
65
+ catch (error) {
66
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
67
+ return {
68
+ content: [
69
+ { type: 'text', text: `Failed to fetch document: ${errorMessage}` }
70
+ ],
71
+ isError: true
72
+ };
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=GetDocumentTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetDocumentTool.js","sourceRoot":"","sources":["../../../../src/tools/get-document-tool/GetDocumentTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { getAllTools, getCoreTools, getToolByName } from './toolRegistry.js';
2
+ export type { ToolInstance } from './toolRegistry.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ export { getAllTools, getCoreTools, getToolByName } from './toolRegistry.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ZodTypeAny } from 'zod';
2
+ import { BaseTool } from './BaseTool.js';
3
+ export type ToolInstance = BaseTool<ZodTypeAny>;
4
+ /**
5
+ * Core tools registered for all MCP clients
6
+ */
7
+ export declare const CORE_TOOLS: ToolInstance[];
8
+ export declare const ALL_TOOLS: ToolInstance[];
9
+ export declare function getCoreTools(): readonly ToolInstance[];
10
+ export declare function getAllTools(): readonly ToolInstance[];
11
+ export declare function getToolByName(name: string): ToolInstance | undefined;
12
+ //# sourceMappingURL=toolRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YAAY,EAGpC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAAoB,CAAC;AAEzD,wBAAgB,YAAY,IAAI,SAAS,YAAY,EAAE,CAEtD;AAED,wBAAgB,WAAW,IAAI,SAAS,YAAY,EAAE,CAErD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE"}
@@ -0,0 +1,23 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ import { BatchGetDocumentsTool } from './batch-get-documents-tool/BatchGetDocumentsTool.js';
4
+ import { GetDocumentTool } from './get-document-tool/GetDocumentTool.js';
5
+ import { httpRequest } from '../utils/httpPipeline.js';
6
+ /**
7
+ * Core tools registered for all MCP clients
8
+ */
9
+ export const CORE_TOOLS = [
10
+ new GetDocumentTool({ httpRequest }),
11
+ new BatchGetDocumentsTool({ httpRequest })
12
+ ];
13
+ export const ALL_TOOLS = [...CORE_TOOLS];
14
+ export function getCoreTools() {
15
+ return CORE_TOOLS;
16
+ }
17
+ export function getAllTools() {
18
+ return ALL_TOOLS;
19
+ }
20
+ export function getToolByName(name) {
21
+ return ALL_TOOLS.find((tool) => tool.name === name);
22
+ }
23
+ //# sourceMappingURL=toolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/tools/toolRegistry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAIlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IACpC,IAAI,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB,CAAC,GAAG,UAAU,CAAC,CAAC;AAEzD,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const MAX_ENTRY_BYTES: number;
2
+ /**
3
+ * Normalize a URL for use as a cache key by stripping query parameters
4
+ * and hash fragments. This prevents cache-busting via unique query strings
5
+ * from creating unbounded cache entries.
6
+ */
7
+ export declare function normalizeCacheKey(url: string): string;
8
+ declare class DocCache {
9
+ private cache;
10
+ private totalBytes;
11
+ get(url: string): string | null;
12
+ set(url: string, content: string, ttlMs?: number): void;
13
+ has(url: string): boolean;
14
+ clear(): void;
15
+ /** Exposed for testing only. */
16
+ get size(): number;
17
+ /** Exposed for testing only. */
18
+ get currentTotalBytes(): number;
19
+ }
20
+ export declare const docCache: DocCache;
21
+ /**
22
+ * Read a Response body up to `maxBytes`, aborting early if the limit is
23
+ * exceeded. Checks Content-Length first when present so no bytes are
24
+ * buffered for obviously-oversized responses.
25
+ */
26
+ export declare function readBodyWithLimit(response: Response, maxBytes: number): Promise<string>;
27
+ export {};
28
+ //# sourceMappingURL=docCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docCache.d.ts","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe,QAAkB,CAAC;AAS/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASrD;AAED,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAK;IAEvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAe/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAuB,GAAG,IAAI;IA+BvE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAKb,gCAAgC;IAChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gCAAgC;IAChC,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF;AAED,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
@@ -0,0 +1,124 @@
1
+ // Copyright (c) Mapbox, Inc.
2
+ // Licensed under the MIT License.
3
+ const DEFAULT_TTL_MS = parseInt(process.env.MAPBOX_DOCS_CACHE_TTL_MS ?? '3600000', 10);
4
+ // Cache limits
5
+ const MAX_ENTRIES = 512;
6
+ export const MAX_ENTRY_BYTES = 2 * 1024 * 1024; // 2 MB per entry
7
+ const MAX_TOTAL_BYTES = 50 * 1024 * 1024; // 50 MB total
8
+ /**
9
+ * Normalize a URL for use as a cache key by stripping query parameters
10
+ * and hash fragments. This prevents cache-busting via unique query strings
11
+ * from creating unbounded cache entries.
12
+ */
13
+ export function normalizeCacheKey(url) {
14
+ try {
15
+ const parsed = new URL(url);
16
+ parsed.search = '';
17
+ parsed.hash = '';
18
+ return parsed.toString();
19
+ }
20
+ catch {
21
+ return url;
22
+ }
23
+ }
24
+ class DocCache {
25
+ cache = new Map();
26
+ totalBytes = 0;
27
+ get(url) {
28
+ const key = normalizeCacheKey(url);
29
+ const entry = this.cache.get(key);
30
+ if (!entry)
31
+ return null;
32
+ if (Date.now() > entry.expiresAt) {
33
+ this.totalBytes -= entry.bytes;
34
+ this.cache.delete(key);
35
+ return null;
36
+ }
37
+ // Re-insert to move to end (LRU: most-recently-used stays at the back)
38
+ this.cache.delete(key);
39
+ this.cache.set(key, entry);
40
+ return entry.content;
41
+ }
42
+ set(url, content, ttlMs = DEFAULT_TTL_MS) {
43
+ const bytes = Buffer.byteLength(content, 'utf8');
44
+ if (bytes > MAX_ENTRY_BYTES) {
45
+ return; // Silently reject oversized entries
46
+ }
47
+ const key = normalizeCacheKey(url);
48
+ // Remove existing entry for this key if present
49
+ const existing = this.cache.get(key);
50
+ if (existing) {
51
+ this.totalBytes -= existing.bytes;
52
+ this.cache.delete(key);
53
+ }
54
+ // Evict oldest entries (front of Map) until there is room
55
+ while (this.cache.size >= MAX_ENTRIES ||
56
+ this.totalBytes + bytes > MAX_TOTAL_BYTES) {
57
+ const oldestKey = this.cache.keys().next().value;
58
+ if (oldestKey === undefined)
59
+ break;
60
+ const oldest = this.cache.get(oldestKey);
61
+ this.totalBytes -= oldest.bytes;
62
+ this.cache.delete(oldestKey);
63
+ }
64
+ this.cache.set(key, { content, expiresAt: Date.now() + ttlMs, bytes });
65
+ this.totalBytes += bytes;
66
+ }
67
+ has(url) {
68
+ return this.get(url) !== null;
69
+ }
70
+ clear() {
71
+ this.cache.clear();
72
+ this.totalBytes = 0;
73
+ }
74
+ /** Exposed for testing only. */
75
+ get size() {
76
+ return this.cache.size;
77
+ }
78
+ /** Exposed for testing only. */
79
+ get currentTotalBytes() {
80
+ return this.totalBytes;
81
+ }
82
+ }
83
+ export const docCache = new DocCache();
84
+ /**
85
+ * Read a Response body up to `maxBytes`, aborting early if the limit is
86
+ * exceeded. Checks Content-Length first when present so no bytes are
87
+ * buffered for obviously-oversized responses.
88
+ */
89
+ export async function readBodyWithLimit(response, maxBytes) {
90
+ const contentLength = response.headers.get('content-length');
91
+ if (contentLength) {
92
+ const cl = parseInt(contentLength, 10);
93
+ if (Number.isFinite(cl) && cl > maxBytes) {
94
+ throw new Error(`Response too large: Content-Length ${cl} exceeds limit of ${maxBytes} bytes`);
95
+ }
96
+ }
97
+ if (!response.body) {
98
+ const text = await response.text();
99
+ if (Buffer.byteLength(text, 'utf8') > maxBytes) {
100
+ throw new Error('Response too large');
101
+ }
102
+ return text;
103
+ }
104
+ const chunks = [];
105
+ let totalBytes = 0;
106
+ const reader = response.body.getReader();
107
+ try {
108
+ for (;;) {
109
+ const { done, value } = await reader.read();
110
+ if (done)
111
+ break;
112
+ totalBytes += value.byteLength;
113
+ if (totalBytes > maxBytes) {
114
+ throw new Error('Response too large');
115
+ }
116
+ chunks.push(Buffer.from(value));
117
+ }
118
+ }
119
+ finally {
120
+ reader.releaseLock();
121
+ }
122
+ return Buffer.concat(chunks).toString('utf8');
123
+ }
124
+ //# sourceMappingURL=docCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docCache.js","sourceRoot":"","sources":["../../../src/utils/docCache.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,kCAAkC;AAElC,MAAM,cAAc,GAAG,QAAQ,CAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,EACjD,EAAE,CACH,CAAC;AAEF,eAAe;AACf,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,iBAAiB;AACjE,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;AAQxD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,QAAQ;IACJ,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,UAAU,GAAG,CAAC,CAAC;IAEvB,GAAG,CAAC,GAAW;QACb,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,uEAAuE;QACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,QAAgB,cAAc;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;YAC5B,OAAO,CAAC,oCAAoC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEnC,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,0DAA0D;QAC1D,OACE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW;YAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,eAAe,EACzC,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACjD,IAAI,SAAS,KAAK,SAAS;gBAAE,MAAM;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,gCAAgC;IAChC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,gCAAgC;IAChC,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,QAAgB;IAEhB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,sCAAsC,EAAE,qBAAqB,QAAQ,QAAQ,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;YAC/B,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}