mindsim 0.1.5 → 0.1.6

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 CHANGED
@@ -9,7 +9,7 @@ export declare const getPackageVersion: () => string;
9
9
  */
10
10
  export declare const checkForUpdates: (verbose?: boolean) => Promise<void>;
11
11
  /**
12
- * Auto-updates the SDK using npm
12
+ * Auto-updates the SDK using the detected package manager
13
13
  */
14
14
  export declare const updateSdk: () => Promise<void>;
15
15
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAYA;;;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,CA2B9C,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA6CA;;;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,CAgC9C,CAAC"}
package/dist/version.js CHANGED
@@ -11,6 +11,33 @@ const node_util_1 = require("node:util");
11
11
  const axios_1 = __importDefault(require("axios"));
12
12
  const semver_1 = __importDefault(require("semver"));
13
13
  const execAsync = (0, node_util_1.promisify)(node_child_process_1.exec);
14
+ /**
15
+ * Detects the package manager used in the current project
16
+ */
17
+ const detectPackageManager = () => {
18
+ const cwd = process.cwd();
19
+ // Check for lockfiles in order of preference
20
+ if (node_fs_1.default.existsSync(node_path_1.default.join(cwd, "pnpm-lock.yaml"))) {
21
+ return "pnpm";
22
+ }
23
+ if (node_fs_1.default.existsSync(node_path_1.default.join(cwd, "yarn.lock"))) {
24
+ return "yarn";
25
+ }
26
+ return "npm";
27
+ };
28
+ /**
29
+ * Gets the install command for a specific package manager
30
+ */
31
+ const getInstallCommand = (packageManager, packageName) => {
32
+ switch (packageManager) {
33
+ case "pnpm":
34
+ return `pnpm add ${packageName}@latest`;
35
+ case "yarn":
36
+ return `yarn add ${packageName}@latest`;
37
+ case "npm":
38
+ return `npm install ${packageName}@latest --save`;
39
+ }
40
+ };
14
41
  const PACKAGE_NAME = "mindsim";
15
42
  const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}`;
16
43
  /**
@@ -75,10 +102,11 @@ const checkForUpdates = async (verbose = false) => {
75
102
  };
76
103
  exports.checkForUpdates = checkForUpdates;
77
104
  /**
78
- * Auto-updates the SDK using npm
105
+ * Auto-updates the SDK using the detected package manager
79
106
  */
80
107
  const updateSdk = async () => {
81
108
  console.log(`Checking for updates for ${PACKAGE_NAME}...`);
109
+ const packageManager = detectPackageManager();
82
110
  try {
83
111
  const currentVersion = (0, exports.getPackageVersion)();
84
112
  const { data } = await axios_1.default.get(REGISTRY_URL);
@@ -87,18 +115,20 @@ const updateSdk = async () => {
87
115
  console.log(`You are already on the latest version (${currentVersion}).`);
88
116
  return;
89
117
  }
118
+ const installCommand = getInstallCommand(packageManager, PACKAGE_NAME);
90
119
  console.log(`Updating from ${currentVersion} to ${latestVersion}...`);
91
- console.log(`Running: npm install ${PACKAGE_NAME}@latest --save`);
92
- // We use npm install --save to ensure it updates package.json
93
- await execAsync(`npm install ${PACKAGE_NAME}@latest --save`);
120
+ console.log(`Detected package manager: ${packageManager}`);
121
+ console.log(`Running: ${installCommand}`);
122
+ await execAsync(installCommand);
94
123
  console.log("✅ Update complete! Please restart your application.");
95
124
  }
96
125
  catch (error) {
126
+ const manualCommand = getInstallCommand(packageManager, PACKAGE_NAME);
97
127
  console.error("❌ Failed to update MindSim SDK.");
98
128
  if (error instanceof Error) {
99
129
  console.error(error.message);
100
130
  }
101
- console.error("Please try running manually: npm install mindsim@latest");
131
+ console.error(`Please try running manually: ${manualCommand}`);
102
132
  }
103
133
  };
104
134
  exports.updateSdk = updateSdk;
@@ -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;AAE5B,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,yBAAI,CAAC,CAAC;AAElC,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,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAE,KAAK,CAAC,CAAC;QACjF,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,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,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,OAAO,aAAa,KAAK,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,gBAAgB,CAAC,CAAC;QAElE,8DAA8D;QAC9D,MAAM,SAAS,CAAC,eAAe,YAAY,gBAAgB,CAAC,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,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,yDAAyD,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC,CAAC;AA3BW,QAAA,SAAS,aA2BpB"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindsim",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
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
@@ -7,6 +7,39 @@ import semver from "semver";
7
7
 
8
8
  const execAsync = promisify(exec);
9
9
 
10
+ /**
11
+ * Detects the package manager used in the current project
12
+ */
13
+ const detectPackageManager = (): "pnpm" | "yarn" | "npm" => {
14
+ const cwd = process.cwd();
15
+
16
+ // Check for lockfiles in order of preference
17
+ if (fs.existsSync(path.join(cwd, "pnpm-lock.yaml"))) {
18
+ return "pnpm";
19
+ }
20
+ if (fs.existsSync(path.join(cwd, "yarn.lock"))) {
21
+ return "yarn";
22
+ }
23
+ return "npm";
24
+ };
25
+
26
+ /**
27
+ * Gets the install command for a specific package manager
28
+ */
29
+ const getInstallCommand = (
30
+ packageManager: "pnpm" | "yarn" | "npm",
31
+ packageName: string,
32
+ ): string => {
33
+ switch (packageManager) {
34
+ case "pnpm":
35
+ return `pnpm add ${packageName}@latest`;
36
+ case "yarn":
37
+ return `yarn add ${packageName}@latest`;
38
+ case "npm":
39
+ return `npm install ${packageName}@latest --save`;
40
+ }
41
+ };
42
+
10
43
  const PACKAGE_NAME = "mindsim";
11
44
  const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}`;
12
45
 
@@ -77,11 +110,13 @@ export const checkForUpdates = async (verbose = false): Promise<void> => {
77
110
  };
78
111
 
79
112
  /**
80
- * Auto-updates the SDK using npm
113
+ * Auto-updates the SDK using the detected package manager
81
114
  */
82
115
  export const updateSdk = async (): Promise<void> => {
83
116
  console.log(`Checking for updates for ${PACKAGE_NAME}...`);
84
117
 
118
+ const packageManager = detectPackageManager();
119
+
85
120
  try {
86
121
  const currentVersion = getPackageVersion();
87
122
  const { data } = await axios.get(REGISTRY_URL);
@@ -92,18 +127,21 @@ export const updateSdk = async (): Promise<void> => {
92
127
  return;
93
128
  }
94
129
 
130
+ const installCommand = getInstallCommand(packageManager, PACKAGE_NAME);
131
+
95
132
  console.log(`Updating from ${currentVersion} to ${latestVersion}...`);
96
- console.log(`Running: npm install ${PACKAGE_NAME}@latest --save`);
133
+ console.log(`Detected package manager: ${packageManager}`);
134
+ console.log(`Running: ${installCommand}`);
97
135
 
98
- // We use npm install --save to ensure it updates package.json
99
- await execAsync(`npm install ${PACKAGE_NAME}@latest --save`);
136
+ await execAsync(installCommand);
100
137
 
101
138
  console.log("✅ Update complete! Please restart your application.");
102
139
  } catch (error) {
140
+ const manualCommand = getInstallCommand(packageManager, PACKAGE_NAME);
103
141
  console.error("❌ Failed to update MindSim SDK.");
104
142
  if (error instanceof Error) {
105
143
  console.error(error.message);
106
144
  }
107
- console.error("Please try running manually: npm install mindsim@latest");
145
+ console.error(`Please try running manually: ${manualCommand}`);
108
146
  }
109
147
  };
@@ -165,17 +165,27 @@ describe("Version Module", () => {
165
165
  });
166
166
 
167
167
  describe("updateSdk", () => {
168
+ const MOCK_CWD = "/mock/project";
169
+
168
170
  beforeEach(() => {
169
171
  // Default local version
170
172
  mockedFs.existsSync.mockReturnValue(true);
171
173
  mockedFs.readFileSync.mockReturnValue(JSON.stringify({ version: "1.0.0" }));
174
+ // Mock process.cwd for package manager detection
175
+ vi.spyOn(process, "cwd").mockReturnValue(MOCK_CWD);
176
+ // Mock path.join to return predictable paths for lockfile checks
177
+ mockedPath.join.mockImplementation((...args) => args.join("/"));
172
178
  });
173
179
 
174
- it("should run npm install if update available", async () => {
180
+ it("should use npm install when no lockfile is found", async () => {
181
+ // No lockfiles found - defaults to npm
182
+ mockedFs.existsSync.mockImplementation((p) => {
183
+ if (p === MOCK_PACKAGE_PATH) return true; // package.json exists
184
+ return false; // no lockfiles
185
+ });
175
186
  mockedAxios.get.mockResolvedValue({
176
187
  data: { "dist-tags": { latest: "2.0.0" } },
177
188
  });
178
- // Mock the execAsync resolution
179
189
  mockExecAsync.mockResolvedValue({ stdout: "ok", stderr: "" });
180
190
 
181
191
  const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => {});
@@ -186,7 +196,49 @@ describe("Version Module", () => {
186
196
  expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Update complete"));
187
197
  });
188
198
 
199
+ it("should use pnpm add when pnpm-lock.yaml is found", async () => {
200
+ mockedFs.existsSync.mockImplementation((p) => {
201
+ if (p === MOCK_PACKAGE_PATH) return true;
202
+ if (p === `${MOCK_CWD}/pnpm-lock.yaml`) return true;
203
+ return false;
204
+ });
205
+ mockedAxios.get.mockResolvedValue({
206
+ data: { "dist-tags": { latest: "2.0.0" } },
207
+ });
208
+ mockExecAsync.mockResolvedValue({ stdout: "ok", stderr: "" });
209
+
210
+ const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => {});
211
+
212
+ await updateSdk();
213
+
214
+ expect(mockExecAsync).toHaveBeenCalledWith("pnpm add mindsim@latest");
215
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Update complete"));
216
+ });
217
+
218
+ it("should use yarn add when yarn.lock is found", async () => {
219
+ mockedFs.existsSync.mockImplementation((p) => {
220
+ if (p === MOCK_PACKAGE_PATH) return true;
221
+ if (p === `${MOCK_CWD}/yarn.lock`) return true;
222
+ return false;
223
+ });
224
+ mockedAxios.get.mockResolvedValue({
225
+ data: { "dist-tags": { latest: "2.0.0" } },
226
+ });
227
+ mockExecAsync.mockResolvedValue({ stdout: "ok", stderr: "" });
228
+
229
+ const consoleLogSpy = vi.spyOn(console, "log").mockImplementation(() => {});
230
+
231
+ await updateSdk();
232
+
233
+ expect(mockExecAsync).toHaveBeenCalledWith("yarn add mindsim@latest");
234
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining("Update complete"));
235
+ });
236
+
189
237
  it("should do nothing if already on latest", async () => {
238
+ mockedFs.existsSync.mockImplementation((p) => {
239
+ if (p === MOCK_PACKAGE_PATH) return true;
240
+ return false;
241
+ });
190
242
  mockedAxios.get.mockResolvedValue({
191
243
  data: { "dist-tags": { latest: "1.0.0" } },
192
244
  });
@@ -201,11 +253,15 @@ describe("Version Module", () => {
201
253
  );
202
254
  });
203
255
 
204
- it("should handle exec errors", async () => {
256
+ it("should handle exec errors and show correct manual command", async () => {
257
+ mockedFs.existsSync.mockImplementation((p) => {
258
+ if (p === MOCK_PACKAGE_PATH) return true;
259
+ if (p === `${MOCK_CWD}/pnpm-lock.yaml`) return true;
260
+ return false;
261
+ });
205
262
  mockedAxios.get.mockResolvedValue({
206
263
  data: { "dist-tags": { latest: "2.0.0" } },
207
264
  });
208
- // Mock execAsync rejection
209
265
  mockExecAsync.mockRejectedValue(new Error("Permission denied"));
210
266
 
211
267
  const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
@@ -214,6 +270,9 @@ describe("Version Module", () => {
214
270
 
215
271
  expect(consoleErrorSpy).toHaveBeenCalledWith("❌ Failed to update MindSim SDK.");
216
272
  expect(consoleErrorSpy).toHaveBeenCalledWith("Permission denied");
273
+ expect(consoleErrorSpy).toHaveBeenCalledWith(
274
+ "Please try running manually: pnpm add mindsim@latest",
275
+ );
217
276
  });
218
277
  });
219
278
  });