@mcptoolshop/venvkit 0.2.1 → 1.0.0

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.
@@ -156,5 +156,172 @@ describe("runLog", () => {
156
156
  expect(summary.byEnv.size).toBe(0);
157
157
  });
158
158
  });
159
+ describe("task lifecycle logging", () => {
160
+ let tempDir;
161
+ let logPath;
162
+ beforeEach(async () => {
163
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "venvkit-lifecycle-"));
164
+ logPath = path.join(tempDir, "lifecycle.jsonl");
165
+ });
166
+ afterEach(async () => {
167
+ await fs.rm(tempDir, { recursive: true, force: true });
168
+ });
169
+ it("records task start with timestamp", async () => {
170
+ const startTime = new Date().toISOString();
171
+ const evt = makeRunEvent({
172
+ at: startTime,
173
+ taskName: "pytest",
174
+ ok: true,
175
+ });
176
+ await appendRunLog(logPath, evt);
177
+ const runs = await readRunLog(logPath);
178
+ expect(runs).toHaveLength(1);
179
+ expect(runs[0]?.at).toBe(startTime);
180
+ expect(runs[0]?.task.name).toBe("pytest");
181
+ });
182
+ it("records task completion with exit code", async () => {
183
+ const evt = makeRunEvent({
184
+ ok: true,
185
+ outcome: { ok: true, exitCode: 0, durationMs: 1234 },
186
+ });
187
+ await appendRunLog(logPath, evt);
188
+ const runs = await readRunLog(logPath);
189
+ expect(runs[0]?.outcome.ok).toBe(true);
190
+ expect(runs[0]?.outcome.exitCode).toBe(0);
191
+ expect(runs[0]?.outcome.durationMs).toBe(1234);
192
+ });
193
+ it("records task failure with error class", async () => {
194
+ const evt = makeRunEvent({
195
+ ok: false,
196
+ errorClass: "SSL_BROKEN",
197
+ });
198
+ await appendRunLog(logPath, evt);
199
+ const runs = await readRunLog(logPath);
200
+ expect(runs[0]?.outcome.ok).toBe(false);
201
+ expect(runs[0]?.outcome.errorClass).toBe("SSL_BROKEN");
202
+ });
203
+ it("records task failure with stderr snippet", async () => {
204
+ const evt = {
205
+ ...makeRunEvent({ ok: false }),
206
+ outcome: {
207
+ ok: false,
208
+ exitCode: 1,
209
+ errorClass: "IMPORT_ERROR",
210
+ stderrSnippet: "ModuleNotFoundError: No module named 'torch'",
211
+ },
212
+ };
213
+ await appendRunLog(logPath, evt);
214
+ const runs = await readRunLog(logPath);
215
+ expect(runs[0]?.outcome.stderrSnippet).toContain("ModuleNotFoundError");
216
+ });
217
+ });
218
+ describe("concurrent task handling", () => {
219
+ let tempDir;
220
+ let logPath;
221
+ beforeEach(async () => {
222
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "venvkit-concurrent-"));
223
+ logPath = path.join(tempDir, "concurrent.jsonl");
224
+ });
225
+ afterEach(async () => {
226
+ await fs.rm(tempDir, { recursive: true, force: true });
227
+ });
228
+ it("handles concurrent appends from multiple tasks", async () => {
229
+ // Simulate multiple concurrent task completions
230
+ const events = Array.from({ length: 10 }, (_, i) => makeRunEvent({ taskName: `task${i}`, runId: `run_concurrent_${i}` }));
231
+ // Append all concurrently
232
+ await Promise.all(events.map((evt) => appendRunLog(logPath, evt)));
233
+ const runs = await readRunLog(logPath);
234
+ // All events should be recorded
235
+ expect(runs).toHaveLength(10);
236
+ const runIds = runs.map((r) => r.runId);
237
+ events.forEach((evt) => {
238
+ expect(runIds).toContain(evt.runId);
239
+ });
240
+ });
241
+ it("maintains event order within single task", async () => {
242
+ // Write sequentially to maintain order
243
+ for (let i = 0; i < 5; i++) {
244
+ await appendRunLog(logPath, makeRunEvent({ taskName: "sequential", runId: `run_seq_${i}` }));
245
+ }
246
+ const runs = await readRunLog(logPath);
247
+ expect(runs).toHaveLength(5);
248
+ for (let i = 0; i < 5; i++) {
249
+ expect(runs[i]?.runId).toBe(`run_seq_${i}`);
250
+ }
251
+ });
252
+ });
253
+ describe("log persistence and retrieval", () => {
254
+ let tempDir;
255
+ let logPath;
256
+ beforeEach(async () => {
257
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "venvkit-persist-"));
258
+ logPath = path.join(tempDir, "persist.jsonl");
259
+ });
260
+ afterEach(async () => {
261
+ await fs.rm(tempDir, { recursive: true, force: true });
262
+ });
263
+ it("persists events across sessions", async () => {
264
+ // Session 1: write events
265
+ await appendRunLog(logPath, makeRunEvent({ taskName: "session1", runId: "run_s1" }));
266
+ await appendRunLog(logPath, makeRunEvent({ taskName: "session1", runId: "run_s2" }));
267
+ // Session 2: read and write more
268
+ const initialRuns = await readRunLog(logPath);
269
+ expect(initialRuns).toHaveLength(2);
270
+ await appendRunLog(logPath, makeRunEvent({ taskName: "session2", runId: "run_s3" }));
271
+ // Session 3: verify all present
272
+ const finalRuns = await readRunLog(logPath);
273
+ expect(finalRuns).toHaveLength(3);
274
+ expect(finalRuns.map((r) => r.runId)).toEqual(["run_s1", "run_s2", "run_s3"]);
275
+ });
276
+ it("retrieves runs by various criteria", async () => {
277
+ await appendRunLog(logPath, makeRunEvent({ taskName: "pytest", ok: true }));
278
+ await appendRunLog(logPath, makeRunEvent({ taskName: "pytest", ok: false }));
279
+ await appendRunLog(logPath, makeRunEvent({ taskName: "lint", ok: true }));
280
+ const runs = await readRunLog(logPath);
281
+ const summary = summarizeRuns(runs);
282
+ // Can filter by task
283
+ expect(summary.byTask.get("pytest")).toEqual({ passed: 1, failed: 1 });
284
+ expect(summary.byTask.get("lint")).toEqual({ passed: 1, failed: 0 });
285
+ });
286
+ });
287
+ describe("log file operations", () => {
288
+ let tempDir;
289
+ let logPath;
290
+ beforeEach(async () => {
291
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "venvkit-ops-"));
292
+ logPath = path.join(tempDir, "ops.jsonl");
293
+ });
294
+ afterEach(async () => {
295
+ await fs.rm(tempDir, { recursive: true, force: true });
296
+ });
297
+ it("handles log file with only newlines", async () => {
298
+ await fs.writeFile(logPath, "\n\n\n", "utf8");
299
+ const runs = await readRunLog(logPath);
300
+ expect(runs).toHaveLength(0);
301
+ });
302
+ it("handles very large events", async () => {
303
+ const largeStderr = "x".repeat(10000);
304
+ const evt = {
305
+ ...makeRunEvent({ ok: false }),
306
+ outcome: {
307
+ ok: false,
308
+ exitCode: 1,
309
+ stderrSnippet: largeStderr,
310
+ },
311
+ };
312
+ await appendRunLog(logPath, evt);
313
+ const runs = await readRunLog(logPath);
314
+ expect(runs).toHaveLength(1);
315
+ expect(runs[0]?.outcome.stderrSnippet).toBe(largeStderr);
316
+ });
317
+ it("clears log by overwriting", async () => {
318
+ await appendRunLog(logPath, makeRunEvent({ runId: "run_1" }));
319
+ await appendRunLog(logPath, makeRunEvent({ runId: "run_2" }));
320
+ // Clear by overwriting with empty content
321
+ await fs.writeFile(logPath, "", "utf8");
322
+ const runs = await readRunLog(logPath);
323
+ expect(runs).toHaveLength(0);
324
+ });
325
+ });
159
326
  });
160
327
  //# sourceMappingURL=runLog.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runLog.test.js","sourceRoot":"","sources":["../runLog.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runLog.test.js","sourceRoot":"","sources":["../runLog.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanEnvPaths.d.ts","sourceRoot":"","sources":["../scanEnvPaths.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE;QACJ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAsHF,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiD5E"}
1
+ {"version":3,"file":"scanEnvPaths.d.ts","sourceRoot":"","sources":["../scanEnvPaths.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE;QACJ,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AA0HF,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiD5E"}
@@ -15,6 +15,8 @@
15
15
  import * as fs from "node:fs/promises";
16
16
  import * as path from "node:path";
17
17
  import * as os from "node:os";
18
+ // Well-known venv directory names that start with "." — exempt from hidden-dir skip
19
+ const VENV_DIR_NAMES = new Set([".venv", ".python", ".pyenv"]);
18
20
  function isWin() {
19
21
  return os.platform() === "win32";
20
22
  }
@@ -76,14 +78,15 @@ async function walkForVenvs(root, maxDepth, includeHidden, out) {
76
78
  }
77
79
  const children = await listDirSafe(cur.dir);
78
80
  for (const name of children) {
79
- if (!includeHidden && name.startsWith("."))
81
+ // Skip common heavy directories (always, regardless of hidden flag)
82
+ if (name === "node_modules" || name === "dist" || name === "build" || name === ".git")
83
+ continue;
84
+ // Skip hidden dirs, but exempt well-known venv directory names
85
+ if (!includeHidden && name.startsWith(".") && !VENV_DIR_NAMES.has(name))
80
86
  continue;
81
87
  const full = path.join(cur.dir, name);
82
88
  if (!(await isDir(full)))
83
89
  continue;
84
- // Skip common heavy directories
85
- if (name === "node_modules" || name === "dist" || name === "build" || name === ".git")
86
- continue;
87
90
  stack.push({ dir: full, depth: cur.depth + 1 });
88
91
  }
89
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scanEnvPaths.js","sourceRoot":"","sources":["../scanEnvPaths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scanEnvPaths.js","sourceRoot":"","sources":["../scanEnvPaths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scanEnvPaths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanEnvPaths.test.d.ts","sourceRoot":"","sources":["../scanEnvPaths.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,250 @@
1
+ // scanEnvPaths.test.ts
2
+ // Unit tests for environment path discovery
3
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
4
+ import * as fs from "node:fs/promises";
5
+ import * as path from "node:path";
6
+ import * as os from "node:os";
7
+ import { scanEnvPaths } from "./scanEnvPaths.js";
8
+ describe("scanEnvPaths", () => {
9
+ let tempDir;
10
+ beforeEach(async () => {
11
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "venvkit-scan-test-"));
12
+ });
13
+ afterEach(async () => {
14
+ await fs.rm(tempDir, { recursive: true, force: true });
15
+ });
16
+ // Helper to create a mock venv structure
17
+ async function createMockVenv(venvPath) {
18
+ await fs.mkdir(venvPath, { recursive: true });
19
+ await fs.writeFile(path.join(venvPath, "pyvenv.cfg"), "home = C:\\Python311\nversion = 3.11.5\n");
20
+ const binDir = os.platform() === "win32" ? "Scripts" : "bin";
21
+ const pyExe = os.platform() === "win32" ? "python.exe" : "python";
22
+ await fs.mkdir(path.join(venvPath, binDir), { recursive: true });
23
+ await fs.writeFile(path.join(venvPath, binDir, pyExe), "fake python");
24
+ return path.join(venvPath, binDir, pyExe);
25
+ }
26
+ describe("finding Python venvs", () => {
27
+ it("finds venv with pyvenv.cfg", async () => {
28
+ const venvPath = path.join(tempDir, "project", ".venv");
29
+ await createMockVenv(venvPath);
30
+ const result = await scanEnvPaths({
31
+ roots: [path.join(tempDir, "project")],
32
+ maxDepth: 3,
33
+ includeUserHomeCache: false,
34
+ });
35
+ expect(result.pythonPaths.length).toBeGreaterThanOrEqual(1);
36
+ expect(result.meta.foundVenvs).toBeGreaterThanOrEqual(1);
37
+ });
38
+ it("finds multiple venvs in project tree", async () => {
39
+ await createMockVenv(path.join(tempDir, "project1", ".venv"));
40
+ await createMockVenv(path.join(tempDir, "project2", "venv"));
41
+ await createMockVenv(path.join(tempDir, "project3", "env"));
42
+ const result = await scanEnvPaths({
43
+ roots: [tempDir],
44
+ maxDepth: 3,
45
+ includeUserHomeCache: false,
46
+ });
47
+ expect(result.meta.foundVenvs).toBeGreaterThanOrEqual(3);
48
+ });
49
+ it("finds venv in standard project locations", async () => {
50
+ // Test standard venv folder names: .venv, venv, env
51
+ const projectRoot = path.join(tempDir, "myproject");
52
+ await fs.mkdir(projectRoot, { recursive: true });
53
+ const venvPath = path.join(projectRoot, ".venv");
54
+ await createMockVenv(venvPath);
55
+ const result = await scanEnvPaths({
56
+ roots: [projectRoot],
57
+ maxDepth: 3,
58
+ includeUserHomeCache: false,
59
+ });
60
+ expect(result.pythonPaths.some(p => p.includes(".venv"))).toBe(true);
61
+ });
62
+ });
63
+ describe("scan options", () => {
64
+ it("respects maxDepth limit", async () => {
65
+ // Create venv at depth 2
66
+ await createMockVenv(path.join(tempDir, "level1", ".venv"));
67
+ // Create venv at depth 4 (should not be found with maxDepth=2)
68
+ await createMockVenv(path.join(tempDir, "level1", "level2", "level3", ".venv"));
69
+ const result = await scanEnvPaths({
70
+ roots: [tempDir],
71
+ maxDepth: 2,
72
+ includeUserHomeCache: false,
73
+ });
74
+ // Should find shallow venv but not deeply nested one
75
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
76
+ expect(foundPaths.length).toBe(1);
77
+ });
78
+ it("ignores hidden directories by default", async () => {
79
+ await createMockVenv(path.join(tempDir, ".hidden", "venv"));
80
+ await createMockVenv(path.join(tempDir, "visible", "venv"));
81
+ const result = await scanEnvPaths({
82
+ roots: [tempDir],
83
+ maxDepth: 3,
84
+ includeHidden: false,
85
+ includeUserHomeCache: false,
86
+ });
87
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
88
+ expect(foundPaths.some(p => p.includes(".hidden"))).toBe(false);
89
+ expect(foundPaths.some(p => p.includes("visible"))).toBe(true);
90
+ });
91
+ it("includes hidden directories when flag is set", async () => {
92
+ await createMockVenv(path.join(tempDir, ".hidden", "venv"));
93
+ const result = await scanEnvPaths({
94
+ roots: [tempDir],
95
+ maxDepth: 3,
96
+ includeHidden: true,
97
+ includeUserHomeCache: false,
98
+ });
99
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
100
+ expect(foundPaths.some(p => p.includes(".hidden"))).toBe(true);
101
+ });
102
+ it("deduplicates paths by default", async () => {
103
+ const venvPath = path.join(tempDir, "project", ".venv");
104
+ await createMockVenv(venvPath);
105
+ // Scan same root twice
106
+ const result = await scanEnvPaths({
107
+ roots: [path.join(tempDir, "project"), path.join(tempDir, "project")],
108
+ maxDepth: 3,
109
+ dedupe: true,
110
+ includeUserHomeCache: false,
111
+ });
112
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
113
+ // Should only have one entry despite scanning same location twice
114
+ expect(new Set(foundPaths).size).toBe(foundPaths.length);
115
+ });
116
+ });
117
+ describe("handling edge cases", () => {
118
+ it("handles empty directory", async () => {
119
+ const emptyDir = path.join(tempDir, "empty");
120
+ await fs.mkdir(emptyDir, { recursive: true });
121
+ const result = await scanEnvPaths({
122
+ roots: [emptyDir],
123
+ maxDepth: 3,
124
+ includeUserHomeCache: false,
125
+ });
126
+ const foundInTemp = result.pythonPaths.filter(p => p.includes(tempDir));
127
+ expect(foundInTemp.length).toBe(0);
128
+ });
129
+ it("handles permission errors gracefully", async () => {
130
+ // This test might behave differently on Windows vs POSIX
131
+ // The key is that it doesn't throw
132
+ const result = await scanEnvPaths({
133
+ roots: ["/nonexistent/path/that/should/not/exist"],
134
+ maxDepth: 3,
135
+ includeUserHomeCache: false,
136
+ });
137
+ expect(result).toBeDefined();
138
+ expect(result.pythonPaths).toBeDefined();
139
+ });
140
+ it("skips node_modules directory", async () => {
141
+ // Create a venv inside node_modules (should be skipped)
142
+ await createMockVenv(path.join(tempDir, "node_modules", "some-pkg", ".venv"));
143
+ await createMockVenv(path.join(tempDir, "src", ".venv"));
144
+ const result = await scanEnvPaths({
145
+ roots: [tempDir],
146
+ maxDepth: 5,
147
+ includeUserHomeCache: false,
148
+ });
149
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
150
+ expect(foundPaths.some(p => p.includes("node_modules"))).toBe(false);
151
+ expect(foundPaths.some(p => p.includes("src"))).toBe(true);
152
+ });
153
+ it("skips .git directory", async () => {
154
+ await createMockVenv(path.join(tempDir, ".git", "hooks", ".venv"));
155
+ await createMockVenv(path.join(tempDir, "app", ".venv"));
156
+ const result = await scanEnvPaths({
157
+ roots: [tempDir],
158
+ maxDepth: 5,
159
+ includeHidden: true, // Even with hidden enabled, .git should be skipped
160
+ includeUserHomeCache: false,
161
+ });
162
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
163
+ expect(foundPaths.some(p => p.includes(".git"))).toBe(false);
164
+ });
165
+ it("handles venv without python executable", async () => {
166
+ // Create pyvenv.cfg but no python executable
167
+ const venvPath = path.join(tempDir, "broken-venv");
168
+ await fs.mkdir(venvPath, { recursive: true });
169
+ await fs.writeFile(path.join(venvPath, "pyvenv.cfg"), "home = C:\\Python311\n");
170
+ // Deliberately don't create Scripts/python.exe
171
+ const result = await scanEnvPaths({
172
+ roots: [tempDir],
173
+ maxDepth: 3,
174
+ includeUserHomeCache: false,
175
+ });
176
+ // Should not crash, and should not find the broken venv
177
+ const foundBroken = result.pythonPaths.filter(p => p.includes("broken-venv"));
178
+ expect(foundBroken.length).toBe(0);
179
+ });
180
+ });
181
+ describe("meta information", () => {
182
+ it("reports scanned roots in meta", async () => {
183
+ const root1 = path.join(tempDir, "root1");
184
+ const root2 = path.join(tempDir, "root2");
185
+ await fs.mkdir(root1, { recursive: true });
186
+ await fs.mkdir(root2, { recursive: true });
187
+ const result = await scanEnvPaths({
188
+ roots: [root1, root2],
189
+ maxDepth: 3,
190
+ includeUserHomeCache: false,
191
+ });
192
+ expect(result.meta.scannedRoots).toContain(root1);
193
+ expect(result.meta.scannedRoots).toContain(root2);
194
+ expect(result.meta.maxDepth).toBe(3);
195
+ });
196
+ it("counts venvs and bases separately", async () => {
197
+ await createMockVenv(path.join(tempDir, "venv1"));
198
+ await createMockVenv(path.join(tempDir, "venv2"));
199
+ const result = await scanEnvPaths({
200
+ roots: [tempDir],
201
+ maxDepth: 3,
202
+ includeUserHomeCache: false,
203
+ });
204
+ expect(result.meta.foundVenvs).toBeGreaterThanOrEqual(2);
205
+ expect(typeof result.meta.foundBases).toBe("number");
206
+ });
207
+ });
208
+ describe("nested environment handling", () => {
209
+ it("detects venv and does not descend further", async () => {
210
+ // Create a venv with a nested venv inside (unusual but possible)
211
+ const outerVenv = path.join(tempDir, "outer-venv");
212
+ await createMockVenv(outerVenv);
213
+ // Create another venv inside (should not be found because we stop at outer venv)
214
+ const innerVenv = path.join(outerVenv, "nested", "inner-venv");
215
+ await createMockVenv(innerVenv);
216
+ const result = await scanEnvPaths({
217
+ roots: [tempDir],
218
+ maxDepth: 10,
219
+ includeUserHomeCache: false,
220
+ });
221
+ const foundPaths = result.pythonPaths.filter(p => p.includes(tempDir));
222
+ const foundOuter = foundPaths.filter(p => p.includes("outer-venv") && !p.includes("inner-venv"));
223
+ const foundInner = foundPaths.filter(p => p.includes("inner-venv"));
224
+ // Should find outer venv
225
+ expect(foundOuter.length).toBe(1);
226
+ // Should NOT find inner venv (scan stops at venv boundary)
227
+ expect(foundInner.length).toBe(0);
228
+ });
229
+ });
230
+ describe("large directory trees", () => {
231
+ it("handles directory with many subdirectories", async () => {
232
+ // Create many directories to test performance doesn't degrade badly
233
+ for (let i = 0; i < 20; i++) {
234
+ await fs.mkdir(path.join(tempDir, `dir${i}`), { recursive: true });
235
+ }
236
+ await createMockVenv(path.join(tempDir, "dir10", ".venv"));
237
+ const start = Date.now();
238
+ const result = await scanEnvPaths({
239
+ roots: [tempDir],
240
+ maxDepth: 3,
241
+ includeUserHomeCache: false,
242
+ });
243
+ const elapsed = Date.now() - start;
244
+ expect(result.meta.foundVenvs).toBeGreaterThanOrEqual(1);
245
+ // Should complete in reasonable time (less than 5 seconds)
246
+ expect(elapsed).toBeLessThan(5000);
247
+ });
248
+ });
249
+ });
250
+ //# sourceMappingURL=scanEnvPaths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanEnvPaths.test.js","sourceRoot":"","sources":["../scanEnvPaths.test.ts"],"names":[],"mappings":"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"}