@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.
- package/README.md +108 -40
- package/build/config.d.ts +9 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +32 -0
- package/build/config.js.map +1 -0
- package/build/format.d.ts +6 -0
- package/build/format.d.ts.map +1 -0
- package/build/format.js +23 -0
- package/build/format.js.map +1 -0
- package/build/http-server.d.ts +15 -0
- package/build/http-server.d.ts.map +1 -0
- package/build/http-server.js +131 -0
- package/build/http-server.js.map +1 -0
- package/build/index.js +184 -69
- package/build/index.js.map +1 -1
- package/build/prompts.d.ts +23 -0
- package/build/prompts.d.ts.map +1 -0
- package/build/prompts.js +112 -0
- package/build/prompts.js.map +1 -0
- package/build/resources.d.ts +31 -0
- package/build/resources.d.ts.map +1 -0
- package/build/resources.js +66 -0
- package/build/resources.js.map +1 -0
- package/build/services/advanced-features.d.ts +19 -9
- package/build/services/advanced-features.d.ts.map +1 -1
- package/build/services/advanced-features.js +266 -191
- package/build/services/advanced-features.js.map +1 -1
- package/build/services/boot-wiki.d.ts +25 -0
- package/build/services/boot-wiki.d.ts.map +1 -0
- package/build/services/boot-wiki.js +103 -0
- package/build/services/boot-wiki.js.map +1 -0
- package/build/services/cache.d.ts +18 -3
- package/build/services/cache.d.ts.map +1 -1
- package/build/services/cache.js +84 -3
- package/build/services/cache.js.map +1 -1
- package/build/services/dependency-finder.d.ts +46 -0
- package/build/services/dependency-finder.d.ts.map +1 -0
- package/build/services/dependency-finder.js +181 -0
- package/build/services/dependency-finder.js.map +1 -0
- package/build/services/diagnosis.d.ts +46 -0
- package/build/services/diagnosis.d.ts.map +1 -0
- package/build/services/diagnosis.js +481 -0
- package/build/services/diagnosis.js.map +1 -0
- package/build/services/guides-list.d.ts +16 -0
- package/build/services/guides-list.d.ts.map +1 -0
- package/build/services/guides-list.js +45 -0
- package/build/services/guides-list.js.map +1 -0
- package/build/services/http.d.ts +21 -0
- package/build/services/http.d.ts.map +1 -0
- package/build/services/http.js +168 -0
- package/build/services/http.js.map +1 -0
- package/build/services/initializr.d.ts +41 -0
- package/build/services/initializr.d.ts.map +1 -0
- package/build/services/initializr.js +135 -0
- package/build/services/initializr.js.map +1 -0
- package/build/services/markdown.d.ts +56 -0
- package/build/services/markdown.d.ts.map +1 -0
- package/build/services/markdown.js +146 -0
- package/build/services/markdown.js.map +1 -0
- package/build/services/migration-sources.d.ts +13 -0
- package/build/services/migration-sources.d.ts.map +1 -0
- package/build/services/migration-sources.js +48 -0
- package/build/services/migration-sources.js.map +1 -0
- package/build/services/release-notes.d.ts +23 -0
- package/build/services/release-notes.d.ts.map +1 -0
- package/build/services/release-notes.js +94 -0
- package/build/services/release-notes.js.map +1 -0
- package/build/services/search-index.d.ts +33 -0
- package/build/services/search-index.d.ts.map +1 -0
- package/build/services/search-index.js +147 -0
- package/build/services/search-index.js.map +1 -0
- package/build/services/spring-projects-config.d.ts +98 -0
- package/build/services/spring-projects-config.d.ts.map +1 -0
- package/build/services/spring-projects-config.js +397 -0
- package/build/services/spring-projects-config.js.map +1 -0
- package/build/services/springboot-docs-optimized.d.ts +72 -21
- package/build/services/springboot-docs-optimized.d.ts.map +1 -1
- package/build/services/springboot-docs-optimized.js +354 -208
- package/build/services/springboot-docs-optimized.js.map +1 -1
- package/build/services/url.d.ts +15 -0
- package/build/services/url.d.ts.map +1 -0
- package/build/services/url.js +40 -0
- package/build/services/url.js.map +1 -0
- package/build/tools/index.d.ts +393 -2
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +188 -15
- package/build/tools/index.js.map +1 -1
- package/build/validation.d.ts +7 -0
- package/build/validation.d.ts.map +1 -0
- package/build/validation.js +50 -0
- package/build/validation.js.map +1 -0
- package/build/version.d.ts +3 -0
- package/build/version.d.ts.map +1 -0
- package/build/version.js +6 -0
- package/build/version.js.map +1 -0
- package/package.json +9 -7
- package/build/debug.d.ts +0 -3
- package/build/debug.d.ts.map +0 -1
- package/build/debug.js +0 -292
- package/build/debug.js.map +0 -1
- package/build/services/advanced-features-old.d.ts +0 -45
- package/build/services/advanced-features-old.d.ts.map +0 -1
- package/build/services/advanced-features-old.js +0 -792
- package/build/services/advanced-features-old.js.map +0 -1
- package/build/services/springboot-docs-optimized-old.d.ts +0 -55
- package/build/services/springboot-docs-optimized-old.d.ts.map +0 -1
- package/build/services/springboot-docs-optimized-old.js +0 -588
- package/build/services/springboot-docs-optimized-old.js.map +0 -1
- package/build/services/springboot-docs.d.ts +0 -65
- package/build/services/springboot-docs.d.ts.map +0 -1
- package/build/services/springboot-docs.js +0 -708
- package/build/services/springboot-docs.js.map +0 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const MAX_RESULTS = 5;
|
|
2
|
+
const MIN_WORD_LENGTH = 2;
|
|
3
|
+
const DEVELOPMENT_ONLY = new Set(['spring-boot-devtools', 'spring-boot-docker-compose']);
|
|
4
|
+
const SAFE_VALUE = /^[A-Za-z0-9_.-]+$/;
|
|
5
|
+
const STOP_WORDS = new Set([
|
|
6
|
+
'a', 'an', 'the', 'for', 'with', 'to', 'and', 'of', 'in', 'on', 'my', 'i', 'want', 'need', 'use', 'using', 'spring',
|
|
7
|
+
]);
|
|
8
|
+
/** Lowercase alphanumeric words of the need, without stop words or duplicates. */
|
|
9
|
+
export function searchWords(need) {
|
|
10
|
+
const words = need.toLowerCase().split(/[^a-z0-9]+/)
|
|
11
|
+
.filter(word => word.length >= MIN_WORD_LENGTH && !STOP_WORDS.has(word));
|
|
12
|
+
return [...new Set(words)];
|
|
13
|
+
}
|
|
14
|
+
export function flattenCatalog(meta) {
|
|
15
|
+
const groups = meta.dependencies?.values;
|
|
16
|
+
if (!Array.isArray(groups)) {
|
|
17
|
+
throw new Error('Spring Initializr returned an unexpected response (missing dependencies)');
|
|
18
|
+
}
|
|
19
|
+
return groups.flatMap(group => group.values.map(dep => ({
|
|
20
|
+
id: dep.id,
|
|
21
|
+
name: dep.name,
|
|
22
|
+
description: dep.description ?? '',
|
|
23
|
+
})));
|
|
24
|
+
}
|
|
25
|
+
/** One line of plain text, with the markdown specials neutralised (for titles built from user input). */
|
|
26
|
+
export function escapeInline(text) {
|
|
27
|
+
return text.replace(/\s+/g, ' ').trim().replace(/[\\`*_[\]<>#|~]/g, '\\$&');
|
|
28
|
+
}
|
|
29
|
+
const SHORT_WORD_LENGTH = 3;
|
|
30
|
+
/** Substring match, except that short words (2-3 characters) must be whole words ("ai" is not in "mail"). */
|
|
31
|
+
function contains(text, word) {
|
|
32
|
+
if (word.length > SHORT_WORD_LENGTH)
|
|
33
|
+
return text.includes(word);
|
|
34
|
+
return new RegExp(`(?<![a-z0-9])${word}(?![a-z0-9])`).test(text);
|
|
35
|
+
}
|
|
36
|
+
function score(entry, words) {
|
|
37
|
+
const id = entry.id.toLowerCase();
|
|
38
|
+
const name = entry.name.toLowerCase();
|
|
39
|
+
const description = entry.description.toLowerCase();
|
|
40
|
+
let total = 0;
|
|
41
|
+
for (const word of words) {
|
|
42
|
+
if (id === word)
|
|
43
|
+
total += 10;
|
|
44
|
+
else if (contains(id, word))
|
|
45
|
+
total += 5;
|
|
46
|
+
if (contains(name, word))
|
|
47
|
+
total += 4;
|
|
48
|
+
if (contains(description, word))
|
|
49
|
+
total += 1;
|
|
50
|
+
}
|
|
51
|
+
return total;
|
|
52
|
+
}
|
|
53
|
+
/** Entries matching at least one word, best first (score, then shortest id, then alphabetical). */
|
|
54
|
+
export function rankDependencies(catalog, words) {
|
|
55
|
+
if (words.length === 0)
|
|
56
|
+
return [];
|
|
57
|
+
return catalog
|
|
58
|
+
.map(entry => ({ entry, score: score(entry, words) }))
|
|
59
|
+
.filter(item => item.score > 0)
|
|
60
|
+
.sort((a, b) => b.score - a.score ||
|
|
61
|
+
a.entry.id.length - b.entry.id.length ||
|
|
62
|
+
a.entry.id.localeCompare(b.entry.id))
|
|
63
|
+
.map(item => item.entry);
|
|
64
|
+
}
|
|
65
|
+
function mavenBlock(groupId, artifactId, extra) {
|
|
66
|
+
return ['<dependency>', ` <groupId>${groupId}</groupId>`, ` <artifactId>${artifactId}</artifactId>`,
|
|
67
|
+
...extra.map(line => ` ${line}`), '</dependency>'].join('\n');
|
|
68
|
+
}
|
|
69
|
+
export function buildSnippets(id, data, build) {
|
|
70
|
+
const c = data.dependencies[id];
|
|
71
|
+
if (!c) {
|
|
72
|
+
return { kind: 'unavailable', notes: ['No Maven coordinates published by Initializr for this id.'] };
|
|
73
|
+
}
|
|
74
|
+
const bom = c.bom ? data.boms?.[c.bom] : undefined;
|
|
75
|
+
const values = [c.groupId, c.artifactId, c.scope, c.version, bom?.groupId, bom?.artifactId, bom?.version]
|
|
76
|
+
.filter((value) => value !== undefined);
|
|
77
|
+
if (!values.every(value => SAFE_VALUE.test(value))) {
|
|
78
|
+
return { kind: 'unavailable', notes: ['The coordinates published by Initializr contain unexpected characters: no snippet generated.'] };
|
|
79
|
+
}
|
|
80
|
+
const coordinates = `${c.groupId}:${c.artifactId}`;
|
|
81
|
+
if (c.groupId === 'org.springframework.boot' && c.artifactId === 'spring-boot') {
|
|
82
|
+
// Initializr publishes the "native" entry with the spring-boot coordinates, but it generates the GraalVM plugin.
|
|
83
|
+
return {
|
|
84
|
+
kind: 'plugin',
|
|
85
|
+
coordinates: id === 'native' ? undefined : coordinates,
|
|
86
|
+
notes: [
|
|
87
|
+
'Build plugin, not a dependency: enable it in the build configuration.',
|
|
88
|
+
...(id === 'native'
|
|
89
|
+
? ['GraalVM Native Build Tools: Gradle plugin `org.graalvm.buildtools.native`, Maven plugin `org.graalvm.buildtools:native-maven-plugin`.']
|
|
90
|
+
: []),
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const notes = [];
|
|
95
|
+
if (c.bom && !bom) {
|
|
96
|
+
notes.push(`Needs the BOM "${c.bom}", which Initializr does not describe: add its version manually.`);
|
|
97
|
+
}
|
|
98
|
+
if (c.repository) {
|
|
99
|
+
const repo = data.repositories?.[c.repository];
|
|
100
|
+
notes.push(`Requires the Maven repository ${repo ? `${repo.name} (${repo.url})` : c.repository}.`);
|
|
101
|
+
}
|
|
102
|
+
let scope = c.scope;
|
|
103
|
+
if (!['compile', 'runtime', 'test', 'provided', 'annotationProcessor'].includes(scope)) {
|
|
104
|
+
notes.push(`Unknown scope "${scope}": shown as a regular (compile) dependency.`);
|
|
105
|
+
scope = 'compile';
|
|
106
|
+
}
|
|
107
|
+
// Initializr publishes these as "runtime" but generates optional (Maven) / developmentOnly (Gradle).
|
|
108
|
+
const developmentOnly = scope === 'runtime' && c.groupId === 'org.springframework.boot' && DEVELOPMENT_ONLY.has(c.artifactId);
|
|
109
|
+
if (developmentOnly)
|
|
110
|
+
notes.push('Development-only: not packaged in the production artifact.');
|
|
111
|
+
const gav = c.version ? `${coordinates}:${c.version}` : coordinates;
|
|
112
|
+
const mavenExtra = [
|
|
113
|
+
...(c.version ? [`<version>${c.version}</version>`] : []),
|
|
114
|
+
...(scope === 'runtime' || scope === 'test' || scope === 'provided' ? [`<scope>${scope}</scope>`] : []),
|
|
115
|
+
...(scope === 'annotationProcessor' || developmentOnly ? ['<optional>true</optional>'] : []),
|
|
116
|
+
];
|
|
117
|
+
const mavenParts = [];
|
|
118
|
+
if (bom) {
|
|
119
|
+
mavenParts.push([
|
|
120
|
+
'<dependencyManagement>',
|
|
121
|
+
' <dependencies>',
|
|
122
|
+
' <dependency>',
|
|
123
|
+
` <groupId>${bom.groupId}</groupId>`,
|
|
124
|
+
` <artifactId>${bom.artifactId}</artifactId>`,
|
|
125
|
+
` <version>${bom.version}</version>`,
|
|
126
|
+
' <type>pom</type>',
|
|
127
|
+
' <scope>import</scope>',
|
|
128
|
+
' </dependency>',
|
|
129
|
+
' </dependencies>',
|
|
130
|
+
'</dependencyManagement>',
|
|
131
|
+
].join('\n'));
|
|
132
|
+
}
|
|
133
|
+
mavenParts.push(mavenBlock(c.groupId, c.artifactId, mavenExtra));
|
|
134
|
+
const gradleConfig = {
|
|
135
|
+
compile: ['implementation'],
|
|
136
|
+
runtime: ['runtimeOnly'],
|
|
137
|
+
test: ['testImplementation'],
|
|
138
|
+
provided: ['compileOnly'],
|
|
139
|
+
annotationProcessor: ['compileOnly', 'annotationProcessor'],
|
|
140
|
+
};
|
|
141
|
+
const gradleLines = [
|
|
142
|
+
...(bom ? [`implementation(platform("${bom.groupId}:${bom.artifactId}:${bom.version}"))`] : []),
|
|
143
|
+
...(developmentOnly ? ['developmentOnly'] : gradleConfig[scope]).map(config => `${config}("${gav}")`),
|
|
144
|
+
];
|
|
145
|
+
return {
|
|
146
|
+
kind: 'dependency',
|
|
147
|
+
coordinates,
|
|
148
|
+
scope: c.scope,
|
|
149
|
+
notes,
|
|
150
|
+
maven: build === 'gradle' ? undefined : mavenParts.join('\n\n'),
|
|
151
|
+
gradle: build === 'maven' ? undefined : gradleLines.join('\n'),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
export function formatDependencyMatches(need, ranked, data, build) {
|
|
155
|
+
if (ranked.length === 0) {
|
|
156
|
+
return `No dependency matches "${escapeInline(need)}". Try other English keywords, or list everything with get_spring_initializr (section "dependencies").`;
|
|
157
|
+
}
|
|
158
|
+
const lines = [`# Dependencies for "${escapeInline(need)}"${data.bootVersion ? ` (Spring Boot ${data.bootVersion})` : ''}`];
|
|
159
|
+
for (const entry of ranked.slice(0, MAX_RESULTS)) {
|
|
160
|
+
const snippets = buildSnippets(entry.id, data, build);
|
|
161
|
+
lines.push('', `## \`${entry.id}\` — ${entry.name}`);
|
|
162
|
+
if (entry.description)
|
|
163
|
+
lines.push('', entry.description);
|
|
164
|
+
lines.push('');
|
|
165
|
+
if (snippets.coordinates)
|
|
166
|
+
lines.push(`- Coordinates: \`${snippets.coordinates}\``);
|
|
167
|
+
if (snippets.scope)
|
|
168
|
+
lines.push(`- Scope: ${snippets.scope}`);
|
|
169
|
+
for (const note of snippets.notes)
|
|
170
|
+
lines.push(`- ${note}`);
|
|
171
|
+
if (snippets.maven)
|
|
172
|
+
lines.push('', '**Maven**', '', '```xml', snippets.maven, '```');
|
|
173
|
+
if (snippets.gradle)
|
|
174
|
+
lines.push('', '**Gradle** (Groovy and Kotlin DSL)', '', '```gradle', snippets.gradle, '```');
|
|
175
|
+
}
|
|
176
|
+
if (ranked.length > MAX_RESULTS) {
|
|
177
|
+
lines.push('', `${ranked.length - MAX_RESULTS} more matches, refine the query.`);
|
|
178
|
+
}
|
|
179
|
+
return lines.join('\n');
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=dependency-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-finder.js","sourceRoot":"","sources":["../../src/services/dependency-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local, deterministic and bounded analysis of Spring error messages and stack traces.
|
|
3
|
+
*
|
|
4
|
+
* The input is untrusted user text: every cap is applied BEFORE any processing, and the
|
|
5
|
+
* parsing is line based (startsWith / indexOf / slice). No backtracking regex is used;
|
|
6
|
+
* the only regexes are anchored, linear and without nested quantifiers.
|
|
7
|
+
*/
|
|
8
|
+
import { SpringProjectsConfig } from './spring-projects-config.js';
|
|
9
|
+
export interface ExceptionLink {
|
|
10
|
+
type: string;
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
export interface TraceAnalysis {
|
|
14
|
+
chain: ExceptionLink[];
|
|
15
|
+
top?: ExceptionLink;
|
|
16
|
+
root?: ExceptionLink;
|
|
17
|
+
/** Trimmed first application frame, e.g. "at com.acme.Foo.bar(Foo.java:42)" */
|
|
18
|
+
applicationFrame?: string;
|
|
19
|
+
/** One of startup | web | data | security | actuator | configuration */
|
|
20
|
+
inferredComponent?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DiagnosisReference {
|
|
23
|
+
project: string;
|
|
24
|
+
section: string;
|
|
25
|
+
subsection?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DiagnosisRule {
|
|
28
|
+
id: string;
|
|
29
|
+
needles: string[];
|
|
30
|
+
title: string;
|
|
31
|
+
checks: string[];
|
|
32
|
+
references: DiagnosisReference[];
|
|
33
|
+
}
|
|
34
|
+
export declare function analyzeStackTrace(stackTrace?: string): TraceAnalysis;
|
|
35
|
+
export declare const DIAGNOSIS_RULES: DiagnosisRule[];
|
|
36
|
+
/**
|
|
37
|
+
* Returns the rules whose needles appear (lower-cased) in the analyzed text:
|
|
38
|
+
* the error message plus the exception header lines of the trace. Order = table order.
|
|
39
|
+
*/
|
|
40
|
+
export declare function matchRules(errorMessage: string, analysis: TraceAnalysis, stackTrace?: string): DiagnosisRule[];
|
|
41
|
+
export declare function renderDiagnosis(input: {
|
|
42
|
+
errorMessage: string;
|
|
43
|
+
component?: string;
|
|
44
|
+
stackTrace?: string;
|
|
45
|
+
}, config?: SpringProjectsConfig): string;
|
|
46
|
+
//# sourceMappingURL=diagnosis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnosis.d.ts","sourceRoot":"","sources":["../../src/services/diagnosis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAwB,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEzF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAiJD,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAYpE;AAMD,eAAO,MAAM,eAAe,EAAE,aAAa,EA2K1C,CAAC;AAqDF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAqB9G;AA+BD,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACxE,MAAM,GAAE,oBAA2C,GAClD,MAAM,CA4DR"}
|