@edgemodders/edgedeck-mcp 0.29.0 → 0.29.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/dist/core.js CHANGED
@@ -3842,6 +3842,7 @@ __export(core_exports, {
3842
3842
  registerNxmHandler: () => registerNxmHandler,
3843
3843
  removeMod: () => removeMod,
3844
3844
  removeOlderBridges: () => removeOlderBridges,
3845
+ removeTemp: () => removeTemp,
3845
3846
  renameFamily: () => renameFamily,
3846
3847
  renameLoadout: () => renameLoadout,
3847
3848
  renameSection: () => renameSection,
@@ -3858,6 +3859,7 @@ __export(core_exports, {
3858
3859
  settleNewVersion: () => settleNewVersion,
3859
3860
  signIn: () => signIn,
3860
3861
  signInWithOAuth: () => signInWithOAuth,
3862
+ singleRednodeApp: () => singleRednodeApp,
3861
3863
  snapshot: () => snapshot,
3862
3864
  sourcePath: () => sourcePath,
3863
3865
  ssoPageUrl: () => ssoPageUrl,
@@ -4003,6 +4005,14 @@ function findRarTool() {
4003
4005
  if (unrar) return { exe: unrar, args: (file, dest) => ["x", "-y", "-o+", file, dest + path2.sep] };
4004
4006
  return void 0;
4005
4007
  }
4008
+ function removeTemp(dir) {
4009
+ try {
4010
+ fs2.rmSync(dir, { recursive: true, force: true, maxRetries: 6, retryDelay: 250 });
4011
+ return void 0;
4012
+ } catch (err) {
4013
+ return `could not remove the temporary folder ${dir} (${err instanceof Error ? err.message : String(err)}); Windows clears its temp folder in time`;
4014
+ }
4015
+ }
4006
4016
  async function unpackOrCopy(file, dest, sevenZa) {
4007
4017
  if (isArchiveFile(file)) return extractArchive(file, dest, sevenZa);
4008
4018
  fs2.mkdirSync(dest, { recursive: true });
@@ -4181,7 +4191,7 @@ ${stderr}`.split(/\r?\n/)) if (line.trim()) log(` ${line.trim()}`);
4181
4191
  });
4182
4192
  });
4183
4193
  } finally {
4184
- fs4.rmSync(temp, { recursive: true, force: true });
4194
+ removeTemp(temp);
4185
4195
  }
4186
4196
  if (!hasNet10(root)) throw new Error("The .NET 10 runtime did not install. See the log.");
4187
4197
  return root;
@@ -4231,7 +4241,7 @@ async function installBridge(release, storageDir, sevenZa, progress, log) {
4231
4241
  fs4.mkdirSync(target, { recursive: true });
4232
4242
  await extractArchive(zip, target, sevenZa);
4233
4243
  } finally {
4234
- fs4.rmSync(temp, { recursive: true, force: true });
4244
+ removeTemp(temp);
4235
4245
  }
4236
4246
  if (!fs4.existsSync(exe)) throw new Error("The zip did not contain REDbridge.exe.");
4237
4247
  log(`REDbridge ${release.version} installed at ${exe}`);
@@ -4306,7 +4316,8 @@ function folderName(name) {
4306
4316
  return name.replace(/[<>:"/\\|?*]+/g, "").trim() || "Mod";
4307
4317
  }
4308
4318
  function rednodeManifest(placements) {
4309
- const p = placements.find((x) => /^red4ext\/plugins\/REDnode\/apps\/[^/]+\/rednode-app\.json$/i.test(x.to));
4319
+ const to = singleRednodeApp(placements.map((x) => x.to));
4320
+ const p = to === void 0 ? void 0 : placements.find((x) => x.to === to);
4310
4321
  if (!p) return void 0;
4311
4322
  try {
4312
4323
  const m = JSON.parse(fs5.readFileSync(p.from, "utf8"));
@@ -4316,6 +4327,12 @@ function rednodeManifest(placements) {
4316
4327
  return void 0;
4317
4328
  }
4318
4329
  }
4330
+ function singleRednodeApp(paths) {
4331
+ const manifests = paths.filter((f) => /^red4ext\/plugins\/REDnode\/apps\/[^/]+\/rednode-app\.json$/i.test(f));
4332
+ if (manifests.length !== 1) return void 0;
4333
+ if (paths.some((f) => /^red4ext\/plugins\/REDnode\//i.test(f) && !/^red4ext\/plugins\/REDnode\/apps\//i.test(f))) return void 0;
4334
+ return manifests[0];
4335
+ }
4319
4336
  function rednodeId(manifest) {
4320
4337
  try {
4321
4338
  const m = JSON.parse(fs5.readFileSync(manifest, "utf8"));
@@ -5073,11 +5090,8 @@ function baseName(name) {
5073
5090
  return name.toLowerCase().replace(/[_\-]+/g, " ").replace(/\bv?\d+(?:\.\d+)+[a-z0-9]*\b/g, " ").replace(/[^a-z0-9]+/g, " ").trim();
5074
5091
  }
5075
5092
  function rednodePackageId(mod) {
5076
- for (const f of mod.files) {
5077
- const m = /^red4ext\/plugins\/REDnode\/apps\/([^/]+)\/rednode-app\.json$/i.exec(f);
5078
- if (m) return m[1].toLowerCase();
5079
- }
5080
- return void 0;
5093
+ const manifest = singleRednodeApp(mod.files);
5094
+ return manifest ? /^red4ext\/plugins\/REDnode\/apps\/([^/]+)\//i.exec(manifest)[1].toLowerCase() : void 0;
5081
5095
  }
5082
5096
  function familyKey(mod) {
5083
5097
  if (mod.family) return mod.family;
@@ -6442,7 +6456,7 @@ ${mod.files.join("\n")}`;
6442
6456
  const note = settled.replaced ? `; a new version of ${settled.replaced.name} ${settled.replaced.version}, which is off now` : settled.older ? `; older than ${settled.older.version}, so it is off` : "";
6443
6457
  return { data: { added: { id: mod.id, name: mod.name, version: mod.version, kinds: mod.kinds, files: mod.files.length, enabled: mod.enabled }, replaced: settled.replaced?.id, unplaced: c.unplaced }, text: `added ${mod.id} (${mod.files.length} files, ${mod.kinds.join(", ")})${note}; ${mod.enabled ? "it is on, " : ""}deploy to put it in the game${c.unplaced.length ? `; not placed: ${c.unplaced.join(", ")}` : ""}` };
6444
6458
  } finally {
6445
- if (temp) fs15.rmSync(temp, { recursive: true, force: true });
6459
+ if (temp) removeTemp(temp);
6446
6460
  }
6447
6461
  },
6448
6462
  /** Adds a REDcode or WolvenKit project's packed output, or refreshes the mod that follows it, and turns it on. */
@@ -6704,6 +6718,7 @@ ${mod.files.join("\n")}`;
6704
6718
  registerNxmHandler,
6705
6719
  removeMod,
6706
6720
  removeOlderBridges,
6721
+ removeTemp,
6707
6722
  renameFamily,
6708
6723
  renameLoadout,
6709
6724
  renameSection,
@@ -6720,6 +6735,7 @@ ${mod.files.join("\n")}`;
6720
6735
  settleNewVersion,
6721
6736
  signIn,
6722
6737
  signInWithOAuth,
6738
+ singleRednodeApp,
6723
6739
  snapshot,
6724
6740
  sourcePath,
6725
6741
  ssoPageUrl,
package/dist/mcp.js CHANGED
@@ -36665,7 +36665,8 @@ function folderName(name) {
36665
36665
  return name.replace(/[<>:"/\\|?*]+/g, "").trim() || "Mod";
36666
36666
  }
36667
36667
  function rednodeManifest(placements) {
36668
- const p = placements.find((x) => /^red4ext\/plugins\/REDnode\/apps\/[^/]+\/rednode-app\.json$/i.test(x.to));
36668
+ const to = singleRednodeApp(placements.map((x) => x.to));
36669
+ const p = to === void 0 ? void 0 : placements.find((x) => x.to === to);
36669
36670
  if (!p) return void 0;
36670
36671
  try {
36671
36672
  const m = JSON.parse(fs.readFileSync(p.from, "utf8"));
@@ -36675,6 +36676,12 @@ function rednodeManifest(placements) {
36675
36676
  return void 0;
36676
36677
  }
36677
36678
  }
36679
+ function singleRednodeApp(paths) {
36680
+ const manifests = paths.filter((f) => /^red4ext\/plugins\/REDnode\/apps\/[^/]+\/rednode-app\.json$/i.test(f));
36681
+ if (manifests.length !== 1) return void 0;
36682
+ if (paths.some((f) => /^red4ext\/plugins\/REDnode\//i.test(f) && !/^red4ext\/plugins\/REDnode\/apps\//i.test(f))) return void 0;
36683
+ return manifests[0];
36684
+ }
36678
36685
  function rednodeId(manifest) {
36679
36686
  try {
36680
36687
  const m = JSON.parse(fs.readFileSync(manifest, "utf8"));
@@ -36925,11 +36932,8 @@ function baseName(name) {
36925
36932
  return name.toLowerCase().replace(/[_\-]+/g, " ").replace(/\bv?\d+(?:\.\d+)+[a-z0-9]*\b/g, " ").replace(/[^a-z0-9]+/g, " ").trim();
36926
36933
  }
36927
36934
  function rednodePackageId(mod) {
36928
- for (const f of mod.files) {
36929
- const m = /^red4ext\/plugins\/REDnode\/apps\/([^/]+)\/rednode-app\.json$/i.exec(f);
36930
- if (m) return m[1].toLowerCase();
36931
- }
36932
- return void 0;
36935
+ const manifest = singleRednodeApp(mod.files);
36936
+ return manifest ? /^red4ext\/plugins\/REDnode\/apps\/([^/]+)\//i.exec(manifest)[1].toLowerCase() : void 0;
36933
36937
  }
36934
36938
  function familyKey(mod) {
36935
36939
  if (mod.family) return mod.family;
@@ -37530,6 +37534,14 @@ function findRarTool() {
37530
37534
  if (unrar) return { exe: unrar, args: (file2, dest) => ["x", "-y", "-o+", file2, dest + path5.sep] };
37531
37535
  return void 0;
37532
37536
  }
37537
+ function removeTemp(dir) {
37538
+ try {
37539
+ fs5.rmSync(dir, { recursive: true, force: true, maxRetries: 6, retryDelay: 250 });
37540
+ return void 0;
37541
+ } catch (err) {
37542
+ return `could not remove the temporary folder ${dir} (${err instanceof Error ? err.message : String(err)}); Windows clears its temp folder in time`;
37543
+ }
37544
+ }
37533
37545
  async function unpackOrCopy(file2, dest, sevenZa) {
37534
37546
  if (isArchiveFile(file2)) return extractArchive(file2, dest, sevenZa);
37535
37547
  fs5.mkdirSync(dest, { recursive: true });
@@ -38130,7 +38142,7 @@ ${mod.files.join("\n")}`;
38130
38142
  const note = settled.replaced ? `; a new version of ${settled.replaced.name} ${settled.replaced.version}, which is off now` : settled.older ? `; older than ${settled.older.version}, so it is off` : "";
38131
38143
  return { data: { added: { id: mod.id, name: mod.name, version: mod.version, kinds: mod.kinds, files: mod.files.length, enabled: mod.enabled }, replaced: settled.replaced?.id, unplaced: c.unplaced }, text: `added ${mod.id} (${mod.files.length} files, ${mod.kinds.join(", ")})${note}; ${mod.enabled ? "it is on, " : ""}deploy to put it in the game${c.unplaced.length ? `; not placed: ${c.unplaced.join(", ")}` : ""}` };
38132
38144
  } finally {
38133
- if (temp) fs11.rmSync(temp, { recursive: true, force: true });
38145
+ if (temp) removeTemp(temp);
38134
38146
  }
38135
38147
  },
38136
38148
  /** Adds a REDcode or WolvenKit project's packed output, or refreshes the mod that follows it, and turns it on. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edgemodders/edgedeck-mcp",
3
- "version": "0.29.0",
3
+ "version": "0.29.1",
4
4
  "description": "EDGEdeck's MCP server and command line: manage Cyberpunk 2077 mods (add, turn on or off, order, deploy, undo, conflicts, loadouts) from an AI assistant or a script.",
5
5
  "license": "MIT",
6
6
  "author": "Edgemodders",