@mweinbach/apple-docs-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +560 -0
  3. package/dist/constants/browser-headers.d.ts +48 -0
  4. package/dist/constants/browser-headers.d.ts.map +1 -0
  5. package/dist/constants/browser-headers.js +166 -0
  6. package/dist/constants/browser-headers.js.map +1 -0
  7. package/dist/index.d.ts +83 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +215 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/schemas/analyze-api.schema.d.ts +42 -0
  12. package/dist/schemas/analyze-api.schema.d.ts.map +1 -0
  13. package/dist/schemas/analyze-api.schema.js +23 -0
  14. package/dist/schemas/analyze-api.schema.js.map +1 -0
  15. package/dist/schemas/apple-docs.schema.d.ts +18 -0
  16. package/dist/schemas/apple-docs.schema.d.ts.map +1 -0
  17. package/dist/schemas/apple-docs.schema.js +10 -0
  18. package/dist/schemas/apple-docs.schema.js.map +1 -0
  19. package/dist/schemas/doc-content.schema.d.ts +24 -0
  20. package/dist/schemas/doc-content.schema.d.ts.map +1 -0
  21. package/dist/schemas/doc-content.schema.js +10 -0
  22. package/dist/schemas/doc-content.schema.js.map +1 -0
  23. package/dist/schemas/documentation-updates.schema.d.ts +27 -0
  24. package/dist/schemas/documentation-updates.schema.d.ts.map +1 -0
  25. package/dist/schemas/documentation-updates.schema.js +12 -0
  26. package/dist/schemas/documentation-updates.schema.js.map +1 -0
  27. package/dist/schemas/framework-symbols.schema.d.ts +24 -0
  28. package/dist/schemas/framework-symbols.schema.d.ts.map +1 -0
  29. package/dist/schemas/framework-symbols.schema.js +11 -0
  30. package/dist/schemas/framework-symbols.schema.js.map +1 -0
  31. package/dist/schemas/index.d.ts +15 -0
  32. package/dist/schemas/index.d.ts.map +1 -0
  33. package/dist/schemas/index.js +15 -0
  34. package/dist/schemas/index.js.map +1 -0
  35. package/dist/schemas/platform-compatibility.schema.d.ts +18 -0
  36. package/dist/schemas/platform-compatibility.schema.d.ts.map +1 -0
  37. package/dist/schemas/platform-compatibility.schema.js +8 -0
  38. package/dist/schemas/platform-compatibility.schema.js.map +1 -0
  39. package/dist/schemas/references.schema.d.ts +18 -0
  40. package/dist/schemas/references.schema.d.ts.map +1 -0
  41. package/dist/schemas/references.schema.js +9 -0
  42. package/dist/schemas/references.schema.js.map +1 -0
  43. package/dist/schemas/related-apis.schema.d.ts +21 -0
  44. package/dist/schemas/related-apis.schema.d.ts.map +1 -0
  45. package/dist/schemas/related-apis.schema.js +9 -0
  46. package/dist/schemas/related-apis.schema.js.map +1 -0
  47. package/dist/schemas/sample-code.schema.d.ts +21 -0
  48. package/dist/schemas/sample-code.schema.d.ts.map +1 -0
  49. package/dist/schemas/sample-code.schema.js +10 -0
  50. package/dist/schemas/sample-code.schema.js.map +1 -0
  51. package/dist/schemas/search.schema.d.ts +15 -0
  52. package/dist/schemas/search.schema.d.ts.map +1 -0
  53. package/dist/schemas/search.schema.js +8 -0
  54. package/dist/schemas/search.schema.js.map +1 -0
  55. package/dist/schemas/similar-apis.schema.d.ts +21 -0
  56. package/dist/schemas/similar-apis.schema.d.ts.map +1 -0
  57. package/dist/schemas/similar-apis.schema.js +9 -0
  58. package/dist/schemas/similar-apis.schema.js.map +1 -0
  59. package/dist/schemas/technologies.schema.d.ts +21 -0
  60. package/dist/schemas/technologies.schema.d.ts.map +1 -0
  61. package/dist/schemas/technologies.schema.js +10 -0
  62. package/dist/schemas/technologies.schema.js.map +1 -0
  63. package/dist/schemas/technology-overviews.schema.d.ts +24 -0
  64. package/dist/schemas/technology-overviews.schema.d.ts.map +1 -0
  65. package/dist/schemas/technology-overviews.schema.js +11 -0
  66. package/dist/schemas/technology-overviews.schema.js.map +1 -0
  67. package/dist/schemas/wwdc.schemas.d.ts +208 -0
  68. package/dist/schemas/wwdc.schemas.d.ts.map +1 -0
  69. package/dist/schemas/wwdc.schemas.js +97 -0
  70. package/dist/schemas/wwdc.schemas.js.map +1 -0
  71. package/dist/tools/definitions.d.ts +10 -0
  72. package/dist/tools/definitions.d.ts.map +1 -0
  73. package/dist/tools/definitions.js +690 -0
  74. package/dist/tools/definitions.js.map +1 -0
  75. package/dist/tools/doc-fetcher.d.ts +19 -0
  76. package/dist/tools/doc-fetcher.d.ts.map +1 -0
  77. package/dist/tools/doc-fetcher.js +487 -0
  78. package/dist/tools/doc-fetcher.js.map +1 -0
  79. package/dist/tools/doc-formatter.d.ts +69 -0
  80. package/dist/tools/doc-formatter.d.ts.map +1 -0
  81. package/dist/tools/doc-formatter.js +208 -0
  82. package/dist/tools/doc-formatter.js.map +1 -0
  83. package/dist/tools/find-similar-apis.d.ts +5 -0
  84. package/dist/tools/find-similar-apis.d.ts.map +1 -0
  85. package/dist/tools/find-similar-apis.js +275 -0
  86. package/dist/tools/find-similar-apis.js.map +1 -0
  87. package/dist/tools/get-documentation-updates.d.ts +5 -0
  88. package/dist/tools/get-documentation-updates.d.ts.map +1 -0
  89. package/dist/tools/get-documentation-updates.js +244 -0
  90. package/dist/tools/get-documentation-updates.js.map +1 -0
  91. package/dist/tools/get-platform-compatibility.d.ts +5 -0
  92. package/dist/tools/get-platform-compatibility.d.ts.map +1 -0
  93. package/dist/tools/get-platform-compatibility.js +205 -0
  94. package/dist/tools/get-platform-compatibility.js.map +1 -0
  95. package/dist/tools/get-related-apis.d.ts +5 -0
  96. package/dist/tools/get-related-apis.d.ts.map +1 -0
  97. package/dist/tools/get-related-apis.js +155 -0
  98. package/dist/tools/get-related-apis.js.map +1 -0
  99. package/dist/tools/get-sample-code.d.ts +5 -0
  100. package/dist/tools/get-sample-code.d.ts.map +1 -0
  101. package/dist/tools/get-sample-code.js +375 -0
  102. package/dist/tools/get-sample-code.js.map +1 -0
  103. package/dist/tools/get-technology-overviews.d.ts +5 -0
  104. package/dist/tools/get-technology-overviews.d.ts.map +1 -0
  105. package/dist/tools/get-technology-overviews.js +306 -0
  106. package/dist/tools/get-technology-overviews.js.map +1 -0
  107. package/dist/tools/handlers.d.ts +29 -0
  108. package/dist/tools/handlers.d.ts.map +1 -0
  109. package/dist/tools/handlers.js +350 -0
  110. package/dist/tools/handlers.js.map +1 -0
  111. package/dist/tools/list-technologies.d.ts +5 -0
  112. package/dist/tools/list-technologies.d.ts.map +1 -0
  113. package/dist/tools/list-technologies.js +165 -0
  114. package/dist/tools/list-technologies.js.map +1 -0
  115. package/dist/tools/resolve-references-batch.d.ts +5 -0
  116. package/dist/tools/resolve-references-batch.d.ts.map +1 -0
  117. package/dist/tools/resolve-references-batch.js +199 -0
  118. package/dist/tools/resolve-references-batch.js.map +1 -0
  119. package/dist/tools/search-framework-symbols.d.ts +7 -0
  120. package/dist/tools/search-framework-symbols.d.ts.map +1 -0
  121. package/dist/tools/search-framework-symbols.js +235 -0
  122. package/dist/tools/search-framework-symbols.js.map +1 -0
  123. package/dist/tools/search-parser.d.ts +15 -0
  124. package/dist/tools/search-parser.d.ts.map +1 -0
  125. package/dist/tools/search-parser.js +188 -0
  126. package/dist/tools/search-parser.js.map +1 -0
  127. package/dist/tools/search-result-parser.d.ts +52 -0
  128. package/dist/tools/search-result-parser.d.ts.map +1 -0
  129. package/dist/tools/search-result-parser.js +137 -0
  130. package/dist/tools/search-result-parser.js.map +1 -0
  131. package/dist/tools/tools-guide.d.ts +124 -0
  132. package/dist/tools/tools-guide.d.ts.map +1 -0
  133. package/dist/tools/tools-guide.js +389 -0
  134. package/dist/tools/tools-guide.js.map +1 -0
  135. package/dist/tools/wwdc/content-extractor.d.ts +9 -0
  136. package/dist/tools/wwdc/content-extractor.d.ts.map +1 -0
  137. package/dist/tools/wwdc/content-extractor.js +520 -0
  138. package/dist/tools/wwdc/content-extractor.js.map +1 -0
  139. package/dist/tools/wwdc/topics-extractor.d.ts +32 -0
  140. package/dist/tools/wwdc/topics-extractor.d.ts.map +1 -0
  141. package/dist/tools/wwdc/topics-extractor.js +146 -0
  142. package/dist/tools/wwdc/topics-extractor.js.map +1 -0
  143. package/dist/tools/wwdc/video-list-extractor.d.ts +13 -0
  144. package/dist/tools/wwdc/video-list-extractor.d.ts.map +1 -0
  145. package/dist/tools/wwdc/video-list-extractor.js +238 -0
  146. package/dist/tools/wwdc/video-list-extractor.js.map +1 -0
  147. package/dist/tools/wwdc/wwdc-handlers.d.ts +32 -0
  148. package/dist/tools/wwdc/wwdc-handlers.d.ts.map +1 -0
  149. package/dist/tools/wwdc/wwdc-handlers.js +791 -0
  150. package/dist/tools/wwdc/wwdc-handlers.js.map +1 -0
  151. package/dist/types/apple-docs.d.ts +112 -0
  152. package/dist/types/apple-docs.d.ts.map +1 -0
  153. package/dist/types/apple-docs.js +5 -0
  154. package/dist/types/apple-docs.js.map +1 -0
  155. package/dist/types/cache.d.ts +28 -0
  156. package/dist/types/cache.d.ts.map +1 -0
  157. package/dist/types/cache.js +5 -0
  158. package/dist/types/cache.js.map +1 -0
  159. package/dist/types/content-sections.d.ts +37 -0
  160. package/dist/types/content-sections.d.ts.map +1 -0
  161. package/dist/types/content-sections.js +5 -0
  162. package/dist/types/content-sections.js.map +1 -0
  163. package/dist/types/error.d.ts +39 -0
  164. package/dist/types/error.d.ts.map +1 -0
  165. package/dist/types/error.js +21 -0
  166. package/dist/types/error.js.map +1 -0
  167. package/dist/types/headers.d.ts +95 -0
  168. package/dist/types/headers.d.ts.map +1 -0
  169. package/dist/types/headers.js +5 -0
  170. package/dist/types/headers.js.map +1 -0
  171. package/dist/types/http.d.ts +31 -0
  172. package/dist/types/http.d.ts.map +1 -0
  173. package/dist/types/http.js +5 -0
  174. package/dist/types/http.js.map +1 -0
  175. package/dist/types/index.d.ts +11 -0
  176. package/dist/types/index.d.ts.map +1 -0
  177. package/dist/types/index.js +12 -0
  178. package/dist/types/index.js.map +1 -0
  179. package/dist/types/search.d.ts +62 -0
  180. package/dist/types/search.d.ts.map +1 -0
  181. package/dist/types/search.js +5 -0
  182. package/dist/types/search.js.map +1 -0
  183. package/dist/types/sections.d.ts +64 -0
  184. package/dist/types/sections.d.ts.map +1 -0
  185. package/dist/types/sections.js +5 -0
  186. package/dist/types/sections.js.map +1 -0
  187. package/dist/types/tools/platform.d.ts +33 -0
  188. package/dist/types/tools/platform.d.ts.map +1 -0
  189. package/dist/types/tools/platform.js +5 -0
  190. package/dist/types/tools/platform.js.map +1 -0
  191. package/dist/types/tools/sample-code.d.ts +23 -0
  192. package/dist/types/tools/sample-code.d.ts.map +1 -0
  193. package/dist/types/tools/sample-code.js +5 -0
  194. package/dist/types/tools/sample-code.js.map +1 -0
  195. package/dist/types/tools/technology.d.ts +18 -0
  196. package/dist/types/tools/technology.d.ts.map +1 -0
  197. package/dist/types/tools/technology.js +5 -0
  198. package/dist/types/tools/technology.js.map +1 -0
  199. package/dist/types/tools/updates.d.ts +23 -0
  200. package/dist/types/tools/updates.d.ts.map +1 -0
  201. package/dist/types/tools/updates.js +5 -0
  202. package/dist/types/tools/updates.js.map +1 -0
  203. package/dist/types/wwdc.d.ts +200 -0
  204. package/dist/types/wwdc.d.ts.map +1 -0
  205. package/dist/types/wwdc.js +5 -0
  206. package/dist/types/wwdc.js.map +1 -0
  207. package/dist/utils/cache-warmer.d.ts +22 -0
  208. package/dist/utils/cache-warmer.d.ts.map +1 -0
  209. package/dist/utils/cache-warmer.js +115 -0
  210. package/dist/utils/cache-warmer.js.map +1 -0
  211. package/dist/utils/cache.d.ts +109 -0
  212. package/dist/utils/cache.d.ts.map +1 -0
  213. package/dist/utils/cache.js +302 -0
  214. package/dist/utils/cache.js.map +1 -0
  215. package/dist/utils/constants.d.ts +178 -0
  216. package/dist/utils/constants.d.ts.map +1 -0
  217. package/dist/utils/constants.js +266 -0
  218. package/dist/utils/constants.js.map +1 -0
  219. package/dist/utils/error-handler.d.ts +80 -0
  220. package/dist/utils/error-handler.d.ts.map +1 -0
  221. package/dist/utils/error-handler.js +437 -0
  222. package/dist/utils/error-handler.js.map +1 -0
  223. package/dist/utils/framework-mapper.d.ts +84 -0
  224. package/dist/utils/framework-mapper.d.ts.map +1 -0
  225. package/dist/utils/framework-mapper.js +534 -0
  226. package/dist/utils/framework-mapper.js.map +1 -0
  227. package/dist/utils/http-client.d.ts +130 -0
  228. package/dist/utils/http-client.d.ts.map +1 -0
  229. package/dist/utils/http-client.js +464 -0
  230. package/dist/utils/http-client.js.map +1 -0
  231. package/dist/utils/http-headers-generator.d.ts +151 -0
  232. package/dist/utils/http-headers-generator.d.ts.map +1 -0
  233. package/dist/utils/http-headers-generator.js +407 -0
  234. package/dist/utils/http-headers-generator.js.map +1 -0
  235. package/dist/utils/logger.d.ts +44 -0
  236. package/dist/utils/logger.d.ts.map +1 -0
  237. package/dist/utils/logger.js +73 -0
  238. package/dist/utils/logger.js.map +1 -0
  239. package/dist/utils/preloader.d.ts +20 -0
  240. package/dist/utils/preloader.d.ts.map +1 -0
  241. package/dist/utils/preloader.js +82 -0
  242. package/dist/utils/preloader.js.map +1 -0
  243. package/dist/utils/rate-limiter.d.ts +28 -0
  244. package/dist/utils/rate-limiter.d.ts.map +1 -0
  245. package/dist/utils/rate-limiter.js +48 -0
  246. package/dist/utils/rate-limiter.js.map +1 -0
  247. package/dist/utils/topic-mapper.d.ts +18 -0
  248. package/dist/utils/topic-mapper.d.ts.map +1 -0
  249. package/dist/utils/topic-mapper.js +182 -0
  250. package/dist/utils/topic-mapper.js.map +1 -0
  251. package/dist/utils/url-converter.d.ts +22 -0
  252. package/dist/utils/url-converter.d.ts.map +1 -0
  253. package/dist/utils/url-converter.js +70 -0
  254. package/dist/utils/url-converter.js.map +1 -0
  255. package/dist/utils/user-agent-pool.d.ts +241 -0
  256. package/dist/utils/user-agent-pool.d.ts.map +1 -0
  257. package/dist/utils/user-agent-pool.js +557 -0
  258. package/dist/utils/user-agent-pool.js.map +1 -0
  259. package/dist/utils/wwdc-data-source-path.d.ts +9 -0
  260. package/dist/utils/wwdc-data-source-path.d.ts.map +1 -0
  261. package/dist/utils/wwdc-data-source-path.js +22 -0
  262. package/dist/utils/wwdc-data-source-path.js.map +1 -0
  263. package/dist/utils/wwdc-data-source.d.ts +36 -0
  264. package/dist/utils/wwdc-data-source.d.ts.map +1 -0
  265. package/dist/utils/wwdc-data-source.js +133 -0
  266. package/dist/utils/wwdc-data-source.js.map +1 -0
  267. package/package.json +83 -0
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Tool handlers for Apple Developer Documentation MCP Server
3
+ * Optimized for agent context windows with compact output support
4
+ */
5
+ import { z } from 'zod';
6
+ import { searchAppleDocsSchema, getAppleDocContentSchema, listTechnologiesSchema, searchFrameworkSymbolsSchema, getRelatedApisSchema, resolveReferencesBatchSchema, getPlatformCompatibilitySchema, findSimilarApisSchema, getDocumentationUpdatesSchema, getTechnologyOverviewsSchema, getSampleCodeSchema, wwdcSchema, analyzeApiSchema, appleDocsSchema, } from '../schemas/index.js';
7
+ import { listWWDCVideosSchema, searchWWDCContentSchema, getWWDCVideoSchema, getWWDCCodeExamplesSchema, browseWWDCTopicsSchema, findRelatedWWDCVideosSchema, } from '../schemas/wwdc.schemas.js';
8
+ import { handleListWWDCVideos, handleSearchWWDCContent, handleGetWWDCVideo, handleGetWWDCCodeExamples, handleBrowseWWDCTopics, handleFindRelatedWWDCVideos, handleListWWDCYears, } from './wwdc/wwdc-handlers.js';
9
+ import { handleGetToolGuide } from './tools-guide.js';
10
+ import { WWDC_CONFIG, API_LIMITS } from '../utils/constants.js';
11
+ /**
12
+ * Map of tool names to their handlers
13
+ */
14
+ export const toolHandlers = {
15
+ get_performance_report: async () => {
16
+ const { httpClient } = await import('../utils/http-client.js');
17
+ const { getCacheWarmUpStatus } = await import('../utils/cache-warmer.js');
18
+ const { getPreloadStats } = await import('../utils/preloader.js');
19
+ const { globalRateLimiter } = await import('../utils/rate-limiter.js');
20
+ let report = '# Performance Report\n\n';
21
+ // HTTP Client Performance
22
+ report += httpClient.getPerformanceReport();
23
+ report += '\n\n';
24
+ // Cache Warm-up Status
25
+ const warmUpStatus = getCacheWarmUpStatus();
26
+ report += '## Cache Warm-up Status\n\n';
27
+ report += `- **Total Cache Entries:** ${warmUpStatus.totalCacheEntries}\n`;
28
+ report += `- **API Cache:** ${warmUpStatus.apiCacheSize} entries\n`;
29
+ report += `- **Technologies Cache:** ${warmUpStatus.technologiesCacheSize} entries\n`;
30
+ report += `- **Updates Cache:** ${warmUpStatus.updatesCacheSize} entries\n`;
31
+ report += `- **Overviews Cache:** ${warmUpStatus.overviewsCacheSize} entries\n\n`;
32
+ // Framework Preload Status
33
+ const preloadStats = getPreloadStats();
34
+ report += '## Framework Preload Status\n\n';
35
+ report += `- **Preloaded Frameworks:** ${preloadStats.preloadedFrameworks.join(', ')}\n`;
36
+ report += `- **Index Cache Hit Rate:** ${preloadStats.cacheHitRate}\n\n`;
37
+ // Rate Limiter Status
38
+ const rateLimiterStats = globalRateLimiter.getStats();
39
+ report += '## Rate Limiter Status\n\n';
40
+ report += `- **Current Requests:** ${rateLimiterStats.currentRequests}/${rateLimiterStats.maxRequests}\n`;
41
+ report += `- **Utilization:** ${rateLimiterStats.utilizationRate}\n`;
42
+ report += `- **Window:** ${rateLimiterStats.windowMs / 1000}s\n`;
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: report,
48
+ },
49
+ ],
50
+ };
51
+ },
52
+ get_cache_stats: async () => {
53
+ const { apiCache, searchCache, indexCache, technologiesCache, updatesCache, sampleCodeCache, technologyOverviewsCache } = await import('../utils/cache.js');
54
+ const stats = {
55
+ apiCache: apiCache.getStats(),
56
+ searchCache: searchCache.getStats(),
57
+ indexCache: indexCache.getStats(),
58
+ technologiesCache: technologiesCache.getStats(),
59
+ updatesCache: updatesCache.getStats(),
60
+ sampleCodeCache: sampleCodeCache.getStats(),
61
+ technologyOverviewsCache: technologyOverviewsCache.getStats(),
62
+ };
63
+ let report = '# Cache Statistics Report\n\n';
64
+ Object.entries(stats).forEach(([name, stat]) => {
65
+ report += `## ${name}\n`;
66
+ report += `- Size: ${stat.size}/${stat.maxSize}\n`;
67
+ report += `- Hit Rate: ${stat.hitRate}\n`;
68
+ report += `- Hits: ${stat.hits}\n`;
69
+ report += `- Misses: ${stat.misses}\n\n`;
70
+ });
71
+ return {
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: report,
76
+ },
77
+ ],
78
+ };
79
+ },
80
+ search_apple_docs: async (args, server) => {
81
+ const validatedArgs = searchAppleDocsSchema.parse(args);
82
+ return await server.searchAppleDocs(validatedArgs.query, validatedArgs.type);
83
+ },
84
+ get_apple_doc_content: async (args, server) => {
85
+ const validatedArgs = getAppleDocContentSchema.parse(args);
86
+ return await server.getAppleDocContent(validatedArgs.url, validatedArgs.includeRelatedApis, validatedArgs.includeReferences, validatedArgs.includeSimilarApis, validatedArgs.includePlatformAnalysis);
87
+ },
88
+ list_technologies: async (args, server) => {
89
+ const validatedArgs = listTechnologiesSchema.parse(args);
90
+ return await server.listTechnologies(validatedArgs.category, validatedArgs.language, validatedArgs.includeBeta, validatedArgs.limit);
91
+ },
92
+ search_framework_symbols: async (args, server) => {
93
+ const validatedArgs = searchFrameworkSymbolsSchema.parse(args);
94
+ return await server.searchFrameworkSymbols(validatedArgs.framework, validatedArgs.symbolType, validatedArgs.namePattern, validatedArgs.language, validatedArgs.limit);
95
+ },
96
+ get_related_apis: async (args, server) => {
97
+ const validatedArgs = getRelatedApisSchema.parse(args);
98
+ return await server.getRelatedApis(validatedArgs.apiUrl, validatedArgs.includeInherited, validatedArgs.includeConformance, validatedArgs.includeSeeAlso);
99
+ },
100
+ resolve_references_batch: async (args, server) => {
101
+ const validatedArgs = resolveReferencesBatchSchema.parse(args);
102
+ return await server.resolveReferencesBatch(validatedArgs.sourceUrl, validatedArgs.maxReferences, validatedArgs.filterByType);
103
+ },
104
+ get_platform_compatibility: async (args, server) => {
105
+ const validatedArgs = getPlatformCompatibilitySchema.parse(args);
106
+ return await server.getPlatformCompatibility(validatedArgs.apiUrl, validatedArgs.compareMode, validatedArgs.includeRelated);
107
+ },
108
+ find_similar_apis: async (args, server) => {
109
+ const validatedArgs = findSimilarApisSchema.parse(args);
110
+ return await server.findSimilarApis(validatedArgs.apiUrl, validatedArgs.searchDepth, validatedArgs.filterByCategory, validatedArgs.includeAlternatives);
111
+ },
112
+ get_documentation_updates: async (args, server) => {
113
+ const validatedArgs = getDocumentationUpdatesSchema.parse(args);
114
+ return await server.getDocumentationUpdates(validatedArgs.category, validatedArgs.technology, validatedArgs.year, validatedArgs.searchQuery, validatedArgs.includeBeta, validatedArgs.limit);
115
+ },
116
+ get_technology_overviews: async (args, server) => {
117
+ const validatedArgs = getTechnologyOverviewsSchema.parse(args);
118
+ return await server.getTechnologyOverviews(validatedArgs.category, validatedArgs.platform, validatedArgs.searchQuery, validatedArgs.includeSubcategories, validatedArgs.limit);
119
+ },
120
+ get_sample_code: async (args, server) => {
121
+ const validatedArgs = getSampleCodeSchema.parse(args);
122
+ return await server.getSampleCode(validatedArgs.framework, validatedArgs.beta, validatedArgs.searchQuery, validatedArgs.limit);
123
+ },
124
+ // WWDC tools
125
+ list_wwdc_videos: async (args, _server) => {
126
+ const validatedArgs = listWWDCVideosSchema.parse(args);
127
+ const result = await handleListWWDCVideos(validatedArgs.year, validatedArgs.topic, validatedArgs.hasCode, validatedArgs.limit);
128
+ return { content: [{ type: 'text', text: result }] };
129
+ },
130
+ search_wwdc_content: async (args, _server) => {
131
+ const validatedArgs = searchWWDCContentSchema.parse(args);
132
+ const result = await handleSearchWWDCContent(validatedArgs.query, validatedArgs.searchIn, validatedArgs.year, validatedArgs.language, validatedArgs.limit);
133
+ return { content: [{ type: 'text', text: result }] };
134
+ },
135
+ get_wwdc_video: async (args, _server) => {
136
+ const validatedArgs = getWWDCVideoSchema.parse(args);
137
+ const result = await handleGetWWDCVideo(validatedArgs.year, validatedArgs.videoId, validatedArgs.includeTranscript, validatedArgs.includeCode);
138
+ return { content: [{ type: 'text', text: result }] };
139
+ },
140
+ get_wwdc_code_examples: async (args, _server) => {
141
+ const validatedArgs = getWWDCCodeExamplesSchema.parse(args);
142
+ const result = await handleGetWWDCCodeExamples(validatedArgs.framework, validatedArgs.topic, validatedArgs.year, validatedArgs.language, validatedArgs.limit);
143
+ return { content: [{ type: 'text', text: result }] };
144
+ },
145
+ browse_wwdc_topics: async (args, _server) => {
146
+ const validatedArgs = browseWWDCTopicsSchema.parse(args);
147
+ const result = await handleBrowseWWDCTopics(validatedArgs.topicId, validatedArgs.includeVideos, validatedArgs.year, validatedArgs.limit);
148
+ return { content: [{ type: 'text', text: result }] };
149
+ },
150
+ find_related_wwdc_videos: async (args, _server) => {
151
+ const validatedArgs = findRelatedWWDCVideosSchema.parse(args);
152
+ const result = await handleFindRelatedWWDCVideos(validatedArgs.videoId, validatedArgs.year, validatedArgs.includeExplicitRelated, validatedArgs.includeTopicRelated, validatedArgs.includeYearRelated, validatedArgs.limit);
153
+ return { content: [{ type: 'text', text: result }] };
154
+ },
155
+ list_wwdc_years: async (_args, _server) => {
156
+ const result = await handleListWWDCYears();
157
+ return { content: [{ type: 'text', text: result }] };
158
+ },
159
+ // ============================================================================
160
+ // UNIFIED TOOLS - New consolidated tools for agent optimization
161
+ // ============================================================================
162
+ /**
163
+ * Unified WWDC tool - consolidates 7 WWDC tools into 1
164
+ */
165
+ wwdc: async (args, _server) => {
166
+ const validatedArgs = wwdcSchema.parse(args);
167
+ const { action, compact } = validatedArgs;
168
+ let result;
169
+ switch (action) {
170
+ case 'list':
171
+ result = await handleListWWDCVideos(validatedArgs.year, validatedArgs.topic, validatedArgs.hasCode, validatedArgs.limit ?? WWDC_CONFIG.DEFAULT_VIDEO_LIMIT);
172
+ break;
173
+ case 'search':
174
+ if (!validatedArgs.query) {
175
+ return { content: [{ type: 'text', text: 'Error: query is required for search action' }], isError: true };
176
+ }
177
+ result = await handleSearchWWDCContent(validatedArgs.query, validatedArgs.searchIn ?? 'both', validatedArgs.year, validatedArgs.language, validatedArgs.limit ?? WWDC_CONFIG.DEFAULT_SEARCH_LIMIT);
178
+ break;
179
+ case 'get':
180
+ if (!validatedArgs.year || !validatedArgs.videoId) {
181
+ return { content: [{ type: 'text', text: 'Error: year and videoId are required for get action' }], isError: true };
182
+ }
183
+ result = await handleGetWWDCVideo(validatedArgs.year, validatedArgs.videoId, validatedArgs.includeTranscript ?? true, validatedArgs.includeCode ?? true);
184
+ break;
185
+ case 'code':
186
+ result = await handleGetWWDCCodeExamples(validatedArgs.framework, validatedArgs.topic, validatedArgs.year, validatedArgs.language, validatedArgs.limit ?? WWDC_CONFIG.DEFAULT_CODE_EXAMPLES_LIMIT);
187
+ break;
188
+ case 'topics':
189
+ result = await handleBrowseWWDCTopics(validatedArgs.topic, validatedArgs.includeVideos ?? true, validatedArgs.year, validatedArgs.limit ?? WWDC_CONFIG.DEFAULT_TOPIC_VIDEOS_LIMIT);
190
+ break;
191
+ case 'related':
192
+ if (!validatedArgs.videoId || !validatedArgs.year) {
193
+ return { content: [{ type: 'text', text: 'Error: videoId and year are required for related action' }], isError: true };
194
+ }
195
+ result = await handleFindRelatedWWDCVideos(validatedArgs.videoId, validatedArgs.year, validatedArgs.includeExplicitRelated ?? true, validatedArgs.includeTopicRelated ?? true, validatedArgs.includeYearRelated ?? false, validatedArgs.limit ?? WWDC_CONFIG.DEFAULT_RELATED_VIDEOS_LIMIT);
196
+ break;
197
+ case 'years':
198
+ result = await handleListWWDCYears();
199
+ break;
200
+ default:
201
+ return { content: [{ type: 'text', text: `Error: Unknown action: ${action}` }], isError: true };
202
+ }
203
+ // Apply compact formatting if requested (simple version - full implementation would parse and reformat)
204
+ if (compact && result && !result.startsWith('Error')) {
205
+ // Extract URLs and titles from the result for compact output
206
+ const lines = result.split('\n');
207
+ const compactLines = ['# Results (Compact Mode)\n'];
208
+ let count = 0;
209
+ for (const line of lines) {
210
+ // Match markdown links: [title](url)
211
+ const linkMatch = line.match(/\[([^\]]+)\]\(([^)]+)\)/);
212
+ if (linkMatch) {
213
+ count++;
214
+ compactLines.push(`${count}. [${linkMatch[1]}](${linkMatch[2]})`);
215
+ }
216
+ }
217
+ if (count > 0) {
218
+ compactLines.unshift(`Found ${count} results:\n`);
219
+ result = compactLines.join('\n');
220
+ }
221
+ }
222
+ return { content: [{ type: 'text', text: result }] };
223
+ },
224
+ /**
225
+ * Unified API analysis tool - consolidates get_related_apis, find_similar_apis, resolve_references_batch
226
+ */
227
+ analyze_api: async (args, server) => {
228
+ const validatedArgs = analyzeApiSchema.parse(args);
229
+ const { apiUrl, analysis, compact } = validatedArgs;
230
+ const results = [];
231
+ if (analysis === 'related' || analysis === 'all') {
232
+ const relatedResult = await server.getRelatedApis(apiUrl, validatedArgs.includeInherited ?? true, validatedArgs.includeConformance ?? true, validatedArgs.includeSeeAlso ?? true);
233
+ if (relatedResult.content?.[0]?.text) {
234
+ results.push('## Related APIs\n\n' + relatedResult.content[0].text);
235
+ }
236
+ }
237
+ if (analysis === 'similar' || analysis === 'all') {
238
+ const similarResult = await server.findSimilarApis(apiUrl, validatedArgs.searchDepth ?? 'medium', validatedArgs.filterByCategory, true);
239
+ if (similarResult.content?.[0]?.text) {
240
+ results.push('## Similar APIs\n\n' + similarResult.content[0].text);
241
+ }
242
+ }
243
+ if (analysis === 'references' || analysis === 'all') {
244
+ const referencesResult = await server.resolveReferencesBatch(apiUrl, validatedArgs.maxReferences ?? API_LIMITS.DEFAULT_REFERENCES_LIMIT, validatedArgs.filterByType ?? 'all');
245
+ if (referencesResult.content?.[0]?.text) {
246
+ results.push('## Type References\n\n' + referencesResult.content[0].text);
247
+ }
248
+ }
249
+ let resultText = results.join('\n\n---\n\n');
250
+ // Apply compact formatting if requested
251
+ if (compact && resultText) {
252
+ const lines = resultText.split('\n');
253
+ const compactLines = ['# API Analysis (Compact Mode)\n'];
254
+ let count = 0;
255
+ for (const line of lines) {
256
+ const linkMatch = line.match(/\[([^\]]+)\]\(([^)]+)\)/);
257
+ if (linkMatch) {
258
+ count++;
259
+ compactLines.push(`${count}. [${linkMatch[1]}](${linkMatch[2]})`);
260
+ }
261
+ }
262
+ if (count > 0) {
263
+ compactLines.unshift(`Found ${count} related items:\n`);
264
+ resultText = compactLines.join('\n');
265
+ }
266
+ }
267
+ return { content: [{ type: 'text', text: resultText || 'No analysis results found.' }] };
268
+ },
269
+ /**
270
+ * Universal Apple docs router - auto-routes to appropriate tool
271
+ */
272
+ apple_docs: async (args, server) => {
273
+ const validatedArgs = appleDocsSchema.parse(args);
274
+ const { query, intent, compact } = validatedArgs;
275
+ const queryLower = query.toLowerCase();
276
+ // Determine routing
277
+ let effectiveIntent = intent;
278
+ if (intent === 'auto') {
279
+ // Auto-detect from query
280
+ if (query.startsWith('https://developer.apple.com/documentation/')) {
281
+ effectiveIntent = 'docs';
282
+ }
283
+ else if (/wwdc|video|session|transcript/.test(queryLower)) {
284
+ effectiveIntent = 'wwdc';
285
+ }
286
+ else if (/sample|example project/.test(queryLower)) {
287
+ effectiveIntent = 'samples';
288
+ }
289
+ else if (/framework|technolog|list/.test(queryLower)) {
290
+ effectiveIntent = 'technologies';
291
+ }
292
+ else {
293
+ effectiveIntent = 'search';
294
+ }
295
+ }
296
+ // Route to appropriate handler
297
+ switch (effectiveIntent) {
298
+ case 'docs':
299
+ // If it's a URL, get the content directly
300
+ if (query.startsWith('https://developer.apple.com/')) {
301
+ return await server.getAppleDocContent(query, false, false, false, false);
302
+ }
303
+ // Otherwise search
304
+ return await server.searchAppleDocs(query, 'documentation');
305
+ case 'wwdc':
306
+ // Extract search terms and route to wwdc search
307
+ const wwdcResult = await handleSearchWWDCContent(query.replace(/wwdc|video|session/gi, '').trim() || query, 'both', undefined, undefined, compact ? 10 : WWDC_CONFIG.DEFAULT_SEARCH_LIMIT);
308
+ return { content: [{ type: 'text', text: wwdcResult }] };
309
+ case 'samples':
310
+ return await server.getSampleCode(undefined, 'include', query.replace(/sample|example/gi, '').trim() || query, compact ? 10 : API_LIMITS.DEFAULT_SAMPLE_CODE_LIMIT);
311
+ case 'technologies':
312
+ return await server.listTechnologies(undefined, undefined, true, compact ? 15 : API_LIMITS.DEFAULT_TECHNOLOGIES_LIMIT);
313
+ case 'search':
314
+ default:
315
+ return await server.searchAppleDocs(query, 'all');
316
+ }
317
+ },
318
+ /**
319
+ * Tool guide - helps users understand which tools to use
320
+ */
321
+ get_tool_guide: async (args, _server) => {
322
+ const taskSchema = z.object({ task: z.string() });
323
+ const validatedArgs = taskSchema.parse(args);
324
+ const result = handleGetToolGuide(validatedArgs.task);
325
+ return { content: [{ type: 'text', text: result }] };
326
+ },
327
+ };
328
+ /**
329
+ * Handle tool call with the appropriate handler
330
+ */
331
+ export async function handleToolCall(toolName, args, server) {
332
+ try {
333
+ const handler = toolHandlers[toolName];
334
+ if (!handler) {
335
+ throw new Error(`Unknown tool: ${toolName}`);
336
+ }
337
+ return await handler(args, server);
338
+ }
339
+ catch (error) {
340
+ // Return error response for validation errors and unknown tools
341
+ return {
342
+ content: [{
343
+ type: 'text',
344
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
345
+ }],
346
+ isError: true,
347
+ };
348
+ }
349
+ }
350
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 获取技术列表
3
+ */
4
+ export declare function handleListTechnologies(category?: string, language?: string, includeBeta?: boolean, limit?: number): Promise<string>;
5
+ //# sourceMappingURL=list-technologies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-technologies.d.ts","sourceRoot":"","sources":["../../src/tools/list-technologies.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,GAAE,OAAc,EAC3B,KAAK,GAAE,MAA8C,GACpD,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
@@ -0,0 +1,165 @@
1
+ import { technologiesCache, generateUrlCacheKey } from '../utils/cache.js';
2
+ import { APPLE_URLS, API_LIMITS } from '../utils/constants.js';
3
+ import { httpClient } from '../utils/http-client.js';
4
+ import { logger } from '../utils/logger.js';
5
+ /**
6
+ * 获取技术列表
7
+ */
8
+ export async function handleListTechnologies(category, language, includeBeta = true, limit = API_LIMITS.DEFAULT_TECHNOLOGIES_LIMIT) {
9
+ try {
10
+ logger.info('Fetching technologies list...');
11
+ // Generate cache key
12
+ const cacheKey = generateUrlCacheKey('technologies', { category, language, includeBeta, limit });
13
+ // Try to get from cache first
14
+ const cachedResult = technologiesCache.get(cacheKey);
15
+ if (cachedResult) {
16
+ logger.debug('Technologies cache hit');
17
+ return cachedResult;
18
+ }
19
+ // 获取技术列表
20
+ const data = await httpClient.getJson(APPLE_URLS.TECHNOLOGIES_JSON);
21
+ // 解析技术列表
22
+ const technologies = parseTechnologies(data);
23
+ // 应用过滤器
24
+ const filteredTechnologies = applyTechnologyFilters(technologies, {
25
+ category,
26
+ language,
27
+ includeBeta,
28
+ limit,
29
+ });
30
+ // 格式化输出
31
+ const result = formatTechnologiesList(filteredTechnologies);
32
+ // Cache the result
33
+ technologiesCache.set(cacheKey, result);
34
+ return result;
35
+ }
36
+ catch (error) {
37
+ const errorMessage = error instanceof Error ? error.message : String(error);
38
+ return `Error: Failed to list technologies: ${errorMessage}`;
39
+ }
40
+ }
41
+ /**
42
+ * 解析技术数据
43
+ */
44
+ function parseTechnologies(data) {
45
+ const groups = [];
46
+ if (data.sections) {
47
+ data.sections.forEach(section => {
48
+ if (section.kind === 'technologies' && section.groups) {
49
+ section.groups.forEach(group => {
50
+ if (group.technologies && Array.isArray(group.technologies)) {
51
+ const technologies = group.technologies.map(tech => ({
52
+ title: tech.title || '',
53
+ identifier: tech.destination?.identifier || tech.identifier || '',
54
+ tags: tech.tags || [],
55
+ languages: tech.languages || [],
56
+ url: tech.destination?.identifier
57
+ ? tech.destination.identifier.replace('doc://com.apple.documentation/documentation/', 'https://developer.apple.com/documentation/')
58
+ : undefined,
59
+ }));
60
+ groups.push({
61
+ name: group.name,
62
+ technologies,
63
+ });
64
+ }
65
+ });
66
+ }
67
+ });
68
+ }
69
+ return groups;
70
+ }
71
+ /**
72
+ * 应用过滤器
73
+ */
74
+ function applyTechnologyFilters(groups, filters) {
75
+ let filteredGroups = groups
76
+ .map(group => {
77
+ // 分类过滤
78
+ if (filters.category && !group.name.toLowerCase().includes(filters.category.toLowerCase())) {
79
+ return null;
80
+ }
81
+ // 技术过滤
82
+ const filteredTechnologies = group.technologies.filter(tech => {
83
+ // Beta 过滤
84
+ if (!filters.includeBeta && tech.tags.includes('Beta')) {
85
+ return false;
86
+ }
87
+ // 语言过滤
88
+ if (filters.language && !tech.languages.includes(filters.language)) {
89
+ return false;
90
+ }
91
+ return true;
92
+ });
93
+ return filteredTechnologies.length > 0
94
+ ? { ...group, technologies: filteredTechnologies }
95
+ : null;
96
+ })
97
+ .filter((group) => group !== null);
98
+ // 应用 limit 限制
99
+ if (filters.limit !== undefined && filters.limit >= 0) {
100
+ if (filters.limit === 0) {
101
+ // 如果 limit 为 0,返回空数组
102
+ return [];
103
+ }
104
+ let totalCount = 0;
105
+ filteredGroups = filteredGroups.map(group => {
106
+ const availableSlots = filters.limit - totalCount;
107
+ if (availableSlots <= 0) {
108
+ return null;
109
+ }
110
+ const limitedTechnologies = group.technologies.slice(0, availableSlots);
111
+ totalCount += limitedTechnologies.length;
112
+ return {
113
+ ...group,
114
+ technologies: limitedTechnologies,
115
+ };
116
+ }).filter((group) => group !== null && group.technologies.length > 0);
117
+ }
118
+ return filteredGroups;
119
+ }
120
+ /**
121
+ * 格式化技术列表
122
+ */
123
+ function formatTechnologiesList(groups) {
124
+ if (groups.length === 0) {
125
+ return 'No technologies found matching the specified criteria.';
126
+ }
127
+ let content = '# Apple Developer Technologies\n\n';
128
+ // 统计信息
129
+ const totalTechs = groups.reduce((sum, group) => sum + group.technologies.length, 0);
130
+ const betaTechs = groups.reduce((sum, group) => sum + group.technologies.filter(tech => tech.tags.includes('Beta')).length, 0);
131
+ content += `*Found ${totalTechs} technologies`;
132
+ if (betaTechs > 0) {
133
+ content += ` (${betaTechs} in beta)`;
134
+ }
135
+ content += '*\n\n';
136
+ // 按分类显示
137
+ groups.forEach(group => {
138
+ content += `## ${group.name}\n\n`;
139
+ group.technologies.forEach(tech => {
140
+ // Create title with status information
141
+ const isBeta = tech.tags.includes('Beta');
142
+ const titleWithStatus = isBeta ? `${tech.title} (Beta)` : tech.title;
143
+ content += `### [${titleWithStatus}](${tech.url || '#'})\n`;
144
+ // Build metadata array
145
+ const metadata = [];
146
+ // Add languages
147
+ if (tech.languages.length > 0) {
148
+ metadata.push(`Languages: ${tech.languages.join(', ')}`);
149
+ }
150
+ // Add categories (excluding Beta since it's in title)
151
+ const nonBetaTags = tech.tags.filter(tag => tag !== 'Beta');
152
+ if (nonBetaTags.length > 0) {
153
+ metadata.push(`Categories: ${nonBetaTags.join(', ')}`);
154
+ }
155
+ // Add metadata line if any
156
+ if (metadata.length > 0) {
157
+ content += `*${metadata.join(' | ')}*\n`;
158
+ }
159
+ content += '\n';
160
+ });
161
+ });
162
+ content += '\n---\n\n[View all technologies on Apple Developer](https://developer.apple.com/documentation/technologies)';
163
+ return content;
164
+ }
165
+ //# sourceMappingURL=list-technologies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-technologies.js","sourceRoot":"","sources":["../../src/tools/list-technologies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 批量解析引用
3
+ */
4
+ export declare function handleResolveReferencesBatch(sourceUrl: string, maxReferences?: number, filterByType?: string): Promise<string>;
5
+ //# sourceMappingURL=resolve-references-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-references-batch.d.ts","sourceRoot":"","sources":["../../src/tools/resolve-references-batch.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,aAAa,GAAE,MAAW,EAC1B,YAAY,GAAE,MAAc,GAC3B,OAAO,CAAC,MAAM,CAAC,CAsCjB"}