@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,188 @@
1
+ import * as cheerio from 'cheerio';
2
+ import { parseSearchResult } from './search-result-parser.js';
3
+ import { API_LIMITS } from '../utils/constants.js';
4
+ import { logger } from '../utils/logger.js';
5
+ /**
6
+ * Formats search results for display
7
+ */
8
+ export function formatSearchResults(results, query, filterType, searchUrl) {
9
+ let content = '';
10
+ // Add header
11
+ content += '# Apple Documentation Search Results\n\n';
12
+ content += `**Query:** "${query}"\n`;
13
+ content += `**Filter:** ${filterType}\n`;
14
+ content += `**Results found:** ${results.length}\n\n`;
15
+ // Check if query might be video-related
16
+ const videoSuggestion = getVideoSuggestion(query);
17
+ if (videoSuggestion) {
18
+ content += videoSuggestion;
19
+ }
20
+ if (results.length === 0) {
21
+ content += formatNoResultsMessage(query, filterType, searchUrl);
22
+ return content;
23
+ }
24
+ // Group results by type
25
+ const groupedResults = groupResultsByType(results);
26
+ // Format each group
27
+ Object.entries(groupedResults).forEach(([type, typeResults]) => {
28
+ content += formatResultGroup(type, typeResults);
29
+ });
30
+ // Add footer
31
+ content += formatSearchFooter(searchUrl);
32
+ return content;
33
+ }
34
+ /**
35
+ * Format no results message
36
+ */
37
+ function formatNoResultsMessage(query, filterType, searchUrl) {
38
+ let content = '## No Results Found\n\n';
39
+ content += `No ${filterType === 'all' ? '' : filterType + ' '}results found for "${query}".\n\n`;
40
+ content += '### Suggestions:\n';
41
+ content += '- Try using different keywords\n';
42
+ content += '- Check spelling\n';
43
+ content += '- Use more general terms\n';
44
+ content += '- Try searching for framework names (e.g., "SwiftUI", "UIKit")\n';
45
+ // Add video-specific suggestion if applicable
46
+ const videoSuggestion = getVideoSuggestion(query);
47
+ if (videoSuggestion) {
48
+ content += '- For WWDC videos, use the dedicated WWDC tools\n';
49
+ }
50
+ content += `\n[View search on Apple Developer](${searchUrl})`;
51
+ return content;
52
+ }
53
+ /**
54
+ * Group results by type
55
+ */
56
+ function groupResultsByType(results) {
57
+ const groups = {};
58
+ results.forEach(result => {
59
+ const displayType = getDisplayType(result.type);
60
+ if (!groups[displayType]) {
61
+ groups[displayType] = [];
62
+ }
63
+ groups[displayType].push(result);
64
+ });
65
+ return groups;
66
+ }
67
+ /**
68
+ * Get display type for result
69
+ */
70
+ function getDisplayType(type) {
71
+ const typeDisplayNames = {
72
+ 'documentation': '📚 API Documentation',
73
+ 'documentation-article': '📄 Articles',
74
+ 'documentation-tutorial': '📖 Tutorials',
75
+ 'sample-code': '💻 Sample Code',
76
+ 'guide': '📋 Guides',
77
+ };
78
+ return typeDisplayNames[type] || '📝 Other';
79
+ }
80
+ /**
81
+ * Format a group of results
82
+ */
83
+ function formatResultGroup(type, results) {
84
+ let content = `## ${type}\n\n`;
85
+ results.forEach((result, index) => {
86
+ content += formatSingleResult(result, index + 1);
87
+ });
88
+ return content;
89
+ }
90
+ /**
91
+ * Format a single search result
92
+ */
93
+ function formatSingleResult(result, index) {
94
+ let content = `### ${index}. ${result.title}`;
95
+ // Add badges
96
+ const badges = [];
97
+ if (result.beta) {
98
+ badges.push('🧪 Beta');
99
+ }
100
+ if (badges.length > 0) {
101
+ content += ` ${badges.join(' ')}`;
102
+ }
103
+ content += '\n\n';
104
+ // Add metadata
105
+ if (result.framework) {
106
+ content += `**Framework:** ${result.framework}\n`;
107
+ }
108
+ content += `**Type:** ${result.type.replace(/-/g, ' ')}\n`;
109
+ // Add description
110
+ if (result.description) {
111
+ content += `**Description:** ${result.description}\n`;
112
+ }
113
+ // Add URL
114
+ content += `**URL:** ${result.url}\n\n`;
115
+ return content;
116
+ }
117
+ /**
118
+ * Format search footer
119
+ */
120
+ function formatSearchFooter(searchUrl) {
121
+ return `---\n\n[View all results on Apple Developer](${searchUrl})`;
122
+ }
123
+ /**
124
+ * Check if query might be video-related and provide WWDC tool suggestions
125
+ */
126
+ function getVideoSuggestion(query) {
127
+ const videoKeywords = [
128
+ 'video', 'wwdc', 'session', 'presentation', 'talk', 'keynote',
129
+ 'demo', 'tutorial', 'walkthrough', 'overview', 'introduction',
130
+ 'deep dive', 'best practices', 'tips', 'tricks',
131
+ ];
132
+ const queryLower = query.toLowerCase();
133
+ const hasVideoKeyword = videoKeywords.some(keyword => queryLower.includes(keyword));
134
+ // Also check for year patterns (e.g., "2024", "2025", "wwdc24")
135
+ const hasYearPattern = /\b(20[2-9][0-9]|wwdc[2-9][0-9])\b/i.test(query);
136
+ if (hasVideoKeyword || hasYearPattern) {
137
+ return `## 💡 Looking for WWDC Videos?
138
+
139
+ This search covers documentation and samples, but not WWDC videos. For WWDC content, try these tools:
140
+
141
+ - **\`list_wwdc_videos\`** - Browse WWDC videos by year, topic, or code availability
142
+ - **\`search_wwdc_content\`** - Search through video transcripts and code examples
143
+ - **\`browse_wwdc_topics\`** - Explore videos organized by topic categories
144
+
145
+ ---
146
+
147
+ `;
148
+ }
149
+ return null;
150
+ }
151
+ /**
152
+ * Parse search results with reduced complexity
153
+ */
154
+ export function parseSearchResults(html, query, searchUrl, filterType = 'all') {
155
+ try {
156
+ const $ = cheerio.load(html);
157
+ const results = [];
158
+ // Parse each search result (with limit)
159
+ $('.search-result').each((_, element) => {
160
+ if (results.length >= API_LIMITS.MAX_SEARCH_RESULTS) {
161
+ return false; // Stop parsing when limit reached
162
+ }
163
+ const result = parseSearchResult($(element), filterType);
164
+ if (result) {
165
+ results.push(result);
166
+ }
167
+ return true; // Continue parsing
168
+ });
169
+ // Format results
170
+ const formattedContent = formatSearchResults(results, query, filterType, searchUrl);
171
+ return {
172
+ content: [{
173
+ type: 'text',
174
+ text: formattedContent,
175
+ }],
176
+ };
177
+ }
178
+ catch (error) {
179
+ logger.error('Error parsing search results:', error);
180
+ return {
181
+ content: [{
182
+ type: 'text',
183
+ text: `Error parsing search results: ${error instanceof Error ? error.message : 'Unknown error'}`,
184
+ }],
185
+ };
186
+ }
187
+ }
188
+ //# sourceMappingURL=search-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-parser.js","sourceRoot":"","sources":["../../src/tools/search-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Search result parsing utilities
3
+ */
4
+ import type * as cheerio from 'cheerio';
5
+ export interface SearchResult {
6
+ title: string;
7
+ url: string;
8
+ type: string;
9
+ description: string;
10
+ framework?: string;
11
+ beta?: boolean;
12
+ }
13
+ /**
14
+ * Type mapping for search filters
15
+ */
16
+ export declare const typeMapping: Record<string, string[]>;
17
+ /**
18
+ * Extract search result type from element classes
19
+ */
20
+ export declare function extractResultType(element: cheerio.Cheerio<any>): string;
21
+ /**
22
+ * Check if result type is supported
23
+ */
24
+ export declare function isResultTypeSupported(resultType: string, filterType: string): boolean;
25
+ /**
26
+ * Extract result title and URL
27
+ */
28
+ export declare function extractTitleAndUrl(resultItem: cheerio.Cheerio<any>): {
29
+ title: string;
30
+ url: string;
31
+ };
32
+ /**
33
+ * Check if URL is supported
34
+ */
35
+ export declare function isUrlSupported(url: string): boolean;
36
+ /**
37
+ * Extract result description
38
+ */
39
+ export declare function extractDescription(resultItem: cheerio.Cheerio<any>): string;
40
+ /**
41
+ * Extract framework information
42
+ */
43
+ export declare function extractFramework(resultItem: cheerio.Cheerio<any>, url: string): string | undefined;
44
+ /**
45
+ * Extract beta status
46
+ */
47
+ export declare function extractBetaStatus(resultItem: cheerio.Cheerio<any>): boolean;
48
+ /**
49
+ * Parse a single search result
50
+ */
51
+ export declare function parseSearchResult(element: cheerio.Cheerio<any>, filterType: string): SearchResult | null;
52
+ //# sourceMappingURL=search-result-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-result-parser.d.ts","sourceRoot":"","sources":["../../src/tools/search-result-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAIhD,CAAC;AAOF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAUvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAarF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAYnG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAK3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAC7B,UAAU,EAAE,MAAM,GACjB,YAAY,GAAG,IAAI,CAyBrB"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Search result parsing utilities
3
+ */
4
+ /**
5
+ * Type mapping for search filters
6
+ */
7
+ export const typeMapping = {
8
+ all: ['documentation', 'documentation-article', 'documentation-tutorial', 'sample-code'],
9
+ documentation: ['documentation', 'documentation-article'],
10
+ sample: ['sample-code'],
11
+ };
12
+ /**
13
+ * Unsupported document types
14
+ */
15
+ const UNSUPPORTED_TYPES = ['general', 'video', 'forums', 'news'];
16
+ /**
17
+ * Extract search result type from element classes
18
+ */
19
+ export function extractResultType(element) {
20
+ const classes = element.attr('class')?.split(' ') ?? [];
21
+ for (const className of classes) {
22
+ if (className !== 'search-result' && className.trim()) {
23
+ return className;
24
+ }
25
+ }
26
+ return 'other';
27
+ }
28
+ /**
29
+ * Check if result type is supported
30
+ */
31
+ export function isResultTypeSupported(resultType, filterType) {
32
+ // Apply type filter
33
+ const allowedTypes = typeMapping[filterType] ?? typeMapping['all'];
34
+ if (!allowedTypes.includes(resultType)) {
35
+ return false;
36
+ }
37
+ // Exclude known unsupported types
38
+ if (UNSUPPORTED_TYPES.includes(resultType)) {
39
+ return false;
40
+ }
41
+ return true;
42
+ }
43
+ /**
44
+ * Extract result title and URL
45
+ */
46
+ export function extractTitleAndUrl(resultItem) {
47
+ const titleElement = resultItem.find('.result-title');
48
+ const title = titleElement.text().trim();
49
+ const urlElement = titleElement.find('a');
50
+ let url = urlElement.attr('href') ?? '';
51
+ if (url && url.startsWith('/')) {
52
+ url = `https://developer.apple.com${url}`;
53
+ }
54
+ return { title, url };
55
+ }
56
+ /**
57
+ * Check if URL is supported
58
+ */
59
+ export function isUrlSupported(url) {
60
+ if (!url) {
61
+ return false;
62
+ }
63
+ // Skip non-documentation URLs
64
+ if (!url.includes('/documentation/')) {
65
+ return false;
66
+ }
67
+ // Skip download links and zip files
68
+ if (url.includes('download.apple.com') || url.includes('.zip')) {
69
+ return false;
70
+ }
71
+ // Skip human interface guidelines
72
+ if (url.includes('/design/human-interface-guidelines/')) {
73
+ return false;
74
+ }
75
+ return true;
76
+ }
77
+ /**
78
+ * Extract result description
79
+ */
80
+ export function extractDescription(resultItem) {
81
+ const descriptionElement = resultItem.find('.result-description');
82
+ return descriptionElement.text().trim();
83
+ }
84
+ /**
85
+ * Extract framework information
86
+ */
87
+ export function extractFramework(resultItem, url) {
88
+ // Try to extract from link text
89
+ const linkText = resultItem.find('.result-link').text().trim();
90
+ const frameworkMatch = linkText.match(/^([A-Z][a-zA-Z]+(?:\s+[A-Z][a-zA-Z]+)*)\s+[>›]/);
91
+ if (frameworkMatch) {
92
+ return frameworkMatch[1];
93
+ }
94
+ // Try to extract from URL
95
+ const urlMatch = url.match(/\/documentation\/([^\/]+)/);
96
+ if (urlMatch) {
97
+ const framework = urlMatch[1];
98
+ // Convert underscore to space and capitalize
99
+ return framework.split('_')
100
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
101
+ .join(' ');
102
+ }
103
+ return undefined;
104
+ }
105
+ /**
106
+ * Extract beta status
107
+ */
108
+ export function extractBetaStatus(resultItem) {
109
+ const titleText = resultItem.find('.result-title').text();
110
+ const descriptionText = resultItem.find('.result-description').text();
111
+ return titleText.includes('Beta') || descriptionText.includes('Beta');
112
+ }
113
+ /**
114
+ * Parse a single search result
115
+ */
116
+ export function parseSearchResult(element, filterType) {
117
+ const resultType = extractResultType(element);
118
+ if (!isResultTypeSupported(resultType, filterType)) {
119
+ return null;
120
+ }
121
+ const { title, url } = extractTitleAndUrl(element);
122
+ if (!isUrlSupported(url)) {
123
+ return null;
124
+ }
125
+ const description = extractDescription(element);
126
+ const framework = extractFramework(element, url);
127
+ const beta = extractBetaStatus(element);
128
+ return {
129
+ title,
130
+ url,
131
+ type: resultType,
132
+ description,
133
+ framework,
134
+ beta,
135
+ };
136
+ }
137
+ //# sourceMappingURL=search-result-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-result-parser.js","sourceRoot":"","sources":["../../src/tools/search-result-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Tool Selection Guide for Apple Docs MCP
3
+ *
4
+ * This guide helps AI assistants choose the right tool for each task
5
+ * and understand tool relationships and best practices.
6
+ */
7
+ /**
8
+ * Tool Categories and Primary Use Cases
9
+ */
10
+ export declare const TOOL_CATEGORIES: {
11
+ /**
12
+ * Search and Discovery Tools
13
+ * Use these to find information
14
+ */
15
+ SEARCH: {
16
+ tools: string[];
17
+ description: string;
18
+ whenToUse: string[];
19
+ };
20
+ /**
21
+ * Browse and Explore Tools
22
+ * Use these to discover what's available
23
+ */
24
+ BROWSE: {
25
+ tools: string[];
26
+ description: string;
27
+ whenToUse: string[];
28
+ };
29
+ /**
30
+ * Deep Dive Tools
31
+ * Use these to get detailed information
32
+ */
33
+ DETAILS: {
34
+ tools: string[];
35
+ description: string;
36
+ whenToUse: string[];
37
+ };
38
+ /**
39
+ * Analysis Tools
40
+ * Use these to understand relationships and compatibility
41
+ */
42
+ ANALYSIS: {
43
+ tools: string[];
44
+ description: string;
45
+ whenToUse: string[];
46
+ };
47
+ /**
48
+ * Stay Current Tools
49
+ * Use these to track updates and changes
50
+ */
51
+ UPDATES: {
52
+ tools: string[];
53
+ description: string;
54
+ whenToUse: string[];
55
+ };
56
+ };
57
+ /**
58
+ * Recommended Tool Workflows
59
+ */
60
+ export declare const TOOL_WORKFLOWS: {
61
+ /**
62
+ * Learning a New Framework
63
+ */
64
+ LEARN_FRAMEWORK: {
65
+ steps: {
66
+ tool: string;
67
+ purpose: string;
68
+ }[];
69
+ };
70
+ /**
71
+ * Understanding an API
72
+ */
73
+ UNDERSTAND_API: {
74
+ steps: {
75
+ tool: string;
76
+ purpose: string;
77
+ }[];
78
+ };
79
+ /**
80
+ * Finding Code Examples
81
+ */
82
+ FIND_EXAMPLES: {
83
+ steps: {
84
+ tool: string;
85
+ purpose: string;
86
+ }[];
87
+ };
88
+ /**
89
+ * WWDC Content Discovery
90
+ */
91
+ WWDC_DISCOVERY: {
92
+ steps: {
93
+ tool: string;
94
+ purpose: string;
95
+ }[];
96
+ };
97
+ };
98
+ /**
99
+ * Tool Selection Decision Tree
100
+ */
101
+ export declare function selectToolForQuery(query: string): string[];
102
+ /**
103
+ * Common Tool Combinations
104
+ */
105
+ export declare const TOOL_COMBINATIONS: {
106
+ SEARCH_AND_READ: string[];
107
+ FRAMEWORK_EXPLORE: string[];
108
+ WWDC_EXPLORE: string[];
109
+ API_ANALYSIS: string[];
110
+ CODE_EXAMPLES: string[];
111
+ };
112
+ /**
113
+ * Tool Usage Tips
114
+ */
115
+ export declare const USAGE_TIPS: {
116
+ PERFORMANCE: string[];
117
+ ACCURACY: string[];
118
+ EFFICIENCY: string[];
119
+ };
120
+ /**
121
+ * Handle get_tool_guide request
122
+ */
123
+ export declare function handleGetToolGuide(task: string): string;
124
+ //# sourceMappingURL=tools-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-guide.d.ts","sourceRoot":"","sources":["../../src/tools/tools-guide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;;OAGG;;;;;;IAWH;;;OAGG;;;;;;IAWH;;;OAGG;;;;;;IAWH;;;OAGG;;;;;;IAWH;;;OAGG;;;;;;CAUJ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;;;;;;;IAWH;;OAEG;;;;;;;IAWH;;OAEG;;;;;;;IAUH;;OAEG;;;;;;;CAUJ,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA2C1D;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;CAe7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU;;;;CAuBtB,CAAC;AAqKF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiCvD"}