From 5b40add3d125ccd972dc983d842b10eccdf09419 Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Wed, 1 Apr 2026 13:53:34 -0700 Subject: [PATCH 1/3] Add watcher for pip installs --- src/managers/builtin/main.ts | 39 ++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/managers/builtin/main.ts b/src/managers/builtin/main.ts index 62dabba7..5c4964fd 100644 --- a/src/managers/builtin/main.ts +++ b/src/managers/builtin/main.ts @@ -27,17 +27,48 @@ export async function registerSystemPythonFeatures( const venvDebouncedRefresh = createSimpleDebounce(500, () => { venvManager.watcherRefresh(); }); - const watcher = createFileSystemWatcher('{**/activate}', false, true, false); + const activationWatcher = createFileSystemWatcher('{**/activate}', false, true, false); disposables.push( - watcher, - watcher.onDidCreate(() => { + activationWatcher, + activationWatcher.onDidCreate(() => { venvDebouncedRefresh.trigger(); }), - watcher.onDidDelete(() => { + activationWatcher.onDidDelete(() => { venvDebouncedRefresh.trigger(); }), onDidDeleteFiles(() => { venvDebouncedRefresh.trigger(); }), ); + + const packageDebouncedRefresh = createSimpleDebounce(500, async () => { + // Get all projects and refresh their packages + const projects = await api.getPythonProjects(); + for (const project of projects) { + const env = await api.getEnvironment(project.uri); + if (env) { + try { + await api.refreshPackages(env); + } catch (ex) { + log.error(`Failed to refresh packages for environment ${env.id}: ${ex instanceof Error ? ex.message : String(ex)}`); + } + } + } + }); + const packageWatcher = createFileSystemWatcher( + '**/site-packages/*.dist-info/METADATA', + false, // don't ignore create events (pip install) + true, // ignore change events (content changes in METADATA don't affect package list) + false // don't ignore delete events (pip uninstall) + ); + disposables.push( + packageDebouncedRefresh, + packageWatcher, + packageWatcher.onDidCreate(() => { + packageDebouncedRefresh.trigger(); + }), + packageWatcher.onDidDelete(() => { + packageDebouncedRefresh.trigger(); + }), + ); } From 6e6d78cc6a7bfcc3f76950bcdf390b26e06e8535 Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Wed, 1 Apr 2026 13:56:31 -0700 Subject: [PATCH 2/3] Fix incorrect key --- src/managers/builtin/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/builtin/main.ts b/src/managers/builtin/main.ts index 5c4964fd..c23548a7 100644 --- a/src/managers/builtin/main.ts +++ b/src/managers/builtin/main.ts @@ -50,7 +50,7 @@ export async function registerSystemPythonFeatures( try { await api.refreshPackages(env); } catch (ex) { - log.error(`Failed to refresh packages for environment ${env.id}: ${ex instanceof Error ? ex.message : String(ex)}`); + log.error(`Failed to refresh packages for environment ${env.envId}: ${ex instanceof Error ? ex.message : String(ex)}`); } } } From 196f9d112334462428b4e5a6c86326eaa7a3fd49 Mon Sep 17 00:00:00 2001 From: Eduardo Villalpando Mello Date: Wed, 1 Apr 2026 13:58:17 -0700 Subject: [PATCH 3/3] Refactor using Promise.all --- src/managers/builtin/main.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/managers/builtin/main.ts b/src/managers/builtin/main.ts index c23548a7..fdda603b 100644 --- a/src/managers/builtin/main.ts +++ b/src/managers/builtin/main.ts @@ -42,18 +42,22 @@ export async function registerSystemPythonFeatures( ); const packageDebouncedRefresh = createSimpleDebounce(500, async () => { - // Get all projects and refresh their packages const projects = await api.getPythonProjects(); - for (const project of projects) { - const env = await api.getEnvironment(project.uri); - if (env) { + await Promise.all( + projects.map(async (project) => { + const env = await api.getEnvironment(project.uri); + if (!env) { + return; + } try { await api.refreshPackages(env); } catch (ex) { - log.error(`Failed to refresh packages for environment ${env.envId}: ${ex instanceof Error ? ex.message : String(ex)}`); + log.error( + `Failed to refresh packages for environment ${env.envId}: ${ex instanceof Error ? ex.message : String(ex)}`, + ); } - } - } + }), + ); }); const packageWatcher = createFileSystemWatcher( '**/site-packages/*.dist-info/METADATA',