@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.
- package/LICENSE +21 -0
- package/README.md +560 -0
- package/dist/constants/browser-headers.d.ts +48 -0
- package/dist/constants/browser-headers.d.ts.map +1 -0
- package/dist/constants/browser-headers.js +166 -0
- package/dist/constants/browser-headers.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +215 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/analyze-api.schema.d.ts +42 -0
- package/dist/schemas/analyze-api.schema.d.ts.map +1 -0
- package/dist/schemas/analyze-api.schema.js +23 -0
- package/dist/schemas/analyze-api.schema.js.map +1 -0
- package/dist/schemas/apple-docs.schema.d.ts +18 -0
- package/dist/schemas/apple-docs.schema.d.ts.map +1 -0
- package/dist/schemas/apple-docs.schema.js +10 -0
- package/dist/schemas/apple-docs.schema.js.map +1 -0
- package/dist/schemas/doc-content.schema.d.ts +24 -0
- package/dist/schemas/doc-content.schema.d.ts.map +1 -0
- package/dist/schemas/doc-content.schema.js +10 -0
- package/dist/schemas/doc-content.schema.js.map +1 -0
- package/dist/schemas/documentation-updates.schema.d.ts +27 -0
- package/dist/schemas/documentation-updates.schema.d.ts.map +1 -0
- package/dist/schemas/documentation-updates.schema.js +12 -0
- package/dist/schemas/documentation-updates.schema.js.map +1 -0
- package/dist/schemas/framework-symbols.schema.d.ts +24 -0
- package/dist/schemas/framework-symbols.schema.d.ts.map +1 -0
- package/dist/schemas/framework-symbols.schema.js +11 -0
- package/dist/schemas/framework-symbols.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +15 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +15 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/platform-compatibility.schema.d.ts +18 -0
- package/dist/schemas/platform-compatibility.schema.d.ts.map +1 -0
- package/dist/schemas/platform-compatibility.schema.js +8 -0
- package/dist/schemas/platform-compatibility.schema.js.map +1 -0
- package/dist/schemas/references.schema.d.ts +18 -0
- package/dist/schemas/references.schema.d.ts.map +1 -0
- package/dist/schemas/references.schema.js +9 -0
- package/dist/schemas/references.schema.js.map +1 -0
- package/dist/schemas/related-apis.schema.d.ts +21 -0
- package/dist/schemas/related-apis.schema.d.ts.map +1 -0
- package/dist/schemas/related-apis.schema.js +9 -0
- package/dist/schemas/related-apis.schema.js.map +1 -0
- package/dist/schemas/sample-code.schema.d.ts +21 -0
- package/dist/schemas/sample-code.schema.d.ts.map +1 -0
- package/dist/schemas/sample-code.schema.js +10 -0
- package/dist/schemas/sample-code.schema.js.map +1 -0
- package/dist/schemas/search.schema.d.ts +15 -0
- package/dist/schemas/search.schema.d.ts.map +1 -0
- package/dist/schemas/search.schema.js +8 -0
- package/dist/schemas/search.schema.js.map +1 -0
- package/dist/schemas/similar-apis.schema.d.ts +21 -0
- package/dist/schemas/similar-apis.schema.d.ts.map +1 -0
- package/dist/schemas/similar-apis.schema.js +9 -0
- package/dist/schemas/similar-apis.schema.js.map +1 -0
- package/dist/schemas/technologies.schema.d.ts +21 -0
- package/dist/schemas/technologies.schema.d.ts.map +1 -0
- package/dist/schemas/technologies.schema.js +10 -0
- package/dist/schemas/technologies.schema.js.map +1 -0
- package/dist/schemas/technology-overviews.schema.d.ts +24 -0
- package/dist/schemas/technology-overviews.schema.d.ts.map +1 -0
- package/dist/schemas/technology-overviews.schema.js +11 -0
- package/dist/schemas/technology-overviews.schema.js.map +1 -0
- package/dist/schemas/wwdc.schemas.d.ts +208 -0
- package/dist/schemas/wwdc.schemas.d.ts.map +1 -0
- package/dist/schemas/wwdc.schemas.js +97 -0
- package/dist/schemas/wwdc.schemas.js.map +1 -0
- package/dist/tools/definitions.d.ts +10 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +690 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/doc-fetcher.d.ts +19 -0
- package/dist/tools/doc-fetcher.d.ts.map +1 -0
- package/dist/tools/doc-fetcher.js +487 -0
- package/dist/tools/doc-fetcher.js.map +1 -0
- package/dist/tools/doc-formatter.d.ts +69 -0
- package/dist/tools/doc-formatter.d.ts.map +1 -0
- package/dist/tools/doc-formatter.js +208 -0
- package/dist/tools/doc-formatter.js.map +1 -0
- package/dist/tools/find-similar-apis.d.ts +5 -0
- package/dist/tools/find-similar-apis.d.ts.map +1 -0
- package/dist/tools/find-similar-apis.js +275 -0
- package/dist/tools/find-similar-apis.js.map +1 -0
- package/dist/tools/get-documentation-updates.d.ts +5 -0
- package/dist/tools/get-documentation-updates.d.ts.map +1 -0
- package/dist/tools/get-documentation-updates.js +244 -0
- package/dist/tools/get-documentation-updates.js.map +1 -0
- package/dist/tools/get-platform-compatibility.d.ts +5 -0
- package/dist/tools/get-platform-compatibility.d.ts.map +1 -0
- package/dist/tools/get-platform-compatibility.js +205 -0
- package/dist/tools/get-platform-compatibility.js.map +1 -0
- package/dist/tools/get-related-apis.d.ts +5 -0
- package/dist/tools/get-related-apis.d.ts.map +1 -0
- package/dist/tools/get-related-apis.js +155 -0
- package/dist/tools/get-related-apis.js.map +1 -0
- package/dist/tools/get-sample-code.d.ts +5 -0
- package/dist/tools/get-sample-code.d.ts.map +1 -0
- package/dist/tools/get-sample-code.js +375 -0
- package/dist/tools/get-sample-code.js.map +1 -0
- package/dist/tools/get-technology-overviews.d.ts +5 -0
- package/dist/tools/get-technology-overviews.d.ts.map +1 -0
- package/dist/tools/get-technology-overviews.js +306 -0
- package/dist/tools/get-technology-overviews.js.map +1 -0
- package/dist/tools/handlers.d.ts +29 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +350 -0
- package/dist/tools/handlers.js.map +1 -0
- package/dist/tools/list-technologies.d.ts +5 -0
- package/dist/tools/list-technologies.d.ts.map +1 -0
- package/dist/tools/list-technologies.js +165 -0
- package/dist/tools/list-technologies.js.map +1 -0
- package/dist/tools/resolve-references-batch.d.ts +5 -0
- package/dist/tools/resolve-references-batch.d.ts.map +1 -0
- package/dist/tools/resolve-references-batch.js +199 -0
- package/dist/tools/resolve-references-batch.js.map +1 -0
- package/dist/tools/search-framework-symbols.d.ts +7 -0
- package/dist/tools/search-framework-symbols.d.ts.map +1 -0
- package/dist/tools/search-framework-symbols.js +235 -0
- package/dist/tools/search-framework-symbols.js.map +1 -0
- package/dist/tools/search-parser.d.ts +15 -0
- package/dist/tools/search-parser.d.ts.map +1 -0
- package/dist/tools/search-parser.js +188 -0
- package/dist/tools/search-parser.js.map +1 -0
- package/dist/tools/search-result-parser.d.ts +52 -0
- package/dist/tools/search-result-parser.d.ts.map +1 -0
- package/dist/tools/search-result-parser.js +137 -0
- package/dist/tools/search-result-parser.js.map +1 -0
- package/dist/tools/tools-guide.d.ts +124 -0
- package/dist/tools/tools-guide.d.ts.map +1 -0
- package/dist/tools/tools-guide.js +389 -0
- package/dist/tools/tools-guide.js.map +1 -0
- package/dist/tools/wwdc/content-extractor.d.ts +9 -0
- package/dist/tools/wwdc/content-extractor.d.ts.map +1 -0
- package/dist/tools/wwdc/content-extractor.js +520 -0
- package/dist/tools/wwdc/content-extractor.js.map +1 -0
- package/dist/tools/wwdc/topics-extractor.d.ts +32 -0
- package/dist/tools/wwdc/topics-extractor.d.ts.map +1 -0
- package/dist/tools/wwdc/topics-extractor.js +146 -0
- package/dist/tools/wwdc/topics-extractor.js.map +1 -0
- package/dist/tools/wwdc/video-list-extractor.d.ts +13 -0
- package/dist/tools/wwdc/video-list-extractor.d.ts.map +1 -0
- package/dist/tools/wwdc/video-list-extractor.js +238 -0
- package/dist/tools/wwdc/video-list-extractor.js.map +1 -0
- package/dist/tools/wwdc/wwdc-handlers.d.ts +32 -0
- package/dist/tools/wwdc/wwdc-handlers.d.ts.map +1 -0
- package/dist/tools/wwdc/wwdc-handlers.js +791 -0
- package/dist/tools/wwdc/wwdc-handlers.js.map +1 -0
- package/dist/types/apple-docs.d.ts +112 -0
- package/dist/types/apple-docs.d.ts.map +1 -0
- package/dist/types/apple-docs.js +5 -0
- package/dist/types/apple-docs.js.map +1 -0
- package/dist/types/cache.d.ts +28 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +5 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/content-sections.d.ts +37 -0
- package/dist/types/content-sections.d.ts.map +1 -0
- package/dist/types/content-sections.js +5 -0
- package/dist/types/content-sections.js.map +1 -0
- package/dist/types/error.d.ts +39 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +21 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/headers.d.ts +95 -0
- package/dist/types/headers.d.ts.map +1 -0
- package/dist/types/headers.js +5 -0
- package/dist/types/headers.js.map +1 -0
- package/dist/types/http.d.ts +31 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +5 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/search.d.ts +62 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +5 -0
- package/dist/types/search.js.map +1 -0
- package/dist/types/sections.d.ts +64 -0
- package/dist/types/sections.d.ts.map +1 -0
- package/dist/types/sections.js +5 -0
- package/dist/types/sections.js.map +1 -0
- package/dist/types/tools/platform.d.ts +33 -0
- package/dist/types/tools/platform.d.ts.map +1 -0
- package/dist/types/tools/platform.js +5 -0
- package/dist/types/tools/platform.js.map +1 -0
- package/dist/types/tools/sample-code.d.ts +23 -0
- package/dist/types/tools/sample-code.d.ts.map +1 -0
- package/dist/types/tools/sample-code.js +5 -0
- package/dist/types/tools/sample-code.js.map +1 -0
- package/dist/types/tools/technology.d.ts +18 -0
- package/dist/types/tools/technology.d.ts.map +1 -0
- package/dist/types/tools/technology.js +5 -0
- package/dist/types/tools/technology.js.map +1 -0
- package/dist/types/tools/updates.d.ts +23 -0
- package/dist/types/tools/updates.d.ts.map +1 -0
- package/dist/types/tools/updates.js +5 -0
- package/dist/types/tools/updates.js.map +1 -0
- package/dist/types/wwdc.d.ts +200 -0
- package/dist/types/wwdc.d.ts.map +1 -0
- package/dist/types/wwdc.js +5 -0
- package/dist/types/wwdc.js.map +1 -0
- package/dist/utils/cache-warmer.d.ts +22 -0
- package/dist/utils/cache-warmer.d.ts.map +1 -0
- package/dist/utils/cache-warmer.js +115 -0
- package/dist/utils/cache-warmer.js.map +1 -0
- package/dist/utils/cache.d.ts +109 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +302 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/constants.d.ts +178 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +266 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/error-handler.d.ts +80 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +437 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/framework-mapper.d.ts +84 -0
- package/dist/utils/framework-mapper.d.ts.map +1 -0
- package/dist/utils/framework-mapper.js +534 -0
- package/dist/utils/framework-mapper.js.map +1 -0
- package/dist/utils/http-client.d.ts +130 -0
- package/dist/utils/http-client.d.ts.map +1 -0
- package/dist/utils/http-client.js +464 -0
- package/dist/utils/http-client.js.map +1 -0
- package/dist/utils/http-headers-generator.d.ts +151 -0
- package/dist/utils/http-headers-generator.d.ts.map +1 -0
- package/dist/utils/http-headers-generator.js +407 -0
- package/dist/utils/http-headers-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +44 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/preloader.d.ts +20 -0
- package/dist/utils/preloader.d.ts.map +1 -0
- package/dist/utils/preloader.js +82 -0
- package/dist/utils/preloader.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +28 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +48 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/topic-mapper.d.ts +18 -0
- package/dist/utils/topic-mapper.d.ts.map +1 -0
- package/dist/utils/topic-mapper.js +182 -0
- package/dist/utils/topic-mapper.js.map +1 -0
- package/dist/utils/url-converter.d.ts +22 -0
- package/dist/utils/url-converter.d.ts.map +1 -0
- package/dist/utils/url-converter.js +70 -0
- package/dist/utils/url-converter.js.map +1 -0
- package/dist/utils/user-agent-pool.d.ts +241 -0
- package/dist/utils/user-agent-pool.d.ts.map +1 -0
- package/dist/utils/user-agent-pool.js +557 -0
- package/dist/utils/user-agent-pool.js.map +1 -0
- package/dist/utils/wwdc-data-source-path.d.ts +9 -0
- package/dist/utils/wwdc-data-source-path.d.ts.map +1 -0
- package/dist/utils/wwdc-data-source-path.js +22 -0
- package/dist/utils/wwdc-data-source-path.js.map +1 -0
- package/dist/utils/wwdc-data-source.d.ts +36 -0
- package/dist/utils/wwdc-data-source.d.ts.map +1 -0
- package/dist/utils/wwdc-data-source.js +133 -0
- package/dist/utils/wwdc-data-source.js.map +1 -0
- 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"}
|