From 40ddbd3c4256110c36dae8a60df6bba7c9ec554a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 23:09:49 +0000 Subject: [PATCH 1/3] Initial plan From 30b8cb8e2dc21faf46e778de75469e1048cf8bab Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 23:22:41 +0000 Subject: [PATCH 2/3] Fix: Add support for startUsingLocalKernelSpec in NbExtensionsPathProvider Co-authored-by: DonJayamanne <1948812+DonJayamanne@users.noreply.github.com> --- .../nbExtensionsPathProvider.node.ts | 14 ++++++++++++++ .../nbExtensionsPathProvider.unit.test.ts | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts index 986e28515fb..39bcf82e5eb 100644 --- a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts +++ b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts @@ -25,6 +25,20 @@ export class NbExtensionsPathProvider implements INbExtensionsPathProvider { } return Uri.joinPath(Uri.file(sysPrefix), 'share', 'jupyter'); } + case 'startUsingLocalKernelSpec': { + // If the local kernelspec has an associated Python interpreter, + // use the same logic as startUsingPythonInterpreter + if (kernel.kernelConnectionMetadata.interpreter) { + const sysPrefix = await getSysPrefix(kernel.kernelConnectionMetadata.interpreter); + if (!sysPrefix) { + return; + } + return Uri.joinPath(Uri.file(sysPrefix), 'share', 'jupyter'); + } + // If no interpreter, we haven't come across scenarios with non-python kernels that use widgets + // & have custom widget sources. If we do, we can implement that as we come across them. + return; + } default: { // We haven't come across scenarios with non-python kernels that use widgets // & have custom widget sources. If we do, we can implement that as we come across them. diff --git a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.unit.test.ts b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.unit.test.ts index acc8b0f542c..6a8611c3e47 100644 --- a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.unit.test.ts +++ b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.unit.test.ts @@ -36,6 +36,13 @@ import { dispose } from '../../../../platform/common/utils/lifecycle'; id: 'interpreterId' } as any }); + const localKernelSpecWithPythonInterpreter = LocalKernelSpecConnectionMetadata.create({ + id: 'localKernelSpecWithPythonInterpreter', + kernelSpec: mock(), + interpreter: { + id: 'interpreterId' + } as any + }); const serverProviderHandle = { handle: 'handle', id: 'id', extensionId: '' }; const remoteKernelSpec = RemoteKernelSpecConnectionMetadata.create({ id: '', @@ -82,6 +89,15 @@ import { dispose } from '../../../../platform/common/utils/lifecycle'; assert.strictEqual(baseUrl?.toString(), Uri.file(path.join(__dirname, 'share', 'jupyter')).toString()); } }); + test('Returns base url for local kernelspec with python interpreter', async () => { + when(kernel.kernelConnectionMetadata).thenReturn(localKernelSpecWithPythonInterpreter); + const baseUrl = await provider.getNbExtensionsParentPath(instance(kernel)); + if (isWeb) { + assert.isUndefined(baseUrl); + } else { + assert.strictEqual(baseUrl?.toString(), Uri.file(path.join(__dirname, 'share', 'jupyter')).toString()); + } + }); test('Returns base url for remote kernelspec', async () => { when(kernel.kernelConnectionMetadata).thenReturn(remoteKernelSpec); const baseUrl = await provider.getNbExtensionsParentPath(instance(kernel)); From 02d065cb726cf214b14ebbe1776dc0a7338b8e1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 Aug 2025 02:25:21 +0000 Subject: [PATCH 3/3] Fix formatting: Remove trailing whitespace from comment Co-authored-by: DonJayamanne <1948812+DonJayamanne@users.noreply.github.com> --- .../scriptSourceProvider/nbExtensionsPathProvider.node.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts index 39bcf82e5eb..4adffa5f8f8 100644 --- a/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts +++ b/src/notebooks/controllers/ipywidgets/scriptSourceProvider/nbExtensionsPathProvider.node.ts @@ -26,7 +26,7 @@ export class NbExtensionsPathProvider implements INbExtensionsPathProvider { return Uri.joinPath(Uri.file(sysPrefix), 'share', 'jupyter'); } case 'startUsingLocalKernelSpec': { - // If the local kernelspec has an associated Python interpreter, + // If the local kernelspec has an associated Python interpreter, // use the same logic as startUsingPythonInterpreter if (kernel.kernelConnectionMetadata.interpreter) { const sysPrefix = await getSysPrefix(kernel.kernelConnectionMetadata.interpreter);