@enokdev/springdocs-mcp 1.2.7 → 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 +108 -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 +184 -69
  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 +19 -9
  25. package/build/services/advanced-features.d.ts.map +1 -1
  26. package/build/services/advanced-features.js +266 -191
  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 +98 -0
  73. package/build/services/spring-projects-config.d.ts.map +1 -0
  74. package/build/services/spring-projects-config.js +397 -0
  75. package/build/services/spring-projects-config.js.map +1 -0
  76. package/build/services/springboot-docs-optimized.d.ts +72 -21
  77. package/build/services/springboot-docs-optimized.d.ts.map +1 -1
  78. package/build/services/springboot-docs-optimized.js +354 -208
  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 +393 -2
  85. package/build/tools/index.d.ts.map +1 -1
  86. package/build/tools/index.js +188 -15
  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 +9 -7
  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
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Spring Projects Configuration Service
3
+ *
4
+ * Central registry for all Spring project metadata, enabling generic multi-project
5
+ * architecture without hardcoding specific projects in service implementations.
6
+ *
7
+ * This configuration-driven approach allows adding new Spring projects (Security,
8
+ * Data, Cloud, etc.) with zero code changes - only configuration updates.
9
+ */
10
+ import { normalizeVersion } from './url.js';
11
+ /**
12
+ * Spring Projects Registry
13
+ *
14
+ * Single source of truth for all supported Spring projects.
15
+ * To add a new Spring project, simply add a new entry here - no code changes required.
16
+ */
17
+ export const SPRING_PROJECTS = new Map([
18
+ [
19
+ 'boot',
20
+ {
21
+ id: 'boot',
22
+ githubRepo: 'spring-projects/spring-boot',
23
+ githubTagPrefix: 'v',
24
+ versionInsertAfter: 'https://docs.spring.io/spring-boot/',
25
+ displayName: 'Spring Boot',
26
+ referenceBaseUrl: 'https://docs.spring.io/spring-boot',
27
+ referenceLayout: 'directory',
28
+ referencePaths: {
29
+ 'deployment': 'how-to/deployment',
30
+ 'native-image': 'reference/packaging/native-image',
31
+ 'application-properties': 'appendix/application-properties'
32
+ },
33
+ hasVersionedDocs: true,
34
+ cacheStrategy: 'long', // Stable releases, cache aggressively
35
+ referenceSections: [
36
+ 'features',
37
+ 'using',
38
+ 'web',
39
+ 'data',
40
+ 'messaging',
41
+ 'io',
42
+ 'actuator',
43
+ 'deployment',
44
+ 'native-image',
45
+ 'testing',
46
+ 'application-properties'
47
+ ]
48
+ }
49
+ ],
50
+ [
51
+ 'ai',
52
+ {
53
+ id: 'ai',
54
+ githubRepo: 'spring-projects/spring-ai',
55
+ githubTagPrefix: 'v',
56
+ versionInsertAfter: 'https://docs.spring.io/spring-ai/reference/',
57
+ displayName: 'Spring AI',
58
+ referenceBaseUrl: 'https://docs.spring.io/spring-ai/reference/api',
59
+ referenceLayout: 'flat',
60
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-ai/reference/1.1/api/chatclient.html
61
+ cacheStrategy: 'short', // AI documentation evolves rapidly, shorter cache
62
+ referenceSections: [
63
+ 'chatclient',
64
+ 'chatmodel',
65
+ 'embeddings',
66
+ 'vectordbs',
67
+ 'retrieval-augmented-generation',
68
+ 'tools',
69
+ 'prompt',
70
+ 'structured-output'
71
+ ]
72
+ }
73
+ ],
74
+ [
75
+ 'framework',
76
+ {
77
+ id: 'framework',
78
+ githubRepo: 'spring-projects/spring-framework',
79
+ githubTagPrefix: 'v',
80
+ versionInsertAfter: 'https://docs.spring.io/spring-framework/reference/',
81
+ displayName: 'Spring Framework',
82
+ referenceBaseUrl: 'https://docs.spring.io/spring-framework/reference',
83
+ referenceLayout: 'flat',
84
+ hasVersionedDocs: true,
85
+ cacheStrategy: 'long',
86
+ referenceSections: [
87
+ 'core',
88
+ 'web',
89
+ 'web-reactive',
90
+ 'data-access',
91
+ 'integration',
92
+ 'languages',
93
+ 'testing'
94
+ ]
95
+ }
96
+ ],
97
+ [
98
+ 'security',
99
+ {
100
+ id: 'security',
101
+ githubRepo: 'spring-projects/spring-security',
102
+ githubTagPrefix: '',
103
+ versionInsertAfter: 'https://docs.spring.io/spring-security/reference/',
104
+ displayName: 'Spring Security',
105
+ referenceBaseUrl: 'https://docs.spring.io/spring-security',
106
+ referenceLayout: 'directory',
107
+ // Directory layout: subsections only resolve to <dir>/<subsection>.html, so nested folders
108
+ // (oauth2/login/..., authentication/passwords/...) are not reachable; hence the top-level paths below.
109
+ referencePaths: {
110
+ 'authentication': 'reference/servlet/authentication',
111
+ 'authorization': 'reference/servlet/authorization',
112
+ 'oauth2': 'reference/servlet/oauth2',
113
+ 'exploits': 'reference/servlet/exploits',
114
+ 'integrations': 'reference/servlet/integrations',
115
+ 'testing': 'reference/servlet/test'
116
+ },
117
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-security/reference/6.5/index.html
118
+ cacheStrategy: 'long',
119
+ referenceSections: [
120
+ 'servlet',
121
+ 'reactive',
122
+ 'features',
123
+ 'migration',
124
+ 'authentication',
125
+ 'authorization',
126
+ 'oauth2',
127
+ 'exploits',
128
+ 'integrations',
129
+ 'testing'
130
+ ]
131
+ }
132
+ ],
133
+ [
134
+ 'data-jpa',
135
+ {
136
+ id: 'data-jpa',
137
+ githubRepo: 'spring-projects/spring-data-jpa',
138
+ githubTagPrefix: '',
139
+ versionInsertAfter: 'https://docs.spring.io/spring-data/jpa/reference/',
140
+ displayName: 'Spring Data JPA',
141
+ referenceBaseUrl: 'https://docs.spring.io/spring-data/jpa/reference',
142
+ referenceLayout: 'flat',
143
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-data/jpa/reference/3.5/index.html
144
+ cacheStrategy: 'long',
145
+ referenceSections: [
146
+ 'jpa',
147
+ 'auditing',
148
+ // repositories.html alone returns 404 (verified): this section only works with a subsection, e.g. 'core-concepts'
149
+ 'repositories'
150
+ ]
151
+ }
152
+ ],
153
+ [
154
+ 'batch',
155
+ {
156
+ id: 'batch',
157
+ githubRepo: 'spring-projects/spring-batch',
158
+ githubTagPrefix: 'v',
159
+ versionInsertAfter: 'https://docs.spring.io/spring-batch/reference/',
160
+ displayName: 'Spring Batch',
161
+ referenceBaseUrl: 'https://docs.spring.io/spring-batch/reference',
162
+ referenceLayout: 'flat',
163
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-batch/reference/5.2/index.html
164
+ cacheStrategy: 'long',
165
+ referenceSections: [
166
+ 'spring-batch-architecture',
167
+ 'whatsnew',
168
+ 'domain',
169
+ 'job',
170
+ 'step',
171
+ 'readersAndWriters',
172
+ 'processor',
173
+ 'scalability',
174
+ 'repeat',
175
+ 'retry',
176
+ 'testing',
177
+ 'common-patterns'
178
+ ]
179
+ }
180
+ ],
181
+ [
182
+ 'integration',
183
+ {
184
+ id: 'integration',
185
+ githubRepo: 'spring-projects/spring-integration',
186
+ githubTagPrefix: 'v',
187
+ versionInsertAfter: 'https://docs.spring.io/spring-integration/reference/',
188
+ displayName: 'Spring Integration',
189
+ referenceBaseUrl: 'https://docs.spring.io/spring-integration/reference',
190
+ referenceLayout: 'flat',
191
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-integration/reference/6.5/index.html
192
+ cacheStrategy: 'long',
193
+ referenceSections: [
194
+ 'overview',
195
+ 'message',
196
+ 'channel',
197
+ 'endpoint',
198
+ 'router',
199
+ 'transformer',
200
+ 'dsl',
201
+ 'http',
202
+ 'jms',
203
+ 'amqp',
204
+ 'kafka',
205
+ 'testing',
206
+ 'whats-new'
207
+ ]
208
+ }
209
+ ],
210
+ [
211
+ 'kafka',
212
+ {
213
+ id: 'kafka',
214
+ githubRepo: 'spring-projects/spring-kafka',
215
+ githubTagPrefix: 'v',
216
+ versionInsertAfter: 'https://docs.spring.io/spring-kafka/reference/',
217
+ displayName: 'Spring for Apache Kafka',
218
+ referenceBaseUrl: 'https://docs.spring.io/spring-kafka/reference',
219
+ referenceLayout: 'flat',
220
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-kafka/reference/3.3/index.html
221
+ cacheStrategy: 'long',
222
+ referenceSections: [
223
+ 'introduction',
224
+ 'quick-tour',
225
+ 'kafka',
226
+ 'retrytopic',
227
+ 'streams',
228
+ 'testing',
229
+ 'whats-new'
230
+ ]
231
+ }
232
+ ],
233
+ [
234
+ 'modulith',
235
+ {
236
+ id: 'modulith',
237
+ githubRepo: 'spring-projects/spring-modulith',
238
+ githubTagPrefix: '',
239
+ versionInsertAfter: 'https://docs.spring.io/spring-modulith/reference/',
240
+ displayName: 'Spring Modulith',
241
+ referenceBaseUrl: 'https://docs.spring.io/spring-modulith/reference',
242
+ referenceLayout: 'flat',
243
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-modulith/reference/1.4/index.html
244
+ cacheStrategy: 'long',
245
+ referenceSections: [
246
+ 'fundamentals',
247
+ 'events',
248
+ 'testing',
249
+ 'verification',
250
+ 'documentation',
251
+ 'appendix'
252
+ ]
253
+ }
254
+ ],
255
+ [
256
+ 'cloud-gateway',
257
+ {
258
+ id: 'cloud-gateway',
259
+ githubRepo: 'spring-cloud/spring-cloud-gateway',
260
+ githubTagPrefix: 'v',
261
+ versionInsertAfter: 'https://docs.spring.io/spring-cloud-gateway/reference/',
262
+ displayName: 'Spring Cloud Gateway',
263
+ referenceBaseUrl: 'https://docs.spring.io/spring-cloud-gateway/reference',
264
+ referenceLayout: 'flat',
265
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-cloud-gateway/reference/4.3/index.html
266
+ cacheStrategy: 'long',
267
+ referenceSections: [
268
+ 'spring-cloud-gateway-server-webflux',
269
+ 'spring-cloud-gateway-server-webmvc',
270
+ 'appendix'
271
+ ]
272
+ }
273
+ ],
274
+ [
275
+ 'cloud-config',
276
+ {
277
+ id: 'cloud-config',
278
+ githubRepo: 'spring-cloud/spring-cloud-config',
279
+ githubTagPrefix: 'v',
280
+ versionInsertAfter: 'https://docs.spring.io/spring-cloud-config/reference/',
281
+ displayName: 'Spring Cloud Config',
282
+ referenceBaseUrl: 'https://docs.spring.io/spring-cloud-config/reference',
283
+ referenceLayout: 'flat',
284
+ hasVersionedDocs: true, // Verified: https://docs.spring.io/spring-cloud-config/reference/4.3/index.html
285
+ cacheStrategy: 'long',
286
+ referenceSections: [
287
+ 'quickstart',
288
+ 'server',
289
+ 'client'
290
+ ]
291
+ }
292
+ ]
293
+ // Future projects can be added here (e.g. 'cloud-*' siblings, 'data-*' modules, 'graphql', 'session').
294
+ ]);
295
+ /**
296
+ * Spring Projects Configuration Manager
297
+ *
298
+ * Provides type-safe access to Spring project configurations with validation
299
+ * and helper methods for URL construction.
300
+ */
301
+ export class SpringProjectsConfig {
302
+ projects;
303
+ constructor(projectsMap = SPRING_PROJECTS) {
304
+ this.projects = projectsMap;
305
+ }
306
+ /**
307
+ * Get configuration for a specific Spring project
308
+ * @throws Error if project not found
309
+ */
310
+ getProject(projectId) {
311
+ const project = this.projects.get(projectId);
312
+ if (!project) {
313
+ const availableProjects = Array.from(this.projects.keys()).join(', ');
314
+ throw new Error(`Unknown Spring project: "${projectId}". Available projects: ${availableProjects}`);
315
+ }
316
+ return project;
317
+ }
318
+ /**
319
+ * Get all supported project IDs
320
+ */
321
+ getAllProjectIds() {
322
+ return Array.from(this.projects.keys());
323
+ }
324
+ /**
325
+ * Get all project configurations
326
+ */
327
+ getAllProjects() {
328
+ return Array.from(this.projects.values());
329
+ }
330
+ /**
331
+ * Build documentation reference URL for a project (current documentation version)
332
+ *
333
+ * @param projectId - Project identifier
334
+ * @param section - Documentation section (e.g., "web", "chatclient"), already validated as a safe URL segment
335
+ * @param subsection - Optional page inside the section (e.g., "servlet" for boot/web)
336
+ * @param version - Optional documentation version ("3.4" or "3.4.2"); omitted or "current" means the current docs
337
+ * @returns Complete URL to the documentation page
338
+ */
339
+ buildReferenceUrl(projectId, section, subsection, version) {
340
+ const normalizedVersion = normalizeVersion(version);
341
+ const project = this.getProject(projectId);
342
+ const base = project.referenceBaseUrl;
343
+ let url;
344
+ if (project.referenceLayout === 'directory') {
345
+ const dir = project.referencePaths?.[section] ?? `reference/${section}`;
346
+ url = `${base}/${dir}/${subsection ? `${subsection}.html` : 'index.html'}`;
347
+ }
348
+ else {
349
+ url = subsection ? `${base}/${section}/${subsection}.html` : `${base}/${section}.html`;
350
+ }
351
+ if (!normalizedVersion)
352
+ return url;
353
+ const prefix = project.versionInsertAfter;
354
+ if (!project.hasVersionedDocs || !prefix) {
355
+ throw new Error(`Project "${projectId}" does not support versioned documentation`);
356
+ }
357
+ if (!url.startsWith(prefix)) {
358
+ throw new Error(`Invalid configuration for project "${projectId}": versionInsertAfter is not a prefix of ${url}`);
359
+ }
360
+ return `${prefix}${normalizedVersion}/${url.slice(prefix.length)}`;
361
+ }
362
+ /**
363
+ * Get cache TTL in milliseconds for a project
364
+ *
365
+ * @param projectId - Project identifier
366
+ * @returns TTL in milliseconds
367
+ */
368
+ getCacheTTL(projectId) {
369
+ const project = this.getProject(projectId);
370
+ // Convert strategy to milliseconds
371
+ switch (project.cacheStrategy) {
372
+ case 'short':
373
+ return 30 * 60 * 1000; // 30 minutes
374
+ case 'long':
375
+ return 24 * 60 * 60 * 1000; // 24 hours
376
+ default:
377
+ return 30 * 60 * 1000; // Default to 30 minutes
378
+ }
379
+ }
380
+ /**
381
+ * Validate if a section exists for a project
382
+ * Returns true if validation passes or if project doesn't define sections
383
+ */
384
+ validateSection(projectId, section) {
385
+ const project = this.getProject(projectId);
386
+ // If project doesn't define sections, allow any section
387
+ if (!project.referenceSections || project.referenceSections.length === 0) {
388
+ return true;
389
+ }
390
+ return project.referenceSections.includes(section);
391
+ }
392
+ }
393
+ /**
394
+ * Singleton instance for application-wide use
395
+ */
396
+ export const springProjectsConfig = new SpringProjectsConfig();
397
+ //# sourceMappingURL=spring-projects-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spring-projects-config.js","sourceRoot":"","sources":["../../src/services/spring-projects-config.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,41 @@
1
+ import { CacheService } from './cache.js';
2
+ import { WikiDocument } from './boot-wiki.js';
3
+ import { SpringProjectsConfig } from './spring-projects-config.js';
4
+ import { SearchIndex } from './search-index.js';
5
+ import { MigrationProject } from './migration-sources.js';
1
6
  /**
2
- * Clean Spring Boot Documentation Service - uses ONLY real Spring documentation APIs
3
- * No mock data whatsoever - everything is fetched from actual Spring sources
7
+ * Spring Documentation Service - Supports multiple Spring projects (Boot, AI, Framework, etc.)
8
+ * Uses ONLY real Spring documentation APIs - no mock data
9
+ *
10
+ * Architecture: Configuration-driven multi-project support via SpringProjectsConfig
4
11
  */
5
12
  export declare class SpringBootDocsServiceOptimized {
6
13
  private readonly baseUrl;
7
14
  private readonly springProjectsUrl;
8
15
  private readonly springGuideUrl;
9
- private readonly springBootVersion;
10
- private turndownService;
16
+ private projectsConfig;
11
17
  private cache;
12
- private readonly REQUEST_TIMEOUT;
13
- private readonly MAX_RETRIES;
14
- constructor();
15
- /**
16
- * Extract content intelligently based on detail level
17
- * Preserves code blocks, key sections, and structure
18
- */
19
- private extractIntelligentContent;
18
+ private searchIndex;
19
+ constructor(projectsConfig?: SpringProjectsConfig, cache?: CacheService, searchIndex?: SearchIndex);
20
+ /** Feeds the full-text index with a page already fetched; never breaks the read path. */
21
+ private indexPage;
22
+ /** Re-feeds the index from the cache when a page was evicted or read before the index existed. */
23
+ private reindexIfMissing;
20
24
  /**
21
25
  * Search Spring projects with caching and retry logic - REAL API ONLY
22
26
  */
23
27
  searchSpringProjects(query: string, limit?: number): Promise<any[]>;
28
+ /**
29
+ * Get the full markdown of a Spring project page (cached) - REAL API ONLY
30
+ */
31
+ getProjectMarkdown(projectName: string): Promise<{
32
+ markdown: string;
33
+ url: string;
34
+ }>;
24
35
  /**
25
36
  * Get Spring project details - REAL API ONLY
26
37
  */
27
- getSpringProject(projectName: string): Promise<string>;
38
+ getSpringProject(projectName: string, offset?: number): Promise<string>;
28
39
  /**
29
40
  * Get all Spring guides - REAL API ONLY
30
41
  */
@@ -34,31 +45,71 @@ export declare class SpringBootDocsServiceOptimized {
34
45
  */
35
46
  getGuide(guideId: string, detailLevel?: string): Promise<string>;
36
47
  /**
37
- * Get Spring reference documentation - alias for backward compatibility
48
+ * Get Spring reference documentation - backward compatibility (defaults to Spring Boot)
49
+ * @deprecated Use getSpringReference('boot', section) instead
38
50
  */
39
51
  getReference(section: string, subsection?: string): Promise<string>;
40
52
  /**
41
- * Get Spring reference documentation - REAL API ONLY
53
+ * Get Spring reference documentation for any Spring project
54
+ * Supports: Spring Boot, Spring AI, Spring Framework, and future projects
55
+ *
56
+ * @param projectId - Project identifier ('boot', 'ai', 'framework', etc.)
57
+ * @param section - Documentation section (e.g., 'web', 'chatclient', 'core')
58
+ * @param subsection - Optional subsection for deeper navigation
59
+ * @param offset - Character offset for paginated reads
60
+ * @param version - Optional documentation version ('3.4' or '3.4.2'; omitted/'current' = latest)
61
+ * @returns Formatted markdown documentation with source URL
62
+ */
63
+ getSpringReference(projectId: string, section: string, subsection?: string, offset?: number, version?: string): Promise<string>;
64
+ /**
65
+ * Get the Spring Boot migration guide or upgrade release notes from the GitHub wiki
66
+ *
67
+ * @param version - Target version ('3.0', '3.4' or '3.4.2'; the patch is ignored)
68
+ * @param document - 'auto' (migration guide for x.0, release notes otherwise) or an explicit document
69
+ * @param section - Optional keyword; only matching headings (with sub-sections) are returned
70
+ * @param offset - Character offset for paginated reads
71
+ */
72
+ getMigrationGuide(version: string, document?: 'auto' | WikiDocument, section?: string, offset?: number, project?: MigrationProject): Promise<string>;
73
+ private fetchBootWikiPage;
74
+ /** Raw markdown wiki page (Framework, Batch): a missing page is a real 404, an HTML body is never a guide. */
75
+ private fetchRawWikiPage;
76
+ private referenceTitle;
77
+ /**
78
+ * Format one page of a full markdown document with a pagination footer
42
79
  */
43
- getSpringReference(section: string, subsection?: string): Promise<string>;
80
+ private formatPage;
44
81
  /**
45
82
  * Search Spring concepts - alias for backward compatibility
46
83
  */
47
- searchConcepts(concept: string, category?: string): Promise<string>;
84
+ searchConcepts(concept: string, version?: string): Promise<string>;
85
+ /**
86
+ * Entry page of the Spring Boot reference documentation: the current docs (legacy URL, unchanged)
87
+ * or the page of a published version ("3.4" or "3.4.2"; the patch is ignored).
88
+ */
89
+ private bootReferenceIndexUrl;
90
+ private bootVersionNotFound;
48
91
  /**
49
92
  * Search Spring concepts - using real documentation
93
+ *
94
+ * @param version - Optional Spring Boot documentation version ('3.4' or '3.4.2'; omitted/'current' = latest)
50
95
  */
51
- searchSpringConcepts(concept: string, category?: string): Promise<string>;
96
+ searchSpringConcepts(concept: string, version?: string): Promise<string>;
52
97
  /**
53
98
  * Search documentation with real API - alias for backward compatibility
54
99
  */
55
- searchDocumentation(query: string, docType?: string, limit?: number): Promise<any[]>;
100
+ searchDocumentation(query: string, docType?: string, limit?: number, version?: string): Promise<any[]>;
56
101
  /**
57
102
  * Search documentation with real API
103
+ *
104
+ * @param version - Optional Spring Boot documentation version for the Boot reference part
105
+ * ('3.4' or '3.4.2'; omitted/'current' = latest). Guides and projects are not versioned and ignore it.
58
106
  */
59
- searchSpringDocs(query: string, docType?: string, limit?: number): Promise<any[]>;
107
+ searchSpringDocs(query: string, docType?: string, limit?: number, version?: string): Promise<any[]>;
108
+ private mergeContentResults;
109
+ private searchTitleSources;
60
110
  private searchInReference;
61
- private processHtmlGuide;
111
+ private extractGuideMarkdown;
112
+ private formatGuide;
62
113
  private fetchWithRetry;
63
114
  }
64
115
  //# sourceMappingURL=springboot-docs-optimized.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"springboot-docs-optimized.d.ts","sourceRoot":"","sources":["../../src/services/springboot-docs-optimized.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAW;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;;IAajC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA6DjC;;OAEG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IAkD5D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsC5D;;OAEG;IACG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAmD/E;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoDhF;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqC/E;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkD/E;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAIrG;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAoCpF,iBAAiB;IA+B/B,OAAO,CAAC,gBAAgB;YA0BV,cAAc;CA0B7B"}
1
+ {"version":3,"file":"springboot-docs-optimized.d.ts","sourceRoot":"","sources":["../../src/services/springboot-docs-optimized.ts"],"names":[],"mappings":"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"}