Question:
Type: <bBug</bWhen I commit from the git extension, I frequently get an error message that "Git: Extention '' CANNOT use API proposal: telemetry". When I look at "Running Extensions", git reports 32 uncaught errors. I do not know if the two error counts are related. This only recently started happening (last couple of weeks). VS Code version: Code 1.85.1 (, 2023-12-13T09:49:37.021Z) OS version: WindowsNT x64 10.0. Modes: Remote OS version: Linux x64 5.15.90.1-microsoft-standard-WSL2 <details<summarySystem Info</summary </details<details<summaryExtensions (13)</summaryExtensionVersion ------ remote-containers0.327.0 remote-wsl0.81.8 rewrap1.16.3 markdown-table-prettify3.6.0 vscode-markdownlint0.53.0 git-graph1.30.0 python2023.22.1 vscode-pylance2023.12.1 cmake-tools1.16.32 cpptools1.18.5 rewrap1.16.3 cmake0.0.17 markdown-all-in-one3.6.1 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
/gifPlease
Thanks for reporting this issue! Unfortunately, it's hard for us to understand what issue you're seeing. Please help us out by providing a screen recording showing exactly what isn't working as expected. While we can work with most standard formats, files are preferred as they are displayed inline on GitHub. You may find helpful as a browser-based gif recording tool. If the issue depends on keyboard input, you can help us by enabling screencast mode for the recording ( in the command palette). Lastly, please attach this file via the GitHub web interface as emailed responses will strip files out from the issue. Happy coding!
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
Here's an example of the ruling.
This bug is still active. I can't get rid of the problem. My version of VSCode is: Versión: 1.85.2 (user setup) Confirmar: Fecha: 2024-01-18T06:40:10.514Z Electron: 25.9.7 ElectronBuildId: Chromium: 114.0.5735.289 18.15.0 V8: 11.4.183.29-electron.0 SO: Windows_NT x64 10.0.
are you able to reproduce this issue every time you try to commit? When the error occurs, could you open the developer console using the "Developer: Toggle Developer Tools" command and share all the errors/warnings in there? Are you able to reproduce this issue with all the extensions disabled? Thanks!
Yes, every time I commit I have this problem. ! ! I only have 3 extensions, I disable them and the same problem occurs. ! Sorry for my English. I don't know if you mean this. But it's what I see when I open Toogle developer tools.
still getting it too. I have dozens of git repositories across multiple versions of git (development containers with different Linux versions, Windows, etc.) Happens frequently, but not always, but does seem to happen consistently on some repositories and not others.
thank you! After you reproduce the problem, could you also please send me the contents of ? Also, are you able to reproduce this issue with all extensions disabled? The easiest way to try this is to use the "Help: Troubleshoot Issue..." command from the command palette.
It seems that way. Thank you
Ok. First i delete output of git. ! After. I disable all extensions. ! After. I can one time more to make commit. ! New commit ! After commit ! Git output complet: 2024-02-01 10:24:20.195 [info] No remotes found in the git config file. 2024-02-01 10:24:20.244 [info] git config --get commit.template [54ms] 2024-02-01 10:24:20.244 [info] git for-each-ref --format %(refname) %(objectname) %(objectname) refs/tags [49ms] 2024-02-01 10:24:20.286 [info] git status -z -uall [39ms] 2024-02-01 10:26:19.989 [info] git add -A -- . [56ms] 2024-02-01 10:26:20.264 [info] git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - [269ms] 2024-02-01 10:26:20.308 [info] git config --get commit.template [39ms] 2024-02-01 10:26:20.317 [info] No remotes found in the git config file. 2024-02-01 10:26:20.364 [info] git config --get commit.template [49ms] 2024-02-01 10:26:20.372 [info] git for-each-ref --format %(refname) %(objectname) %(objectname) refs/tags [49ms] 2024-02-01 10:26:20.413 [info] git status -z -uall [38ms] 2024-02-01 10:26:20.480 [info] No remotes found in the git config file. 2024-02-01 10:26:20.528 [info] git config --get commit.template [51ms] 2024-02-01 10:26:20.533 [info] git for-each-ref --format %(refname) %(objectname) %(*objectname) refs/tags [54ms] 2024-02-01 10:26:20.579 [info] git status -z -uall [40ms] 2024-02-01 10:26:41.809 [info] git ls-files --stage -- C:UserssriccOneDrive - ICCADocumentosAngularSergieCodecargaPaginasAppsrcappcontacto [49ms] 2024-02-01 10:26:41.859 [info] git cat-file -s [43ms] 2024-02-01 10:26:41.908 [info] git show --textconv [42ms] I hope it's everything you've asked for.
SOLVED For me, I found out it was because I was on a detached head on Git. For some reason, reattaching to master solved it.
Thank you! I have to admit that it's not clear to me what is happening here. Let me chat with my colleagues and see if I can come up with an action plan.
+1 for gilad905's suggestion. I was able to easily repro the problem: new repo from command line. first commit. out main and commit from git source-control panel in vscode, works. out the new head (the second commit), detached. another change and try to commit it in vs code Expected: It works correctly Actual: The commit is created in the repository, but the "telemetry" error message shown above appears.
Thanks Fix for this will be in Monday's VS Code Insiders release. Apologies for the inconvenience!
thanks
I am not, and have not been using repos. Sorry this is not the only problem occuring.
please share your repro steps in case you are able to reproduce with the latest VS Code Insiders release. Thanks!

command: 'git.commit', title: l10n.t('{0} Continue', '$(check)'), tooltip: this.state.isCommitInProgress ? l10n.t('Continuing Rebase...') : l10n.t('Continue Rebase'), <del> arguments: [this.repository.sourceControl, ''] </del> <ins> arguments: [this.repository.sourceControl, null] </ins> }; }


Question:
Type: <bBug</bWhen I commit from the git extension, I frequently get an error message that "Git: Extention '' CANNOT use API proposal: telemetry". When I look at "Running Extensions", git reports 32 uncaught errors. I do not know if the two error counts are related. This only recently started happening (last couple of weeks). VS Code version: Code 1.85.1 (, 2023-12-13T09:49:37.021Z) OS version: WindowsNT x64 10.0. Modes: Remote OS version: Linux x64 5.15.90.1-microsoft-standard-WSL2 <details<summarySystem Info</summary </details<details<summaryExtensions (13)</summaryExtensionVersion ------ remote-containers0.327.0 remote-wsl0.81.8 rewrap1.16.3 markdown-table-prettify3.6.0 vscode-markdownlint0.53.0 git-graph1.30.0 python2023.22.1 vscode-pylance2023.12.1 cmake-tools1.16.32 cpptools1.18.5 rewrap1.16.3 cmake0.0.17 markdown-all-in-one3.6.1 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
/gifPlease
Thanks for reporting this issue! Unfortunately, it's hard for us to understand what issue you're seeing. Please help us out by providing a screen recording showing exactly what isn't working as expected. While we can work with most standard formats, files are preferred as they are displayed inline on GitHub. You may find helpful as a browser-based gif recording tool. If the issue depends on keyboard input, you can help us by enabling screencast mode for the recording ( in the command palette). Lastly, please attach this file via the GitHub web interface as emailed responses will strip files out from the issue. Happy coding!
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
Here's an example of the ruling.
This bug is still active. I can't get rid of the problem. My version of VSCode is: Versión: 1.85.2 (user setup) Confirmar: Fecha: 2024-01-18T06:40:10.514Z Electron: 25.9.7 ElectronBuildId: Chromium: 114.0.5735.289 18.15.0 V8: 11.4.183.29-electron.0 SO: Windows_NT x64 10.0.
are you able to reproduce this issue every time you try to commit? When the error occurs, could you open the developer console using the "Developer: Toggle Developer Tools" command and share all the errors/warnings in there? Are you able to reproduce this issue with all the extensions disabled? Thanks!
Yes, every time I commit I have this problem. ! ! I only have 3 extensions, I disable them and the same problem occurs. ! Sorry for my English. I don't know if you mean this. But it's what I see when I open Toogle developer tools.
still getting it too. I have dozens of git repositories across multiple versions of git (development containers with different Linux versions, Windows, etc.) Happens frequently, but not always, but does seem to happen consistently on some repositories and not others.
thank you! After you reproduce the problem, could you also please send me the contents of ? Also, are you able to reproduce this issue with all extensions disabled? The easiest way to try this is to use the "Help: Troubleshoot Issue..." command from the command palette.
It seems that way. Thank you
Ok. First i delete output of git. ! After. I disable all extensions. ! After. I can one time more to make commit. ! New commit ! After commit ! Git output complet: 2024-02-01 10:24:20.195 [info] No remotes found in the git config file. 2024-02-01 10:24:20.244 [info] git config --get commit.template [54ms] 2024-02-01 10:24:20.244 [info] git for-each-ref --format %(refname) %(objectname) %(objectname) refs/tags [49ms] 2024-02-01 10:24:20.286 [info] git status -z -uall [39ms] 2024-02-01 10:26:19.989 [info] git add -A -- . [56ms] 2024-02-01 10:26:20.264 [info] git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - [269ms] 2024-02-01 10:26:20.308 [info] git config --get commit.template [39ms] 2024-02-01 10:26:20.317 [info] No remotes found in the git config file. 2024-02-01 10:26:20.364 [info] git config --get commit.template [49ms] 2024-02-01 10:26:20.372 [info] git for-each-ref --format %(refname) %(objectname) %(objectname) refs/tags [49ms] 2024-02-01 10:26:20.413 [info] git status -z -uall [38ms] 2024-02-01 10:26:20.480 [info] No remotes found in the git config file. 2024-02-01 10:26:20.528 [info] git config --get commit.template [51ms] 2024-02-01 10:26:20.533 [info] git for-each-ref --format %(refname) %(objectname) %(*objectname) refs/tags [54ms] 2024-02-01 10:26:20.579 [info] git status -z -uall [40ms] 2024-02-01 10:26:41.809 [info] git ls-files --stage -- C:UserssriccOneDrive - ICCADocumentosAngularSergieCodecargaPaginasAppsrcappcontacto [49ms] 2024-02-01 10:26:41.859 [info] git cat-file -s [43ms] 2024-02-01 10:26:41.908 [info] git show --textconv [42ms] I hope it's everything you've asked for.
SOLVED For me, I found out it was because I was on a detached head on Git. For some reason, reattaching to master solved it.
Thank you! I have to admit that it's not clear to me what is happening here. Let me chat with my colleagues and see if I can come up with an action plan.
+1 for gilad905's suggestion. I was able to easily repro the problem: new repo from command line. first commit. out main and commit from git source-control panel in vscode, works. out the new head (the second commit), detached. another change and try to commit it in vs code Expected: It works correctly Actual: The commit is created in the repository, but the "telemetry" error message shown above appears.
Thanks Fix for this will be in Monday's VS Code Insiders release. Apologies for the inconvenience!
thanks
I am not, and have not been using repos. Sorry this is not the only problem occuring.
please share your repro steps in case you are able to reproduce with the latest VS Code Insiders release. Thanks!

command: 'git.commit', title: l10n.t('{0} Commit', '$(check)'), tooltip: this.state.isCommitInProgress ? l10n.t('Committing Changes...') : l10n.t('Commit Changes'), <del> arguments: [this.repository.sourceControl, ''] </del> <ins> arguments: [this.repository.sourceControl, null] </ins> }; }


Question:
viewing a very long list in the variables viewer will not show all entries. debug variables view handles this with nested groups: <img width="231" alt="image" src=""
verification steps: the notebook variable view with the cell the variable view in the debug sideview check that the children of the variable are accurate

const childNodes: INotebookVariableElement[] = []; if (parent.indexedChildrenCount > variablePageSize) { <del> // TODO: improve handling of large number of children const indexedChildCountLimit = 100000; const limit = Math.min(parent.indexedChildrenCount, indexedChildCountLimit); for (let start = 0; start < limit; start += variablePageSize) { let end = start + variablePageSize; if (end > limit) { end = limit; </del> <ins> const nestedPageSize = Math.floor(Math.max(parent.indexedChildrenCount / variablePageSize, 100)); const indexedChildCountLimit = 1_000_000; let start = parent.indexStart ?? 0; const last = start + Math.min(parent.indexedChildrenCount, indexedChildCountLimit); for (; start < last; start += nestedPageSize) { let end = start + nestedPageSize; if (end > last) { end = last; </ins> } childNodes.push({


Question:
viewing a very long list in the variables viewer will not show all entries. debug variables view handles this with nested groups: <img width="231" alt="image" src=""
verification steps: the notebook variable view with the cell the variable view in the debug sideview check that the children of the variable are accurate

childNodes.push({ kind: 'variable', notebook: parent.notebook, <del> id: parent.id + `${limit + 1}`, </del> <ins> id: parent.id + `${last + 1}`, </ins> extHostId: parent.extHostId, name: localize('notebook.indexedChildrenLimitReached', "Display limit reached"), value: '',


Question:
viewing a very long list in the variables viewer will not show all entries. debug variables view handles this with nested groups: <img width="231" alt="image" src=""
verification steps: the notebook variable view with the cell the variable view in the debug sideview check that the children of the variable are accurate

assert.equal(variables[0].extHostId, parent.extHostId, 'ExtHostId should match the parent since we will use it to get the real children'); }); <ins> test('Get children for very large list', async () => { const parent = { kind: 'variable', notebook: notebookModel, id: '1', extHostId: 1, name: 'list', value: '[...]', hasNamedChildren: false, indexedChildrenCount: 1_000_000 } as INotebookVariableElement; results = []; const groups = await dataSource.getChildren(parent); const children = await dataSource.getChildren(groups[99]); assert(children.length === 100, 'We should have a full page of child groups'); assert(!provideVariablesCalled, 'provideVariables should not be called'); assert.equal(children[0].extHostId, parent.extHostId, 'ExtHostId should match the parent since we will use it to get the real children'); }); </ins> test('Cancel while enumerating through children', async () => { const parent = { kind: 'variable', notebook: notebookModel, id: '1', extHostId: 1, name: 'list', value: '[...]', hasNamedChildren: false, indexedChildrenCount: 10 } as INotebookVariableElement; results = [


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

public onDidChangeTaskSystemInfo: Event<void> = this._onDidChangeTaskSystemInfo.event; private _onDidReconnectToTasks: Emitter<void> = new Emitter(); public onDidReconnectToTasks: Event<void> = this._onDidReconnectToTasks.event; <ins> private _onDidChangeTaskConfig: Emitter<void> = new Emitter(); public onDidChangeTaskConfig: Event<void> = this._onDidChangeTaskConfig.event; </ins> public get isReconnected(): boolean { return this._tasksReconnected; } constructor(


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

this._updateSetup(folderSetup); return this._updateWorkspaceTasks(TaskRunSource.FolderOpen); })); <del> this._register(this._configurationService.onDidChangeConfiguration((e) => { </del> <ins> this._register(this._configurationService.onDidChangeConfiguration(async (e) => { </ins> if (!e.affectsConfiguration('tasks') || (!this._taskSystem && !this._workspaceTasksPromise)) { return; }


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

} this._setTaskLRUCacheLimit(); <del> return this._updateWorkspaceTasks(TaskRunSource.ConfigurationChange); </del> <ins> await this._updateWorkspaceTasks(TaskRunSource.ConfigurationChange); this._onDidChangeTaskConfig.fire(); </ins> })); this._taskRunningState = TASK_RUNNING_STATE.bindTo(_contextKeyService); this._onDidStateChange = this._register(new Emitter());


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

this._logService.trace('RunAutomaticTasks: Awaiting task system info.'); await Event.toPromise(Event.once(this._taskService.onDidChangeTaskSystemInfo)); } <del> const workspaceTasks = await this._taskService.getWorkspaceTasks(TaskRunSource.FolderOpen); </del> <ins> let workspaceTasks = await this._taskService.getWorkspaceTasks(TaskRunSource.FolderOpen); </ins> this._logService.trace(`RunAutomaticTasks: Found ${workspaceTasks.size} automatic tasks`); <del> await this._runWithPermission(this._taskService, this._configurationService, workspaceTasks); </del> <ins> let autoTasks = this._findAutoTasks(this._taskService, workspaceTasks); this._logService.trace(`RunAutomaticTasks: taskNames=${JSON.stringify(autoTasks.taskNames)}`); // As seen in some cases with the Remote SSH extension, the tasks configuration is loaded after we have come // to this point. Let's give it some extra time. if (autoTasks.taskNames.length === 0) { const updatedWithinTimeout = await Promise.race([ new Promise<boolean>((resolve) => { Event.toPromise(Event.once(this._taskService.onDidChangeTaskConfig)).then(() => resolve(true)); }), new Promise<boolean>((resolve) => { const timer = setTimeout(() => { clearTimeout(timer); resolve(false); }, 10000); })]); if (!updatedWithinTimeout) { this._logService.trace(`RunAutomaticTasks: waited some extra time, but no update of tasks configuration`); return; } workspaceTasks = await this._taskService.getWorkspaceTasks(TaskRunSource.FolderOpen); autoTasks = this._findAutoTasks(this._taskService, workspaceTasks); this._logService.trace(`RunAutomaticTasks: updated taskNames=${JSON.stringify(autoTasks.taskNames)}`); } this._runWithPermission(this._taskService, this._configurationService, autoTasks.tasks, autoTasks.taskNames); </ins> } private _runTasks(taskService: ITaskService, tasks: Array<Task | Promise<Task | undefined>>) {


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

return { tasks, taskNames, locations }; } <del> private async _runWithPermission(taskService: ITaskService, configurationService: IConfigurationService, workspaceTaskResult: Map<string, IWorkspaceFolderTaskResult>) { const { tasks, taskNames } = this._findAutoTasks(taskService, workspaceTaskResult); </del> <ins> private async _runWithPermission(taskService: ITaskService, configurationService: IConfigurationService, tasks: (Task | Promise<Task | undefined>)[], taskNames: string[]) { </ins> if (taskNames.length === 0) { return; }


Question:
VS Code Version: 1.85.2 OS Version: Linux (OpenSUSE Tumbleweed) as well as Windows 10 If I create an automatic folderOpen task in a folder that I access through VS Code's Remote SSH extension, this task is sometimes run when I open my folder, but it often isn't. It's simple for me to reproduce this on both Windows and Linux, and also with the latest (as of today) Insiders build on Windows. It seems timing related. It also seems like it's less likely to happen if I keep a file open in the workspace when I close it, so that the same file is automatically opened when I open it the next time. I've trusted the workspace. I have put together a minimal containerized SSH server with a tiny workspace to reproduce this, see I start the container and then connect to it with VS Code over SSH. Please note that the main issue isn't with this container setup. I'm seeing this when connecting to normal remote SSH servers as well. The container is just an attempt to build a minimal reproducible setup, as well as to avoid publishing private details in this report. I have also some extra logs to VS Code's source code to try to debug this, see this commit: I unfortunately wasn't able to get the remote ssh extension working properly with my custom VS Code OSS build. From what I can tell, it seems that Microsoft actually doesn't want me to do that. But I was able to find the corresponding places in the minified file for my proper VS Code installation, and put my extra logs there instead. With those changes, the logs from a typical bad run (on Windows) look like this: The logs from a typical good run (on Windows) look like this: The main difference between these two runs is in what's assigned to in (), when () tries to fetch the folderOpen tasks (). In the good case, I get a config object containing my task. In the bad case, there is no such config object. This is also reflected in the log I to (), where the array is empty in the bad case. Please note that in the bad case, there is an update of the tasks fetched in the task service happening soon after VS Code tried to run the automatic tasks. You can see that is called with runSource=3 (i.e. ), and that the subsequent variable assignment actually contains my task. Unfortunately, the code to run the automatic tasks has already been triggered by this time, and isn't retriggered. In the good case, there is no such update of the fetched tasks based on reconfiguration. But the fetched tasks are also updated when the automatic task is run, which is why you can see similar traces but with . Steps to Reproduce: a container like the one in gist your .ssh/config file to access the containerized SSH server (optional) Patch your VS Code build (the minified if you can't use remote SSH with a custom build) to get more logs, like to the remote SSH workspace and trust it a couple of times and note that the automatic task isn't always started
thanks for all of the info. Not sure when I'll get to this, feel free to submit a PR if you can find the fix.
Many thanks for acknowledging this! I might try to make a fix, but it's a bit complicated to test it as it seems I'm not allowed to use the Remote SSH extension together with my custom VS Code OSS build. Then I need to continue hacking the minified workbench js file of my normal VS Code installation instead, like I did to add the extra logs. Is there any way around that, that you are allowed to share?
would know more about selfhosting the remote setup.
I learned that it will indeed be hard to self host this/test it. I'll probably need to make a custom build to do so. Thanks for the investigation
I tried something out here: It seems to work fine when I add the corresponding code to the minified file as well. Waiting for task reconfiguration for some extra time if the automatic task count is zero isn't the prettiest solution, of course, but please have a look if you have the time.
Thank you, your changes look good. I pulled most of them over and am creating a custom test build for verification.
Nice! You can probably skip the final two if statements in tryRunTasks, then, as you kept them in runWithPermission instead.
was able to test and verify your changes fix the issue! I have a branch ATM with the changes ready to go. Do you want to copy them over and create the PR so you get credit?
Great news! Sure, I could do that. Credit is not super important to me, but it's always good to know whom to blame... :-) I can give it a go later today. It was a while since I did that on GitHub, but I'll probably manage.
Also no pressure , just wanted to offer. I can instead create the PR myself and give you credit in our release note thank yous section. Just LMK which you'd prefer.
I'll give it a go. It's a good exercise. Do you have any guidelines for commit messages and such?
I think I managed to do it correctly! :smile:

registerTaskSystem(scheme: string, taskSystemInfo: ITaskSystemInfo): void; onDidChangeTaskSystemInfo: Event<void>; <ins> onDidChangeTaskConfig: Event<void>; </ins> readonly hasTaskSystemInfo: boolean; registerSupportedExecutions(custom?: boolean, shell?: boolean, process?: boolean): void;


Question:
Type: <bBug</bAs I typed into the search input, nothing fancy: See screenshot ! VS Code version: Code - Insiders 1.87.0-insider (, 2024-02-01T09:55:21.613Z) OS version: Darwin x64 23.3.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (60)</summaryExtensionVersion ------ html-snippets0.2.1 tsl-problem-matcher0.6.2 docs-view0.1.0 emojisense0.10.0 github-markdown-preview0.3.0 markdown-checkbox0.4.0 markdown-emoji0.3.0 markdown-footnotes0.1.1 markdown-mermaid1.21.0 markdown-preview-github-styles2.0.3 markdown-yaml-preamble0.1.0 mermaid-markdown-syntax-highlighting1.6.0 esbuild-problem-matchers0.0.3 kusto0.4.4 prettier-vscode10.1.0 auto-close-tag0.5.15 auto-rename-tag0.1.10 codespaces1.16.9 copilot1.156.686 copilot-chat0.13. remotehub0.63. vscode-pull-request-github0.81. cortex-debug1.12.1 debug-tracker-vscode0.0.15 memory-view0.0.25 peripheral-viewer1.4.6 rtos-views0.0.7 vscode-azureresourcegroups0.8.3 vscode-dotnet-runtime2.0.1 debugpy2024.0.0 python2023.25. vscode-pylance2024.1.103 jupyter2024.1. jupyter-keymap1.1.2 jupyter-renderers1.0.17 remote-containers0.339.0 remote-ssh0.108. remote-ssh-edit0.86.0 remote-wsl0.86.0 anycode0.0.72 azure-account0.11.6 azure-repos0.38.0 remote-repositories0.40.0 remote-server1.6. vscode-github-issue-notebooks0.0.130 vscode-markdown-notebook0.0.26 vscode-selfhost-test-provider0.3.25 vscode-speech0.5. vscode-typescript-next5.4. prisma5.9.1 vscode-xml0.26.1 vscode-yaml1.14.0 kuskus-kusto-syntax-highlighting1.2.0 svg-preview2.8.3 rest-book6.2.1 pdf1.2.2 vscode-mdx1.7.0 volar1.8.27 vscode-typescript-vue-plugin1.8.27 markdown-all-in-one3.6.2 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
I believe owns this area, assigning it to her.
Hmm, that usually comes with a faulty install. If you keep getting this, can you try re-installing?
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
The STR needs a GH remote repo. Still broken for me after updating/re-instaling.

} finalMatchedTargets.add(uri); }); <ins> }).catch(err => { // temporary fix for https://github.com/microsoft/vscode/issues/205044: don't show notebook results for remotehub repos. if (err.code === 'ENOENT') { console.warn(`Could not find notebook search results, ignoring notebook results.`); return { limitHit: false, messages: [], }; } else { throw err; } </ins> }); })) ));


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

return this.input.selectionEnd === this.input.value.length && this.input.selectionStart === this.input.selectionEnd; } <del> public getSelection(): IRange | null { const selectionStart = this.input.selectionStart; if (selectionStart === null) { return null; } const selectionEnd = this.input.selectionEnd ?? selectionStart; return { start: selectionStart, end: selectionEnd, }; } </del> public enable(): void { this.input.removeAttribute('disabled'); }


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

} } <del> // Store the existing selection if there was one. const visibleSelection = visibleQuickAccess?.picker?.valueSelection; </del> // Create a picker for the provider to use with the initial value // and adjust the filtering to exclude the prefix from filtering const disposables = new DisposableStore();


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

// on the onDidHide event. picker.show(); <del> // If the previous picker had a selection, we should set that in the new picker. if (visibleSelection) { picker.valueSelection = visibleSelection; } </del> // Pick mode: return with promise if (pick) { return pickPromise?.p;


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

return this.ui.keyMods; } <del> get valueSelection() { const selection = this.ui.inputBox.getSelection(); if (!selection) { return undefined; } return [selection.start, selection.end]; } set valueSelection(valueSelection: Readonly<[number, number]> | undefined) { </del> <ins> set valueSelection(valueSelection: Readonly<[number, number]>) { </ins> this._valueSelection = valueSelection; this.valueSelectionUpdated = true; this.update();


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

this.update(); } <del> get valueSelection() { const selection = this.ui.inputBox.getSelection(); if (!selection) { return undefined; } return [selection.start, selection.end]; } set valueSelection(valueSelection: Readonly<[number, number]> | undefined) { </del> <ins> set valueSelection(valueSelection: Readonly<[number, number]>) { </ins> this._valueSelection = valueSelection; this.valueSelectionUpdated = true; this.update();


Question: open normal quick pick () type notice you want symbol search and select the cursor is random, within the word, and doesn't select the previous input anymore

this.findInput.inputBox.select(range); } <del> getSelection(): IRange | null { return this.findInput.inputBox.getSelection(); } </del> isSelectionAtEnd(): boolean { return this.findInput.inputBox.isSelectionAtEnd(); }


'terminal.ansiGreen': { index: 2, defaults: { <del> light: '#00BC00', </del> <ins> light: '#107C10', </ins> dark: '#0DBC79', hcDark: '#00cd00', <del> hcLight: '#00bc00' </del> <ins> hcLight: '#136C13' </ins> } }, 'terminal.ansiYellow': {


assert.deepStrictEqual(colors, [ '#000000', '#cd3131', <del> '#00bc00', </del> <ins> '#107c10', </ins> '#949800', '#0451a5', '#bc05bc',


Question:
Steps to Reproduce: a notebook and put in a cell and run it to establish a kernel for that notebook vscode and run the cell before the kernel is auto-selected :bug: notebook variable view will not initialize
HI is this a candidate? This issue is assigned to the recovery 2 milestone, but it does not have a candidate label and there appears to only be one PR to main. We will discuss this issue in standup and decide if this should be merged to the release branch.
As mentioned in a private discussion, if we accept this candidate recovery release will be held on Monday which is when the next endgame starts. To avoid overlap of the two endgames, this fix should be included instead in the next release.

import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { NOTEBOOK_VARIABLE_VIEW_ENABLED } from 'vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariableContextKeys'; export class NotebookVariables extends Disposable implements IWorkbenchContribution { private listeners: IDisposable[] = []; private configListener: IDisposable;


Question:
Steps to Reproduce: a notebook and put in a cell and run it to establish a kernel for that notebook vscode and run the cell before the kernel is auto-selected :bug: notebook variable view will not initialize
HI is this a candidate? This issue is assigned to the recovery 2 milestone, but it does not have a candidate label and there appears to only be one PR to main. We will discuss this issue in standup and decide if this should be merged to the release branch.
As mentioned in a private discussion, if we accept this candidate recovery release will be held on Monday which is when the next endgame starts. To avoid overlap of the two endgames, this fix should be included instead in the next release.

this.viewEnabled = NOTEBOOK_VARIABLE_VIEW_ENABLED.bindTo(contextKeyService); <del> this.listeners.push(this.editorService.onDidEditorsChange(() => this.handleInitEvent())); this.listeners.push(this.notebookExecutionStateService.onDidChangeExecution(() => this.handleInitEvent())); </del> <ins> this.listeners.push(this.editorService.onDidActiveEditorChange(() => this.handleInitEvent())); this.listeners.push(this.notebookExecutionStateService.onDidChangeExecution((e) => this.handleInitEvent())); </ins> this.configListener = configurationService.onDidChangeConfiguration((e) => this.handleConfigChange(e)); }


Question:
Steps to Reproduce: a notebook and put in a cell and run it to establish a kernel for that notebook vscode and run the cell before the kernel is auto-selected :bug: notebook variable view will not initialize
HI is this a candidate? This issue is assigned to the recovery 2 milestone, but it does not have a candidate label and there appears to only be one PR to main. We will discuss this issue in standup and decide if this should be merged to the release branch.
As mentioned in a private discussion, if we accept this candidate recovery release will be held on Monday which is when the next endgame starts. To avoid overlap of the two endgames, this fix should be included instead in the next release.

if (this.configurationService.getValue(NotebookSetting.notebookVariablesView) && this.editorService.activeEditorPane?.getId() === 'workbench.editor.notebook') { <del> if (this.hasVariableProvider()) { </del> <ins> if (this.hasVariableProvider() && !this.initialized && this.initializeView()) { </ins> this.viewEnabled.set(true); <del> } if (!this.initialized && this.initializeView()) { </del> this.initialized = true; this.listeners.forEach(listener => listener.dispose()); }


Question:
Steps to Reproduce: a notebook and put in a cell and run it to establish a kernel for that notebook vscode and run the cell before the kernel is auto-selected :bug: notebook variable view will not initialize
HI is this a candidate? This issue is assigned to the recovery 2 milestone, but it does not have a candidate label and there appears to only be one PR to main. We will discuss this issue in standup and decide if this should be merged to the release branch.
As mentioned in a private discussion, if we accept this candidate recovery release will be held on Monday which is when the next endgame starts. To avoid overlap of the two endgames, this fix should be included instead in the next release.

private setActiveNotebook() { const current = this.activeNotebook; const activeEditorPane = this.editorService.activeEditorPane; <del> if (activeEditorPane && activeEditorPane.getId() === 'workbench.editor.notebook') { </del> <ins> if (activeEditorPane?.getId() === 'workbench.editor.notebook') { </ins> const notebookDocument = getNotebookEditorFromEditorPane(activeEditorPane)?.getViewModel()?.notebookDocument; this.activeNotebook = notebookDocument; }


Question:
Type: <bBug</b! I think the log files are listed in the order the LogOutputChannels got created. Unless this is intentional / important I suggest we sort them alphabetically. I also propose adding the contributing extension's ID as the description element of the list item for LogOutputChannels created by extensions. VS Code version: Code - Insiders 1.87.0-insider (, 2024-02-13T05:47:27.450Z) OS version: Windows_NT x64 10.0. Modes: <!-- generated by issue reporter --
Changed it to show in the same way like in the output channel dropdown !
This is a little confusing because a provider that shows in the Output view dropdown might not show in "Developer: Open Log File...". I assume this is because Output has all output channels and "Open Log File" only has log output channels. I specifically noticed this with ESLint.
Thats right. Not all output channels are logs.

import { IViewsService } from 'vs/workbench/services/views/common/viewsService'; import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; <del> import { IQuickPickItem, IQuickInputService, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; </del> <ins> import { IQuickPickItem, IQuickInputService, IQuickPickSeparator, QuickPickInput } from 'vs/platform/quickinput/common/quickInput'; </ins> import { AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { assertIsDefined } from 'vs/base/common/types'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';


Question:
Type: <bBug</b! I think the log files are listed in the order the LogOutputChannels got created. Unless this is intentional / important I suggest we sort them alphabetically. I also propose adding the contributing extension's ID as the description element of the list item for LogOutputChannels created by extensions. VS Code version: Code - Insiders 1.87.0-insider (, 2024-02-13T05:47:27.450Z) OS version: Windows_NT x64 10.0. Modes: <!-- generated by issue reporter --
Changed it to show in the same way like in the output channel dropdown !
This is a little confusing because a provider that shows in the Output view dropdown might not show in "Developer: Open Log File...". I assume this is because Output has all output channels and "Open Log File" only has log output channels. I specifically noticed this with ESLint.
Thats right. Not all output channels are logs.

const editorService = accessor.get(IEditorService); const fileConfigurationService = accessor.get(IFilesConfigurationService); <del> const entries: IOutputChannelQuickPickItem[] = outputService.getChannelDescriptors().filter(c => c.file && c.log) .map(channel => (<IOutputChannelQuickPickItem>{ id: channel.id, label: channel.label, channel })); const argName = args && typeof args === 'string' ? args : undefined; </del> let entry: IOutputChannelQuickPickItem | undefined; <del> if (argName) { entry = entries.find(e => e.id === argName); </del> <ins> const argName = args && typeof args === 'string' ? args : undefined; const extensionChannels: IOutputChannelQuickPickItem[] = []; const coreChannels: IOutputChannelQuickPickItem[] = []; for (const c of outputService.getChannelDescriptors()) { if (c.file && c.log) { const e = { id: c.id, label: c.label, channel: c }; if (c.extensionId) { extensionChannels.push(e); } else { coreChannels.push(e); } if (e.id === argName) { entry = e; } } </ins> } if (!entry) { <del> entry = await quickInputService.pick(entries, { placeHolder: nls.localize('selectlogFile', "Select Log File") }); </del> <ins> const entries: QuickPickInput[] = [...extensionChannels.sort((a, b) => a.label.localeCompare(b.label))]; if (entries.length && coreChannels.length) { entries.push({ type: 'separator' }); entries.push(...coreChannels.sort((a, b) => a.label.localeCompare(b.label))); } entry = <IOutputChannelQuickPickItem | undefined>await quickInputService.pick(entries, { placeHolder: nls.localize('selectlogFile', "Select Log File") }); </ins> } if (entry) { const resource = assertIsDefined(entry.channel.file);


Question: With the custom hover now making appearance everywhere in the workbench UI, I think we should try to make it a bit more compact. Previously I had reported as but I think is still too large and there is a lot of empty space as well. I suggest to find the sweet spot between native hover size and custom hover size. <img width="213" alt="image" src=""

hideOnHover: true, hideOnKeyDown: true, }, <ins> appearance: { compact: true, }, </ins> ...overrideOptions }, focus); }


Question: Testing <img alt="image" src=""For this, I put an invalid , and as expected, the field in the issue reporter is not set to a specific extension. However, I'd appreciate a warning log in the debug console that warns devs that they have an invalid

const response = await fetch(url, init); if (!response.ok) { <ins> console.error('Invalid GitHub URL provided.'); </ins> return false; } const result = await response.json();


Question: Testing <img alt="image" src=""For this, I put an invalid , and as expected, the field in the issue reporter is not set to a specific extension. However, I'd appreciate a warning log in the debug console that warns devs that they have an invalid

let issueUrl = hasUri ? this.getExtensionBugsUrl() : this.getIssueUrl(); if (!issueUrl) { <ins> console.error('No issue url found'); </ins> return false; }


Question: Testing <img alt="image" src=""For this, I put an invalid , and as expected, the field in the issue reporter is not set to a specific extension. However, I'd appreciate a warning log in the debug console that warns devs that they have an invalid

try { url = await this.writeToClipboard(baseUrl, issueBody); } catch (_) { <ins> console.error('Writing to clipboard failed'); </ins> return false; } }


Question: Testing <img alt="image" src=""For this, I put an invalid , and as expected, the field in the issue reporter is not set to a specific extension. However, I'd appreciate a warning log in the debug console that warns devs that they have an invalid

owner: match[1], repositoryName: match[2] }; <ins> } else { console.error('No GitHub match'); </ins> } return undefined;


Question: Testing <img alt="image" src=""For this, I put an invalid , and as expected, the field in the issue reporter is not set to a specific extension. However, I'd appreciate a warning log in the debug console that warns devs that they have an invalid

githubAccessToken }, dataOverrides); <ins> if (issueReporterData.extensionId) { const extensionExists = extensionData.some(extension => extension.id === issueReporterData.extensionId); if (!extensionExists) { console.error(`Extension with ID ${issueReporterData.extensionId} does not exist.`); } } </ins> if (issueReporterData.extensionId && this.extensionIdentifierSet.has(issueReporterData.extensionId)) { ipcRenderer.send(`vscode:triggerReporterMenuResponse:${issueReporterData.extensionId}`, issueReporterData); this.extensionIdentifierSet.delete(new ExtensionIdentifier(issueReporterData.extensionId));


Question:
Testing I had the arg For and clicking "Create on GitHub" did nothing. I would expect an error to log in the console for this so that devs know what has happened.
Did this log anything in the console? (ie, or something like that)
I didn't see anything in the debug console.
Technically, it's a valid URI, but it doesn't resolve to a valid endpoint.


Question:
Testing I had the arg For and clicking "Create on GitHub" did nothing. I would expect an error to log in the console for this so that devs know what has happened.
Did this log anything in the console? (ie, or something like that)
I didn't see anything in the debug console.
Technically, it's a valid URI, but it doesn't resolve to a valid endpoint.


Question:
Testing I had the arg For and clicking "Create on GitHub" did nothing. I would expect an error to log in the console for this so that devs know what has happened.
Did this log anything in the console? (ie, or something like that)
I didn't see anything in the debug console.
Technically, it's a valid URI, but it doesn't resolve to a valid endpoint.


Question:
Testing I had the arg For and clicking "Create on GitHub" did nothing. I would expect an error to log in the console for this so that devs know what has happened.
Did this log anything in the console? (ie, or something like that)
I didn't see anything in the debug console.
Technically, it's a valid URI, but it doesn't resolve to a valid endpoint.


Question:
Testing I had the arg For and clicking "Create on GitHub" did nothing. I would expect an error to log in the console for this so that devs know what has happened.
Did this log anything in the console? (ie, or something like that)
I didn't see anything in the debug console.
Technically, it's a valid URI, but it doesn't resolve to a valid endpoint.


Question:
Testing I'm not sure what the correct fix is but if the text was generated outside of the view, I would image the editor would scroll horizontally as text gets inserted. (same as typing in the editor). !
Yes, very good catch.

previewStart = assertIsDefined(this.editor.getPosition()); } <ins> const endPosition = new Position(previewStart.lineNumber, previewStart.column + text.length); </ins> this.editor.executeEdits(EditorDictation.ID, [ EditOperation.replace(Range.fromPositions(previewStart, previewStart.with(undefined, previewStart.column + lastReplaceTextLength)), text) ], [ <del> Selection.fromPositions(new Position(previewStart.lineNumber, previewStart.column + text.length)) </del> <ins> Selection.fromPositions(endPosition) </ins> ]); if (isPreview) {


Question:
Testing I'm not sure what the correct fix is but if the text was generated outside of the view, I would image the editor would scroll horizontally as text gets inserted. (same as typing in the editor). !
Yes, very good catch.

lastReplaceTextLength = 0; } <ins> this.editor.revealPositionInCenterIfOutsideViewport(endPosition); </ins> this.widget.layout(); };


Question:
This issue is about allowing extensions to use language model that are contributed by other extensions. The API proposal is and its scope is to allow to use the chat feature of language models. Remaining finalisation todos [x] consolidate different LanguageModelChatXYZMessage-type into one type and a role-enum [x] move System message/role into its own proposal [x] have a select-function that's the only way of getting to a chat model [x] [ ] consider to have more sturcture on , e.g have a fake reply message with role like others (ollama, open ai, anthropic) I renamed to and I will continue to explore a stream of structured objects. That would be additive to and plugged in as its foundation. add something like add a StopReason-enum that's also used in LanguageModelChat
Docs:
With there will be no more language model access object. Instead all requests are made directly via
Hi Is there any plans to add a , so I can implement my own calls to other models other than the Copilot provided models? Thanks!
Yeah, that exists. It is the which is still very rough and currently not yet scheduled for finalisation. Tho, feel free to give it a spin and report what's missing/wrong. For instance, locally I have a dummy extension that uses ollama to drive this API
I assume you are referring to the API? So if I use , I can then use the id I give it with ?
No, I mean the proposal that I have mentioned
FYI that I made the following changes to the proposal there is no more and generally no more referring of language model by string-identifier. there is that takes a selector and returns matching chat models or nothing () These changes allow for a better implementation of the providing-end (-proposal) and most importantly make it more obvious that models can (and will) change. The following pattern had become popular'ish , ....)`. This is brittle because extensions break as soon as the model id isn't known anymore. Instead models need to be selected, making it hopefully more clear that a desired model doesn't exist. The new selector-mechanism allows for new flexibility as well. A couple of samples To restate, the -function can return which means no model was found. That's because the selector is to strict (using ) or because no models are known (missing extensions). The shape of language model selectors is this Note that property order represents how specific it is properties are matched based on equality, when present it must match we will likely add some comparison selector for input and/or output tokens
Isn't this still possible? We can call any LLM API in our handler and use the stream.markdown() to display the response, right?
'y.provider.provideLanguageModelResponse is not a function'
I'm noticing a difference in behavior of the API when running in Codespaces from the browser. When running against a Codespace with desktop Insiders, everything works as expected. When running against the same Codespace with browser Insiders, always returns , implying there are no chat models available.
Make sure that you are on latest pre-release of the copilot-chat extension That's certainly possible when copilot-chat isn't installed in the codespace.
It is installed, and regular Copilot Chat works normally, but our extension can't get a language model.
And it is latest prerelease?
Yep! Version: 1.90.0-insider Commit: Date: 2024-05-13T12:40:35.552Z Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 ! ! Here's regular chat working: ! And our extension emitting to its output log, via this line of code: ! The same codespace but using desktop frontend instead of browser (working as expected): !
Really confusing... In my sample remote-setup (which isn't codespaces) this is working just fine and I see so smoking guns for why this wouldn't work in codespaces. For now, I have some logging that should help us get to the bottom of this
I see mention of moving the System prompt to a separate Proposal, can that be linked to? I am not finding it and we use it in our extension. Also is this section of the guide still accurate? It's not showing those commands as imports anymore and from my reading of the types it looks like it should be closer to:
This is place of all API proposals: Likely outdated
Where should I look for the additional logs?
Enable trace logging, show the window-log and check for messages starting with . There should be some for registering and some for selection <img width="963" alt="Screenshot 2024-05-15 at 08 15 30" src=""
I did find something after running into a similar issues. Can you confirm that a later/second invocation yields models and/or that the -event fires and that after that chat models are selected?
I found some log lines for selection but nothing for registration: We end up doing language model selection several times and each time it returns . I even tried doing the following and still there were no log lines about registration: all 3 extensions (Copilot Chat, Copilot, and our extension) browser window trace window logging extensions a query with regular Copilot (success) a query with our extension (failure) However, when using VSCode Desktop as the frontend, I do see log lines about language model registration:
Thanks for the update. That would really mean the language model API doesn't register. Can you check the chat log (Output GH Copilot Chat) for messages starting with
I don't see any messages like that from either browser or desktop frontend on the Codespace. However, on the browser session there was this message which did not appear on the desktop session--might be spurious but I'm not sure:
We have finalized the Language Model and Chat Participant API Thus, you can now publish your extensions to the VS Marketplace. This API is finalized in VS Code Insiders, and will be finalized in VS Code Stable in July. Thus we suggest that you use an engines: ^1.90.0 property in your , and VS Code Stable will gracefully handle your extensions and ignore your usage of Language Model and Chat API until the API gets finalized in Stable in July. Full docs We have decided to only finalise the message. And message might be finalised in one of the future iterations. Main reason for this is general API consideration - as we are still learning how the prompt API would fit with some of the non-GPT models. Also we believe that the prompt API requires more responsible AI testing from our team. If your extension would like to use the prompt API - please let us know if you hit issues with using the prompt as a replacement. We are excited to see what you build
I am still wondering if there will be a API so I can use other models inside of the chat API. Is this something coming in the future? For now, it can be shimmed by wrapping and handling other entries (perhaps I want to point to my local Ollama instance).
Still a proposal and not yet planned for finalisation

LanguageModelSystemMessage: extHostTypes.LanguageModelChatSystemMessage, LanguageModelUserMessage: extHostTypes.LanguageModelChatUserMessage, LanguageModelAssistantMessage: extHostTypes.LanguageModelChatAssistantMessage, <ins> LanguageModelError: extHostTypes.LanguageModelError, </ins> NewSymbolName: extHostTypes.NewSymbolName, NewSymbolNameTag: extHostTypes.NewSymbolNameTag, InlineEdit: extHostTypes.InlineEdit,


Question:
This issue is about allowing extensions to use language model that are contributed by other extensions. The API proposal is and its scope is to allow to use the chat feature of language models. Remaining finalisation todos [x] consolidate different LanguageModelChatXYZMessage-type into one type and a role-enum [x] move System message/role into its own proposal [x] have a select-function that's the only way of getting to a chat model [x] [ ] consider to have more sturcture on , e.g have a fake reply message with role like others (ollama, open ai, anthropic) I renamed to and I will continue to explore a stream of structured objects. That would be additive to and plugged in as its foundation. add something like add a StopReason-enum that's also used in LanguageModelChat
Docs:
With there will be no more language model access object. Instead all requests are made directly via
Hi Is there any plans to add a , so I can implement my own calls to other models other than the Copilot provided models? Thanks!
Yeah, that exists. It is the which is still very rough and currently not yet scheduled for finalisation. Tho, feel free to give it a spin and report what's missing/wrong. For instance, locally I have a dummy extension that uses ollama to drive this API
I assume you are referring to the API? So if I use , I can then use the id I give it with ?
No, I mean the proposal that I have mentioned
FYI that I made the following changes to the proposal there is no more and generally no more referring of language model by string-identifier. there is that takes a selector and returns matching chat models or nothing () These changes allow for a better implementation of the providing-end (-proposal) and most importantly make it more obvious that models can (and will) change. The following pattern had become popular'ish , ....)`. This is brittle because extensions break as soon as the model id isn't known anymore. Instead models need to be selected, making it hopefully more clear that a desired model doesn't exist. The new selector-mechanism allows for new flexibility as well. A couple of samples To restate, the -function can return which means no model was found. That's because the selector is to strict (using ) or because no models are known (missing extensions). The shape of language model selectors is this Note that property order represents how specific it is properties are matched based on equality, when present it must match we will likely add some comparison selector for input and/or output tokens
Isn't this still possible? We can call any LLM API in our handler and use the stream.markdown() to display the response, right?
'y.provider.provideLanguageModelResponse is not a function'
I'm noticing a difference in behavior of the API when running in Codespaces from the browser. When running against a Codespace with desktop Insiders, everything works as expected. When running against the same Codespace with browser Insiders, always returns , implying there are no chat models available.
Make sure that you are on latest pre-release of the copilot-chat extension That's certainly possible when copilot-chat isn't installed in the codespace.
It is installed, and regular Copilot Chat works normally, but our extension can't get a language model.
And it is latest prerelease?
Yep! Version: 1.90.0-insider Commit: Date: 2024-05-13T12:40:35.552Z Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 ! ! Here's regular chat working: ! And our extension emitting to its output log, via this line of code: ! The same codespace but using desktop frontend instead of browser (working as expected): !
Really confusing... In my sample remote-setup (which isn't codespaces) this is working just fine and I see so smoking guns for why this wouldn't work in codespaces. For now, I have some logging that should help us get to the bottom of this
I see mention of moving the System prompt to a separate Proposal, can that be linked to? I am not finding it and we use it in our extension. Also is this section of the guide still accurate? It's not showing those commands as imports anymore and from my reading of the types it looks like it should be closer to:
This is place of all API proposals: Likely outdated
Where should I look for the additional logs?
Enable trace logging, show the window-log and check for messages starting with . There should be some for registering and some for selection <img width="963" alt="Screenshot 2024-05-15 at 08 15 30" src=""
I did find something after running into a similar issues. Can you confirm that a later/second invocation yields models and/or that the -event fires and that after that chat models are selected?
I found some log lines for selection but nothing for registration: We end up doing language model selection several times and each time it returns . I even tried doing the following and still there were no log lines about registration: all 3 extensions (Copilot Chat, Copilot, and our extension) browser window trace window logging extensions a query with regular Copilot (success) a query with our extension (failure) However, when using VSCode Desktop as the frontend, I do see log lines about language model registration:
Thanks for the update. That would really mean the language model API doesn't register. Can you check the chat log (Output GH Copilot Chat) for messages starting with
I don't see any messages like that from either browser or desktop frontend on the Codespace. However, on the browser session there was this message which did not appear on the desktop session--might be spurious but I'm not sure:
We have finalized the Language Model and Chat Participant API Thus, you can now publish your extensions to the VS Marketplace. This API is finalized in VS Code Insiders, and will be finalized in VS Code Stable in July. Thus we suggest that you use an engines: ^1.90.0 property in your , and VS Code Stable will gracefully handle your extensions and ignore your usage of Language Model and Chat API until the API gets finalized in Stable in July. Full docs We have decided to only finalise the message. And message might be finalised in one of the future iterations. Main reason for this is general API consideration - as we are still learning how the prompt API would fit with some of the non-GPT models. Also we believe that the prompt API requires more responsible AI testing from our team. If your extension would like to use the prompt API - please let us know if you hit issues with using the prompt as a replacement. We are excited to see what you build
I am still wondering if there will be a API so I can use other models inside of the chat API. Is this something coming in the future? For now, it can be shimmed by wrapping and handling other entries (perhaps I want to point to my local Ollama instance).
Still a proposal and not yet planned for finalisation

import { ILogService } from 'vs/platform/log/common/log'; import { ExtHostLanguageModelsShape, IMainContext, MainContext, MainThreadLanguageModelsShape } from 'vs/workbench/api/common/extHost.protocol'; import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; <ins> import { LanguageModelError } from 'vs/workbench/api/common/extHostTypes'; </ins> import type * as vscode from 'vscode'; import { Progress } from 'vs/platform/progress/common/progress'; import { IChatMessage, IChatResponseFragment, ILanguageModelChatMetadata } from 'vs/workbench/contrib/chat/common/languageModels';


Question:
This issue is about allowing extensions to use language model that are contributed by other extensions. The API proposal is and its scope is to allow to use the chat feature of language models. Remaining finalisation todos [x] consolidate different LanguageModelChatXYZMessage-type into one type and a role-enum [x] move System message/role into its own proposal [x] have a select-function that's the only way of getting to a chat model [x] [ ] consider to have more sturcture on , e.g have a fake reply message with role like others (ollama, open ai, anthropic) I renamed to and I will continue to explore a stream of structured objects. That would be additive to and plugged in as its foundation. add something like add a StopReason-enum that's also used in LanguageModelChat
Docs:
With there will be no more language model access object. Instead all requests are made directly via
Hi Is there any plans to add a , so I can implement my own calls to other models other than the Copilot provided models? Thanks!
Yeah, that exists. It is the which is still very rough and currently not yet scheduled for finalisation. Tho, feel free to give it a spin and report what's missing/wrong. For instance, locally I have a dummy extension that uses ollama to drive this API
I assume you are referring to the API? So if I use , I can then use the id I give it with ?
No, I mean the proposal that I have mentioned
FYI that I made the following changes to the proposal there is no more and generally no more referring of language model by string-identifier. there is that takes a selector and returns matching chat models or nothing () These changes allow for a better implementation of the providing-end (-proposal) and most importantly make it more obvious that models can (and will) change. The following pattern had become popular'ish , ....)`. This is brittle because extensions break as soon as the model id isn't known anymore. Instead models need to be selected, making it hopefully more clear that a desired model doesn't exist. The new selector-mechanism allows for new flexibility as well. A couple of samples To restate, the -function can return which means no model was found. That's because the selector is to strict (using ) or because no models are known (missing extensions). The shape of language model selectors is this Note that property order represents how specific it is properties are matched based on equality, when present it must match we will likely add some comparison selector for input and/or output tokens
Isn't this still possible? We can call any LLM API in our handler and use the stream.markdown() to display the response, right?
'y.provider.provideLanguageModelResponse is not a function'
I'm noticing a difference in behavior of the API when running in Codespaces from the browser. When running against a Codespace with desktop Insiders, everything works as expected. When running against the same Codespace with browser Insiders, always returns , implying there are no chat models available.
Make sure that you are on latest pre-release of the copilot-chat extension That's certainly possible when copilot-chat isn't installed in the codespace.
It is installed, and regular Copilot Chat works normally, but our extension can't get a language model.
And it is latest prerelease?
Yep! Version: 1.90.0-insider Commit: Date: 2024-05-13T12:40:35.552Z Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 ! ! Here's regular chat working: ! And our extension emitting to its output log, via this line of code: ! The same codespace but using desktop frontend instead of browser (working as expected): !
Really confusing... In my sample remote-setup (which isn't codespaces) this is working just fine and I see so smoking guns for why this wouldn't work in codespaces. For now, I have some logging that should help us get to the bottom of this
I see mention of moving the System prompt to a separate Proposal, can that be linked to? I am not finding it and we use it in our extension. Also is this section of the guide still accurate? It's not showing those commands as imports anymore and from my reading of the types it looks like it should be closer to:
This is place of all API proposals: Likely outdated
Where should I look for the additional logs?
Enable trace logging, show the window-log and check for messages starting with . There should be some for registering and some for selection <img width="963" alt="Screenshot 2024-05-15 at 08 15 30" src=""
I did find something after running into a similar issues. Can you confirm that a later/second invocation yields models and/or that the -event fires and that after that chat models are selected?
I found some log lines for selection but nothing for registration: We end up doing language model selection several times and each time it returns . I even tried doing the following and still there were no log lines about registration: all 3 extensions (Copilot Chat, Copilot, and our extension) browser window trace window logging extensions a query with regular Copilot (success) a query with our extension (failure) However, when using VSCode Desktop as the frontend, I do see log lines about language model registration:
Thanks for the update. That would really mean the language model API doesn't register. Can you check the chat log (Output GH Copilot Chat) for messages starting with
I don't see any messages like that from either browser or desktop frontend on the Codespace. However, on the browser session there was this message which did not appear on the desktop session--might be spurious but I'm not sure:
We have finalized the Language Model and Chat Participant API Thus, you can now publish your extensions to the VS Marketplace. This API is finalized in VS Code Insiders, and will be finalized in VS Code Stable in July. Thus we suggest that you use an engines: ^1.90.0 property in your , and VS Code Stable will gracefully handle your extensions and ignore your usage of Language Model and Chat API until the API gets finalized in Stable in July. Full docs We have decided to only finalise the message. And message might be finalised in one of the future iterations. Main reason for this is general API consideration - as we are still learning how the prompt API would fit with some of the non-GPT models. Also we believe that the prompt API requires more responsible AI testing from our team. If your extension would like to use the prompt API - please let us know if you hit issues with using the prompt as a replacement. We are excited to see what you build
I am still wondering if there will be a API so I can use other models inside of the chat API. Is this something coming in the future? For now, it can be shimmed by wrapping and handling other entries (perhaps I want to point to my local Ollama instance).
Still a proposal and not yet planned for finalisation

const metadata = await this._proxy.$prepareChatAccess(from, languageModelId, options.justification); if (!metadata || !this._languageModelIds.has(languageModelId)) { <del> throw new Error(`Language model '${languageModelId}' is unknown.`); </del> <ins> throw LanguageModelError.NotFound(`Language model '${languageModelId}' is unknown.`); </ins> } if (this._isUsingAuth(from, metadata)) { const success = await this._getAuthAccess(extension, { identifier: metadata.extension, displayName: metadata.auth.providerLabel }, options.justification, options.silent); if (!success || !this._modelAccessList.get(from)?.has(metadata.extension)) { <del> throw new Error(`Language model '${languageModelId}' cannot be used by '${from.value}'.`); </del> <ins> throw LanguageModelError.NoPermissions(`Language model '${languageModelId}' cannot be used by '${from.value}'.`); </ins> } }


Question:
This issue is about allowing extensions to use language model that are contributed by other extensions. The API proposal is and its scope is to allow to use the chat feature of language models. Remaining finalisation todos [x] consolidate different LanguageModelChatXYZMessage-type into one type and a role-enum [x] move System message/role into its own proposal [x] have a select-function that's the only way of getting to a chat model [x] [ ] consider to have more sturcture on , e.g have a fake reply message with role like others (ollama, open ai, anthropic) I renamed to and I will continue to explore a stream of structured objects. That would be additive to and plugged in as its foundation. add something like add a StopReason-enum that's also used in LanguageModelChat
Docs:
With there will be no more language model access object. Instead all requests are made directly via
Hi Is there any plans to add a , so I can implement my own calls to other models other than the Copilot provided models? Thanks!
Yeah, that exists. It is the which is still very rough and currently not yet scheduled for finalisation. Tho, feel free to give it a spin and report what's missing/wrong. For instance, locally I have a dummy extension that uses ollama to drive this API
I assume you are referring to the API? So if I use , I can then use the id I give it with ?
No, I mean the proposal that I have mentioned
FYI that I made the following changes to the proposal there is no more and generally no more referring of language model by string-identifier. there is that takes a selector and returns matching chat models or nothing () These changes allow for a better implementation of the providing-end (-proposal) and most importantly make it more obvious that models can (and will) change. The following pattern had become popular'ish , ....)`. This is brittle because extensions break as soon as the model id isn't known anymore. Instead models need to be selected, making it hopefully more clear that a desired model doesn't exist. The new selector-mechanism allows for new flexibility as well. A couple of samples To restate, the -function can return which means no model was found. That's because the selector is to strict (using ) or because no models are known (missing extensions). The shape of language model selectors is this Note that property order represents how specific it is properties are matched based on equality, when present it must match we will likely add some comparison selector for input and/or output tokens
Isn't this still possible? We can call any LLM API in our handler and use the stream.markdown() to display the response, right?
'y.provider.provideLanguageModelResponse is not a function'
I'm noticing a difference in behavior of the API when running in Codespaces from the browser. When running against a Codespace with desktop Insiders, everything works as expected. When running against the same Codespace with browser Insiders, always returns , implying there are no chat models available.
Make sure that you are on latest pre-release of the copilot-chat extension That's certainly possible when copilot-chat isn't installed in the codespace.
It is installed, and regular Copilot Chat works normally, but our extension can't get a language model.
And it is latest prerelease?
Yep! Version: 1.90.0-insider Commit: Date: 2024-05-13T12:40:35.552Z Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0 ! ! Here's regular chat working: ! And our extension emitting to its output log, via this line of code: ! The same codespace but using desktop frontend instead of browser (working as expected): !
Really confusing... In my sample remote-setup (which isn't codespaces) this is working just fine and I see so smoking guns for why this wouldn't work in codespaces. For now, I have some logging that should help us get to the bottom of this
I see mention of moving the System prompt to a separate Proposal, can that be linked to? I am not finding it and we use it in our extension. Also is this section of the guide still accurate? It's not showing those commands as imports anymore and from my reading of the types it looks like it should be closer to:
This is place of all API proposals: Likely outdated
Where should I look for the additional logs?
Enable trace logging, show the window-log and check for messages starting with . There should be some for registering and some for selection <img width="963" alt="Screenshot 2024-05-15 at 08 15 30" src=""
I did find something after running into a similar issues. Can you confirm that a later/second invocation yields models and/or that the -event fires and that after that chat models are selected?
I found some log lines for selection but nothing for registration: We end up doing language model selection several times and each time it returns . I even tried doing the following and still there were no log lines about registration: all 3 extensions (Copilot Chat, Copilot, and our extension) browser window trace window logging extensions a query with regular Copilot (success) a query with our extension (failure) However, when using VSCode Desktop as the frontend, I do see log lines about language model registration:
Thanks for the update. That would really mean the language model API doesn't register. Can you check the chat log (Output GH Copilot Chat) for messages starting with
I don't see any messages like that from either browser or desktop frontend on the Codespace. However, on the browser session there was this message which did not appear on the desktop session--might be spurious but I'm not sure:
We have finalized the Language Model and Chat Participant API Thus, you can now publish your extensions to the VS Marketplace. This API is finalized in VS Code Insiders, and will be finalized in VS Code Stable in July. Thus we suggest that you use an engines: ^1.90.0 property in your , and VS Code Stable will gracefully handle your extensions and ignore your usage of Language Model and Chat API until the API gets finalized in Stable in July. Full docs We have decided to only finalise the message. And message might be finalised in one of the future iterations. Main reason for this is general API consideration - as we are still learning how the prompt API would fit with some of the non-GPT models. Also we believe that the prompt API requires more responsible AI testing from our team. If your extension would like to use the prompt API - please let us know if you hit issues with using the prompt as a replacement. We are excited to see what you build
I am still wondering if there will be a API so I can use other models inside of the chat API. Is this something coming in the future? For now, it can be shimmed by wrapping and handling other entries (perhaps I want to point to my local Ollama instance).
Still a proposal and not yet planned for finalisation

await barrier.wait(); if (error) { <del> throw new Error(`Language model '${languageModelId}' errored, check cause for more details`, { cause: error }); </del> <ins> throw new LanguageModelError( `Language model '${languageModelId}' errored, check cause for more details`, 'Unknown', error ); </ins> } return res.apiObject;