mcmodding-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +324 -0
  3. package/dist/db-versioning.d.ts +31 -0
  4. package/dist/db-versioning.d.ts.map +1 -0
  5. package/dist/db-versioning.js +206 -0
  6. package/dist/db-versioning.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +202 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/indexer/chunker.d.ts +32 -0
  12. package/dist/indexer/chunker.d.ts.map +1 -0
  13. package/dist/indexer/chunker.js +157 -0
  14. package/dist/indexer/chunker.js.map +1 -0
  15. package/dist/indexer/crawler.d.ts +28 -0
  16. package/dist/indexer/crawler.d.ts.map +1 -0
  17. package/dist/indexer/crawler.js +550 -0
  18. package/dist/indexer/crawler.js.map +1 -0
  19. package/dist/indexer/embeddings.d.ts +56 -0
  20. package/dist/indexer/embeddings.d.ts.map +1 -0
  21. package/dist/indexer/embeddings.js +200 -0
  22. package/dist/indexer/embeddings.js.map +1 -0
  23. package/dist/indexer/sitemap.d.ts +35 -0
  24. package/dist/indexer/sitemap.d.ts.map +1 -0
  25. package/dist/indexer/sitemap.js +263 -0
  26. package/dist/indexer/sitemap.js.map +1 -0
  27. package/dist/indexer/store.d.ts +237 -0
  28. package/dist/indexer/store.d.ts.map +1 -0
  29. package/dist/indexer/store.js +857 -0
  30. package/dist/indexer/store.js.map +1 -0
  31. package/dist/indexer/types.d.ts +77 -0
  32. package/dist/indexer/types.d.ts.map +1 -0
  33. package/dist/indexer/types.js +2 -0
  34. package/dist/indexer/types.js.map +1 -0
  35. package/dist/indexer/updater.d.ts +52 -0
  36. package/dist/indexer/updater.d.ts.map +1 -0
  37. package/dist/indexer/updater.js +263 -0
  38. package/dist/indexer/updater.js.map +1 -0
  39. package/dist/services/concept-service.d.ts +49 -0
  40. package/dist/services/concept-service.d.ts.map +1 -0
  41. package/dist/services/concept-service.js +554 -0
  42. package/dist/services/concept-service.js.map +1 -0
  43. package/dist/services/example-service.d.ts +52 -0
  44. package/dist/services/example-service.d.ts.map +1 -0
  45. package/dist/services/example-service.js +302 -0
  46. package/dist/services/example-service.js.map +1 -0
  47. package/dist/services/search-service.d.ts +54 -0
  48. package/dist/services/search-service.d.ts.map +1 -0
  49. package/dist/services/search-service.js +519 -0
  50. package/dist/services/search-service.js.map +1 -0
  51. package/dist/services/search-utils.d.ts +34 -0
  52. package/dist/services/search-utils.d.ts.map +1 -0
  53. package/dist/services/search-utils.js +239 -0
  54. package/dist/services/search-utils.js.map +1 -0
  55. package/dist/tools/explainConcept.d.ts +9 -0
  56. package/dist/tools/explainConcept.d.ts.map +1 -0
  57. package/dist/tools/explainConcept.js +93 -0
  58. package/dist/tools/explainConcept.js.map +1 -0
  59. package/dist/tools/getExample.d.ts +20 -0
  60. package/dist/tools/getExample.d.ts.map +1 -0
  61. package/dist/tools/getExample.js +88 -0
  62. package/dist/tools/getExample.js.map +1 -0
  63. package/dist/tools/getMinecraftVersion.d.ts +6 -0
  64. package/dist/tools/getMinecraftVersion.d.ts.map +1 -0
  65. package/dist/tools/getMinecraftVersion.js +57 -0
  66. package/dist/tools/getMinecraftVersion.js.map +1 -0
  67. package/dist/tools/searchDocs.d.ts +15 -0
  68. package/dist/tools/searchDocs.d.ts.map +1 -0
  69. package/dist/tools/searchDocs.js +144 -0
  70. package/dist/tools/searchDocs.js.map +1 -0
  71. package/package.json +111 -0
  72. package/scripts/postinstall.js +859 -0
@@ -0,0 +1,302 @@
1
+ import { DocumentStore } from '../indexer/store.js';
2
+ import { tokenizeQuery, calculateRelevanceScore, deduplicateAndRank, } from './search-utils.js';
3
+ import path from 'path';
4
+ export class ExampleService {
5
+ store;
6
+ constructor(dbPath) {
7
+ const finalPath = dbPath || process.env.DB_PATH || path.join(process.cwd(), 'data', 'mcmodding-docs.db');
8
+ console.error(`[ExampleService] Using database at: ${finalPath}`);
9
+ this.store = new DocumentStore(finalPath);
10
+ }
11
+ getExamples(options) {
12
+ const { topic, language, minecraftVersion, loader, category, limit = 5 } = options;
13
+ console.error(`[ExampleService] Searching for: "${topic}"`);
14
+ const query = tokenizeQuery(topic);
15
+ console.error(`[ExampleService] Tokens: ${query.tokens.join(', ')}`);
16
+ console.error(`[ExampleService] Expanded: ${query.expandedTokens.slice(0, 10).join(', ')}...`);
17
+ console.error(`[ExampleService] FTS Query: ${query.ftsQuery}`);
18
+ const allResults = [];
19
+ const chunkResults = this.searchViaChunks(query, {
20
+ language,
21
+ minecraftVersion,
22
+ loader,
23
+ category,
24
+ });
25
+ allResults.push(...chunkResults);
26
+ console.error(`[ExampleService] Strategy 1 (chunks): ${chunkResults.length} results`);
27
+ if (query.codePatterns.length > 0) {
28
+ const codeResults = this.searchViaCodePatterns(query, {
29
+ language,
30
+ minecraftVersion,
31
+ loader,
32
+ });
33
+ allResults.push(...codeResults);
34
+ console.error(`[ExampleService] Strategy 2 (code patterns): ${codeResults.length} results`);
35
+ }
36
+ const docResults = this.searchViaDocuments(query, {
37
+ language,
38
+ minecraftVersion,
39
+ loader,
40
+ category,
41
+ });
42
+ allResults.push(...docResults);
43
+ console.error(`[ExampleService] Strategy 3 (documents): ${docResults.length} results`);
44
+ if (allResults.length < limit) {
45
+ const fallbackResults = this.fallbackSearch(query, {
46
+ language,
47
+ minecraftVersion,
48
+ loader,
49
+ limit: limit * 3,
50
+ });
51
+ allResults.push(...fallbackResults);
52
+ console.error(`[ExampleService] Strategy 4 (fallback): ${fallbackResults.length} results`);
53
+ }
54
+ const ranked = deduplicateAndRank(allResults, limit);
55
+ console.error(`[ExampleService] After dedup/rank: ${ranked.length} results`);
56
+ const examples = ranked.map((r) => this.toCodeExample(r.item, r.score, r.matchReasons));
57
+ return examples;
58
+ }
59
+ getLatestMinecraftVersion() {
60
+ const versions = this.store.getAllVersions().sort((a, b) => {
61
+ const aParts = a.split('.').map(Number);
62
+ const bParts = b.split('.').map(Number);
63
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
64
+ const aNum = aParts[i] || 0;
65
+ const bNum = bParts[i] || 0;
66
+ if (aNum !== bNum) {
67
+ return bNum - aNum;
68
+ }
69
+ }
70
+ return 0;
71
+ });
72
+ console.error(`[ExampleService] Available versions: ${versions.join(', ')}`);
73
+ if (versions.length === 0) {
74
+ return '1.21.4';
75
+ }
76
+ return versions[0] || '1.21.4';
77
+ }
78
+ searchViaChunks(query, options) {
79
+ const results = [];
80
+ const chunks = this.store.searchChunksAdvanced(query.ftsQuery, query.likePatterns, {
81
+ hasCode: true,
82
+ language: options.language,
83
+ loader: options.loader,
84
+ minecraftVersion: options.minecraftVersion,
85
+ category: options.category,
86
+ limit: 30,
87
+ });
88
+ const seenDocIds = new Set();
89
+ for (const chunk of chunks) {
90
+ if (seenDocIds.has(chunk.document_id))
91
+ continue;
92
+ seenDocIds.add(chunk.document_id);
93
+ const codeBlocks = this.store.getCodeBlocksWithContext(chunk.document_id);
94
+ for (const block of codeBlocks) {
95
+ if (options.language && block.language !== options.language)
96
+ continue;
97
+ const { score, reasons } = calculateRelevanceScore({
98
+ title: block.document_title,
99
+ section_heading: block.section_heading,
100
+ section_content: block.section_content,
101
+ code: block.code,
102
+ caption: block.caption,
103
+ category: block.category,
104
+ url: block.document_url,
105
+ }, query);
106
+ if (score > 0) {
107
+ results.push({
108
+ item: block,
109
+ score,
110
+ matchReasons: reasons,
111
+ });
112
+ }
113
+ }
114
+ }
115
+ return results;
116
+ }
117
+ searchViaCodePatterns(query, options) {
118
+ const results = [];
119
+ const codeBlocks = this.store.searchCodeBlocksByPatterns(query.codePatterns, {
120
+ language: options.language,
121
+ loader: options.loader,
122
+ minecraftVersion: options.minecraftVersion,
123
+ limit: 30,
124
+ });
125
+ for (const block of codeBlocks) {
126
+ const { score, reasons } = calculateRelevanceScore({
127
+ title: block.document_title,
128
+ section_heading: block.section_heading,
129
+ section_content: block.section_content,
130
+ code: block.code,
131
+ caption: block.caption,
132
+ category: block.category,
133
+ url: block.document_url,
134
+ }, query);
135
+ const boostedScore = score + 30;
136
+ results.push({
137
+ item: block,
138
+ score: boostedScore,
139
+ matchReasons: [...reasons, 'code pattern match'],
140
+ });
141
+ }
142
+ return results;
143
+ }
144
+ searchViaDocuments(query, options) {
145
+ const results = [];
146
+ const docs = this.store.searchDocumentsLike(query.likePatterns, {
147
+ loader: options.loader,
148
+ minecraftVersion: options.minecraftVersion,
149
+ category: options.category,
150
+ limit: 15,
151
+ });
152
+ for (const doc of docs) {
153
+ const codeBlocks = this.store.getCodeBlocksWithContext(doc.id);
154
+ for (const block of codeBlocks) {
155
+ if (options.language && block.language !== options.language)
156
+ continue;
157
+ const { score, reasons } = calculateRelevanceScore({
158
+ title: block.document_title,
159
+ section_heading: block.section_heading,
160
+ section_content: block.section_content,
161
+ code: block.code,
162
+ caption: block.caption,
163
+ category: block.category,
164
+ url: block.document_url,
165
+ }, query);
166
+ if (score > 0) {
167
+ results.push({
168
+ item: block,
169
+ score,
170
+ matchReasons: reasons,
171
+ });
172
+ }
173
+ }
174
+ }
175
+ return results;
176
+ }
177
+ fallbackSearch(query, options) {
178
+ const results = [];
179
+ const codeBlocks = this.store.getAllCodeBlocksWithContext({
180
+ language: options.language,
181
+ loader: options.loader,
182
+ minecraftVersion: options.minecraftVersion,
183
+ limit: options.limit || 100,
184
+ });
185
+ for (const block of codeBlocks) {
186
+ const { score, reasons } = calculateRelevanceScore({
187
+ title: block.document_title,
188
+ section_heading: block.section_heading,
189
+ section_content: block.section_content,
190
+ code: block.code,
191
+ caption: block.caption,
192
+ category: block.category,
193
+ url: block.document_url,
194
+ }, query);
195
+ if (score >= 10) {
196
+ results.push({
197
+ item: block,
198
+ score,
199
+ matchReasons: reasons,
200
+ });
201
+ }
202
+ }
203
+ return results;
204
+ }
205
+ toCodeExample(block, score, matchReasons) {
206
+ return {
207
+ code: block.code,
208
+ language: block.language,
209
+ description: this.generateDescription(block),
210
+ relevanceScore: score,
211
+ matchReasons,
212
+ context: {
213
+ sectionHeading: block.section_heading,
214
+ sectionContent: this.truncateContent(block.section_content, 500),
215
+ documentTitle: block.document_title,
216
+ documentUrl: block.document_url,
217
+ category: block.category,
218
+ },
219
+ metadata: {
220
+ loader: block.loader,
221
+ minecraftVersion: block.minecraft_version,
222
+ caption: block.caption || undefined,
223
+ },
224
+ };
225
+ }
226
+ generateDescription(block) {
227
+ if (block.caption) {
228
+ return block.caption;
229
+ }
230
+ const sentences = block.section_content.split(/[.!?]+/);
231
+ if (sentences.length > 0 && sentences[0] && sentences[0].trim().length > 10) {
232
+ const firstSentence = sentences[0].trim();
233
+ if (firstSentence.length <= 200) {
234
+ return firstSentence;
235
+ }
236
+ return firstSentence.substring(0, 197) + '...';
237
+ }
238
+ return `Code example from "${block.section_heading}" in ${block.document_title}`;
239
+ }
240
+ truncateContent(content, maxLength) {
241
+ if (content.length <= maxLength) {
242
+ return content;
243
+ }
244
+ const truncated = content.substring(0, maxLength);
245
+ const lastPeriod = truncated.lastIndexOf('.');
246
+ const lastQuestion = truncated.lastIndexOf('?');
247
+ const lastExclamation = truncated.lastIndexOf('!');
248
+ const lastSentenceEnd = Math.max(lastPeriod, lastQuestion, lastExclamation);
249
+ if (lastSentenceEnd > maxLength * 0.7) {
250
+ return truncated.substring(0, lastSentenceEnd + 1);
251
+ }
252
+ const lastSpace = truncated.lastIndexOf(' ');
253
+ if (lastSpace > maxLength * 0.8) {
254
+ return truncated.substring(0, lastSpace) + '...';
255
+ }
256
+ return truncated + '...';
257
+ }
258
+ getAvailableTopics() {
259
+ const stats = this.store.getStats();
260
+ const languages = this.store.getAvailableLanguages();
261
+ const versions = this.store.getAllVersions();
262
+ return {
263
+ categories: Object.keys(stats.loaders),
264
+ languages,
265
+ loaders: ['fabric', 'neoforge', 'shared'],
266
+ versions,
267
+ };
268
+ }
269
+ formatForAI(examples) {
270
+ if (examples.length === 0) {
271
+ return 'No code examples found for the specified criteria.';
272
+ }
273
+ let output = `Found ${examples.length} relevant code example${examples.length > 1 ? 's' : ''} for minecraft version ${examples[0]?.metadata.minecraftVersion || 'unknown'}:\n\n`;
274
+ for (let i = 0; i < examples.length; i++) {
275
+ const example = examples[i];
276
+ if (!example)
277
+ continue;
278
+ output += `## Example ${i + 1}: ${example.context.sectionHeading}\n\n`;
279
+ if (example.description) {
280
+ output += `**Description:** ${example.description}\n\n`;
281
+ }
282
+ output += `**Source:** ${example.context.documentTitle}\n`;
283
+ output += `**Category:** ${example.context.category}\n`;
284
+ output += `**Loader:** ${example.metadata.loader}\n`;
285
+ if (example.metadata.minecraftVersion) {
286
+ output += `**Minecraft Version:** ${example.metadata.minecraftVersion}\n`;
287
+ }
288
+ output += `**URL:** ${example.context.documentUrl}\n`;
289
+ output += `**Relevance:** ${example.relevanceScore} (${example.matchReasons.slice(0, 3).join(', ')})\n\n`;
290
+ output += `\`\`\`${example.language}\n${example.code}\n\`\`\`\n\n`;
291
+ if (example.context.sectionContent && example.context.sectionContent.length > 50) {
292
+ output += `**Context:**\n${example.context.sectionContent}\n\n`;
293
+ }
294
+ output += '---\n\n';
295
+ }
296
+ return output;
297
+ }
298
+ close() {
299
+ this.store.close();
300
+ }
301
+ }
302
+ //# sourceMappingURL=example-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-service.js","sourceRoot":"","sources":["../../src/services/example-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export interface SearchResult {
2
+ title: string;
3
+ url: string;
4
+ category: string;
5
+ loader: string;
6
+ minecraftVersion: string | null;
7
+ relevanceScore: number;
8
+ matchReasons: string[];
9
+ snippet: string;
10
+ sections: Array<{
11
+ heading: string;
12
+ content: string;
13
+ hasCode: boolean;
14
+ }>;
15
+ }
16
+ export interface SearchOptions {
17
+ query: string;
18
+ category?: string;
19
+ loader?: string;
20
+ minecraftVersion?: string;
21
+ includeCode?: boolean;
22
+ limit?: number;
23
+ }
24
+ export declare class SearchService {
25
+ private store;
26
+ private embeddingGenerator;
27
+ constructor(dbPath?: string);
28
+ search(options: SearchOptions): Promise<SearchResult[]>;
29
+ private getVersionFilter;
30
+ private searchViaEmbeddings;
31
+ private extractVersionFromQuery;
32
+ private applyVersionBoost;
33
+ private deduplicateByUrlPath;
34
+ private isSameMinorVersion;
35
+ private compareVersions;
36
+ private searchViaChunks;
37
+ private searchViaDocuments;
38
+ private searchViaSections;
39
+ private toSearchResult;
40
+ private cleanContent;
41
+ private getSectionsForDocument;
42
+ private generateSnippet;
43
+ private truncateCodeAware;
44
+ getStats(): {
45
+ totalDocuments: number;
46
+ totalSections: number;
47
+ categories: string[];
48
+ loaders: string[];
49
+ versions: string[];
50
+ };
51
+ formatForAI(results: SearchResult[], query: string): string;
52
+ close(): void;
53
+ }
54
+ //# sourceMappingURL=search-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.d.ts","sourceRoot":"","sources":["../../src/services/search-service.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0ED,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,CAAC,EAAE,MAAM;IAWrB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAyF7D,OAAO,CAAC,gBAAgB;YAYV,mBAAmB;IAuEjC,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,oBAAoB;IAgE5B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IAmFvB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,iBAAiB;IA+DzB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,sBAAsB;IAkD9B,OAAO,CAAC,eAAe;IAiDvB,OAAO,CAAC,iBAAiB;IAyCzB,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB;IAgBD,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IA8C3D,KAAK;CAGN"}