@enokdev/springdocs-mcp 1.2.8 → 1.4.1

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 (112) hide show
  1. package/README.md +83 -40
  2. package/build/config.d.ts +9 -0
  3. package/build/config.d.ts.map +1 -0
  4. package/build/config.js +32 -0
  5. package/build/config.js.map +1 -0
  6. package/build/format.d.ts +6 -0
  7. package/build/format.d.ts.map +1 -0
  8. package/build/format.js +23 -0
  9. package/build/format.js.map +1 -0
  10. package/build/http-server.d.ts +15 -0
  11. package/build/http-server.d.ts.map +1 -0
  12. package/build/http-server.js +131 -0
  13. package/build/http-server.js.map +1 -0
  14. package/build/index.js +182 -68
  15. package/build/index.js.map +1 -1
  16. package/build/prompts.d.ts +23 -0
  17. package/build/prompts.d.ts.map +1 -0
  18. package/build/prompts.js +112 -0
  19. package/build/prompts.js.map +1 -0
  20. package/build/resources.d.ts +31 -0
  21. package/build/resources.d.ts.map +1 -0
  22. package/build/resources.js +66 -0
  23. package/build/resources.js.map +1 -0
  24. package/build/services/advanced-features.d.ts +14 -9
  25. package/build/services/advanced-features.d.ts.map +1 -1
  26. package/build/services/advanced-features.js +205 -195
  27. package/build/services/advanced-features.js.map +1 -1
  28. package/build/services/boot-wiki.d.ts +25 -0
  29. package/build/services/boot-wiki.d.ts.map +1 -0
  30. package/build/services/boot-wiki.js +103 -0
  31. package/build/services/boot-wiki.js.map +1 -0
  32. package/build/services/cache.d.ts +18 -3
  33. package/build/services/cache.d.ts.map +1 -1
  34. package/build/services/cache.js +84 -3
  35. package/build/services/cache.js.map +1 -1
  36. package/build/services/dependency-finder.d.ts +46 -0
  37. package/build/services/dependency-finder.d.ts.map +1 -0
  38. package/build/services/dependency-finder.js +181 -0
  39. package/build/services/dependency-finder.js.map +1 -0
  40. package/build/services/diagnosis.d.ts +46 -0
  41. package/build/services/diagnosis.d.ts.map +1 -0
  42. package/build/services/diagnosis.js +481 -0
  43. package/build/services/diagnosis.js.map +1 -0
  44. package/build/services/guides-list.d.ts +16 -0
  45. package/build/services/guides-list.d.ts.map +1 -0
  46. package/build/services/guides-list.js +45 -0
  47. package/build/services/guides-list.js.map +1 -0
  48. package/build/services/http.d.ts +21 -0
  49. package/build/services/http.d.ts.map +1 -0
  50. package/build/services/http.js +168 -0
  51. package/build/services/http.js.map +1 -0
  52. package/build/services/initializr.d.ts +41 -0
  53. package/build/services/initializr.d.ts.map +1 -0
  54. package/build/services/initializr.js +135 -0
  55. package/build/services/initializr.js.map +1 -0
  56. package/build/services/markdown.d.ts +56 -0
  57. package/build/services/markdown.d.ts.map +1 -0
  58. package/build/services/markdown.js +146 -0
  59. package/build/services/markdown.js.map +1 -0
  60. package/build/services/migration-sources.d.ts +13 -0
  61. package/build/services/migration-sources.d.ts.map +1 -0
  62. package/build/services/migration-sources.js +48 -0
  63. package/build/services/migration-sources.js.map +1 -0
  64. package/build/services/release-notes.d.ts +23 -0
  65. package/build/services/release-notes.d.ts.map +1 -0
  66. package/build/services/release-notes.js +94 -0
  67. package/build/services/release-notes.js.map +1 -0
  68. package/build/services/search-index.d.ts +33 -0
  69. package/build/services/search-index.d.ts.map +1 -0
  70. package/build/services/search-index.js +147 -0
  71. package/build/services/search-index.js.map +1 -0
  72. package/build/services/spring-projects-config.d.ts +26 -33
  73. package/build/services/spring-projects-config.d.ts.map +1 -1
  74. package/build/services/spring-projects-config.js +248 -79
  75. package/build/services/spring-projects-config.js.map +1 -1
  76. package/build/services/springboot-docs-optimized.d.ts +57 -16
  77. package/build/services/springboot-docs-optimized.d.ts.map +1 -1
  78. package/build/services/springboot-docs-optimized.js +315 -197
  79. package/build/services/springboot-docs-optimized.js.map +1 -1
  80. package/build/services/url.d.ts +15 -0
  81. package/build/services/url.d.ts.map +1 -0
  82. package/build/services/url.js +40 -0
  83. package/build/services/url.js.map +1 -0
  84. package/build/tools/index.d.ts +376 -2
  85. package/build/tools/index.d.ts.map +1 -1
  86. package/build/tools/index.js +178 -11
  87. package/build/tools/index.js.map +1 -1
  88. package/build/validation.d.ts +7 -0
  89. package/build/validation.d.ts.map +1 -0
  90. package/build/validation.js +50 -0
  91. package/build/validation.js.map +1 -0
  92. package/build/version.d.ts +3 -0
  93. package/build/version.d.ts.map +1 -0
  94. package/build/version.js +6 -0
  95. package/build/version.js.map +1 -0
  96. package/package.json +6 -6
  97. package/build/debug.d.ts +0 -3
  98. package/build/debug.d.ts.map +0 -1
  99. package/build/debug.js +0 -292
  100. package/build/debug.js.map +0 -1
  101. package/build/services/advanced-features-old.d.ts +0 -45
  102. package/build/services/advanced-features-old.d.ts.map +0 -1
  103. package/build/services/advanced-features-old.js +0 -792
  104. package/build/services/advanced-features-old.js.map +0 -1
  105. package/build/services/springboot-docs-optimized-old.d.ts +0 -55
  106. package/build/services/springboot-docs-optimized-old.d.ts.map +0 -1
  107. package/build/services/springboot-docs-optimized-old.js +0 -588
  108. package/build/services/springboot-docs-optimized-old.js.map +0 -1
  109. package/build/services/springboot-docs.d.ts +0 -65
  110. package/build/services/springboot-docs.d.ts.map +0 -1
  111. package/build/services/springboot-docs.js +0 -708
  112. package/build/services/springboot-docs.js.map +0 -1
@@ -1,25 +1,128 @@
1
- import fetch from 'node-fetch';
2
1
  import * as cheerio from 'cheerio';
3
- import TurndownService from 'turndown';
4
2
  import { CacheService } from './cache.js';
3
+ import { fetchWithRetry, githubRateLimitMessage } from './http.js';
4
+ import { fetchSpringGuidesList } from './guides-list.js';
5
+ import { turndownService, extractContent } from './markdown.js';
6
+ import { absoluteSpringUrl } from './url.js';
7
+ import { springProjectsConfig } from './spring-projects-config.js';
8
+ import { renderDiagnosis } from './diagnosis.js';
9
+ import { filterReleaseBody, normalizeReleaseVersion, isMinorVersion, latestStableOfMinor } from './release-notes.js';
5
10
  /**
6
11
  * Advanced features service for Spring documentation - uses ONLY real Spring documentation APIs
7
12
  * No mock data - everything is fetched from actual Spring documentation sources
8
13
  */
9
14
  export class AdvancedFeaturesService {
10
15
  cache;
11
- turndownService;
12
16
  baseUrl = 'https://docs.spring.io';
13
17
  springProjectsUrl = 'https://spring.io/projects';
14
- springGuideUrl = 'https://spring.io/guides';
15
- REQUEST_TIMEOUT = 10000;
16
- MAX_RETRIES = 3;
17
- constructor() {
18
- this.cache = new CacheService();
19
- this.turndownService = new TurndownService({
20
- headingStyle: 'atx',
21
- codeBlockStyle: 'fenced',
22
- });
18
+ projectsConfig;
19
+ constructor(cache = new CacheService(), projectsConfig = springProjectsConfig) {
20
+ this.cache = cache;
21
+ this.projectsConfig = projectsConfig;
22
+ }
23
+ /**
24
+ * Get the GitHub release notes of a Spring project (a given version or the latest one),
25
+ * optionally filtered on breaking changes, new features or deprecations.
26
+ */
27
+ async getReleaseNotes(project, version, focus = 'all') {
28
+ const config = this.projectsConfig.getProject(project);
29
+ if (!config.githubRepo) {
30
+ throw new Error(`Release notes are not available for ${config.displayName}`);
31
+ }
32
+ // Validate before any network call
33
+ const normalized = normalizeReleaseVersion(version);
34
+ const repo = config.githubRepo;
35
+ const tagPrefix = config.githubTagPrefix ?? '';
36
+ const minor = normalized !== undefined && isMinorVersion(normalized);
37
+ const tag = normalized === undefined || minor ? undefined : `${tagPrefix}${normalized}`;
38
+ const cacheKey = `release:${project}:${normalized ?? 'latest'}`;
39
+ let release = this.cache.get(cacheKey);
40
+ if (!release) {
41
+ let data;
42
+ if (minor) {
43
+ data = await this.findLatestOfMinor(repo, normalized, tagPrefix);
44
+ if (!data) {
45
+ throw new Error(`No release found: ${config.displayName} ${normalized}.x (no stable release of that minor). See https://github.com/${repo}/releases`);
46
+ }
47
+ }
48
+ else {
49
+ const url = tag === undefined
50
+ ? `https://api.github.com/repos/${repo}/releases/latest`
51
+ : `https://api.github.com/repos/${repo}/releases/tags/${encodeURIComponent(tag)}`;
52
+ const response = await this.fetchWithRetry(url);
53
+ if (response.status === 404) {
54
+ throw new Error(tag === undefined
55
+ ? `No release found for ${config.displayName}`
56
+ : `Release not found: ${config.displayName} ${normalized} (tag "${tag}"). See https://github.com/${repo}/releases`);
57
+ }
58
+ this.assertNotRateLimited(response);
59
+ if (!response.ok) {
60
+ throw new Error(`Failed to fetch release data: ${response.status}`);
61
+ }
62
+ data = await response.json();
63
+ }
64
+ release = {
65
+ tag: data.tag_name,
66
+ name: data.name || null,
67
+ publishedAt: data.published_at || null,
68
+ url: data.html_url,
69
+ prerelease: Boolean(data.prerelease),
70
+ body: data.body ?? null,
71
+ };
72
+ // Only successful responses are cached; "latest" and "X.Y" move, so they keep the short TTL
73
+ if (normalized === undefined || minor) {
74
+ this.cache.set(cacheKey, release);
75
+ }
76
+ else {
77
+ this.cache.setLongTerm(cacheKey, release);
78
+ }
79
+ }
80
+ let output = `# ${config.displayName} ${release.name || release.tag}\n\n`;
81
+ output += `**Released:** ${release.publishedAt ? release.publishedAt.slice(0, 10) : 'unknown'}\n`;
82
+ if (release.prerelease)
83
+ output += `**Pre-release:** yes\n`;
84
+ output += `**Release notes:** ${release.url}\n`;
85
+ output += `**Focus:** ${focus}\n\n`;
86
+ const filtered = filterReleaseBody(release.body, focus);
87
+ if (filtered.trim()) {
88
+ const { content, truncated } = extractContent(filtered, 'full');
89
+ output += content;
90
+ if (truncated) {
91
+ output += `\n\n---\n*Release notes truncated at 50,000 characters. Full notes: ${release.url}*`;
92
+ }
93
+ }
94
+ else {
95
+ output += `No ${focus} entries found in these release notes. See the full notes: ${release.url}`;
96
+ }
97
+ return output;
98
+ }
99
+ /** Throws a clear error when GitHub refused the request because of its rate limit. */
100
+ assertNotRateLimited(response) {
101
+ if (response.rateLimit || response.status === 403 || response.status === 429) {
102
+ throw new Error(githubRateLimitMessage(response.rateLimit));
103
+ }
104
+ }
105
+ /** Latest stable release of an "X.Y" minor, paginating the GitHub releases list. */
106
+ async findLatestOfMinor(repo, minor, tagPrefix) {
107
+ const MAX_PAGES = 5;
108
+ let best;
109
+ let seenOlderPage = false;
110
+ for (let page = 1; page <= MAX_PAGES && !seenOlderPage; page++) {
111
+ const response = await this.fetchWithRetry(`https://api.github.com/repos/${repo}/releases?per_page=100&page=${page}`);
112
+ this.assertNotRateLimited(response);
113
+ if (!response.ok) {
114
+ throw new Error(`Failed to fetch release data: ${response.status}`);
115
+ }
116
+ const releases = await response.json();
117
+ if (!Array.isArray(releases) || releases.length === 0)
118
+ break;
119
+ const candidate = latestStableOfMinor(releases, minor, tagPrefix);
120
+ // Once found, a page without any release of that minor means the rest is older
121
+ if (best && !candidate)
122
+ seenOlderPage = true;
123
+ best = latestStableOfMinor(candidate ? [...(best ? [best] : []), candidate] : [], minor, tagPrefix) ?? best;
124
+ }
125
+ return best;
23
126
  }
24
127
  /**
25
128
  * Search across the entire Spring ecosystem using real APIs
@@ -36,83 +139,44 @@ export class AdvancedFeaturesService {
36
139
  categories: {}
37
140
  };
38
141
  try {
39
- if (scope === 'all' || scope === 'projects') {
40
- results.categories.projects = await this.searchProjects(query, limit);
41
- }
42
- if (scope === 'all' || scope === 'guides') {
43
- results.categories.guides = await this.searchGuides(query, limit);
44
- }
45
- if (scope === 'all' || scope === 'docs') {
46
- results.categories.documentation = await this.searchDocumentation(query, limit);
47
- }
48
- if (scope === 'all' || scope === 'api') {
49
- results.categories.api = await this.searchAPI(query, limit);
50
- }
51
- if (scope === 'all' || scope === 'ai') {
52
- results.categories.ai = await this.searchSpringAI(query, limit);
142
+ const searches = [
143
+ ['projects', 'projects', () => this.searchProjects(query, limit)],
144
+ ['guides', 'guides', () => this.searchGuides(query, limit)],
145
+ ['docs', 'documentation', () => this.searchDocumentation(query, limit)],
146
+ ['api', 'api', () => this.searchAPI(query, limit)],
147
+ ['ai', 'ai', () => this.searchSpringAI(query, limit)],
148
+ ];
149
+ const selected = searches.filter(([name]) => scope === 'all' || scope === name);
150
+ // Run the searches concurrently; a failed one is reported, never cached
151
+ const settled = await Promise.allSettled(selected.map(([, , run]) => run()));
152
+ const unavailable = [];
153
+ selected.forEach(([, category], index) => {
154
+ const outcome = settled[index];
155
+ if (outcome.status === 'fulfilled') {
156
+ results.categories[category] = outcome.value;
157
+ }
158
+ else {
159
+ results.categories[category] = [];
160
+ unavailable.push(category);
161
+ console.error(`Ecosystem source "${category}" failed:`, outcome.reason instanceof Error ? outcome.reason.message : outcome.reason);
162
+ }
163
+ });
164
+ if (selected.length > 0 && unavailable.length === selected.length) {
165
+ throw new Error(`Unable to search the Spring ecosystem: all sources failed (${unavailable.join(', ')})`);
53
166
  }
167
+ results.unavailable = unavailable;
54
168
  results.totalResults = Object.values(results.categories)
55
169
  .reduce((total, category) => total + (category?.length || 0), 0);
56
170
  const formattedResult = this.formatEcosystemResults(results);
57
- this.cache.set(cacheKey, formattedResult);
171
+ if (unavailable.length === 0) {
172
+ this.cache.set(cacheKey, formattedResult);
173
+ }
58
174
  return formattedResult;
59
175
  }
60
176
  catch (error) {
61
177
  console.error('Error searching ecosystem:', error);
62
- return `# Spring Ecosystem Search Results\n\nError searching for "${query}": ${error instanceof Error ? error.message : 'Unknown error'}`;
63
- }
64
- }
65
- /**
66
- * Extract content intelligently - same as in SpringBootDocsServiceOptimized
67
- */
68
- extractIntelligentContent(markdown, detailLevel = 'medium') {
69
- const limits = {
70
- 'summary': 1500,
71
- 'medium': 4000,
72
- 'full': 8000
73
- };
74
- const maxLength = limits[detailLevel] || limits['medium'];
75
- if (markdown.length <= maxLength)
76
- return markdown;
77
- const lines = markdown.split('\n');
78
- let result = '';
79
- let inCodeBlock = false;
80
- let codeBlockContent = '';
81
- let currentLength = 0;
82
- for (const line of lines) {
83
- if (line.trim().startsWith('```')) {
84
- inCodeBlock = !inCodeBlock;
85
- if (!inCodeBlock && codeBlockContent) {
86
- const blockToAdd = codeBlockContent + line + '\n';
87
- if (currentLength + blockToAdd.length <= maxLength * 0.8) {
88
- result += blockToAdd;
89
- currentLength += blockToAdd.length;
90
- }
91
- codeBlockContent = '';
92
- }
93
- else {
94
- codeBlockContent = line + '\n';
95
- }
96
- continue;
97
- }
98
- if (inCodeBlock) {
99
- codeBlockContent += line + '\n';
100
- continue;
101
- }
102
- if (line.startsWith('#') || line.startsWith('-') || line.startsWith('*') || line.trim().startsWith('>')) {
103
- if (currentLength + line.length + 1 <= maxLength) {
104
- result += line + '\n';
105
- currentLength += line.length + 1;
106
- }
107
- }
108
- else if (line.trim() && currentLength + line.length + 1 <= maxLength) {
109
- result += line + '\n';
110
- currentLength += line.length + 1;
111
- }
112
- if (currentLength >= maxLength)
113
- break;
178
+ throw error;
114
179
  }
115
- return result.trim();
116
180
  }
117
181
  /**
118
182
  * Get tutorials by fetching from actual Spring Boot guides
@@ -138,52 +202,71 @@ export class AdvancedFeaturesService {
138
202
  if (content.length === 0) {
139
203
  throw new Error('No content found in guide');
140
204
  }
141
- const markdown = this.turndownService.turndown(content.html() || '');
142
- const extractedContent = this.extractIntelligentContent(markdown, detailLevel);
143
- const needsTruncation = markdown.length > extractedContent.length;
144
- const result = `# ${guide.title}\n\n**Level:** ${level}\n**Detail Level:** ${detailLevel}\n**Source:** ${guide.url}\n\n${extractedContent}${needsTruncation ? '\n\n---\n*Content truncated. Use detail_level="full" for complete tutorial or visit the link above.*' : ''}`;
205
+ const markdown = turndownService.turndown(content.html() || '');
206
+ const { content: extractedContent, truncated } = extractContent(markdown, detailLevel);
207
+ const result = `# ${guide.title}\n\n**Level:** ${level}\n**Detail Level:** ${detailLevel}\n**Source:** ${guide.url}\n\n${extractedContent}${truncated ? (detailLevel === 'full' ? '\n\n---\n*Content truncated at 50,000 characters even in full mode. Visit the link above for the complete tutorial.*' : '\n\n---\n*Content truncated. Use detail_level="full" for complete tutorial or visit the link above.*') : ''}`;
145
208
  this.cache.set(cacheKey, result);
146
209
  return result;
147
210
  }
148
211
  catch (error) {
149
212
  console.error('Error fetching tutorial:', error);
150
- return `# Tutorial Error\n\nUnable to fetch tutorial for "${topic}": ${error instanceof Error ? error.message : 'Unknown error'}`;
213
+ throw error;
151
214
  }
152
215
  }
153
216
  /**
154
217
  * Compare Spring Boot versions using real release notes
155
218
  */
156
219
  async compareVersions(version1, version2, focus = 'all') {
157
- const cacheKey = `versions:${version1}:${version2}:${focus}`;
220
+ const cacheKey = 'versions:' + JSON.stringify([version1, version2, focus]);
158
221
  const cached = this.cache.get(cacheKey);
159
222
  if (cached)
160
223
  return cached;
161
224
  try {
162
- // Fetch release notes from GitHub
163
- const releaseNotesUrl = `https://api.github.com/repos/spring-projects/spring-boot/releases`;
164
- const response = await this.fetchWithRetry(releaseNotesUrl);
165
- if (!response.ok) {
166
- throw new Error(`Failed to fetch release data: ${response.status}`);
225
+ // Fetch release notes from GitHub, paginating until both exact tags are found
226
+ const MAX_PAGES = 5;
227
+ const matches = (r, version) => r.tag_name === version || r.tag_name === `v${version}`;
228
+ let release1;
229
+ let release2;
230
+ for (let page = 1; page <= MAX_PAGES && !(release1 && release2); page++) {
231
+ const releaseNotesUrl = `https://api.github.com/repos/spring-projects/spring-boot/releases?per_page=100&page=${page}`;
232
+ const response = await this.fetchWithRetry(releaseNotesUrl);
233
+ this.assertNotRateLimited(response);
234
+ if (!response.ok) {
235
+ throw new Error(`Failed to fetch release data: ${response.status}`);
236
+ }
237
+ const releases = await response.json();
238
+ if (!Array.isArray(releases) || releases.length === 0)
239
+ break;
240
+ release1 = release1 ?? releases.find((r) => matches(r, version1));
241
+ release2 = release2 ?? releases.find((r) => matches(r, version2));
167
242
  }
168
- const releases = await response.json();
169
- const release1 = releases.find((r) => r.tag_name.includes(version1));
170
- const release2 = releases.find((r) => r.tag_name.includes(version2));
171
243
  if (!release1 || !release2) {
172
- return `# Version Comparison: ${version1} vs ${version2}\n\nUnable to find release information for one or both versions.\n\nAvailable versions can be found at: https://github.com/spring-projects/spring-boot/releases`;
244
+ return `# Version Comparison: ${version1} vs ${version2}\n\nUnable to find release information for one or both versions. Versions must match a release tag exactly, in the X.Y.Z format (e.g. 3.5.0, not 3.5).\n\nAvailable versions can be found at: https://github.com/spring-projects/spring-boot/releases`;
173
245
  }
246
+ const excerpt = (release) => {
247
+ const body = filterReleaseBody(release.body, focus);
248
+ if (!body.trim()) {
249
+ return focus === 'all'
250
+ ? ''
251
+ : `No ${focus} entries found in these release notes. See the full notes: ${release.html_url}`;
252
+ }
253
+ return `${body.substring(0, 1000)}...`;
254
+ };
174
255
  const result = `# Spring Boot Version Comparison: ${version1} vs ${version2}
175
256
 
257
+ **Focus:** ${focus}
258
+
176
259
  ## Version ${version1}
177
260
  **Released:** ${new Date(release1.published_at).toLocaleDateString()}
178
261
  **Release Notes:** ${release1.html_url}
179
262
 
180
- ${release1.body.substring(0, 1000)}...
263
+ ${excerpt(release1)}
181
264
 
182
265
  ## Version ${version2}
183
266
  **Released:** ${new Date(release2.published_at).toLocaleDateString()}
184
267
  **Release Notes:** ${release2.html_url}
185
268
 
186
- ${release2.body.substring(0, 1000)}...
269
+ ${excerpt(release2)}
187
270
 
188
271
  ## Migration Recommendations
189
272
  1. Review the full release notes at the URLs above
@@ -197,7 +280,7 @@ For detailed migration guides, visit: https://github.com/spring-projects/spring-
197
280
  }
198
281
  catch (error) {
199
282
  console.error('Error comparing versions:', error);
200
- return `# Version Comparison Error\n\nUnable to compare versions ${version1} and ${version2}: ${error instanceof Error ? error.message : 'Unknown error'}`;
283
+ throw error;
201
284
  }
202
285
  }
203
286
  /**
@@ -237,7 +320,7 @@ For detailed migration guides, visit: https://github.com/spring-projects/spring-
237
320
  throw new Error('No content found in documentation');
238
321
  }
239
322
  // Convert to markdown and format
240
- const markdown = this.turndownService.turndown(content.html() || '');
323
+ const markdown = turndownService.turndown(content.html() || '');
241
324
  const result = `# Spring Boot ${category.charAt(0).toUpperCase() + category.slice(1)} Best Practices
242
325
 
243
326
  **Experience Level:** ${experienceLevel}
@@ -251,52 +334,15 @@ For complete documentation, visit: ${docUrl}`;
251
334
  }
252
335
  catch (error) {
253
336
  console.error('Error fetching best practices:', error);
254
- return `# Best Practices Error\n\nUnable to fetch best practices for "${category}": ${error instanceof Error ? error.message : 'Unknown error'}`;
337
+ throw error;
255
338
  }
256
339
  }
257
340
  /**
258
341
  * Diagnose issues using Spring Boot documentation
259
342
  */
260
343
  async diagnoseIssues(errorMessage, component, stackTrace) {
261
- const cacheKey = `diagnosis:${errorMessage.substring(0, 50)}`;
262
- const cached = this.cache.get(cacheKey);
263
- if (cached)
264
- return cached;
265
- try {
266
- // Search for the error in Spring Boot documentation
267
- const searchQuery = errorMessage.split(' ').slice(0, 3).join(' ');
268
- const docs = await this.searchDocumentation(searchQuery, 3);
269
- let result = `# Spring Boot Issue Diagnosis\n\n**Error:** ${errorMessage}\n`;
270
- if (component) {
271
- result += `**Component:** ${component}\n`;
272
- }
273
- result += `\n## Relevant Documentation\n\n`;
274
- if (docs.length > 0) {
275
- docs.forEach((doc, index) => {
276
- result += `${index + 1}. **${doc.title}**\n ${doc.url}\n\n`;
277
- });
278
- }
279
- else {
280
- result += `No specific documentation found for this error.\n\n`;
281
- }
282
- result += `## General Troubleshooting Steps\n\n`;
283
- result += `1. Check the Spring Boot documentation: https://docs.spring.io/spring-boot/docs/current/reference/html/\n`;
284
- result += `2. Search Spring Boot issues: https://github.com/spring-projects/spring-boot/issues\n`;
285
- result += `3. Enable debug logging: \`logging.level.org.springframework=DEBUG\`\n`;
286
- result += `4. Check actuator health endpoint: \`/actuator/health\`\n\n`;
287
- if (stackTrace) {
288
- result += `## Stack Trace Analysis\n\nFor detailed stack trace analysis, consider:\n`;
289
- result += `- Looking for the root cause in the stack trace\n`;
290
- result += `- Checking for configuration issues\n`;
291
- result += `- Verifying dependency versions\n\n`;
292
- }
293
- this.cache.set(cacheKey, result);
294
- return result;
295
- }
296
- catch (error) {
297
- console.error('Error diagnosing issue:', error);
298
- return `# Diagnosis Error\n\nUnable to diagnose issue: ${error instanceof Error ? error.message : 'Unknown error'}`;
299
- }
344
+ // Local analysis: no network call, bounded and deterministic
345
+ return renderDiagnosis({ errorMessage, component, stackTrace });
300
346
  }
301
347
  // Real implementation methods (no mock data)
302
348
  async searchProjects(query, limit) {
@@ -312,9 +358,8 @@ For complete documentation, visit: ${docUrl}`;
312
358
  const $project = $(element);
313
359
  const name = $project.find('h2, h3, .title, .project-title, .card-title').first().text().trim();
314
360
  const description = $project.find('p, .description, .summary, .card-text').first().text().trim();
315
- const link = $project.find('a').first().attr('href');
316
- if (name && description) {
317
- const url = link?.startsWith('http') ? link : `https://spring.io${link}`;
361
+ const url = absoluteSpringUrl($project.find('a').first().attr('href'));
362
+ if (name && description && url) {
318
363
  if (name.toLowerCase().includes(query.toLowerCase()) ||
319
364
  description.toLowerCase().includes(query.toLowerCase())) {
320
365
  projects.push({ name, description, url, type: 'project' });
@@ -325,37 +370,23 @@ For complete documentation, visit: ${docUrl}`;
325
370
  }
326
371
  catch (error) {
327
372
  console.error('Error searching projects:', error);
328
- return [];
373
+ throw error;
329
374
  }
330
375
  }
331
376
  async searchGuides(query, limit) {
332
377
  try {
333
- const response = await this.fetchWithRetry(this.springGuideUrl);
334
- if (!response.ok) {
335
- throw new Error('Failed to fetch Spring guides');
336
- }
337
- const html = await response.text();
338
- const $ = cheerio.load(html);
339
- const guides = [];
340
- $('.guide-item, .card, .guide-card, .list-item').each((index, element) => {
341
- const $guide = $(element);
342
- const title = $guide.find('h2, h3, .title, .guide-title, .card-title, a').first().text().trim();
343
- const description = $guide.find('p, .description, .summary, .card-text').first().text().trim();
344
- const link = $guide.find('a').first().attr('href');
345
- const type = $guide.find('.badge, .label, .type').first().text().trim() || 'Guide';
346
- if (title) {
347
- const url = link?.startsWith('http') ? link : `https://spring.io${link}`;
348
- if (title.toLowerCase().includes(query.toLowerCase()) ||
349
- description.toLowerCase().includes(query.toLowerCase())) {
350
- guides.push({ title, description: description || 'Spring Boot guide', url, type });
351
- }
352
- }
353
- });
354
- return guides.slice(0, limit);
378
+ // The /guides HTML is rendered client-side (no links): use the shared page-data list
379
+ const guides = await fetchSpringGuidesList();
380
+ const needle = query.toLowerCase();
381
+ return guides
382
+ .filter(guide => guide.title.toLowerCase().includes(needle) ||
383
+ guide.description.toLowerCase().includes(needle))
384
+ .map(guide => ({ title: guide.title, description: guide.description, url: guide.url, type: 'Guide' }))
385
+ .slice(0, limit);
355
386
  }
356
387
  catch (error) {
357
388
  console.error('Error searching guides:', error);
358
- return [];
389
+ throw error;
359
390
  }
360
391
  }
361
392
  async searchDocumentation(query, limit) {
@@ -381,7 +412,7 @@ For complete documentation, visit: ${docUrl}`;
381
412
  }
382
413
  catch (error) {
383
414
  console.error('Error searching documentation:', error);
384
- return [];
415
+ throw error;
385
416
  }
386
417
  }
387
418
  /**
@@ -393,8 +424,7 @@ For complete documentation, visit: ${docUrl}`;
393
424
  const aiDocsUrl = 'https://docs.spring.io/spring-ai/reference/';
394
425
  const response = await this.fetchWithRetry(aiDocsUrl);
395
426
  if (!response.ok) {
396
- console.error('Failed to fetch Spring AI documentation');
397
- return [];
427
+ throw new Error('Failed to fetch Spring AI documentation');
398
428
  }
399
429
  const html = await response.text();
400
430
  const $ = cheerio.load(html);
@@ -433,7 +463,7 @@ For complete documentation, visit: ${docUrl}`;
433
463
  }
434
464
  catch (error) {
435
465
  console.error('Error searching Spring AI documentation:', error);
436
- return [];
466
+ throw error;
437
467
  }
438
468
  }
439
469
  async searchAPI(query, limit) {
@@ -499,33 +529,13 @@ For complete documentation, visit: ${docUrl}`;
499
529
  if (results.totalResults === 0) {
500
530
  output += `No results found for "${results.query}" in scope "${results.scope}".`;
501
531
  }
532
+ if (results.unavailable?.length > 0) {
533
+ output += `\n\n⚠️ Some sources were unavailable: ${results.unavailable.join(', ')}. Results may be incomplete.`;
534
+ }
502
535
  return output;
503
536
  }
504
- async fetchWithRetry(url, timeout = this.REQUEST_TIMEOUT, retries = this.MAX_RETRIES) {
505
- for (let attempt = 1; attempt <= retries; attempt++) {
506
- const controller = new AbortController();
507
- const timeoutId = setTimeout(() => controller.abort(), timeout);
508
- try {
509
- const response = await fetch(url, {
510
- signal: controller.signal,
511
- headers: {
512
- 'User-Agent': 'Spring-Docs-MCP/1.2.4',
513
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
514
- 'Accept-Language': 'en-US,en;q=0.9'
515
- }
516
- });
517
- clearTimeout(timeoutId);
518
- return response;
519
- }
520
- catch (error) {
521
- clearTimeout(timeoutId);
522
- if (attempt === retries)
523
- throw error;
524
- console.error(`Retry ${attempt}/${retries} for ${url}:`, error instanceof Error ? error.message : 'Unknown error');
525
- await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
526
- }
527
- }
528
- throw new Error('All retry attempts failed');
537
+ fetchWithRetry(url, timeout, retries) {
538
+ return fetchWithRetry(url, timeout, retries);
529
539
  }
530
540
  }
531
541
  //# sourceMappingURL=advanced-features.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"advanced-features.js","sourceRoot":"","sources":["../../src/services/advanced-features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advanced-features.js","sourceRoot":"","sources":["../../src/services/advanced-features.ts"],"names":[],"mappings":"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"}