mcmodding-mcp 0.2.2 → 0.3.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.
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ /* eslint-disable no-undef, no-control-regex, no-unused-vars */
2
3
 
3
4
  /**
4
5
  * MCModding-MCP Postinstall Script
@@ -20,7 +21,7 @@ const __dirname = path.dirname(__filename);
20
21
  // ═══════════════════════════════════════════════════════════════════════════════
21
22
 
22
23
  const CONFIG = {
23
- repoUrl: 'https://api.github.com/repos/OGMatrix/mcmodding-mcp/releases/latest',
24
+ repoUrl: 'https://api.github.com/repos/OGMatrix/mcmodding-mcp/releases',
24
25
  dataDir: path.join(__dirname, '..', 'data'),
25
26
  dbFileName: 'mcmodding-docs.db',
26
27
  manifestFileName: 'db-manifest.json',
@@ -291,10 +292,10 @@ class ProgressDisplay {
291
292
  }
292
293
 
293
294
  clear() {
294
- if (isColorSupported) {
295
- for (let i = 0; i < this.lines; i++) {
296
- process.stdout.write(c.cursorUp + c.clearLine);
297
- }
295
+ if (isColorSupported && this.lines > 0) {
296
+ // Move cursor up and clear all lines in a single write operation
297
+ const clearSequence = (c.cursorUp + c.clearLine).repeat(this.lines);
298
+ process.stdout.write(clearSequence);
298
299
  }
299
300
  this.lines = 0;
300
301
  }
@@ -309,7 +310,7 @@ class ProgressDisplay {
309
310
 
310
311
  update(downloaded, total, phase = 'download') {
311
312
  const now = Date.now();
312
- if (now - this.lastUpdate < 50) return; // Throttle updates
313
+ if (now - this.lastUpdate < 100) return; // Throttle updates
313
314
  this.lastUpdate = now;
314
315
 
315
316
  this.clear();
@@ -349,11 +350,9 @@ class ProgressDisplay {
349
350
 
350
351
  lines.push(statsLine);
351
352
 
352
- // Print all lines
353
- lines.forEach((line) => {
354
- console.log(line);
355
- this.lines++;
356
- });
353
+ // Print all lines as a single write operation to prevent flickering
354
+ this.lines = lines.length;
355
+ process.stdout.write(lines.join('\n') + '\n');
357
356
  }
358
357
 
359
358
  finish(success = true, message = '') {
@@ -533,14 +532,20 @@ function printWelcomeScreen() {
533
532
 
534
533
  function httpsGet(url, options = {}) {
535
534
  return new Promise((resolve, reject) => {
535
+ const headers = {
536
+ 'User-Agent': CONFIG.userAgent,
537
+ Accept: 'application/vnd.github.v3+json',
538
+ ...options.headers,
539
+ };
540
+
541
+ if (process.env.GITHUB_TOKEN) {
542
+ headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
543
+ }
544
+
536
545
  const req = https.get(
537
546
  url,
538
547
  {
539
- headers: {
540
- 'User-Agent': CONFIG.userAgent,
541
- Accept: 'application/vnd.github.v3+json',
542
- ...options.headers,
543
- },
548
+ headers,
544
549
  },
545
550
  (res) => {
546
551
  // Handle redirects
@@ -582,12 +587,18 @@ async function downloadWithProgress(url, destPath, onProgress) {
582
587
 
583
588
  const makeRequest = (requestUrl) => {
584
589
  const urlObj = new URL(requestUrl);
590
+ const headers = {
591
+ 'User-Agent': CONFIG.userAgent,
592
+ };
593
+
594
+ if (process.env.GITHUB_TOKEN) {
595
+ headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
596
+ }
597
+
585
598
  const options = {
586
599
  hostname: urlObj.hostname,
587
600
  path: urlObj.pathname + urlObj.search,
588
- headers: {
589
- 'User-Agent': CONFIG.userAgent,
590
- },
601
+ headers,
591
602
  };
592
603
 
593
604
  https
@@ -642,7 +653,19 @@ async function downloadWithProgress(url, destPath, onProgress) {
642
653
 
643
654
  async function fetchReleaseInfo() {
644
655
  const response = await httpsGet(CONFIG.repoUrl);
645
- return JSON.parse(response);
656
+ const releases = JSON.parse(response);
657
+
658
+ // Find the first release that has the required assets
659
+ for (const release of releases) {
660
+ const hasManifest = release.assets.some((a) => a.name === 'db-manifest.json');
661
+ const hasDb = release.assets.some((a) => a.name === 'mcmodding-docs.db');
662
+
663
+ if (hasManifest && hasDb) {
664
+ return release;
665
+ }
666
+ }
667
+
668
+ throw new Error('No suitable release found with database artifacts');
646
669
  }
647
670
 
648
671
  async function fetchManifest(manifestUrl) {
@@ -737,6 +760,13 @@ async function main() {
737
760
  if (!manifestAsset) throw new Error('No manifest found in release');
738
761
 
739
762
  manifest = await fetchManifest(manifestAsset.browser_download_url);
763
+
764
+ // Find the database asset in the release to ensure we have the correct download URL
765
+ // This overrides the URL in the manifest which might be outdated or incorrect
766
+ const dbAsset = release.assets.find((a) => a.name === CONFIG.dbFileName);
767
+ if (dbAsset) {
768
+ manifest.downloadUrl = dbAsset.browser_download_url;
769
+ }
740
770
  } catch (error) {
741
771
  process.stdout.write(c.cursorUp + c.clearLine);
742
772
  printStepIndicator(2, 4, `Failed to fetch release info: ${error.message}`, 'error');
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAqdA,wBAAsB,YAAY,kBAkFjC"}
@@ -1,397 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import https from 'https';
4
- import readline from 'readline';
5
- import { fileURLToPath } from 'url';
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = path.dirname(__filename);
8
- const CONFIG = {
9
- repoOwner: 'OGMatrix',
10
- repoName: 'mcmodding-mcp',
11
- dataDir: path.join(__dirname, '..', '..', 'data'),
12
- userAgent: 'mcmodding-mcp-installer',
13
- };
14
- const OPTIONAL_DBS = [
15
- {
16
- id: 'mod-examples',
17
- name: 'Mod Examples Database',
18
- fileName: 'mod-examples.db',
19
- manifestName: 'mod-examples-manifest.json',
20
- description: '1000+ high-quality modding examples for Fabric & NeoForge',
21
- tagPrefix: 'examples-v',
22
- icon: '🧩',
23
- },
24
- ];
25
- const isColorSupported = process.stdout.isTTY && !process.env.NO_COLOR;
26
- const c = {
27
- reset: isColorSupported ? '\x1b[0m' : '',
28
- bold: isColorSupported ? '\x1b[1m' : '',
29
- dim: isColorSupported ? '\x1b[2m' : '',
30
- italic: isColorSupported ? '\x1b[3m' : '',
31
- underline: isColorSupported ? '\x1b[4m' : '',
32
- black: isColorSupported ? '\x1b[30m' : '',
33
- red: isColorSupported ? '\x1b[31m' : '',
34
- green: isColorSupported ? '\x1b[32m' : '',
35
- yellow: isColorSupported ? '\x1b[33m' : '',
36
- blue: isColorSupported ? '\x1b[34m' : '',
37
- magenta: isColorSupported ? '\x1b[35m' : '',
38
- cyan: isColorSupported ? '\x1b[36m' : '',
39
- white: isColorSupported ? '\x1b[37m' : '',
40
- brightBlack: isColorSupported ? '\x1b[90m' : '',
41
- brightRed: isColorSupported ? '\x1b[91m' : '',
42
- brightGreen: isColorSupported ? '\x1b[92m' : '',
43
- brightYellow: isColorSupported ? '\x1b[93m' : '',
44
- brightBlue: isColorSupported ? '\x1b[94m' : '',
45
- brightMagenta: isColorSupported ? '\x1b[95m' : '',
46
- brightCyan: isColorSupported ? '\x1b[96m' : '',
47
- brightWhite: isColorSupported ? '\x1b[97m' : '',
48
- bgBlue: isColorSupported ? '\x1b[44m' : '',
49
- clearLine: isColorSupported ? '\x1b[2K' : '',
50
- cursorUp: isColorSupported ? '\x1b[1A' : '',
51
- cursorHide: isColorSupported ? '\x1b[?25l' : '',
52
- cursorShow: isColorSupported ? '\x1b[?25h' : '',
53
- };
54
- const sym = {
55
- topLeft: '╔',
56
- topRight: '╗',
57
- bottomLeft: '╚',
58
- bottomRight: '╝',
59
- horizontal: '═',
60
- vertical: '║',
61
- sTopLeft: '┌',
62
- sTopRight: '┐',
63
- sBottomLeft: '└',
64
- sBottomRight: '┘',
65
- sHorizontal: '─',
66
- sVertical: '│',
67
- barFull: '█',
68
- barThreeQuarter: '▓',
69
- barHalf: '▒',
70
- barQuarter: '░',
71
- barEmpty: '░',
72
- check: '✔',
73
- cross: '✖',
74
- warning: '⚠',
75
- info: 'ℹ',
76
- star: '★',
77
- sparkle: '✨',
78
- rocket: '🚀',
79
- package: '📦',
80
- database: '🗄️',
81
- download: '⬇',
82
- shield: '🛡️',
83
- clock: '⏱',
84
- lightning: '⚡',
85
- arrowRight: '▶',
86
- dot: '●',
87
- circle: '○',
88
- selected: '◉',
89
- unselected: '○',
90
- };
91
- function getTerminalWidth() {
92
- return process.stdout.columns || 80;
93
- }
94
- function centerText(text, width) {
95
- const cleanText = text.replace(/\x1b\[[0-9;]*m/g, '');
96
- const totalPadding = Math.max(0, width - cleanText.length);
97
- const leftPadding = Math.floor(totalPadding / 2);
98
- const rightPadding = totalPadding - leftPadding;
99
- return ' '.repeat(leftPadding) + text + ' '.repeat(rightPadding);
100
- }
101
- function formatBytes(bytes) {
102
- if (bytes === 0)
103
- return '0 B';
104
- const k = 1024;
105
- const sizes = ['B', 'KB', 'MB', 'GB'];
106
- const i = Math.floor(Math.log(bytes) / Math.log(k));
107
- return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
108
- }
109
- function formatSpeed(bytesPerSecond) {
110
- return formatBytes(bytesPerSecond) + '/s';
111
- }
112
- async function fetchJson(url) {
113
- return new Promise((resolve, reject) => {
114
- const options = {
115
- headers: { 'User-Agent': CONFIG.userAgent },
116
- };
117
- https
118
- .get(url, options, (res) => {
119
- if (res.statusCode !== 200) {
120
- res.resume();
121
- return reject(new Error(`Request failed with status code ${res.statusCode}`));
122
- }
123
- let data = '';
124
- res.on('data', (chunk) => (data += chunk));
125
- res.on('end', () => {
126
- try {
127
- resolve(JSON.parse(data));
128
- }
129
- catch (e) {
130
- reject(e instanceof Error ? e : new Error(String(e)));
131
- }
132
- });
133
- })
134
- .on('error', (err) => reject(err instanceof Error ? err : new Error(String(err))));
135
- });
136
- }
137
- async function downloadFile(url, destPath, onProgress) {
138
- return new Promise((resolve, reject) => {
139
- const file = fs.createWriteStream(destPath);
140
- const options = {
141
- headers: { 'User-Agent': CONFIG.userAgent },
142
- };
143
- https
144
- .get(url, options, (res) => {
145
- if (res.statusCode === 302 || res.statusCode === 301) {
146
- if (!res.headers.location) {
147
- return reject(new Error('Redirect location missing'));
148
- }
149
- downloadFile(res.headers.location, destPath, onProgress).then(resolve).catch(reject);
150
- return;
151
- }
152
- if (res.statusCode !== 200) {
153
- res.resume();
154
- return reject(new Error(`Download failed with status code ${res.statusCode}`));
155
- }
156
- const totalSize = parseInt(res.headers['content-length'] || '0', 10);
157
- let downloadedSize = 0;
158
- let startTime = Date.now();
159
- res.on('data', (chunk) => {
160
- downloadedSize += chunk.length;
161
- file.write(chunk);
162
- const currentTime = Date.now();
163
- const elapsed = (currentTime - startTime) / 1000;
164
- const speed = elapsed > 0 ? downloadedSize / elapsed : 0;
165
- if (onProgress) {
166
- onProgress(downloadedSize, totalSize, speed);
167
- }
168
- });
169
- res.on('end', () => {
170
- file.end();
171
- resolve();
172
- });
173
- res.on('error', (err) => {
174
- fs.unlink(destPath, () => { });
175
- reject(err);
176
- });
177
- })
178
- .on('error', (err) => {
179
- fs.unlink(destPath, () => { });
180
- reject(err);
181
- });
182
- });
183
- }
184
- function printHeader() {
185
- console.clear();
186
- const width = Math.min(getTerminalWidth(), 80);
187
- const innerWidth = width - 4;
188
- console.log(c.brightCyan + sym.topLeft + sym.horizontal.repeat(width - 2) + sym.topRight + c.reset);
189
- console.log(c.brightCyan +
190
- sym.vertical +
191
- c.reset +
192
- centerText(`${c.brightWhite}${c.bold}MCModding-MCP Optional Components${c.reset}`, innerWidth) +
193
- c.brightCyan +
194
- sym.vertical +
195
- c.reset);
196
- console.log(c.brightCyan +
197
- sym.vertical +
198
- c.reset +
199
- centerText(`${c.dim}Enhance your AI assistant with specialized knowledge bases${c.reset}`, innerWidth) +
200
- c.brightCyan +
201
- sym.vertical +
202
- c.reset);
203
- console.log(c.brightCyan + sym.bottomLeft + sym.horizontal.repeat(width - 2) + sym.bottomRight + c.reset);
204
- console.log();
205
- }
206
- function drawProgressBar(current, total, speed, label = 'Downloading') {
207
- const width = Math.min(getTerminalWidth(), 80);
208
- const barWidth = Math.max(10, width - 30);
209
- const percentage = total > 0 ? Math.min(100, (current / total) * 100) : 0;
210
- const filledWidth = Math.round((percentage / 100) * barWidth);
211
- const emptyWidth = barWidth - filledWidth;
212
- const filledBar = c.brightGreen + sym.barFull.repeat(filledWidth) + c.reset;
213
- const emptyBar = c.dim + sym.barEmpty.repeat(emptyWidth) + c.reset;
214
- process.stdout.write(c.cursorHide);
215
- process.stdout.write(c.clearLine + '\r');
216
- const sizeStr = `${formatBytes(current)}/${formatBytes(total)}`;
217
- const speedStr = formatSpeed(speed);
218
- console.log(c.cursorUp + c.clearLine + `${c.cyan}${sym.download} ${label}...${c.reset}`);
219
- console.log(`${filledBar}${emptyBar} ${c.brightWhite}${percentage.toFixed(1)}%${c.reset}`);
220
- console.log(`${c.dim}${sizeStr} • ${speedStr}${c.reset}`);
221
- process.stdout.write(c.cursorUp + c.cursorUp);
222
- }
223
- function getLocalVersion(dbConfig) {
224
- const manifestPath = path.join(CONFIG.dataDir, dbConfig.manifestName);
225
- if (fs.existsSync(manifestPath)) {
226
- try {
227
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
228
- return manifest.version;
229
- }
230
- catch {
231
- return null;
232
- }
233
- }
234
- return null;
235
- }
236
- async function getRemoteVersion(dbConfig) {
237
- try {
238
- const releases = (await fetchJson(`https://api.github.com/repos/${CONFIG.repoOwner}/${CONFIG.repoName}/releases`));
239
- const release = releases.find((r) => r.tag_name.startsWith(dbConfig.tagPrefix));
240
- if (!release)
241
- return null;
242
- const version = release.tag_name.replace(dbConfig.tagPrefix, '');
243
- const dbAsset = release.assets.find((a) => a.name === dbConfig.fileName);
244
- const manifestAsset = release.assets.find((a) => a.name === dbConfig.manifestName);
245
- if (!dbAsset)
246
- return null;
247
- return {
248
- version,
249
- releaseId: release.id,
250
- downloadUrl: dbAsset.browser_download_url,
251
- manifestUrl: manifestAsset ? manifestAsset.browser_download_url : null,
252
- size: dbAsset.size,
253
- publishedAt: release.published_at,
254
- };
255
- }
256
- catch {
257
- return null;
258
- }
259
- }
260
- async function promptSelection(options) {
261
- const rl = readline.createInterface({
262
- input: process.stdin,
263
- output: process.stdout,
264
- });
265
- let selectedIndex = 0;
266
- const render = () => {
267
- printHeader();
268
- console.log(`${c.brightWhite}Select a database to install/update:${c.reset}\n`);
269
- options.forEach((opt, idx) => {
270
- const isSelected = idx === selectedIndex;
271
- const prefix = isSelected ? `${c.brightCyan}${sym.arrowRight} ` : ' ';
272
- const checkbox = opt.selected
273
- ? `${c.brightGreen}${sym.selected}${c.reset}`
274
- : `${c.dim}${sym.unselected}${c.reset}`;
275
- const style = isSelected ? c.brightWhite + c.bold : c.white;
276
- console.log(`${prefix}${checkbox} ${style}${opt.name}${c.reset}`);
277
- let status = '';
278
- if (opt.localVersion) {
279
- status += `${c.green}Installed: v${opt.localVersion}${c.reset}`;
280
- }
281
- else {
282
- status += `${c.dim}Not installed${c.reset}`;
283
- }
284
- if (opt.remoteInfo) {
285
- if (opt.localVersion && opt.remoteInfo.version !== opt.localVersion) {
286
- status += ` ${c.dim}→${c.reset} ${c.brightYellow}Update available: v${opt.remoteInfo.version}${c.reset}`;
287
- }
288
- else if (!opt.localVersion) {
289
- status += ` ${c.dim}→${c.reset} ${c.brightCyan}Available: v${opt.remoteInfo.version}${c.reset}`;
290
- }
291
- else {
292
- status += ` ${c.dim}(Latest)${c.reset}`;
293
- }
294
- status += ` ${c.dim}[${formatBytes(opt.remoteInfo.size)}]${c.reset}`;
295
- }
296
- else {
297
- status += ` ${c.red}(Offline/Unavailable)${c.reset}`;
298
- }
299
- console.log(` ${status}`);
300
- console.log(` ${c.dim}${opt.description}${c.reset}\n`);
301
- });
302
- console.log(`${c.dim}Use ↑/↓ to navigate, SPACE to toggle, ENTER to confirm${c.reset}`);
303
- };
304
- return new Promise((resolve) => {
305
- if (options.length > 0 && options[0]) {
306
- options[0].selected = true;
307
- }
308
- process.stdin.setRawMode(true);
309
- process.stdin.resume();
310
- render();
311
- process.stdin.on('data', (key) => {
312
- const keyStr = key.toString();
313
- if (keyStr === '\u0003') {
314
- process.exit(0);
315
- }
316
- else if (keyStr === '\u001b[A') {
317
- selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : options.length - 1;
318
- render();
319
- }
320
- else if (keyStr === '\u001b[B') {
321
- selectedIndex = selectedIndex < options.length - 1 ? selectedIndex + 1 : 0;
322
- render();
323
- }
324
- else if (keyStr === ' ') {
325
- const selectedOption = options[selectedIndex];
326
- if (selectedOption) {
327
- selectedOption.selected = !selectedOption.selected;
328
- render();
329
- }
330
- }
331
- else if (keyStr === '\r') {
332
- process.stdin.setRawMode(false);
333
- process.stdin.pause();
334
- rl.close();
335
- resolve(options.filter((o) => o.selected));
336
- }
337
- });
338
- });
339
- }
340
- export async function runInstaller() {
341
- printHeader();
342
- console.log(`${c.cyan}${sym.info} Checking for available databases...${c.reset}`);
343
- const choices = [];
344
- for (const db of OPTIONAL_DBS) {
345
- const localVersion = getLocalVersion(db);
346
- const remoteInfo = await getRemoteVersion(db);
347
- choices.push({ ...db, localVersion, remoteInfo, selected: false });
348
- }
349
- if (choices.length === 0) {
350
- console.log(`${c.yellow}No optional databases found in configuration.${c.reset}`);
351
- return;
352
- }
353
- const selected = await promptSelection(choices);
354
- if (selected.length === 0) {
355
- console.log(`\n${c.yellow}No databases selected. Exiting.${c.reset}`);
356
- return;
357
- }
358
- console.log(`\n${c.brightWhite}Starting installation...${c.reset}\n`);
359
- for (const item of selected) {
360
- if (!item.remoteInfo) {
361
- console.log(`${c.red}${sym.cross} Skipping ${item.name}: Remote version unavailable.${c.reset}`);
362
- continue;
363
- }
364
- const destDbPath = path.join(CONFIG.dataDir, item.fileName);
365
- const destManifestPath = path.join(CONFIG.dataDir, item.manifestName);
366
- console.log(`${c.brightCyan}${sym.package} Installing ${item.name} (v${item.remoteInfo.version})...${c.reset}`);
367
- if (!fs.existsSync(CONFIG.dataDir)) {
368
- fs.mkdirSync(CONFIG.dataDir, { recursive: true });
369
- }
370
- try {
371
- console.log();
372
- await downloadFile(item.remoteInfo.downloadUrl, destDbPath, (current, total, speed) => {
373
- drawProgressBar(current, total, speed, `Downloading ${item.fileName}`);
374
- });
375
- console.log(`\n${c.green}${sym.check} Download complete!${c.reset}`);
376
- if (item.remoteInfo.manifestUrl) {
377
- console.log(`${c.dim} Fetching manifest...${c.reset}`);
378
- await downloadFile(item.remoteInfo.manifestUrl, destManifestPath);
379
- }
380
- else {
381
- const minimalManifest = {
382
- version: item.remoteInfo.version,
383
- updatedAt: new Date().toISOString(),
384
- source: 'manual-install',
385
- };
386
- fs.writeFileSync(destManifestPath, JSON.stringify(minimalManifest, null, 2));
387
- }
388
- console.log(`${c.brightGreen}${sym.sparkle} Successfully installed ${item.name}!${c.reset}\n`);
389
- }
390
- catch (err) {
391
- const message = err instanceof Error ? err.message : String(err);
392
- console.error(`\n${c.red}${sym.cross} Failed to install ${item.name}: ${message}${c.reset}\n`);
393
- }
394
- }
395
- console.log(`${c.brightWhite}${sym.check} All operations completed.${c.reset}`);
396
- }
397
- //# sourceMappingURL=install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"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"}