mindsim 0.1.7 → 0.1.8
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/version.d.ts.map +1 -1
- package/dist/version.js +64 -17
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/version.ts +76 -19
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAsGA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAqBpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAU,iBAAe,KAAG,OAAO,CAAC,IAAI,CAiCnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,IAAI,CAiC9C,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -13,30 +13,76 @@ const semver_1 = __importDefault(require("semver"));
|
|
|
13
13
|
const logger_1 = require("./logger");
|
|
14
14
|
const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
15
15
|
/**
|
|
16
|
-
* Detects the
|
|
16
|
+
* Detects the installation context (global vs local, and which package manager)
|
|
17
17
|
*/
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
const detectInstallContext = () => {
|
|
19
|
+
const home = process.env.HOME || "";
|
|
20
|
+
const appData = process.env.APPDATA || "";
|
|
21
|
+
// Global path patterns mapped to their package managers
|
|
22
|
+
const globalPatterns = [
|
|
23
|
+
// pnpm global paths
|
|
24
|
+
{ pattern: node_path_1.default.join(home, "Library/pnpm"), pm: "pnpm" },
|
|
25
|
+
{ pattern: node_path_1.default.join(home, ".local/share/pnpm"), pm: "pnpm" },
|
|
26
|
+
{ pattern: node_path_1.default.join(appData, "pnpm"), pm: "pnpm" },
|
|
27
|
+
// yarn global paths
|
|
28
|
+
{ pattern: node_path_1.default.join(home, ".yarn"), pm: "yarn" },
|
|
29
|
+
{ pattern: node_path_1.default.join(home, ".config/yarn"), pm: "yarn" },
|
|
30
|
+
{ pattern: node_path_1.default.join(appData, "Yarn"), pm: "yarn" },
|
|
31
|
+
// npm global paths (including nvm)
|
|
32
|
+
{ pattern: "/usr/local/lib/node_modules", pm: "npm" },
|
|
33
|
+
{ pattern: "/usr/lib/node_modules", pm: "npm" },
|
|
34
|
+
{ pattern: node_path_1.default.join(home, ".nvm"), pm: "npm" },
|
|
35
|
+
{ pattern: node_path_1.default.join(home, ".npm-global"), pm: "npm" },
|
|
36
|
+
{ pattern: node_path_1.default.join(appData, "npm"), pm: "npm" },
|
|
37
|
+
];
|
|
38
|
+
// Check if we're in a global installation path
|
|
39
|
+
for (const { pattern, pm } of globalPatterns) {
|
|
40
|
+
if (pattern && __dirname.startsWith(pattern)) {
|
|
41
|
+
return { isGlobal: true, packageManager: pm };
|
|
42
|
+
}
|
|
23
43
|
}
|
|
24
|
-
if
|
|
25
|
-
|
|
44
|
+
// Check if we're in a local project's node_modules
|
|
45
|
+
if (__dirname.includes("/node_modules/mindsim/")) {
|
|
46
|
+
// Detect local package manager from lockfiles
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
let pm = "npm";
|
|
49
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(cwd, "pnpm-lock.yaml"))) {
|
|
50
|
+
pm = "pnpm";
|
|
51
|
+
}
|
|
52
|
+
else if (node_fs_1.default.existsSync(node_path_1.default.join(cwd, "yarn.lock"))) {
|
|
53
|
+
pm = "yarn";
|
|
54
|
+
}
|
|
55
|
+
return { isGlobal: false, packageManager: pm };
|
|
26
56
|
}
|
|
27
|
-
|
|
57
|
+
// Default: assume global npm (safest default for CLI tools)
|
|
58
|
+
return { isGlobal: true, packageManager: "npm" };
|
|
28
59
|
};
|
|
29
60
|
/**
|
|
30
|
-
* Gets the
|
|
61
|
+
* Gets the update command for a specific package manager.
|
|
62
|
+
* Uses install/add with @latest to ensure we get the absolute latest version,
|
|
63
|
+
* not constrained by semver ranges in package.json.
|
|
31
64
|
*/
|
|
32
|
-
const
|
|
65
|
+
const getUpdateCommand = (packageManager, packageName, global) => {
|
|
66
|
+
if (global) {
|
|
67
|
+
switch (packageManager) {
|
|
68
|
+
case "pnpm":
|
|
69
|
+
// pnpm add -g with @latest ensures latest version
|
|
70
|
+
return `pnpm add -g ${packageName}@latest`;
|
|
71
|
+
case "yarn":
|
|
72
|
+
// yarn global add with @latest ensures latest version
|
|
73
|
+
return `yarn global add ${packageName}@latest`;
|
|
74
|
+
case "npm":
|
|
75
|
+
// npm install -g with @latest is more reliable than npm update -g
|
|
76
|
+
return `npm install -g ${packageName}@latest`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
33
79
|
switch (packageManager) {
|
|
34
80
|
case "pnpm":
|
|
35
81
|
return `pnpm add ${packageName}@latest`;
|
|
36
82
|
case "yarn":
|
|
37
83
|
return `yarn add ${packageName}@latest`;
|
|
38
84
|
case "npm":
|
|
39
|
-
return `npm install ${packageName}@latest
|
|
85
|
+
return `npm install ${packageName}@latest`;
|
|
40
86
|
}
|
|
41
87
|
};
|
|
42
88
|
const PACKAGE_NAME = "mindsim";
|
|
@@ -107,7 +153,7 @@ exports.checkForUpdates = checkForUpdates;
|
|
|
107
153
|
*/
|
|
108
154
|
const updateSdk = async () => {
|
|
109
155
|
console.log(`Checking for updates for ${PACKAGE_NAME}...`);
|
|
110
|
-
const packageManager =
|
|
156
|
+
const { isGlobal, packageManager } = detectInstallContext();
|
|
111
157
|
try {
|
|
112
158
|
const currentVersion = (0, exports.getPackageVersion)();
|
|
113
159
|
const { data } = await axios_1.default.get(REGISTRY_URL);
|
|
@@ -116,15 +162,16 @@ const updateSdk = async () => {
|
|
|
116
162
|
console.log(`You are already on the latest version (${currentVersion}).`);
|
|
117
163
|
return;
|
|
118
164
|
}
|
|
119
|
-
const
|
|
165
|
+
const updateCommand = getUpdateCommand(packageManager, PACKAGE_NAME, isGlobal);
|
|
120
166
|
console.log(`Updating from ${currentVersion} to ${latestVersion}...`);
|
|
167
|
+
console.log(`Installation type: ${isGlobal ? "global" : "local"}`);
|
|
121
168
|
console.log(`Detected package manager: ${packageManager}`);
|
|
122
|
-
console.log(`Running: ${
|
|
123
|
-
await execAsync(
|
|
169
|
+
console.log(`Running: ${updateCommand}`);
|
|
170
|
+
await execAsync(updateCommand);
|
|
124
171
|
console.log("✅ Update complete! Please restart your application.");
|
|
125
172
|
}
|
|
126
173
|
catch (error) {
|
|
127
|
-
const manualCommand =
|
|
174
|
+
const manualCommand = getUpdateCommand(packageManager, PACKAGE_NAME, isGlobal);
|
|
128
175
|
console.error("❌ Failed to update MindSim SDK.");
|
|
129
176
|
if (error instanceof Error) {
|
|
130
177
|
console.error(error.message);
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA0C;AAC1C,sDAAyB;AACzB,0DAA6B;AAC7B,yCAAsC;AACtC,kDAA0B;AAC1B,oDAA4B;AAC5B,qCAAqC;AAErC,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,yBAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA0C;AAC1C,sDAAyB;AACzB,0DAA6B;AAC7B,yCAAsC;AACtC,kDAA0B;AAC1B,oDAA4B;AAC5B,qCAAqC;AAErC,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,yBAAI,CAAC,CAAC;AASlC;;GAEG;AACH,MAAM,oBAAoB,GAAG,GAAmB,EAAE;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAE1C,wDAAwD;IACxD,MAAM,cAAc,GAAmD;QACrE,oBAAoB;QACpB,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QACxD,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QAC7D,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QACnD,oBAAoB;QACpB,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QACjD,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QACxD,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE;QACnD,mCAAmC;QACnC,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE,EAAE,KAAK,EAAE;QACrD,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,KAAK,EAAE;QAC/C,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE;QAC/C,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE;QACtD,EAAE,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE;KAClD,CAAC;IAEF,+CAA+C;IAC/C,KAAK,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,cAAc,EAAE,CAAC;QAC7C,IAAI,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACjD,8CAA8C;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,EAAE,GAAmB,KAAK,CAAC;QAC/B,IAAI,iBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;YACpD,EAAE,GAAG,MAAM,CAAC;QACd,CAAC;aAAM,IAAI,iBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YACtD,EAAE,GAAG,MAAM,CAAC;QACd,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IAED,4DAA4D;IAC5D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CACvB,cAA8B,EAC9B,WAAmB,EACnB,MAAe,EACP,EAAE;IACV,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,MAAM;gBACT,kDAAkD;gBAClD,OAAO,eAAe,WAAW,SAAS,CAAC;YAC7C,KAAK,MAAM;gBACT,sDAAsD;gBACtD,OAAO,mBAAmB,WAAW,SAAS,CAAC;YACjD,KAAK,KAAK;gBACR,kEAAkE;gBAClE,OAAO,kBAAkB,WAAW,SAAS,CAAC;QAClD,CAAC;IACH,CAAC;IACD,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,YAAY,WAAW,SAAS,CAAC;QAC1C,KAAK,MAAM;YACT,OAAO,YAAY,WAAW,SAAS,CAAC;QAC1C,KAAK,KAAK;YACR,OAAO,eAAe,WAAW,SAAS,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,YAAY,GAAG,8BAA8B,YAAY,EAAE,CAAC;AAElE;;;GAGG;AACI,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,IAAI,CAAC;QACH,4DAA4D;QAC5D,4CAA4C;QAC5C,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAE/D,wDAAwD;QACxD,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAC9D,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,kBAAS,GAAE,CAAC,IAAI,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;QACxE,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B;AAEF;;;GAGG;AACI,MAAM,eAAe,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAiB,EAAE;IACtE,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAA,yBAAiB,GAAE,CAAC;QAE3C,qCAAqC;QACrC,uEAAuE;QACvE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAE/C,IAAI,gBAAM,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,YAAY,GAAG,iCAAiC,YAAY,MAAM,aAAa,EAAE,CAAC;YAExF,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,iBAAiB,YAAY,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,+BAA+B,cAAc,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CACX,8BAA8B,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAjCW,QAAA,eAAe,mBAiC1B;AAEF;;GAEG;AACI,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,KAAK,CAAC,CAAC;IAE3D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAA,yBAAiB,GAAE,CAAC;QAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAE/C,IAAI,CAAC,gBAAM,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,0CAA0C,cAAc,IAAI,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE/E,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,OAAO,aAAa,KAAK,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,6BAA6B,cAAc,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,EAAE,CAAC,CAAC;QAEzC,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;QAE/B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,gBAAgB,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC;AAjCW,QAAA,SAAS,aAiCpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mindsim",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "The official MindSim typescript SDK allows you to programmatically create digital minds, populate them with conversational data, and run powerful simulations to get an accurate preview of how the person will think, feel, say, and act in any scenario.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
package/src/version.ts
CHANGED
|
@@ -8,36 +8,92 @@ import { getLogger } from "./logger";
|
|
|
8
8
|
|
|
9
9
|
const execAsync = promisify(exec);
|
|
10
10
|
|
|
11
|
+
type PackageManager = "pnpm" | "yarn" | "npm";
|
|
12
|
+
|
|
13
|
+
interface InstallContext {
|
|
14
|
+
isGlobal: boolean;
|
|
15
|
+
packageManager: PackageManager;
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
/**
|
|
12
|
-
* Detects the
|
|
19
|
+
* Detects the installation context (global vs local, and which package manager)
|
|
13
20
|
*/
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
const detectInstallContext = (): InstallContext => {
|
|
22
|
+
const home = process.env.HOME || "";
|
|
23
|
+
const appData = process.env.APPDATA || "";
|
|
24
|
+
|
|
25
|
+
// Global path patterns mapped to their package managers
|
|
26
|
+
const globalPatterns: Array<{ pattern: string; pm: PackageManager }> = [
|
|
27
|
+
// pnpm global paths
|
|
28
|
+
{ pattern: path.join(home, "Library/pnpm"), pm: "pnpm" },
|
|
29
|
+
{ pattern: path.join(home, ".local/share/pnpm"), pm: "pnpm" },
|
|
30
|
+
{ pattern: path.join(appData, "pnpm"), pm: "pnpm" },
|
|
31
|
+
// yarn global paths
|
|
32
|
+
{ pattern: path.join(home, ".yarn"), pm: "yarn" },
|
|
33
|
+
{ pattern: path.join(home, ".config/yarn"), pm: "yarn" },
|
|
34
|
+
{ pattern: path.join(appData, "Yarn"), pm: "yarn" },
|
|
35
|
+
// npm global paths (including nvm)
|
|
36
|
+
{ pattern: "/usr/local/lib/node_modules", pm: "npm" },
|
|
37
|
+
{ pattern: "/usr/lib/node_modules", pm: "npm" },
|
|
38
|
+
{ pattern: path.join(home, ".nvm"), pm: "npm" },
|
|
39
|
+
{ pattern: path.join(home, ".npm-global"), pm: "npm" },
|
|
40
|
+
{ pattern: path.join(appData, "npm"), pm: "npm" },
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
// Check if we're in a global installation path
|
|
44
|
+
for (const { pattern, pm } of globalPatterns) {
|
|
45
|
+
if (pattern && __dirname.startsWith(pattern)) {
|
|
46
|
+
return { isGlobal: true, packageManager: pm };
|
|
47
|
+
}
|
|
20
48
|
}
|
|
21
|
-
|
|
22
|
-
|
|
49
|
+
|
|
50
|
+
// Check if we're in a local project's node_modules
|
|
51
|
+
if (__dirname.includes("/node_modules/mindsim/")) {
|
|
52
|
+
// Detect local package manager from lockfiles
|
|
53
|
+
const cwd = process.cwd();
|
|
54
|
+
let pm: PackageManager = "npm";
|
|
55
|
+
if (fs.existsSync(path.join(cwd, "pnpm-lock.yaml"))) {
|
|
56
|
+
pm = "pnpm";
|
|
57
|
+
} else if (fs.existsSync(path.join(cwd, "yarn.lock"))) {
|
|
58
|
+
pm = "yarn";
|
|
59
|
+
}
|
|
60
|
+
return { isGlobal: false, packageManager: pm };
|
|
23
61
|
}
|
|
24
|
-
|
|
62
|
+
|
|
63
|
+
// Default: assume global npm (safest default for CLI tools)
|
|
64
|
+
return { isGlobal: true, packageManager: "npm" };
|
|
25
65
|
};
|
|
26
66
|
|
|
27
67
|
/**
|
|
28
|
-
* Gets the
|
|
68
|
+
* Gets the update command for a specific package manager.
|
|
69
|
+
* Uses install/add with @latest to ensure we get the absolute latest version,
|
|
70
|
+
* not constrained by semver ranges in package.json.
|
|
29
71
|
*/
|
|
30
|
-
const
|
|
31
|
-
packageManager:
|
|
72
|
+
const getUpdateCommand = (
|
|
73
|
+
packageManager: PackageManager,
|
|
32
74
|
packageName: string,
|
|
75
|
+
global: boolean,
|
|
33
76
|
): string => {
|
|
77
|
+
if (global) {
|
|
78
|
+
switch (packageManager) {
|
|
79
|
+
case "pnpm":
|
|
80
|
+
// pnpm add -g with @latest ensures latest version
|
|
81
|
+
return `pnpm add -g ${packageName}@latest`;
|
|
82
|
+
case "yarn":
|
|
83
|
+
// yarn global add with @latest ensures latest version
|
|
84
|
+
return `yarn global add ${packageName}@latest`;
|
|
85
|
+
case "npm":
|
|
86
|
+
// npm install -g with @latest is more reliable than npm update -g
|
|
87
|
+
return `npm install -g ${packageName}@latest`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
34
90
|
switch (packageManager) {
|
|
35
91
|
case "pnpm":
|
|
36
92
|
return `pnpm add ${packageName}@latest`;
|
|
37
93
|
case "yarn":
|
|
38
94
|
return `yarn add ${packageName}@latest`;
|
|
39
95
|
case "npm":
|
|
40
|
-
return `npm install ${packageName}@latest
|
|
96
|
+
return `npm install ${packageName}@latest`;
|
|
41
97
|
}
|
|
42
98
|
};
|
|
43
99
|
|
|
@@ -116,7 +172,7 @@ export const checkForUpdates = async (verbose = false): Promise<void> => {
|
|
|
116
172
|
export const updateSdk = async (): Promise<void> => {
|
|
117
173
|
console.log(`Checking for updates for ${PACKAGE_NAME}...`);
|
|
118
174
|
|
|
119
|
-
const packageManager =
|
|
175
|
+
const { isGlobal, packageManager } = detectInstallContext();
|
|
120
176
|
|
|
121
177
|
try {
|
|
122
178
|
const currentVersion = getPackageVersion();
|
|
@@ -128,17 +184,18 @@ export const updateSdk = async (): Promise<void> => {
|
|
|
128
184
|
return;
|
|
129
185
|
}
|
|
130
186
|
|
|
131
|
-
const
|
|
187
|
+
const updateCommand = getUpdateCommand(packageManager, PACKAGE_NAME, isGlobal);
|
|
132
188
|
|
|
133
189
|
console.log(`Updating from ${currentVersion} to ${latestVersion}...`);
|
|
190
|
+
console.log(`Installation type: ${isGlobal ? "global" : "local"}`);
|
|
134
191
|
console.log(`Detected package manager: ${packageManager}`);
|
|
135
|
-
console.log(`Running: ${
|
|
192
|
+
console.log(`Running: ${updateCommand}`);
|
|
136
193
|
|
|
137
|
-
await execAsync(
|
|
194
|
+
await execAsync(updateCommand);
|
|
138
195
|
|
|
139
196
|
console.log("✅ Update complete! Please restart your application.");
|
|
140
197
|
} catch (error) {
|
|
141
|
-
const manualCommand =
|
|
198
|
+
const manualCommand = getUpdateCommand(packageManager, PACKAGE_NAME, isGlobal);
|
|
142
199
|
console.error("❌ Failed to update MindSim SDK.");
|
|
143
200
|
if (error instanceof Error) {
|
|
144
201
|
console.error(error.message);
|