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

} } <ins> export class LanguageModelError extends Error { static NotFound(message?: string): LanguageModelError { return new LanguageModelError(message, LanguageModelError.NotFound.name); } static NoPermissions(message?: string): LanguageModelError { return new LanguageModelError(message, LanguageModelError.NoPermissions.name); } readonly code: string; constructor(message?: string, code?: string, cause?: Error) { super(message, { cause }); this.name = 'LanguageModelError'; this.code = code ?? ''; } } </ins> //#endregion //#region ai


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

} /** <ins> * An error type for language model specific errors. * * Consumers of language models should check the code property to determine specific * failure causes, like `if(someError.code === vscode.LanguageModelError.NotFound.name) {...}` * for the case of referring to an unknown language model. */ export class LanguageModelError extends Error { /** * The language model does not exist. */ static NotFound(message?: string): LanguageModelError; /** * The requestor does not have permissions to use this * language model */ static NoPermissions(message?: string): LanguageModelError; /** * A code that identifies this error. * * Possible values are names of errors, like {@linkcode LanguageModelError.NotFound NotFound}, * or `Unknown` for unspecified errors from the language model itself. In the latter case the * `cause`-property will contain the actual error. */ readonly code: string; } /** </ins> * Options for making a chat request using a language model. * * @see {@link lm.chatRequest}


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

* @returns A thenable that resolves to a {@link LanguageModelChatResponse}. The promise will reject when making the request failed. */ // TODO@API refine doc <del> // TODO@API define specific error types? // TODO@API NAME: sendChatRequest, fetchChatResponse, makeChatRequest, chat, chatRequest sendChatRequest </del> // TODO@API ExtensionContext#permission#languageModels: { languageModel: string: LanguageModelAccessInformation} <ins> // TODO@API ✅ define specific error types? // TODO@API ✅ NAME: sendChatRequest, fetchChatResponse, makeChatRequest, chat, chatRequest sendChatRequest </ins> // TODO@API ✅ NAME: LanguageModelChatXYZMessage // TODO@API ✅ errors on everything that prevents us to make the actual request // TODO@API ✅ double auth


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { workbenchConfigurationNodeBase, Extensions as WorkbenchExtensions, IConfigurationMigrationRegistry, ConfigurationKeyValuePairs } from 'vs/workbench/common/configuration'; import { AccessibilityAlertSettingId, AccessibilitySignal } from 'vs/platform/accessibilitySignal/browser/accessibilitySignalService'; <del> import { ISpeechService } from 'vs/workbench/contrib/speech/common/speechService'; </del> <ins> import { ISpeechService, SPEECH_LANGUAGES, SPEECH_LANGUAGE_CONFIG } from 'vs/workbench/contrib/speech/common/speechService'; </ins> import { Disposable } from 'vs/base/common/lifecycle'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { Event } from 'vs/base/common/event';


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

export const enum AccessibilityVoiceSettingId { SpeechTimeout = 'accessibility.voice.speechTimeout', <del> SpeechLanguage = 'accessibility.voice.speechLanguage' </del> <ins> SpeechLanguage = SPEECH_LANGUAGE_CONFIG </ins> } export const SpeechTimeoutDefault = 1200; <del> const SpeechLanguageDefault = 'en-US'; </del> export class DynamicSpeechAccessibilityConfiguration extends Disposable implements IWorkbenchContribution {


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

'tags': ['accessibility'] }, [AccessibilityVoiceSettingId.SpeechLanguage]: { <del> 'markdownDescription': localize('voice.speechLanguage', "The language that voice speech recognition should recognize."), </del> <ins> 'markdownDescription': localize('voice.speechLanguage', "The language that voice speech recognition should recognize. Select `auto` to use the configured display language if possible. Note that not all display languages maybe supported by speech recognition"), </ins> 'type': 'string', 'enum': languagesSorted, <del> 'default': SpeechLanguageDefault, </del> <ins> 'default': 'auto', </ins> 'tags': ['accessibility'], 'enumDescriptions': languagesSorted.map(key => languages[key].name), 'enumItemLabels': languagesSorted.map(key => languages[key].name)


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

private getLanguages(): { [locale: string]: { name: string } } { return { <del> ['da-DK']: { name: localize('speechLanguage.da-DK', "Danish (Denmark)") </del> <ins> ['auto']: { name: localize('speechLanguage.auto', "Auto (Use Display Language)") </ins> }, <del> ['de-DE']: { name: localize('speechLanguage.de-DE', "German (Germany)") }, ['en-AU']: { name: localize('speechLanguage.en-AU', "English (Australia)") }, ['en-CA']: { name: localize('speechLanguage.en-CA', "English (Canada)") }, ['en-GB']: { name: localize('speechLanguage.en-GB', "English (United Kingdom)") }, ['en-IE']: { name: localize('speechLanguage.en-IE', "English (Ireland)") }, ['en-IN']: { name: localize('speechLanguage.en-IN', "English (India)") }, ['en-NZ']: { name: localize('speechLanguage.en-NZ', "English (New Zealand)") }, [SpeechLanguageDefault]: { name: localize('speechLanguage.en-US', "English (United States)") }, ['es-ES']: { name: localize('speechLanguage.es-ES', "Spanish (Spain)") }, ['es-MX']: { name: localize('speechLanguage.es-MX', "Spanish (Mexico)") }, ['fr-CA']: { name: localize('speechLanguage.fr-CA', "French (Canada)") }, ['fr-FR']: { name: localize('speechLanguage.fr-FR', "French (France)") }, ['hi-IN']: { name: localize('speechLanguage.hi-IN', "Hindi (India)") }, ['it-IT']: { name: localize('speechLanguage.it-IT', "Italian (Italy)") }, ['ja-JP']: { name: localize('speechLanguage.ja-JP', "Japanese (Japan)") }, ['ko-KR']: { name: localize('speechLanguage.ko-KR', "Korean (South Korea)") }, ['nl-NL']: { name: localize('speechLanguage.nl-NL', "Dutch (Netherlands)") }, ['pt-PT']: { name: localize('speechLanguage.pt-PT', "Portuguese (Portugal)") }, ['pt-BR']: { name: localize('speechLanguage.pt-BR', "Portuguese (Brazil)") }, ['ru-RU']: { name: localize('speechLanguage.ru-RU', "Russian (Russia)") }, ['sv-SE']: { name: localize('speechLanguage.sv-SE', "Swedish (Sweden)") }, ['tr-TR']: { name: localize('speechLanguage.tr-TR', "Turkish (Turkey)") }, ['zh-CN']: { name: localize('speechLanguage.zh-CN', "Chinese (Simplified, China)") }, ['zh-HK']: { name: localize('speechLanguage.zh-HK', "Chinese (Traditional, Hong Kong)") }, ['zh-TW']: { name: localize('speechLanguage.zh-TW', "Chinese (Traditional, Taiwan)") } </del> <ins> ...SPEECH_LANGUAGES </ins> }; } }


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

import { ILogService } from 'vs/platform/log/common/log'; import { IHostService } from 'vs/workbench/services/host/browser/host'; import { DeferredPromise } from 'vs/base/common/async'; <del> import { ISpeechService, ISpeechProvider, HasSpeechProvider, ISpeechToTextSession, SpeechToTextInProgress, IKeywordRecognitionSession, KeywordRecognitionStatus, SpeechToTextStatus } from 'vs/workbench/contrib/speech/common/speechService'; </del> <ins> import { ISpeechService, ISpeechProvider, HasSpeechProvider, ISpeechToTextSession, SpeechToTextInProgress, IKeywordRecognitionSession, KeywordRecognitionStatus, SpeechToTextStatus, speechLanguageConfigToLanguage, SPEECH_LANGUAGE_CONFIG } from 'vs/workbench/contrib/speech/common/speechService'; </ins> import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

this.logService.warn(`Multiple speech providers registered. Picking first one: ${provider.metadata.displayName}`); } <del> const language = this.configurationService.getValue<string>('accessibility.voice.speechLanguage'); </del> <ins> const language = speechLanguageConfigToLanguage(this.configurationService.getValue<unknown>(SPEECH_LANGUAGE_CONFIG)); </ins> const session = this._activeSpeechToTextSession = provider.createSpeechToTextSession(token, typeof language === 'string' ? { language } : undefined); const sessionStart = Date.now();


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; <ins> import { language } from 'vs/base/common/platform'; </ins> export const ISpeechService = createDecorator<ISpeechService>('speechService');


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

*/ recognizeKeyword(token: CancellationToken): Promise<KeywordRecognitionStatus>; } <ins> export const SPEECH_LANGUAGE_CONFIG = 'accessibility.voice.speechLanguage'; export const SPEECH_LANGUAGES = { ['da-DK']: { name: localize('speechLanguage.da-DK', "Danish (Denmark)") }, ['de-DE']: { name: localize('speechLanguage.de-DE', "German (Germany)") }, ['en-AU']: { name: localize('speechLanguage.en-AU', "English (Australia)") }, ['en-CA']: { name: localize('speechLanguage.en-CA', "English (Canada)") }, ['en-GB']: { name: localize('speechLanguage.en-GB', "English (United Kingdom)") }, ['en-IE']: { name: localize('speechLanguage.en-IE', "English (Ireland)") }, ['en-IN']: { name: localize('speechLanguage.en-IN', "English (India)") }, ['en-NZ']: { name: localize('speechLanguage.en-NZ', "English (New Zealand)") }, ['en-US']: { name: localize('speechLanguage.en-US', "English (United States)") }, ['es-ES']: { name: localize('speechLanguage.es-ES', "Spanish (Spain)") }, ['es-MX']: { name: localize('speechLanguage.es-MX', "Spanish (Mexico)") }, ['fr-CA']: { name: localize('speechLanguage.fr-CA', "French (Canada)") }, ['fr-FR']: { name: localize('speechLanguage.fr-FR', "French (France)") }, ['hi-IN']: { name: localize('speechLanguage.hi-IN', "Hindi (India)") }, ['it-IT']: { name: localize('speechLanguage.it-IT', "Italian (Italy)") }, ['ja-JP']: { name: localize('speechLanguage.ja-JP', "Japanese (Japan)") }, ['ko-KR']: { name: localize('speechLanguage.ko-KR', "Korean (South Korea)") }, ['nl-NL']: { name: localize('speechLanguage.nl-NL', "Dutch (Netherlands)") }, ['pt-PT']: { name: localize('speechLanguage.pt-PT', "Portuguese (Portugal)") }, ['pt-BR']: { name: localize('speechLanguage.pt-BR', "Portuguese (Brazil)") }, ['ru-RU']: { name: localize('speechLanguage.ru-RU', "Russian (Russia)") }, ['sv-SE']: { name: localize('speechLanguage.sv-SE', "Swedish (Sweden)") }, ['tr-TR']: { name: localize('speechLanguage.tr-TR', "Turkish (Turkey)") }, ['zh-CN']: { name: localize('speechLanguage.zh-CN', "Chinese (Simplified, China)") }, ['zh-HK']: { name: localize('speechLanguage.zh-HK', "Chinese (Traditional, Hong Kong)") }, ['zh-TW']: { name: localize('speechLanguage.zh-TW', "Chinese (Traditional, Taiwan)") } }; export function speechLanguageConfigToLanguage(config: unknown, lang = language): string { if (typeof config === 'string') { if (config === 'auto') { if (lang !== 'en') { const langParts = lang.split('-'); return speechLanguageConfigToLanguage(`${langParts[0]}-${(langParts[1] ?? langParts[0]).toUpperCase()}`); } } else { if (SPEECH_LANGUAGES[config as keyof typeof SPEECH_LANGUAGES]) { return config; } } } return 'en-US'; } </ins>


Question:
Fyi
Verification: install the pre-release version of speech extension: make sure is configured to (it should be by default) switch VS Code display language to another language that is supported by the speech extension such as german or portuguese start voice dictation in a text editor via "Start Dictation in Editor" verify you get prompted to install the related language pack for the display language you picked

<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { speechLanguageConfigToLanguage } from 'vs/workbench/contrib/speech/common/speechService'; suite('SpeechService', () => { test('resolve language', async () => { assert.strictEqual(speechLanguageConfigToLanguage(undefined), 'en-US'); assert.strictEqual(speechLanguageConfigToLanguage(3), 'en-US'); assert.strictEqual(speechLanguageConfigToLanguage('foo'), 'en-US'); assert.strictEqual(speechLanguageConfigToLanguage('foo-bar'), 'en-US'); assert.strictEqual(speechLanguageConfigToLanguage('tr-TR'), 'tr-TR'); assert.strictEqual(speechLanguageConfigToLanguage('zh-TW'), 'zh-TW'); assert.strictEqual(speechLanguageConfigToLanguage('auto', 'en'), 'en-US'); assert.strictEqual(speechLanguageConfigToLanguage('auto', 'tr'), 'tr-TR'); assert.strictEqual(speechLanguageConfigToLanguage('auto', 'zh-tw'), 'zh-TW'); }); ensureNoDisposablesAreLeakedInTestSuite(); }); </ins>


Question:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --As introduced in version 1.87.0 () drag&drop tabs now features a border indicator. It would be nice to have an option to disable this indicator. (Indicator also makes tabs width change and subsequent unwanted jump effect but that's perhaps a bug issue.) !
If you are not interested in seeing the indicator you can change it's colour to be transparent the following way: Regarding the jumping of the tabs, this is definitely a bug, however, I am not able to reproduce it so it seems like it might be related to some none default setting. Could you share the none default tab related settings you are using?
Of course, I believe jumping of the tabs is related to:
I've tried this but I do not see any jumping ! Possibly related to zooming, what are you using?
I've debugged my a bit and it seems combination of these settings is the culprit:
I have tried the combination of these two settings and it doesn't lead to any jumping in my case.
That's odd. I've tried my installation only with these two settings active (1.87.1 on latest macOS) and I can reproduce the bug. !
I tested it on windows, will try it out on a mac next week.
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
I tried the drag and drop on a macos and was also not able to reproduce your bug. Will leave the issue closes for the moment.
Are you sure you've tried the settings above? I was able to reproduce the bug on different MacBook as well as on Windows machine.
I'm able to reproduce now. Looking into it.
In this specific scenario (actions left and shrink tab) we set an ::after element of width 5 for the shadow effect, however, we also use the ::before and ::after elements for drag and drop. Will try to fix next week. Could be a bit tricky

left: unset !important; } <del> .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.close-action-off::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left::after, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.close-action-off::after { content: ''; </del> <ins> .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab .tab-fade-hider { display: none; } .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.tab-actions-left .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-shrink.close-action-off .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.tab-actions-left .tab-fade-hider, .monaco-workbench .part.editor > .content .editor-group-container > .title .tabs-container > .tab.sizing-fixed.close-action-off .tab-fade-hider { </ins> display: flex; flex: 0; width: 5px; /* reserve space to hide tab fade when close button is left or off (fixes https://github.com/microsoft/vscode/issues/45728) */


Question:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --As introduced in version 1.87.0 () drag&drop tabs now features a border indicator. It would be nice to have an option to disable this indicator. (Indicator also makes tabs width change and subsequent unwanted jump effect but that's perhaps a bug issue.) !
If you are not interested in seeing the indicator you can change it's colour to be transparent the following way: Regarding the jumping of the tabs, this is definitely a bug, however, I am not able to reproduce it so it seems like it might be related to some none default setting. Could you share the none default tab related settings you are using?
Of course, I believe jumping of the tabs is related to:
I've tried this but I do not see any jumping ! Possibly related to zooming, what are you using?
I've debugged my a bit and it seems combination of these settings is the culprit:
I have tried the combination of these two settings and it doesn't lead to any jumping in my case.
That's odd. I've tried my installation only with these two settings active (1.87.1 on latest macOS) and I can reproduce the bug. !
I tested it on windows, will try it out on a mac next week.
This issue has been closed automatically because it needs more information and has not had recent activity. See also our guidelines. Happy Coding!
I tried the drag and drop on a macos and was also not able to reproduce your bug. Will leave the issue closes for the moment.
Are you sure you've tried the settings above? I was able to reproduce the bug on different MacBook as well as on Windows machine.
I'm able to reproduce now. Looking into it.
In this specific scenario (actions left and shrink tab) we set an ::after element of width 5 for the shadow effect, however, we also use the ::before and ::after elements for drag and drop. Will try to fix next week. Could be a bit tricky

const tabActionBarDisposable = combinedDisposable(tabActionBar, tabActionListener, toDisposable(insert(this.tabActionBars, tabActionBar))); <ins> // Tab Fade Hider // Hides the tab fade to the right when tab action left and sizing shrink/fixed, ::after, ::before are already used const tabShadowHider = document.createElement('div'); tabShadowHider.classList.add('tab-fade-hider'); tabContainer.appendChild(tabShadowHider); </ins> // Tab Border Bottom const tabBorderBottomContainer = document.createElement('div'); tabBorderBottomContainer.classList.add('tab-border-bottom-container');


Question: Steps to Reproduce: to a folder/workspace with multiple repositories the Source Control viewlet, and in the Source Control Repositories view select one repository to the Explorer viewer back to the Source Control viewlet and in the Source Control Repositories view pick another repository <img width="538" alt="image" src=""the Refresh button renders the input with the correct height

} })); <ins> // Reset widget height so it's recalculated templateData.inputWidgetHeight = InputRenderer.DEFAULT_HEIGHT; </ins> // Rerender the element whenever the editor content height changes const onDidChangeContentHeight = () => { const contentHeight = templateData.inputWidget.getContentHeight();


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

} export function fromDetails(coverage: vscode.FileCoverageDetail): CoverageDetails.Serialized { <ins> if (typeof coverage.executed === 'number' && coverage.executed < 0) { throw new Error(`Invalid coverage count ${coverage.executed}`); } </ins> if ('branches' in coverage) { return { count: coverage.executed,


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

} export function fromFile(id: string, coverage: vscode.FileCoverage): IFileCoverage.Serialized { <ins> types.validateTestCoverageCount(coverage.statementCoverage); types.validateTestCoverageCount(coverage.branchCoverage); types.validateTestCoverageCount(coverage.declarationCoverage); </ins> return { id, uri: coverage.uri,


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

//#region Test Coverage export class TestCoverageCount implements vscode.TestCoverageCount { constructor(public covered: number, public total: number) { <ins> validateTestCoverageCount(this); </ins> } } <del> const validateCC = (cc?: vscode.TestCoverageCount) => { if (cc && cc.covered > cc.total) { </del> <ins> export function validateTestCoverageCount(cc?: vscode.TestCoverageCount) { if (!cc) { return; } if (cc.covered > cc.total) { </ins> throw new Error(`The total number of covered items (${cc.covered}) cannot be greater than the total (${cc.total})`); } <del> }; </del> <ins> if (cc.total < 0) { throw new Error(`The number of covered items (${cc.total}) cannot be negative`); } } </ins> export class FileCoverage implements vscode.FileCoverage { public static fromDetails(uri: vscode.Uri, details: vscode.FileCoverageDetail[]): vscode.FileCoverage {


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

public branchCoverage?: vscode.TestCoverageCount, public declarationCoverage?: vscode.TestCoverageCount, ) { <del> validateCC(statementCoverage); validateCC(branchCoverage); validateCC(declarationCoverage); </del> } }


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

import * as dom from 'vs/base/browser/dom'; import { HoverWidget } from 'vs/base/browser/ui/hover/hoverWidget'; import { mapFindFirst } from 'vs/base/common/arraysFind'; <ins> import { assertNever } from 'vs/base/common/assert'; </ins> import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

import { testingCoverageMissingBranch } from 'vs/workbench/contrib/testing/browser/icons'; import { FileCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; import { ITestCoverageService } from 'vs/workbench/contrib/testing/common/testCoverageService'; <del> import { CoverageDetails, DetailType, IStatementCoverage } from 'vs/workbench/contrib/testing/common/testTypes'; </del> <ins> import { CoverageDetails, DetailType, IDeclarationCoverage, IStatementCoverage } from 'vs/workbench/contrib/testing/common/testTypes'; </ins> import { TestingContextKeys } from 'vs/workbench/contrib/testing/common/testingContextKeys'; const MAX_HOVERED_LINES = 30;


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

/** Gets the markdown description for the given detail */ public describe(detail: CoverageDetailsWithBranch, model: ITextModel): IMarkdownString | undefined { if (detail.type === DetailType.Declaration) { <del> return new MarkdownString().appendMarkdown(localize('coverage.declExecutedCount', '`{0}` was executed {1} time(s).', detail.name, detail.count)); </del> <ins> return namedDetailLabel(detail.name, detail); </ins> } else if (detail.type === DetailType.Statement) { const text = wrapName(model.getValueInRange(tidyLocation(detail.location)).trim() || `<empty statement>`); <del> const str = new MarkdownString(); </del> if (detail.branches?.length) { const covered = detail.branches.filter(b => !!b.count).length; <del> str.appendMarkdown(localize('coverage.branches', '{0} of {1} of branches in {2} were covered.', covered, detail.branches.length, text)); </del> <ins> return new MarkdownString().appendMarkdown(localize('coverage.branches', '{0} of {1} of branches in {2} were covered.', covered, detail.branches.length, text)); </ins> } else { <del> str.appendMarkdown(localize('coverage.codeExecutedCount', '{0} was executed {1} time(s).', text, detail.count)); </del> <ins> return namedDetailLabel(text, detail); </ins> } <del> return str; </del> } else if (detail.type === DetailType.Branch) { const text = wrapName(model.getValueInRange(tidyLocation(detail.detail.location)).trim() || `<empty statement>`); const { count, label } = detail.detail.branches![detail.branch]; const label2 = label ? wrapInBackticks(label) : `#${detail.branch + 1}`; <del> if (count === 0) { </del> <ins> if (!count) { </ins> return new MarkdownString().appendMarkdown(localize('coverage.branchNotCovered', 'Branch {0} in {1} was not covered.', label2, text)); <ins> } else if (count === true) { return new MarkdownString().appendMarkdown(localize('coverage.branchCoveredYes', 'Branch {0} in {1} was executed.', label2, text)); </ins> } else { return new MarkdownString().appendMarkdown(localize('coverage.branchCovered', 'Branch {0} in {1} was executed {2} time(s).', label2, text, count)); } } <del> return undefined; </del> <ins> assertNever(detail); </ins> } } <ins> function namedDetailLabel(name: string, detail: IStatementCoverage | IDeclarationCoverage) { return new MarkdownString().appendMarkdown( !detail.count // 0 or false ? localize('coverage.declExecutedNo', '`{0}` was not executed.', name) : typeof detail.count === 'number' ? localize('coverage.declExecutedCount', '`{0}` was executed {1} time(s).', name, detail.count) : localize('coverage.declExecutedYes', '`{0}` was executed.', name) ); } </ins> // 'tidies' the range by normalizing it into a range and removing leading // and trailing whitespace. function tidyLocation(location: Range | Position): Range {


Question: Refs: [x] anyOS [x] anyOS Complexity: 4 We have at long last finalized the test coverage API. Implementing an extension that produces data for the API from scratch is challenging, and requires domain-specific knowledge, so you might find playing with the selfhost test provider to be the most effective way to test it The new types in the API include: - - - Please: Do some testing that the API and UI functions as you would expect Read through the API and verify that its documentation makes sense to you See that UI interactions work nicely as you would expect (you can use any extension that produces coverage to test this part)

runHandler: (request: TestRunRequest, token: CancellationToken) => Thenable<void> | void; /** <del> * A function that provides detailed statement and function-level coverage for a file. </del> <ins> * An extension-provided function that provides detailed statement and * function-level coverage for a file. The editor will call this when more * detail is needed for a file, such as when it's opened in an editor or * expanded in the **Test Coverage** view. </ins> * * The {@link FileCoverage} object passed to this function is the same instance * emitted on {@link TestRun.addCoverage} calls associated with this profile.


Question:
Testing The should be a plain property and not a method
I was thinking about this guideline when I switched it to a method as it's creating a new object every call: Can switch it back, is it worth a discussion in the API sync?
I don't think it does create a new object but that's also not the point here. Your data is never sync with an async iterable but the point is the consumer should just have which is still an async iterable (and likely implemented as lazy getter)
I might be doing something wrong as I don't think I've used an async iterable before, but doesn't this need to return a separate iterable per call in order to support multiple extensions? Currently the is a multiplexer for multiple iterators:
Oh, I missed the invocation inside .
Maybe a better name for a method would be or .

get cwd(): URI | undefined { return that.cwd; }, <del> createDataStream(): AsyncIterable<string> { </del> <ins> readData(): AsyncIterable<string> { </ins> return that._createDataStream(); } };


Question:
Testing The should be a plain property and not a method
I was thinking about this guideline when I switched it to a method as it's creating a new object every call: Can switch it back, is it worth a discussion in the API sync?
I don't think it does create a new object but that's also not the point here. Your data is never sync with an async iterable but the point is the consumer should just have which is still an async iterable (and likely implemented as lazy getter)
I might be doing something wrong as I don't think I've used an async iterable before, but doesn't this need to return a separate iterable per call in order to support multiple extensions? Currently the is a multiplexer for multiple iterators:
Oh, I missed the invocation inside .
Maybe a better name for a method would be or .

* @example * // Log all data written to the terminal for a command * const command = term.shellIntegration.executeCommand({ commandLine: 'echo "Hello world"' }); <del> * const stream = command.createDataStream(); </del> <ins> * const stream = command.readData(); </ins> * for await (const data of stream) { *   console.log(data); * } */ <del> createDataStream(): AsyncIterable<string>; </del> <ins> readData(): AsyncIterable<string>; </ins> } export interface Terminal {


Question: an extension with the following code: on the refactoring in the bulk edit pane opens the following multi diff editor: <img width="1093" alt="Screenshot 2024-03-27 at 17 23 56" src=""above is not correct because it looks like the file is . In fact it is deleted.

// delete if (fileOperation.type & BulkFileOperationType.Delete) { return { <del> original: { resource: undefined }, modified: { resource: URI.revive(previewUri) } </del> <ins> original: { resource: URI.revive(previewUri) }, modified: { resource: undefined } </ins> }; }


Question: VS Code Version: Version: 1.87.2 OS Version: macOS 13.6.4 Steps to Reproduce: in the terminal happens in in , see that IWindowOptions is empty What should happen (works in iTerm2 and macOS Terminal): in the terminal should see a report printed to the screen The window size reporting functions are useful when connecting through tunnels that do not support TTY resize event forwarding. While many SSH and Telnet clients do support this, some tunnels do not (for example, a raw socket tunnel to a vt220-supporting application) and some programs may assume that the client supports this escape sequence. The information required to determine the terminal size in character is already available and is currently used to set the TTY's size. This function is fully implemented in , but not vscode. A small proof-of-concept where I use the debugger to enable this option appears to work as expected.

overviewRulerWidth: 10, ignoreBracketedPasteMode: config.ignoreBracketedPasteMode, rescaleOverlappingGlyphs: config.rescaleOverlappingGlyphs, <ins> windowOptions: { getWinSizePixels: true, getCellSizePixels: true, getWinSizeChars: true, }, </ins> })); this._updateSmoothScrolling(); this._core = (this.raw as any)._core as IXtermCore;


Question:
Does this issue occur when all extensions are disabled?: I dont know VS Code Version: 1.88.0-insider OS Version: Windows 10 - 10.0. Build Steps to Reproduce: Start debugging python script. It creates a new "debugging terminal". This should work stop debugging debugging. If you look at the debugging terminal, you will see a input (generated by VS Code) then command for debugging the selected file. path of the is somehow truncated, hence cannot find the file. debugging is however starting: you will be prompted with the message: Timed out waiting for launcher to connect. As seen on the gif below: Path 1st time: (Correct path) Path 2nd time: (truncated path) !
I'm getting similar behaviour when using Git Bash as default profile. First time debugging the Python Debug Console opens and the application runs without issue: the subsequent times I sometimes get: ... which does in fact executes the code, but then I also sometimes get: I don't know what the call to comes from (possible the end of the directory name, but in in the last instance is not called. This inevitable gives this error. ! Which then starts a new Python Debug Console. Similar to what is above. I don't see this behaviour when using PowerShell or Cmd. IMO There's some weird truncation happening. Version: 1.88.0 (user setup) Commit: Date: 2024-04-03T13:26:18.741Z Electron: 28.2.8 ElectronBuildId: Chromium: 120.0.6099.291 18.18.2 V8: 12.0.267.19-electron.0 OS: Windows_NT x64 10.0.
Thank you for adding details! This is the exact same problem that I experience: I didn't try with another terminal (Powershell or Cmd). I will see if that can fix my problem temporary using .
As mentionned by This issue is not here using . However, this is still adding extra command that could be the explanation behind it: ! The first run it is only using: On the second run, it : before the command. There is still the before this line though (2nd blank line)
I am seeing the problem when I set my default terminal profile to any of the following and run my debug launch script twice. Each shell will fail on the second launch with the same mangled command line. bash command prompt powershell Work around: revert back to vs code 1.87.
I am having a similar problem launching Python from VS.Code with or without debugging (both cmd and wt as terminal.external.windowsExec). If the path to the Python executable contains space as in default I end up with and an error message in the launched terminal window: Yet this works fine if I pick a Python interpreter from venv or somewhere else such that there is no space in path e.g. Curiously - the internal terminal and internal console work with either path
it seems sending the ctrl+c in a separate is not sufficient -- any suggestions?
If you want to execute something again we have a helper on the render process side , this conditionally sends a ^C and may wait for a shell integration prompt. That might work?
It looks like that does the same thing with a 100ms delay. I'll adopt the delay as well, see if that fixes it
please could you confirm when this will be released? It doesn't seem to have gone out in the latest April release. I've tried the insiders version and can't debug anything so it's even worse.
This is available on Insiders. Please open another issue with the details for not being able to debug anything; that's probably not related to this fix...
Can any of you verify that this is fixed in the newest version of VS Code Insiders? Thanks!
<!-- AUTHORVERIFICATIONREQUEST --This bug has been fixed in the latest release of ! you can help us out by commenting if things are now working as expected. If things still don't seem right, please ensure you're on version of Insiders (today's or later - you can use in the command palette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!
The external terminal launch is working with space in pythonInterpreter path () using both and as Windows Terminal in current: 1.89.1 and insiders 1.90.0 /verified
Running on version 1.90.0 I can not longer observe the truncation. The execution command looks intact even after multiple runs. ! There's an extraneous whenever you start a run but I guess that's intentional.
I am experiencing this issue using Python Debugger: Current File with Arguments. I am using ver VSCode ver 1.9

*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import { createCancelablePromise, firstParallel } from 'vs/base/common/async'; </del> <ins> import { createCancelablePromise, firstParallel, timeout } from 'vs/base/common/async'; </ins> import { IDisposable } from 'vs/base/common/lifecycle'; import * as platform from 'vs/base/common/platform'; import * as nls from 'vs/nls';


Question:
Does this issue occur when all extensions are disabled?: I dont know VS Code Version: 1.88.0-insider OS Version: Windows 10 - 10.0. Build Steps to Reproduce: Start debugging python script. It creates a new "debugging terminal". This should work stop debugging debugging. If you look at the debugging terminal, you will see a input (generated by VS Code) then command for debugging the selected file. path of the is somehow truncated, hence cannot find the file. debugging is however starting: you will be prompted with the message: Timed out waiting for launcher to connect. As seen on the gif below: Path 1st time: (Correct path) Path 2nd time: (truncated path) !
I'm getting similar behaviour when using Git Bash as default profile. First time debugging the Python Debug Console opens and the application runs without issue: the subsequent times I sometimes get: ... which does in fact executes the code, but then I also sometimes get: I don't know what the call to comes from (possible the end of the directory name, but in in the last instance is not called. This inevitable gives this error. ! Which then starts a new Python Debug Console. Similar to what is above. I don't see this behaviour when using PowerShell or Cmd. IMO There's some weird truncation happening. Version: 1.88.0 (user setup) Commit: Date: 2024-04-03T13:26:18.741Z Electron: 28.2.8 ElectronBuildId: Chromium: 120.0.6099.291 18.18.2 V8: 12.0.267.19-electron.0 OS: Windows_NT x64 10.0.
Thank you for adding details! This is the exact same problem that I experience: I didn't try with another terminal (Powershell or Cmd). I will see if that can fix my problem temporary using .
As mentionned by This issue is not here using . However, this is still adding extra command that could be the explanation behind it: ! The first run it is only using: On the second run, it : before the command. There is still the before this line though (2nd blank line)
I am seeing the problem when I set my default terminal profile to any of the following and run my debug launch script twice. Each shell will fail on the second launch with the same mangled command line. bash command prompt powershell Work around: revert back to vs code 1.87.
I am having a similar problem launching Python from VS.Code with or without debugging (both cmd and wt as terminal.external.windowsExec). If the path to the Python executable contains space as in default I end up with and an error message in the launched terminal window: Yet this works fine if I pick a Python interpreter from venv or somewhere else such that there is no space in path e.g. Curiously - the internal terminal and internal console work with either path
it seems sending the ctrl+c in a separate is not sufficient -- any suggestions?
If you want to execute something again we have a helper on the render process side , this conditionally sends a ^C and may wait for a shell integration prompt. That might work?
It looks like that does the same thing with a 100ms delay. I'll adopt the delay as well, see if that fixes it
please could you confirm when this will be released? It doesn't seem to have gone out in the latest April release. I've tried the insiders version and can't debug anything so it's even worse.
This is available on Insiders. Please open another issue with the details for not being able to debug anything; that's probably not related to this fix...
Can any of you verify that this is fixed in the newest version of VS Code Insiders? Thanks!
<!-- AUTHORVERIFICATIONREQUEST --This bug has been fixed in the latest release of ! you can help us out by commenting if things are now working as expected. If things still don't seem right, please ensure you're on version of Insiders (today's or later - you can use in the command palette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!
The external terminal launch is working with space in pythonInterpreter path () using both and as Windows Terminal in current: 1.89.1 and insiders 1.90.0 /verified
Running on version 1.90.0 I can not longer observe the truncation. The execution command looks intact even after multiple runs. ! There's an extraneous whenever you start a run but I guess that's intentional.
I am experiencing this issue using Python Debugger: Current File with Arguments. I am using ver VSCode ver 1.9

} else { if (terminal.state.isInteractedWith) { terminal.sendText('u0003'); // Ctrl+C for #106743. Not part of the same command for #107969 <ins> await timeout(200); // mirroring https://github.com/microsoft/vscode/blob/c67ccc70ece5f472ec25464d3eeb874cfccee9f1/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts#L852-L857 </ins> } if (configProvider.getConfiguration('debug.terminal').get<boolean>('clearBeforeReusing')) {


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

hoverDelegate.onDidHideHover?.(); hoverWidget = undefined; } <ins> htmlElement.removeAttribute('custom-hover-active'); </ins> }; const triggerShowHover = (delay: number, focus?: boolean, target?: IHoverDelegateTarget) => {


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

if (!hoverWidget || hoverWidget.isDisposed) { hoverWidget = new UpdatableHoverWidget(hoverDelegate, target || htmlElement, delay > 0); await hoverWidget.update(typeof content === 'function' ? content() : content, focus, options); <ins> htmlElement.setAttribute('custom-hover-active', 'true'); </ins> } }, delay); };


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

this.handleAndRegisterCustomViewContainers(); this.handleAndRegisterCustomViews(); <ins> // Abstract tree has it's own implementation of triggering custom hover // TreeView uses it's own implementation due to setting focus inside the (markdown) </ins> let showTreeHoverCancellation = new CancellationTokenSource(); KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'workbench.action.showTreeHover',


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

} }, true); }, <del> weight: KeybindingWeight.WorkbenchContrib, </del> <ins> weight: KeybindingWeight.WorkbenchContrib + 1, </ins> primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyI), when: ContextKeyExpr.and(RawCustomTreeViewContextKey, WorkbenchListFocusContextKey) });


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; </del> <ins> import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes'; </ins> import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { List } from 'vs/base/browser/ui/list/listWidget';


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { Table } from 'vs/base/browser/ui/table/tableWidget'; import { AbstractTree, TreeFindMatchType, TreeFindMode } from 'vs/base/browser/ui/tree/abstractTree'; <del> import { isActiveElement } from 'vs/base/browser/dom'; </del> <ins> import { EventType, getActiveWindow, isActiveElement } from 'vs/base/browser/dom'; </ins> import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { localize, localize2 } from 'vs/nls'; <ins> import { IDisposable } from 'vs/base/common/lifecycle'; </ins> function ensureDOMFocus(widget: ListWidget | undefined): void { // it can happen that one of the commands is executed while


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

return; } <ins> if (activeHover) { toggleCustomHover(activeHover, widget); } </ins> await updateFocus(widget, updateFocusFn); const listFocus = widget.getFocus();


Question:
macOS, VS Code Insiders into explorer focus via keyboard hover does not show. There is no command to trigger the custom hover to show Like the activity bar, we have to make sure that the custom hover can be accessed in the tree/list only with the keyboard.
Would you suggest adding a keybinding to toggle the visibility of the custom hover of the html element which has focus?
Yeah, ideally it is . The same shortcut that we use in the editor for showing the hover. So it is consistent and easy for user to understand that there is one shortcut which does the right thing everywhere.
Isn't this a duplicate of ? Btw we seem to be having this support for extension provided trees at least:
I think it's good to have this one separate to .
Solving this for all trees/lists is pretty hard as the tree/list does not know anything about the underlying elements being rendered. For extension trees it is much easier as they all consist of a label which the creates and controls.
One option could be to utilize the to get the tooltip. Currently it already provides
After further discussions we came to the conclusion that we would use the DOM tree to figure out if there is any custom hovers available and trigger the hover by dispatching a mouse event on the HTMLElement. This might seem rather hacky but it ensures the consumers of the tree only have to support hover once and lets the tree handle keyboard triggers. Handling focus is still tricky and a open problem. Until this focus problem is properly fixed the treeview will keep it's own implementation which directly uses the hover service and moves the focus into the hover. The treeview implementation of this has it's own flaws but will b kept for the meantime to not cause regressions.

}); KeybindingsRegistry.registerCommandAndKeybindingRule({ <ins> id: 'list.showHover', weight: KeybindingWeight.WorkbenchContrib, primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyI), when: WorkbenchListFocusContextKey, handler: async (accessor: ServicesAccessor, ...args: any[]) => { const listService = accessor.get(IListService); const lastFocusedList = listService.lastFocusedList; if (!lastFocusedList) { return; } // Check if a tree element is focused const focus = lastFocusedList.getFocus(); if (!focus || (focus.length === 0)) { return; } // As the tree does not know anything about the rendered DOM elements // we have to traverse the dom to find the HTMLElements const treeDOM = lastFocusedList.getHTMLElement(); const scrollableElement = treeDOM.querySelector('.monaco-scrollable-element'); const listRows = scrollableElement?.querySelector('.monaco-list-rows'); const focusedElement = listRows?.querySelector('.focused'); if (!focusedElement) { return; } // Check if the focused element has a hover, otherwise find the first child with a hover const elementWithHover = focusedElement.matches('[custom-hover="true"]') ? focusedElement : focusedElement.querySelector('[custom-hover="true"]'); if (!elementWithHover) { return; } toggleCustomHover(elementWithHover as HTMLElement, lastFocusedList); }, }); let activeHover: undefined | HTMLElement; let disposable: IDisposable | undefined; function toggleCustomHover(element: HTMLElement, list: WorkbenchListWidget) { const show = !element.getAttribute('custom-hover-active'); const mouseEvent = new MouseEvent(show ? EventType.MOUSE_OVER : EventType.MOUSE_LEAVE, { view: getActiveWindow(), bubbles: true, cancelable: true, }); element.dispatchEvent(mouseEvent); if (activeHover === element && !show) { activeHover = undefined; disposable?.dispose(); disposable = undefined; } else { activeHover = element; disposable = list.onDidBlur(() => { toggleCustomHover(element, list); }); } } KeybindingsRegistry.registerCommandAndKeybindingRule({ </ins> id: 'list.toggleExpand', weight: KeybindingWeight.WorkbenchContrib, when: WorkbenchListFocusContextKey,


Question: <!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.88.1 (Latest) + GitHub Codespaces OS Version: All? (Tested on Linux + MacOS) Steps to Reproduce: a folder or workspace (create if necessary): all the content from the above file and save it the command palette 'Tasks: Run Task' '+ Configure a Task' 'Open file' any provided task template notification error: "Unable to write to Folder Settings because no resource is provided." Expected behaviour: Empty is populated with the contents of the selected task template <img width="898" alt="Screenshot 2024-04-18 at 16 50 01" src=""

return result[0].resource; }); } else if (fileExists && (tasksExistInFile || content)) { <del> if (content) { this._configurationService.updateValue('tasks', json.parse(content), target); </del> <ins> const statResource = stat?.resource; if (content && statResource) { this._configurationService.updateValue('tasks', json.parse(content), { resource: statResource }, target); </ins> } <del> return stat?.resource; </del> <ins> return statResource; </ins> } return undefined; }).then((resource) => {


Question: Under some circumstances, the Code Action button won't go away and will still run its assign command (incorrectly) Steps to Reproduce: an error with 'Quick Fix' available ! the cursor on the same line and press to bring up the quickfix ! to cancel ! the code action button ! the button again ! again ! ! at step 4. the button should disappear, but it does not I found this bug while adding Code Actions to my personal extension VS Code Version: 1.88.1 OS Version: Windows 11

// Do not trigger state if current state is manual and incoming state is automatic if (!isManualToAutoTransition) { this.setState(newState); <ins> } else { // Reset the new state after getting code actions back. setTimeout(() => { this.setState(newState); }, 500); </ins> } }, undefined); this._codeActionOracle.value.trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.Default });


Question: Testing "Note: Using this setting will disable Window: Auto Detect Color Scheme" should finish with a period.

localize('window.systemColorTheme.light', "Enforce a light system color theme."), localize('window.systemColorTheme.dark', "Enforce a dark system color theme."), ], <del> markdownDescription: localize({ key: 'window.systemColorTheme', comment: ['{0} and {1} will become links to other settings.'] }, "Overrides the system color theme that is used for native UI elements such as native dialogs, menus and title bar. Even if your OS is configured in light appearance mode, you can select a dark system color theme for the window. You can also configure to automatically adjust based on the {0} setting. Note: Using this setting will disable {1}", formatSettingAsLink(ThemeSettings.COLOR_THEME), formatSettingAsLink(ThemeSettings.DETECT_COLOR_SCHEME)), </del> <ins> markdownDescription: localize({ key: 'window.systemColorTheme', comment: ['{0} and {1} will become links to other settings.'] }, "Overrides the system color theme that is used for native UI elements such as native dialogs, menus and title bar. Even if your OS is configured in light appearance mode, you can select a dark system color theme for the window. You can also configure to automatically adjust based on the {0} setting. Note: Using this setting will disable {1}.", formatSettingAsLink(ThemeSettings.COLOR_THEME), formatSettingAsLink(ThemeSettings.DETECT_COLOR_SCHEME)), </ins> default: 'default', included: ENABLE_SYSTEM_COLOR_SCHEME_SETTING, scope: ConfigurationScope.APPLICATION,


Question:
Testing open show outline and have sticky scroll enabled scroll the cell with "# Header " into view delete the cell :bug: the sticky scroll breaks, the error below is printed <img width="1482" alt="Screenshot 2024-04-23 at 08 51 18" src=""
I'm unable to repro this. Please can you share a screen recording of the steps. Perhaps recoding from opehning the notebook to selecting and deleting. Thanks.
Looking at the stacktrace tells me this is coming here which means the model had been already
following the steps above (empty profile) always reproduce the error (console) for me. The screen cheese shows in sticky scroll and/or other paces of the outline tree

import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IMarkerService } from 'vs/platform/markers/common/markers'; import { IThemeService } from 'vs/platform/theme/common/themeService'; <del> import { IActiveNotebookEditor, ICellViewModel, INotebookEditor, type INotebookViewCellsUpdateEvent } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; </del> <ins> import { IActiveNotebookEditor, ICellViewModel, INotebookEditor } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; </ins> import { CellKind, NotebookCellsChangeType, NotebookSetting } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { INotebookExecutionStateService, NotebookExecutionType } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; import { OutlineChangeEvent, OutlineConfigKeys, OutlineTarget } from 'vs/workbench/services/outline/browser/outline';


Question:
Testing open show outline and have sticky scroll enabled scroll the cell with "# Header " into view delete the cell :bug: the sticky scroll breaks, the error below is printed <img width="1482" alt="Screenshot 2024-04-23 at 08 51 18" src=""
I'm unable to repro this. Please can you share a screen recording of the steps. Perhaps recoding from opehning the notebook to selecting and deleting. Thanks.
Looking at the stacktrace tells me this is coming here which means the model had been already
following the steps above (empty profile) always reproduce the error (console) for me. The screen cheese shows in sticky scroll and/or other paces of the outline tree

private _uri: URI | undefined; private _entries: OutlineEntry[] = []; get entries(): OutlineEntry[] { <ins> if (this.delayedOutlineRecompute.isTriggered()) { this.delayedOutlineRecompute.cancel(); this._recomputeState(); } </ins> return this._entries; }


Question:
Testing open show outline and have sticky scroll enabled scroll the cell with "# Header " into view delete the cell :bug: the sticky scroll breaks, the error below is printed <img width="1482" alt="Screenshot 2024-04-23 at 08 51 18" src=""
I'm unable to repro this. Please can you share a screen recording of the steps. Perhaps recoding from opehning the notebook to selecting and deleting. Thanks.
Looking at the stacktrace tells me this is coming here which means the model had been already
following the steps above (empty profile) always reproduce the error (console) for me. The screen cheese shows in sticky scroll and/or other paces of the outline tree

readonly outlineKind = 'notebookCells'; get activeElement(): OutlineEntry | undefined { <ins> if (this.delayedOutlineRecompute.isTriggered()) { this.delayedOutlineRecompute.cancel(); this._recomputeState(); } </ins> return this._activeEntry; } private readonly _outlineEntryFactory: NotebookOutlineEntryFactory; <del> private readonly delayRecomputeActive: () => void; </del> <ins> private readonly delayedOutlineRecompute: Delayer<void>;; </ins> constructor( private readonly _editor: INotebookEditor, private readonly _target: OutlineTarget,


Question:
Testing open show outline and have sticky scroll enabled scroll the cell with "# Header " into view delete the cell :bug: the sticky scroll breaks, the error below is printed <img width="1482" alt="Screenshot 2024-04-23 at 08 51 18" src=""
I'm unable to repro this. Please can you share a screen recording of the steps. Perhaps recoding from opehning the notebook to selecting and deleting. Thanks.
Looking at the stacktrace tells me this is coming here which means the model had been already
following the steps above (empty profile) always reproduce the error (console) for me. The screen cheese shows in sticky scroll and/or other paces of the outline tree

@IConfigurationService private readonly _configurationService: IConfigurationService, ) { this._outlineEntryFactory = new NotebookOutlineEntryFactory(notebookExecutionStateService); <del> const delayerRecomputeActive = this._disposables.add(new Delayer(10)); this.delayRecomputeActive = () => delayerRecomputeActive.trigger(() => this._recomputeActive()); this._disposables.add(Event.debounce<void, void>( _editor.onDidChangeSelection, (last, _current) => last, 200 )(() => { this.delayRecomputeActive(); </del> <ins> const delayerRecomputeActive = this._disposables.add(new Delayer(200)); this._disposables.add(_editor.onDidChangeSelection(() => { delayerRecomputeActive.trigger(() => this._recomputeActive()); </ins> }, this)) <del> this._disposables.add(Event.debounce<INotebookViewCellsUpdateEvent, INotebookViewCellsUpdateEvent>( _editor.onDidChangeViewCells, (last, _current) => last ?? _current, 200 )(() => { this.delayRecomputeActive(); }, this) ); </del> // .3s of a delay is sufficient, 100-200s is too quick and will unnecessarily block the ui thread. // Given we're only updating the outline when the user types, we can afford to wait a bit. <del> const delayer = this._disposables.add(new Delayer<void>(300)); const delayedRecompute = () => delayer.trigger(() => this._recomputeState()); </del> <ins> this.delayedOutlineRecompute = this._disposables.add(new Delayer<void>(300)); const delayedRecompute = () => { delayerRecomputeActive.cancel(); // Active is always recomputed after a recomputing the outline state. this.delayedOutlineRecompute.trigger(() => this._recomputeState()); }; </ins> this._disposables.add(_configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(NotebookSetting.outlineShowMarkdownHeadersOnly) ||


Question:
Testing open show outline and have sticky scroll enabled scroll the cell with "# Header " into view delete the cell :bug: the sticky scroll breaks, the error below is printed <img width="1482" alt="Screenshot 2024-04-23 at 08 51 18" src=""
I'm unable to repro this. Please can you share a screen recording of the steps. Perhaps recoding from opehning the notebook to selecting and deleting. Thanks.
Looking at the stacktrace tells me this is coming here which means the model had been already
following the steps above (empty profile) always reproduce the error (console) for me. The screen cheese shows in sticky scroll and/or other paces of the outline tree

return; } disposable.add(this._editor.textModel.onDidChangeContent(contentChanges => { <del> if (contentChanges.rawEvents.some(c => c.kind === NotebookCellsChangeType.ChangeCellContent)) { </del> <ins> if (contentChanges.rawEvents.some(c => c.kind === NotebookCellsChangeType.ChangeCellContent || c.kind === NotebookCellsChangeType.ChangeCellInternalMetadata || c.kind === NotebookCellsChangeType.Move || c.kind === NotebookCellsChangeType.ModelChange)) { </ins> delayedRecompute(); } }));