@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 +25 -9
- package/dist/mcp.js +19 -7
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
5077
|
-
|
|
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)
|
|
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
|
|
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
|
-
|
|
36929
|
-
|
|
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)
|
|
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.
|
|
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",
|