import { Action2, MenuId } from 'vs/platform/actions/common/actions'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; <ins> import { getCommandsContext, resolveCommandsContext } from 'vs/workbench/browser/parts/editor/editorCommands'; import { IEditorCommandsContext } from 'vs/workbench/common/editor'; </ins> import { TextFileEditor } from 'vs/workbench/contrib/files/browser/editors/textFileEditor'; import { MultiDiffEditor } from 'vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditor'; import { MultiDiffEditorInput } from 'vs/workbench/contrib/multiDiffEditor/browser/multiDiffEditorInput'; <ins> import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; </ins> import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; export class GoToFileAction extends Action2 {


}); } <del> async run(accessor: ServicesAccessor, ...args: any[]): Promise<void> { const editorService = accessor.get(IEditorService); const activeEditor = editorService.activeEditor; </del> <ins> async run(accessor: ServicesAccessor, resourceOrContext?: URI | IEditorCommandsContext, context?: IEditorCommandsContext): Promise<void> { const { editor } = resolveCommandsContext(accessor.get(IEditorGroupsService), getCommandsContext(accessor, resourceOrContext, context)); </ins> <del> if (activeEditor instanceof MultiDiffEditorInput) { const viewModel = await activeEditor.getViewModel(); </del> <ins> if (editor instanceof MultiDiffEditorInput) { const viewModel = await editor.getViewModel(); </ins> viewModel.collapseAll(); } }


}); } <del> async run(accessor: ServicesAccessor, ...args: any[]): Promise<void> { const editorService = accessor.get(IEditorService); const activeEditor = editorService.activeEditor; </del> <ins> async run(accessor: ServicesAccessor, resourceOrContext?: URI | IEditorCommandsContext, context?: IEditorCommandsContext): Promise<void> { const { editor } = resolveCommandsContext(accessor.get(IEditorGroupsService), getCommandsContext(accessor, resourceOrContext, context)); </ins> <del> if (activeEditor instanceof MultiDiffEditorInput) { const viewModel = await activeEditor.getViewModel(); </del> <ins> if (editor instanceof MultiDiffEditorInput) { const viewModel = await editor.getViewModel(); </ins> viewModel.expandAll(); } }


} }); } else if (e.kind === 'removeRequest') { <del> // TODO@jrieken this currently is buggy when removing not the very last request/response // if (this._session!.lastExchange?.response instanceof ReplyResponse) { // 	try { // 		this._session!.hunkData.ignoreTextModelNChanges = true; // 		await this._strategy!.undoChanges(this._session!.lastExchange.response.modelAltVersionId); // 	} finally { // 		this._session!.hunkData.ignoreTextModelNChanges = false; // 	} // } </del> <ins> // TODO@jrieken this is buggy/weird when having code changes from multiple turns because // logically they are all the same hunks this._strategy?.cancel(); </ins> } }));


import { ICommandService } from 'vs/platform/commands/common/commands'; import { TestCommandService } from 'vs/editor/test/browser/editorTestServices'; import { INotebookEditorService } from 'vs/workbench/contrib/notebook/browser/services/notebookEditorService'; <ins> import { RerunAction } from 'vs/workbench/contrib/inlineChat/browser/inlineChatActions'; </ins> suite('InteractiveChatController', function () {


assert.ok(model.getValue().includes('MANUAL')); }); <ins> test('re-run should discard pending edits', async function () { let count = 1; store.add(chatAgentService.registerDynamicAgent({ id: 'testEditorAgent2', ...agentData }, { async invoke(request, progress, history, token) { progress({ kind: 'textEdit', uri: model.uri, edits: [{ range: new Range(1, 1, 1, 1), text: request.message + (count++) }] }); return {}; }, })); ctrl = instaService.createInstance(TestController, editor); const rerun = new RerunAction(); model.setValue(''); const p = ctrl.waitFor([...TestController.INIT_SEQUENCE, State.SHOW_REQUEST, State.SHOW_RESPONSE, State.WAIT_FOR_INPUT]); const r = ctrl.run({ message: 'PROMPT_', autoSend: true }); await p; assert.strictEqual(model.getValue(), 'PROMPT_1'); const p2 = ctrl.waitFor([State.SHOW_REQUEST, State.SHOW_RESPONSE, State.WAIT_FOR_INPUT]); await instaService.invokeFunction(rerun.runInlineChatCommand, ctrl, editor); await p2; assert.strictEqual(model.getValue(), 'PROMPT_2'); ctrl.finishExistingSession(); await r; }); </ins> });


// ignore } } <del> return new types.DocumentLink(Range.to(link.range), target); </del> <ins> const result = new types.DocumentLink(Range.to(link.range), target); result.tooltip = link.tooltip; return result; </ins> } }


}); <ins> testApiCmd('DocumentLink[] vscode.executeLinkProvider returns lack tooltip #213970', async function () { disposables.push(extHost.registerDocumentLinkProvider(nullExtensionDescription, defaultSelector, <vscode.DocumentLinkProvider>{ provideDocumentLinks(): any { const link = new types.DocumentLink(new types.Range(0, 0, 0, 20), URI.parse('foo:bar')); link.tooltip = 'Link Tooltip'; return [link]; } })); await rpcProtocol.sync(); const links1 = await commands.executeCommand<vscode.DocumentLink[]>('vscode.executeLinkProvider', model.uri); assert.strictEqual(links1.length, 1); assert.strictEqual(links1[0].tooltip, 'Link Tooltip'); }); </ins> test('Color provider', function () {


const isAllowed = chatAgentNameService.getAgentNameRestriction(agent); let name = `${isAllowed ? agent.name : getFullyQualifiedId(agent)}`; <del> const isDupe = isAllowed && chatAgentService.getAgentsByName(agent.name).length > 1; </del> <ins> const isDupe = isAllowed && chatAgentService.agentHasDupeName(agent.id); </ins> if (isDupe) { name += ` (${agent.publisherDisplayName})`; }


return { suggestions: agents.map((agent, i): CompletionItem => { <del> const { label: agentLabel, isDupe } = getAgentCompletionDetails(agent, agents, this.chatAgentNameService); </del> <ins> const { label: agentLabel, isDupe } = this.getAgentCompletionDetails(agent); </ins> return { // Leading space is important because detail has no space at the start by design label: isDupe ?


const justAgents: CompletionItem[] = agents .filter(a => !a.isDefault) .map(agent => { <del> const { label: agentLabel, isDupe } = getAgentCompletionDetails(agent, agents, this.chatAgentNameService); </del> <ins> const { label: agentLabel, isDupe } = this.getAgentCompletionDetails(agent); </ins> const detail = agent.description; return {


return { suggestions: justAgents.concat( agents.flatMap(agent => agent.slashCommands.map((c, i) => { <del> const { label: agentLabel, isDupe } = getAgentCompletionDetails(agent, agents, this.chatAgentNameService); </del> <ins> const { label: agentLabel, isDupe } = this.getAgentCompletionDetails(agent); </ins> const withSlash = `${chatSubcommandLeader}${c.name}`; return { label: { label: withSlash, description: agentLabel, detail: isDupe ? ` (${agent.publisherDisplayName})` : undefined },


} })); } <ins> private getAgentCompletionDetails(agent: IChatAgentData): { label: string; isDupe: boolean } { const isAllowed = this.chatAgentNameService.getAgentNameRestriction(agent); const agentLabel = `${chatAgentLeader}${isAllowed ? agent.name : getFullyQualifiedId(agent)}`; const isDupe = isAllowed && this.chatAgentService.agentHasDupeName(agent.id); return { label: agentLabel, isDupe }; } </ins> } Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution(AgentCompletions, LifecyclePhase.Eventually);


} Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).registerWorkbenchContribution(VariableCompletions, LifecyclePhase.Eventually); <del> function getAgentCompletionDetails(agent: IChatAgentData, otherAgents: IChatAgentData[], chatAgentNameService: IChatAgentNameService): { label: string; isDupe: boolean } { const isAllowed = chatAgentNameService.getAgentNameRestriction(agent); const agentLabel = `${chatAgentLeader}${isAllowed ? agent.name : getFullyQualifiedId(agent)}`; const isDupe = isAllowed && !!otherAgents.find(other => other.name === agent.name && other.id !== agent.id); return { label: agentLabel, isDupe }; } </del>


getAgents(): IChatAgentData[]; getActivatedAgents(): Array<IChatAgent>; getAgentsByName(name: string): IChatAgentData[]; <ins> agentHasDupeName(id: string): boolean; </ins> /** * Get the default agent (only if activated)


return this.getAgents().filter(a => a.name === name); } <ins> agentHasDupeName(id: string): boolean { const agent = this.getAgent(id); if (!agent) { return false; } return this.getAgentsByName(agent.name) .filter(a => a.extensionId.value !== agent.extensionId.value).length > 0; } </ins> async invokeAgent(id: string, request: IChatAgentRequest, progress: (part: IChatProgress) => void, history: IChatAgentHistoryEntry[], token: CancellationToken): Promise<IChatAgentResult> { const data = this._agents.get(id); if (!data?.impl) {


getAgentByFullyQualifiedId(id: string): IChatAgentData | undefined { throw new Error('Method not implemented.'); } registerAgentCompletionProvider(id: string, provider: (query: string, token: CancellationToken) => Promise<IChatAgentCompletionItem[]>): IDisposable { throw new Error('Method not implemented.'); } getAgentCompletionItems(id: string, query: string, token: CancellationToken): Promise<IChatAgentCompletionItem[]> { throw new Error('Method not implemented.'); } <ins> agentHasDupeName(id: string): boolean { throw new Error('Method not implemented.'); } </ins> } class TestSpeechService implements ISpeechService {


*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import { Emitter } from 'vs/base/common/event'; </del> import { Barrier } from 'vs/base/common/async'; <ins> import { Emitter } from 'vs/base/common/event'; </ins> import { Disposable } from 'vs/base/common/lifecycle'; <del> import { ILifecycleService, WillShutdownEvent, StartupKind, LifecyclePhase, LifecyclePhaseToString, ShutdownReason, BeforeShutdownErrorEvent, InternalBeforeShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { ILogService } from 'vs/platform/log/common/log'; </del> import { mark } from 'vs/base/common/performance'; <ins> import { ILogService } from 'vs/platform/log/common/log'; </ins> import { IStorageService, StorageScope, StorageTarget, WillSaveStateReason } from 'vs/platform/storage/common/storage'; <ins> import { BeforeShutdownErrorEvent, ILifecycleService, InternalBeforeShutdownEvent, LifecyclePhase, LifecyclePhaseToString, ShutdownReason, StartupKind, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle'; </ins> export abstract class AbstractLifecycleService extends Disposable implements ILifecycleService {


constructor( @ILogService protected readonly logService: ILogService, <del> @IStorageService protected readonly storageService: IStorageService </del> <ins> @IStorageService protected readonly storageService: IStorageService, </ins> ) { super();


import { AbstractLifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycleService'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { INativeHostService } from 'vs/platform/native/common/native'; <del> import { Promises, disposableTimeout, raceCancellation } from 'vs/base/common/async'; </del> <ins> import { Promises, disposableTimeout, raceCancellation, timeout } from 'vs/base/common/async'; </ins> import { toErrorMessage } from 'vs/base/common/errorMessage'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; <ins> import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; </ins> export class NativeLifecycleService extends AbstractLifecycleService { private static readonly BEFORE_SHUTDOWN_WARNING_DELAY = 5000; private static readonly WILL_SHUTDOWN_WARNING_DELAY = 800; <ins> private static readonly MAX_GRACEFUL_REMOTE_DISCONNECT_TIME = 3000; </ins> constructor( @INativeHostService private readonly nativeHostService: INativeHostService, @IStorageService storageService: IStorageService, <del> @ILogService logService: ILogService </del> <ins> @ILogService logService: ILogService, @IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService, </ins> ) { super(logService, storageService);


// trigger onWillShutdown events and joining await this.handleWillShutdown(reply.reason); <ins> // now that all services have stored their data, it's safe to terminate // the remote connection gracefully before synchronously saying we're shut down await this.handleRemoteAgentDisconnect(); </ins> // trigger onDidShutdown event now that we know we will quit this._onDidShutdown.fire();


}); } <ins> private async handleRemoteAgentDisconnect(): Promise<void> { const longRunningWarning = disposableTimeout(() => { this.logService.warn(`[lifecycle] the remote agent is taking a long time to disconnect, waiting...`); }, NativeLifecycleService.BEFORE_SHUTDOWN_WARNING_DELAY); await Promise.race([ this.remoteAgentService.endConnection(), timeout(NativeLifecycleService.MAX_GRACEFUL_REMOTE_DISCONNECT_TIME), ]); longRunningWarning.dispose(); } </ins> protected async handleBeforeShutdown(reason: ShutdownReason): Promise<boolean> { const logService = this.logService;


@IProductService productService: IProductService, @IRemoteAuthorityResolverService remoteAuthorityResolverService: IRemoteAuthorityResolverService, @ISignService signService: ISignService, <del> @ILogService logService: ILogService </del> <ins> @ILogService logService: ILogService, </ins> ) { super(remoteSocketFactoryService, userDataProfileService, environmentService, productService, remoteAuthorityResolverService, signService, logService); }


*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <ins> import { Emitter } from 'vs/base/common/event'; </ins> import { Disposable } from 'vs/base/common/lifecycle'; <del> import { IChannel, IServerChannel, getDelayedChannel, IPCLogger } from 'vs/base/parts/ipc/common/ipc'; </del> <ins> import { getDelayedChannel, IChannel, IPCLogger, IServerChannel } from 'vs/base/parts/ipc/common/ipc'; </ins> import { Client } from 'vs/base/parts/ipc/common/ipc.net'; <del> import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; </del> <ins> import { IDiagnosticInfo, IDiagnosticInfoOptions } from 'vs/platform/diagnostics/common/diagnostics'; import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; </ins> import { connectRemoteAgentManagement, IConnectionOptions, ManagementPersistentConnection, PersistentConnectionEvent } from 'vs/platform/remote/common/remoteAgentConnection'; <del> import { IExtensionHostExitInfo, IRemoteAgentConnection, IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; </del> <ins> import { IRemoteAgentEnvironment, RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment'; </ins> import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver'; <del> import { RemoteAgentConnectionContext, IRemoteAgentEnvironment } from 'vs/platform/remote/common/remoteAgentEnvironment'; import { RemoteExtensionEnvironmentChannelClient } from 'vs/workbench/services/remote/common/remoteAgentEnvironmentChannel'; import { IDiagnosticInfoOptions, IDiagnosticInfo } from 'vs/platform/diagnostics/common/diagnostics'; import { Emitter } from 'vs/base/common/event'; </del> <ins> import { IRemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; </ins> import { ISignService } from 'vs/platform/sign/common/sign'; <del> import { ILogService } from 'vs/platform/log/common/log'; </del> import { ITelemetryData, TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; <del> import { IProductService } from 'vs/platform/product/common/productService'; </del> <ins> import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { RemoteExtensionEnvironmentChannelClient } from 'vs/workbench/services/remote/common/remoteAgentEnvironmentChannel'; import { IExtensionHostExitInfo, IRemoteAgentConnection, IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; </ins> import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; <del> import { IRemoteSocketFactoryService } from 'vs/platform/remote/common/remoteSocketFactoryService'; </del> export abstract class AbstractRemoteAgentService extends Disposable implements IRemoteAgentService {


@IProductService productService: IProductService, @IRemoteAuthorityResolverService private readonly _remoteAuthorityResolverService: IRemoteAuthorityResolverService, @ISignService signService: ISignService, <del> @ILogService logService: ILogService </del> <ins> @ILogService logService: ILogService, </ins> ) { super(); if (this._environmentService.remoteAuthority) {


let platform: crate::update_service::Platform = PreReqChecker::new().verify().await?; if !args.without_connection_token { <del> // Ensure there's a defined connection token, since if multiple server versions // are excuted, they will need to have a single shared token. let token_path = ctx.paths.root().join("serve-web-token"); let token = mint_connection_token(&token_path, args.connection_token.clone()) .map_err(CodeError::CouldNotCreateConnectionTokenFile)?; args.connection_token = Some(token); args.connection_token_file = Some(token_path.to_string_lossy().to_string()); </del> <ins> if let Some(p) = args.connection_token_file.as_deref() { let token = fs::read_to_string(PathBuf::from(p)) .map_err(CodeError::CouldNotReadConnectionTokenFile)?; args.connection_token = Some(token.trim().to_string()); } else { // Ensure there's a defined connection token, since if multiple server versions // are executed, they will need to have a single shared token. let token_path = ctx.paths.root().join("serve-web-token"); let token = mint_connection_token(&token_path, args.connection_token.clone()) .map_err(CodeError::CouldNotCreateConnectionTokenFile)?; args.connection_token = Some(token); args.connection_token_file = Some(token_path.to_string_lossy().to_string()); } </ins> } let cm = ConnectionManager::new(&ctx, platform, args.clone());


// todo: can be specialized when update service is moved to CodeErrors #[error("Could not check for update: {0}")] UpdateCheckFailed(String), <ins> #[error("Could not read connection token file: {0}")] CouldNotReadConnectionTokenFile(std::io::Error), </ins> #[error("Could not write connection token file: {0}")] CouldNotCreateConnectionTokenFile(std::io::Error), #[error("A tunnel with the name {0} exists and is in-use. Please pick a different name or stop the existing tunnel.")]


// Reset await this.code.dispatchKeybinding('Backspace'); } <ins> await this.code.wait(100); </ins> await this.code.dispatchKeybinding(altKey ? 'Alt+Enter' : 'enter'); await this.quickinput.waitForQuickInputClosed(); if (commandId === TerminalCommandIdWithValue.NewWithProfile) {


'force-color-profile', // disable LCD font rendering, a Chromium flag <del> 'disable-lcd-text' </del> <ins> 'disable-lcd-text', // bypass any specified proxy for the given semi-colon-separated list of hosts 'proxy-bypass-list' </ins> ]; if (process.platform === 'linux') {


type: 'boolean', description: localize('argv.disableLcdText', 'Disables LCD font antialiasing.') }, <ins> 'proxy-bypass-list': { type: 'string', description: localize('argv.proxyBypassList', 'Bypass any specified proxy for the given semi-colon-separated list of hosts. Example value "<local>;*.microsoft.com;*foo.com;1.2.3.4:5678", will use the proxy server for all hosts except for local addresses (localhost, 127.0.0.1 etc.), microsoft.com subdomains, hosts that contain the suffix foo.com and anything at 1.2.3.4:5678') }, </ins> 'disable-hardware-acceleration': { type: 'boolean', description: localize('argv.disableHardwareAcceleration', 'Disables hardware acceleration. ONLY change this option if you encounter graphic issues.')


app.commandLine.appendSwitch(argvKey); } } else if (argvValue) { <del> if (argvKey === 'force-color-profile') { // Color profile app.commandLine.appendSwitch(argvKey, argvValue); } else if (argvKey === 'password-store') { </del> <ins> if (argvKey === 'password-store') { </ins> // Password store // TODO@TylerLeonhardt: Remove this migration in 3 months let migratedArgvValue = argvValue;


migratedArgvValue = 'gnome-libsecret'; } app.commandLine.appendSwitch(argvKey, migratedArgvValue); <ins> } else { app.commandLine.appendSwitch(argvKey, argvValue); </ins> } } }


color: var(--vscode-textLink-foreground); } <ins> .settings-editor > .settings-body .settings-tree-container .setting-item-contents .setting-item-markdown a, .settings-editor > .settings-body .settings-tree-container .setting-item-contents .edit-in-settings-button { text-decoration: var(--text-link-decoration); } </ins> .settings-editor > .settings-body .settings-tree-container .setting-item-contents .setting-item-markdown a:focus, .settings-editor > .settings-body .settings-tree-container .setting-item-contents .edit-in-settings-button:focus { outline: 1px solid -webkit-focus-ring-color;


return new HoverAction(parent, actionOptions, keybindingLabel); } <ins> public readonly actionLabel: string; public readonly actionKeybindingLabel: string | null; </ins> private readonly actionContainer: HTMLElement; private readonly action: HTMLElement; private constructor(parent: HTMLElement, actionOptions: { label: string; iconClass?: string; run: (target: HTMLElement) => void; commandId: string }, keybindingLabel: string | null) { super(); <ins> this.actionLabel = actionOptions.label; this.actionKeybindingLabel = keybindingLabel; </ins> this.actionContainer = dom.append(parent, $('div.action-container')); this.actionContainer.setAttribute('tabindex', '0');


import { localize } from 'vs/nls'; import { InlayHintsHover } from 'vs/editor/contrib/inlayHints/browser/inlayHintsHover'; import { BugIndicatingError } from 'vs/base/common/errors'; <ins> import { HoverAction } from 'vs/base/browser/ui/hover/hoverWidget'; </ins> export class RenderedContentHover extends Disposable {


* The HTML element containing the hover status bar. */ hoverElement: HTMLElement; <ins> /** * The actions of the hover status bar. */ actions: HoverAction[]; </ins> } type IRenderedContentHoverPartOrStatusBar = IRenderedContentHoverPart | IRenderedContentStatusBar;


return this._statusBar.hoverElement; } <ins> get actions(): HoverAction[] { return this._statusBar.actions; } </ins> dispose() { this._statusBar.dispose(); }


this._renderedParts.push({ type: 'statusBar', hoverElement: renderedStatusBar.hoverElement, <ins> actions: renderedStatusBar.actions, </ins> }); } return toDisposable(() => { disposables.dispose(); });


return ''; } if (renderedPart.type === 'statusBar') { <del> return localize('hoverAccessibilityStatusBar', "This is a hover status bar."); </del> <ins> const statusBarDescription = [localize('hoverAccessibilityStatusBar', "This is a hover status bar.")]; for (const action of renderedPart.actions) { const keybinding = action.actionKeybindingLabel; if (keybinding) { statusBarDescription.push(localize('hoverAccessibilityStatusBarActionWithKeybinding', "It has an action with label {0} and keybinding {1}.", action.actionLabel, keybinding)); } else { statusBarDescription.push(localize('hoverAccessibilityStatusBarActionWithoutKeybinding', "It has an action with label {0}.", action.actionLabel)); } } return statusBarDescription.join('n'); </ins> } return renderedPart.participant.getAccessibleContent(renderedPart.hoverPart); }


export class EditorHoverStatusBar extends Disposable implements IEditorHoverStatusBar { public readonly hoverElement: HTMLElement; <ins> public readonly actions: HoverAction[] = []; </ins> private readonly actionsElement: HTMLElement; private _hasContent: boolean = false;


const keybinding = this._keybindingService.lookupKeybinding(actionOptions.commandId); const keybindingLabel = keybinding ? keybinding.getLabel() : null; this._hasContent = true; <del> return this._register(HoverAction.render(this.actionsElement, actionOptions, keybindingLabel)); </del> <ins> const action = this._register(HoverAction.render(this.actionsElement, actionOptions, keybindingLabel)); this.actions.push(action); return action; </ins> } public append(element: HTMLElement): HTMLElement {


} extensionsToInstall.push({ extension: gallery, <del> options: { ...installOptions, installGivenVersion: !!version, isApplicationScoped: installedExtension?.isApplicationScoped }, </del> <ins> options: { ...installOptions, installGivenVersion: !!version, isApplicationScoped: installOptions.isApplicationScoped || installedExtension?.isApplicationScoped }, </ins> }); }));


this._register(this.registerSwitchProfileAction()); this.registerOpenProfileSubMenu(); <ins> this.registerNewWindowWithProfileAction(); </ins> this.registerProfilesActions(); this._register(this.userDataProfilesService.onDidChangeProfiles(() => this.registerProfilesActions()));


}); } <ins> private registerNewWindowWithProfileAction(): IDisposable { return registerAction2(class NewWindowWithProfileAction extends Action2 { constructor() { super({ id: `workbench.profiles.actions.newWindowWithProfile`, title: localize2('newWindowWithProfile', "New Window with Profile..."), category: PROFILES_CATEGORY, precondition: HAS_PROFILES_CONTEXT, f1: true, }); } async run(accessor: ServicesAccessor) { const quickInputService = accessor.get(IQuickInputService); const userDataProfilesService = accessor.get(IUserDataProfilesService); const hostService = accessor.get(IHostService); const pick = await quickInputService.pick( userDataProfilesService.profiles.map(profile => ({ label: profile.name, profile })), { title: localize('new window with profile', "New Window with Profile"), placeHolder: localize('pick profile', "Select Profile"), canPickMany: false }); if (pick) { return hostService.openWindow({ remoteAuthority: null, forceProfile: pick.profile.name }); } } }); } </ins> private registerNewWindowAction(profile: IUserDataProfile): IDisposable { const disposables = new DisposableStore();


} private getVolumeInPercent(): number { <del> const volume = this.configurationService.getValue<number>('accessibilitySignals.volume'); </del> <ins> const volume = this.configurationService.getValue<number>('accessibility.signalOptions.volume'); </ins> if (typeof volume !== 'number') { return 50; }


".dsql" ], "aliases": [ <del> "SQL" </del> <ins> "MS SQL", "T-SQL" </ins> ], "configuration": "./language-configuration.json" }


installed.forEach(ext => this.progressByEvent(`extensionInstalled:${ext.identifier.id.toLowerCase()}`)); }); <del> this._register(this.extensionManagementService.onDidInstallExtensions(async (result) => { const hadLastFoucs = await this.hostService.hadLastFocus(); </del> <ins> this._register(this.extensionManagementService.onDidInstallExtensions((result) => { </ins> for (const e of result) { const skipWalkthrough = e?.context?.[EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT] || e?.context?.[EXTENSION_INSTALL_DEP_PACK_CONTEXT]; // If the window had last focus and the install didn't specify to skip the walkthrough // Then add it to the sessionInstallExtensions to be opened <del> if (hadLastFoucs && !skipWalkthrough) { </del> <ins> if (!skipWalkthrough) { </ins> this.sessionInstalledExtensions.add(e.identifier.id.toLowerCase()); } this.progressByEvent(`extensionInstalled:${e.identifier.id.toLowerCase()}`);


this.storageService.store(walkthroughMetadataConfigurationKey, JSON.stringify([...this.metadata.entries()]), StorageScope.PROFILE, StorageTarget.USER); <del> if (sectionToOpen && this.configurationService.getValue<string>('workbench.welcomePage.walkthroughs.openOnInstall')) { </del> <ins> const hadLastFoucs = await this.hostService.hadLastFocus(); if (hadLastFoucs && sectionToOpen && this.configurationService.getValue<string>('workbench.welcomePage.walkthroughs.openOnInstall')) { </ins> type GettingStartedAutoOpenClassification = { owner: 'lramos15'; comment: 'When a walkthrthrough is opened upon extension installation';


if (this._store.isDisposed) { return; } <del> this._currentTitle = ptyProcess.process; </del> <ins> // HACK: The node-pty API can return undefined somehow https://github.com/microsoft/vscode/issues/222323 this._currentTitle = (ptyProcess.process ?? ''); </ins> this._onDidChangeProperty.fire({ type: ProcessPropertyType.Title, value: this._currentTitle }); // If fig is installed it may change the title of the process const sanitizedTitle = this.currentTitle.replace(/ (figterm)$/g, '');


{ id: 'workspaceTrust', title: localize('gettingStarted.workspaceTrust.title', "Safely browse and edit code"), <del> description: localize('gettingStarted.workspaceTrust.description.interpolated', "{0} lets you decide whether your project folders should **allow or restrict** automatic code execution __(required for extensions, debugging, etc)__.nOpening a file/folder will prompt to grant trust. You can always {1} later.", Button(localize('workspaceTrust', "Workspace Trust"), 'https://github.com/microsoft/vscode-docs/blob/workspaceTrust/docs/editor/workspace-trust.md'), Button(localize('enableTrust', "enable trust"), 'command:toSide:workbench.action.manageTrustedDomain')), </del> <ins> description: localize('gettingStarted.workspaceTrust.description.interpolated', "{0} lets you decide whether your project folders should **allow or restrict** automatic code execution __(required for extensions, debugging, etc)__.nOpening a file/folder will prompt to grant trust. You can always {1} later.", Button(localize('workspaceTrust', "Workspace Trust"), 'https://code.visualstudio.com/docs/editor/workspace-trust'), Button(localize('enableTrust', "enable trust"), 'command:toSide:workbench.action.manageTrustedDomain')), </ins> when: 'workspacePlatform != 'webworker' && !isWorkspaceTrusted && workspaceFolderCount == 0', media: { type: 'svg', altText: 'Workspace Trust editor in Restricted mode and a primary button for switching to Trusted mode.', path: 'workspaceTrust.svg'


if (styles.backgroundColor) { content.push(`.monaco-workbench { background-color: ${styles.backgroundColor} !important; }`); <ins> content.push(`.issue-reporter-body::-webkit-scrollbar-track { background-color: ${styles.backgroundColor}; }`); </ins> } if (styles.inputBorder) {


content.push(`a:hover, .workbenchCommand:hover { color: ${styles.textLinkActiveForeground}; }`); } <del> if (styles.sliderBackgroundColor) { content.push(`::-webkit-scrollbar-thumb { background-color: ${styles.sliderBackgroundColor}; }`); } </del> if (styles.sliderActiveColor) { <del> content.push(`::-webkit-scrollbar-thumb:active { background-color: ${styles.sliderActiveColor}; }`); </del> <ins> content.push(`.issue-reporter-body::-webkit-scrollbar-thumb:active { background-color: ${styles.sliderActiveColor}; }`); </ins> } if (styles.sliderHoverColor) { <del> content.push(`::--webkit-scrollbar-thumb:hover { background-color: ${styles.sliderHoverColor}; }`); </del> <ins> content.push(`.issue-reporter-body::-webkit-scrollbar-thumb { background-color: ${styles.sliderHoverColor}; }`); content.push(`.issue-reporter-body::--webkit-scrollbar-thumb:hover { background-color: ${styles.sliderHoverColor}; }`); </ins> } if (styles.buttonBackground) {


if (issueType === IssueType.PerformanceIssue && this.receivedSystemInfo && this.receivedPerformanceInfo) { return true; } <ins> if (issueType === IssueType.FeatureRequest) { return true; } </ins> } return false;


// Store into config object URL this.configuration = { <ins> zoomLevel: data.zoomLevel, </ins> appRoot: this.environmentService.appRoot, windowId: 0, userEnv: {},


cursor: pointer; appearance: auto; border: none; <ins> border-right: 6px solid transparent; padding-left: 10px; </ins> } .issue-reporter-body #similar-issues {


class FastLabelNode { private disposed: boolean | undefined; private _textContent: string | undefined; <del> private _className: string | undefined; </del> <ins> private _classNames: string[] | undefined; </ins> private _empty: boolean | undefined; constructor(private _element: HTMLElement) {


this._element.textContent = content; } <del> set className(className: string) { if (this.disposed || className === this._className) { </del> <ins> set classNames(classNames: string[]) { if (this.disposed || equals(classNames, this._classNames)) { </ins> return; } <del> this._className = className; this._element.className = className; </del> <ins> this._classNames = classNames; this._element.classList.value = ''; this._element.classList.add(...classNames); </ins> } set empty(empty: boolean) {


existingIconNode.remove(); } <del> this.domNode.className = labelClasses.join(' '); </del> <ins> this.domNode.classNames = labelClasses; </ins> this.domNode.element.setAttribute('aria-label', ariaLabel); <del> this.labelContainer.className = containerClasses.join(' '); </del> <ins> this.labelContainer.classList.value = ''; this.labelContainer.classList.add(...containerClasses); </ins> this.setupHover(options?.descriptionTitle ? this.labelContainer : this.element, options?.title); this.nameNode.setLabel(label, options);


} function cssEscape(str: string): string { <del> return str.replace(/[x11x12x14x15x40]/g, '/'); // HTML class names can not contain certain whitespace characters, use / instead, which doesn't exist in file names. </del> <ins> return str.replace(/[s]/g, '/'); // HTML class names can not contain certain whitespace characters (https://dom.spec.whatwg.org/#interface-domtokenlist), use / instead, which doesn't exist in file names. </ins> }


} function escapeCSS(str: string) { <del> str = str.replace(/[x11x12x14x15x40]/g, '/'); // HTML class names can not contain certain whitespace characters, use / instead, which doesn't exist in file names. </del> <ins> str = str.replace(/[s]/g, '/'); // HTML class names can not contain certain whitespace characters (https://dom.spec.whatwg.org/#interface-domtokenlist), use / instead, which doesn't exist in file names. </ins> return mainWindow.CSS.escape(str); }


return; } <del> const snippet = await this.createUriListSnippet(uriList); </del> <ins> const snippet = await this.createUriListSnippet(document.uri, uriList); </ins> if (!snippet || token.isCancellationRequested) { return; }


return new UriList(uris.map(uri => ({ uri, str: uri.toString(true) }))); } <del> private async createUriListSnippet(uriList: UriList): Promise<{ readonly snippet: vscode.SnippetString; readonly label: string } | undefined> { </del> <ins> private async createUriListSnippet(docUri: vscode.Uri, uriList: UriList): Promise<{ readonly snippet: vscode.SnippetString; readonly label: string } | undefined> { </ins> if (!uriList.entries.length) { return; }


const snippet = new vscode.SnippetString(); for (let i = 0; i < uriList.entries.length; i++) { const uri = uriList.entries[i]; <del> const relativePath = getRelativePath(uri.uri); </del> <ins> const relativePath = getRelativePath(getDocumentDir(docUri), uri.uri); </ins> const urlText = relativePath ?? uri.str; snippet.appendText(`url(${urlText})`);


} } <del> function getRelativePath(file: vscode.Uri): string | undefined { const dir = getDocumentDir(file); if (dir && dir.scheme === file.scheme && dir.authority === file.authority) { if (file.scheme === Schemes.file) { </del> <ins> function getRelativePath(fromFile: vscode.Uri | undefined, toFile: vscode.Uri): string | undefined { if (fromFile && fromFile.scheme === toFile.scheme && fromFile.authority === toFile.authority) { if (toFile.scheme === Schemes.file) { </ins> // On windows, we must use the native `path.relative` to generate the relative path // so that drive-letters are resolved cast insensitively. However we then want to // convert back to a posix path to insert in to the document <del> const relativePath = path.relative(dir.fsPath, file.fsPath); </del> <ins> const relativePath = path.relative(fromFile.fsPath, toFile.fsPath); </ins> return path.posix.normalize(relativePath.split(path.sep).join(path.posix.sep)); } <del> return path.posix.relative(dir.path, file.path); </del> <ins> return path.posix.relative(fromFile.path, toFile.path); </ins> } return undefined;


"@vscode/windows-mutex": "^0.5.0", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", <del> "@xterm/addon-clipboard": "0.2.0-beta.34", "@xterm/addon-image": "0.9.0-beta.51", "@xterm/addon-search": "0.16.0-beta.51", "@xterm/addon-serialize": "0.14.0-beta.51", "@xterm/addon-unicode11": "0.9.0-beta.51", "@xterm/addon-webgl": "0.19.0-beta.51", "@xterm/headless": "5.6.0-beta.51", "@xterm/xterm": "5.6.0-beta.51", </del> <ins> "@xterm/addon-clipboard": "0.2.0-beta.35", "@xterm/addon-image": "0.9.0-beta.52", "@xterm/addon-search": "0.16.0-beta.52", "@xterm/addon-serialize": "0.14.0-beta.52", "@xterm/addon-unicode11": "0.9.0-beta.52", "@xterm/addon-webgl": "0.19.0-beta.52", "@xterm/headless": "5.6.0-beta.52", "@xterm/xterm": "5.6.0-beta.52", </ins> "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "jschardet": "3.1.3",


"@vscode/vscode-languagedetection": "1.0.21", "@vscode/windows-process-tree": "^0.6.0", "@vscode/windows-registry": "^1.1.0", <del> "@xterm/addon-clipboard": "0.2.0-beta.34", "@xterm/addon-image": "0.9.0-beta.51", "@xterm/addon-search": "0.16.0-beta.51", "@xterm/addon-serialize": "0.14.0-beta.51", "@xterm/addon-unicode11": "0.9.0-beta.51", "@xterm/addon-webgl": "0.19.0-beta.51", "@xterm/headless": "5.6.0-beta.51", "@xterm/xterm": "5.6.0-beta.51", </del> <ins> "@xterm/addon-clipboard": "0.2.0-beta.35", "@xterm/addon-image": "0.9.0-beta.52", "@xterm/addon-search": "0.16.0-beta.52", "@xterm/addon-serialize": "0.14.0-beta.52", "@xterm/addon-unicode11": "0.9.0-beta.52", "@xterm/addon-webgl": "0.19.0-beta.52", "@xterm/headless": "5.6.0-beta.52", "@xterm/xterm": "5.6.0-beta.52", </ins> "cookie": "^0.4.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2",


"@vscode/iconv-lite-umd": "0.7.0", "@vscode/tree-sitter-wasm": "^0.0.1", "@vscode/vscode-languagedetection": "1.0.21", <del> "@xterm/addon-clipboard": "0.2.0-beta.34", "@xterm/addon-image": "0.9.0-beta.51", "@xterm/addon-search": "0.16.0-beta.51", "@xterm/addon-serialize": "0.14.0-beta.51", "@xterm/addon-unicode11": "0.9.0-beta.51", "@xterm/addon-webgl": "0.19.0-beta.51", "@xterm/xterm": "5.6.0-beta.51", </del> <ins> "@xterm/addon-clipboard": "0.2.0-beta.35", "@xterm/addon-image": "0.9.0-beta.52", "@xterm/addon-search": "0.16.0-beta.52", "@xterm/addon-serialize": "0.14.0-beta.52", "@xterm/addon-unicode11": "0.9.0-beta.52", "@xterm/addon-webgl": "0.19.0-beta.52", "@xterm/xterm": "5.6.0-beta.52", </ins> "jschardet": "3.1.3", "tas-client-umd": "0.2.0", "vscode-oniguruma": "1.7.0",


resolved "https://registry.yarnpkg.com/@vscode/vscode-languagedetection/-/vscode-languagedetection-1.0.21.tgz#89b48f293f6aa3341bb888c1118d16ff13b032d3" integrity sha512-zSUH9HYCw5qsCtd7b31yqkpaCU6jhtkKLkvOOA8yTrIRfBSOFb8PPhgmMicD7B/m+t4PwOJXzU1XDtrM9Fd3/g== <del> "@xterm/addon-clipboard@0.2.0-beta.34": version "0.2.0-beta.34" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.34.tgz#9a753601e69d3f9aad10e6d22b3a3d05be237d6a" integrity sha512-Iduj2jGO37VkFLrRzxK5SkE7b2bAPaIvkvcSnw5JCdsvu9cjmPy7jgJkvUu54Tltzt55X+YTkQQ2GIKHqcor8A== </del> <ins> "@xterm/addon-clipboard@0.2.0-beta.35": version "0.2.0-beta.35" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz#4c9b553ea63ce02a3c8075fea7df1637d52092ef" integrity sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA== </ins> dependencies: js-base64 "^3.7.5" <del> "@xterm/addon-image@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.51.tgz#832be645ab04de3ab1af28aa37d4c3bcc72d9960" integrity sha512-u8f0C8Kae8d8jGo2OGaxy1j4hvXOij41ZUp5fNsGL3quYufwmtVixVHUnc7WfEMVdSaSBNqfDXE+qpV4i3C3ng== "@xterm/addon-search@0.16.0-beta.51": version "0.16.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.51.tgz#4595c6294287a2560abe4b76f6ef2f0aafd2f05e" integrity sha512-DhnNDP9bAd/7/9TW+0N3BUaF/6Fpv/6RiIiromlzSu+6g1VDmuWsd8JpeTxErOCoWZuEMLpVVje9ky3yj8pN9A== "@xterm/addon-serialize@0.14.0-beta.51": version "0.14.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.51.tgz#0c9802ba94018e94a727abc9e977a2349279468f" integrity sha512-EjKIOuzSP+HCtk05iwHk0N3jYfsx81bKRv4pfGXKsc3rN0H6gQ+bvx/abSkndtgIjKtee2cy1H8pggMaezmzIA== "@xterm/addon-unicode11@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.51.tgz#c2f2b1ad14b2481648ca7deaa0bf2923d987e2e6" integrity sha512-6FmA4MOue7SDYjSLmuG8rZC2eeVZ+YjhWEXWiUAAoiZ9X11j9HMdOhWcutca3crAMc6mrHfjx6fNsUxwtELMkQ== "@xterm/addon-webgl@0.19.0-beta.51": version "0.19.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.51.tgz#14cb115d45c140525eb51427e236189dd800c20c" integrity sha512-oO6yVuVA+9kNA47bT2c2IkGj9eLWvV6mEEo8wHKN7WXyYUFgw6ivAgmdrIdnKh679xbCq7th3GfcESwwQFH/sg== "@xterm/xterm@5.6.0-beta.51": version "5.6.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.51.tgz#3b9a5016d9588eb0a05226f6fc090b48a85b7698" integrity sha512-0i9gkiP2hhCMIRk5ACM8LJXHRd1umzC27ZDHD8n14vutrQRgdW4ENvCdmrWHiVJy4Ui1t7m70zdgg72shOgcEA== </del> <ins> "@xterm/addon-image@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz#a3115a50f884e5ba2f8ce09118a3d7e833fceb7b" integrity sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q== "@xterm/addon-search@0.16.0-beta.52": version "0.16.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz#f8c77629b95ceff7d6b93d95c4b085857f405470" integrity sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A== "@xterm/addon-serialize@0.14.0-beta.52": version "0.14.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz#19708cdd2895ddbd983b771ae9d14d7bc54cf7c9" integrity sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw== "@xterm/addon-unicode11@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz#15afdf03c20d2e46b4eca68bd461eea71c8dd37f" integrity sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw== "@xterm/addon-webgl@0.19.0-beta.52": version "0.19.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz#695b20a5fa88ff92e115624149592080fad59594" integrity sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw== "@xterm/xterm@5.6.0-beta.52": version "5.6.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz#ed7456a8b78ea1d00431737d078b5ab0bafbcdfe" integrity sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA== </ins> js-base64@^3.7.5: version "3.7.7"


resolved "https://registry.yarnpkg.com/@vscode/windows-registry/-/windows-registry-1.1.0.tgz#03dace7c29c46f658588b9885b9580e453ad21f9" integrity sha512-5AZzuWJpGscyiMOed0IuyEwt6iKmV5Us7zuwCDCFYMIq7tsvooO9BUiciywsvuthGz6UG4LSpeDeCxvgMVhnIw== <del> "@xterm/addon-clipboard@0.2.0-beta.34": version "0.2.0-beta.34" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.34.tgz#9a753601e69d3f9aad10e6d22b3a3d05be237d6a" integrity sha512-Iduj2jGO37VkFLrRzxK5SkE7b2bAPaIvkvcSnw5JCdsvu9cjmPy7jgJkvUu54Tltzt55X+YTkQQ2GIKHqcor8A== </del> <ins> "@xterm/addon-clipboard@0.2.0-beta.35": version "0.2.0-beta.35" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz#4c9b553ea63ce02a3c8075fea7df1637d52092ef" integrity sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA== </ins> dependencies: js-base64 "^3.7.5" <del> "@xterm/addon-image@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.51.tgz#832be645ab04de3ab1af28aa37d4c3bcc72d9960" integrity sha512-u8f0C8Kae8d8jGo2OGaxy1j4hvXOij41ZUp5fNsGL3quYufwmtVixVHUnc7WfEMVdSaSBNqfDXE+qpV4i3C3ng== "@xterm/addon-search@0.16.0-beta.51": version "0.16.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.51.tgz#4595c6294287a2560abe4b76f6ef2f0aafd2f05e" integrity sha512-DhnNDP9bAd/7/9TW+0N3BUaF/6Fpv/6RiIiromlzSu+6g1VDmuWsd8JpeTxErOCoWZuEMLpVVje9ky3yj8pN9A== "@xterm/addon-serialize@0.14.0-beta.51": version "0.14.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.51.tgz#0c9802ba94018e94a727abc9e977a2349279468f" integrity sha512-EjKIOuzSP+HCtk05iwHk0N3jYfsx81bKRv4pfGXKsc3rN0H6gQ+bvx/abSkndtgIjKtee2cy1H8pggMaezmzIA== "@xterm/addon-unicode11@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.51.tgz#c2f2b1ad14b2481648ca7deaa0bf2923d987e2e6" integrity sha512-6FmA4MOue7SDYjSLmuG8rZC2eeVZ+YjhWEXWiUAAoiZ9X11j9HMdOhWcutca3crAMc6mrHfjx6fNsUxwtELMkQ== "@xterm/addon-webgl@0.19.0-beta.51": version "0.19.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.51.tgz#14cb115d45c140525eb51427e236189dd800c20c" integrity sha512-oO6yVuVA+9kNA47bT2c2IkGj9eLWvV6mEEo8wHKN7WXyYUFgw6ivAgmdrIdnKh679xbCq7th3GfcESwwQFH/sg== "@xterm/headless@5.6.0-beta.51": version "5.6.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.6.0-beta.51.tgz#76ff548a88305fe476a7d3f991331c0393c0af45" integrity sha512-ehd4L3c28mQKVEd5cMmUzR1f1XcAVbJukfR1YiD7ohjphHUxSsg6mYb5qGIh50SsQsDI6wHYuIvmNSjvNgHVOw== "@xterm/xterm@5.6.0-beta.51": version "5.6.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.51.tgz#3b9a5016d9588eb0a05226f6fc090b48a85b7698" integrity sha512-0i9gkiP2hhCMIRk5ACM8LJXHRd1umzC27ZDHD8n14vutrQRgdW4ENvCdmrWHiVJy4Ui1t7m70zdgg72shOgcEA== </del> <ins> "@xterm/addon-image@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz#a3115a50f884e5ba2f8ce09118a3d7e833fceb7b" integrity sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q== "@xterm/addon-search@0.16.0-beta.52": version "0.16.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz#f8c77629b95ceff7d6b93d95c4b085857f405470" integrity sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A== "@xterm/addon-serialize@0.14.0-beta.52": version "0.14.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz#19708cdd2895ddbd983b771ae9d14d7bc54cf7c9" integrity sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw== "@xterm/addon-unicode11@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz#15afdf03c20d2e46b4eca68bd461eea71c8dd37f" integrity sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw== "@xterm/addon-webgl@0.19.0-beta.52": version "0.19.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz#695b20a5fa88ff92e115624149592080fad59594" integrity sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw== "@xterm/headless@5.6.0-beta.52": version "5.6.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.6.0-beta.52.tgz#7f934a7d7c5bbf88e2d78c22317cd2464bc9638a" integrity sha512-f4QITQwotblRLW6YOHnK801wHJWfFDnjD7jUEwaaAXtSp32xH3jguWnMP9/uuQX45q9ndjDjnm1t5aXX7gwqBQ== "@xterm/xterm@5.6.0-beta.52": version "5.6.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz#ed7456a8b78ea1d00431737d078b5ab0bafbcdfe" integrity sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA== </ins> agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0"


resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== <del> "@xterm/addon-clipboard@0.2.0-beta.34": version "0.2.0-beta.34" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.34.tgz#9a753601e69d3f9aad10e6d22b3a3d05be237d6a" integrity sha512-Iduj2jGO37VkFLrRzxK5SkE7b2bAPaIvkvcSnw5JCdsvu9cjmPy7jgJkvUu54Tltzt55X+YTkQQ2GIKHqcor8A== </del> <ins> "@xterm/addon-clipboard@0.2.0-beta.35": version "0.2.0-beta.35" resolved "https://registry.yarnpkg.com/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.35.tgz#4c9b553ea63ce02a3c8075fea7df1637d52092ef" integrity sha512-B8AulZEjsfvSEaLKp8oyRu7yJ7FJb5R3W0wpPbI/rOMVAuBwxDJsz0CxLvJUXnJX7OJwd5cjnyTnEcXJfMJycA== </ins> dependencies: js-base64 "^3.7.5" <del> "@xterm/addon-image@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.51.tgz#832be645ab04de3ab1af28aa37d4c3bcc72d9960" integrity sha512-u8f0C8Kae8d8jGo2OGaxy1j4hvXOij41ZUp5fNsGL3quYufwmtVixVHUnc7WfEMVdSaSBNqfDXE+qpV4i3C3ng== "@xterm/addon-search@0.16.0-beta.51": version "0.16.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.51.tgz#4595c6294287a2560abe4b76f6ef2f0aafd2f05e" integrity sha512-DhnNDP9bAd/7/9TW+0N3BUaF/6Fpv/6RiIiromlzSu+6g1VDmuWsd8JpeTxErOCoWZuEMLpVVje9ky3yj8pN9A== "@xterm/addon-serialize@0.14.0-beta.51": version "0.14.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.51.tgz#0c9802ba94018e94a727abc9e977a2349279468f" integrity sha512-EjKIOuzSP+HCtk05iwHk0N3jYfsx81bKRv4pfGXKsc3rN0H6gQ+bvx/abSkndtgIjKtee2cy1H8pggMaezmzIA== "@xterm/addon-unicode11@0.9.0-beta.51": version "0.9.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.51.tgz#c2f2b1ad14b2481648ca7deaa0bf2923d987e2e6" integrity sha512-6FmA4MOue7SDYjSLmuG8rZC2eeVZ+YjhWEXWiUAAoiZ9X11j9HMdOhWcutca3crAMc6mrHfjx6fNsUxwtELMkQ== "@xterm/addon-webgl@0.19.0-beta.51": version "0.19.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.51.tgz#14cb115d45c140525eb51427e236189dd800c20c" integrity sha512-oO6yVuVA+9kNA47bT2c2IkGj9eLWvV6mEEo8wHKN7WXyYUFgw6ivAgmdrIdnKh679xbCq7th3GfcESwwQFH/sg== "@xterm/headless@5.6.0-beta.51": version "5.6.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.6.0-beta.51.tgz#76ff548a88305fe476a7d3f991331c0393c0af45" integrity sha512-ehd4L3c28mQKVEd5cMmUzR1f1XcAVbJukfR1YiD7ohjphHUxSsg6mYb5qGIh50SsQsDI6wHYuIvmNSjvNgHVOw== "@xterm/xterm@5.6.0-beta.51": version "5.6.0-beta.51" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.51.tgz#3b9a5016d9588eb0a05226f6fc090b48a85b7698" integrity sha512-0i9gkiP2hhCMIRk5ACM8LJXHRd1umzC27ZDHD8n14vutrQRgdW4ENvCdmrWHiVJy4Ui1t7m70zdgg72shOgcEA== </del> <ins> "@xterm/addon-image@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-image/-/addon-image-0.9.0-beta.52.tgz#a3115a50f884e5ba2f8ce09118a3d7e833fceb7b" integrity sha512-1fWhnCIvLeO0aQ3CKqkTB9ye1bUsocpgFdDOgmwfW4XhLXpvu+QcyMGQMtWJHt8JWBN2w0cgR9eyfKw7orN+9Q== "@xterm/addon-search@0.16.0-beta.52": version "0.16.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-search/-/addon-search-0.16.0-beta.52.tgz#f8c77629b95ceff7d6b93d95c4b085857f405470" integrity sha512-ZLVh0O91dcjxCjrU3vadl+40Z/mBnYXhKNA58oU/dGWFtFxtUB9SaZoOUtBvnfDpQIloYAK6raC2AfVsKHzD8A== "@xterm/addon-serialize@0.14.0-beta.52": version "0.14.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.52.tgz#19708cdd2895ddbd983b771ae9d14d7bc54cf7c9" integrity sha512-1+ckKya1OURFmELH1Tjjoxz3Gnj78Dxj+NNRrEunfINkvyzaY+n8wT28FQxIlU5gJq+a0VGvlhNgTkMwgOn6aw== "@xterm/addon-unicode11@0.9.0-beta.52": version "0.9.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.52.tgz#15afdf03c20d2e46b4eca68bd461eea71c8dd37f" integrity sha512-5tZR/8c+vf0YNSYS6B9pEv8gyWWZpPYOf/BRQDkTGtYAnFf04MzggVE/U7tKUXGDzBhzwTPODq5qPNTX1xpGgw== "@xterm/addon-webgl@0.19.0-beta.52": version "0.19.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.52.tgz#695b20a5fa88ff92e115624149592080fad59594" integrity sha512-kbPO9iR166xW8qgRkYmKX2Vu0kQHXpxYLQ9jY/01e5kvNrI/rqRDV63FIq14ncOi7N3+dmTuUkjvbg8anCpuIw== "@xterm/headless@5.6.0-beta.52": version "5.6.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/headless/-/headless-5.6.0-beta.52.tgz#7f934a7d7c5bbf88e2d78c22317cd2464bc9638a" integrity sha512-f4QITQwotblRLW6YOHnK801wHJWfFDnjD7jUEwaaAXtSp32xH3jguWnMP9/uuQX45q9ndjDjnm1t5aXX7gwqBQ== "@xterm/xterm@5.6.0-beta.52": version "5.6.0-beta.52" resolved "https://registry.yarnpkg.com/@xterm/xterm/-/xterm-5.6.0-beta.52.tgz#ed7456a8b78ea1d00431737d078b5ab0bafbcdfe" integrity sha512-aZh8IBdZPb2N4NjTt/fQ/C90z/PM3Zxkfoqhmlsp5+v3Otmyw5kd3DepeHK1SFW/pz0/xdj4KFgX8t8Y2lDRbA== </ins> "@xtuc/ieee754@^1.2.0": version "1.2.0"


return true; } <del> const quickPick = this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true }); </del> <ins> const localDisposableStore = new DisposableStore(); const quickPick = localDisposableStore.add(this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true })); </ins> const quickPickItems = this._getKernelPickerQuickPickItems(notebook, matchResult, this._notebookKernelService, scopedContextKeyService); if (quickPickItems.length === 1 && supportAutoRun(quickPickItems[0]) && !skipAutoRun) { <del> return await this._handleQuickPick(editor, quickPickItems[0], quickPickItems as KernelQuickPickItem[]); </del> <ins> const picked = await this._handleQuickPick(editor, quickPickItems[0], quickPickItems as KernelQuickPickItem[]); localDisposableStore.dispose(); return picked; </ins> } quickPick.items = quickPickItems;


}, this); const pick = await new Promise<{ selected: KernelQuickPickItem | undefined; items: KernelQuickPickItem[] }>((resolve, reject) => { <del> quickPick.onDidAccept(() => { </del> <ins> localDisposableStore.add(quickPick.onDidAccept(() => { </ins> const item = quickPick.selectedItems[0]; if (item) { resolve({ selected: item, items: quickPick.items as KernelQuickPickItem[] });


} quickPick.hide(); <del> }); </del> <ins> })); </ins> <del> quickPick.onDidHide(() => { </del> <ins> localDisposableStore.add(quickPick.onDidHide(() => { </ins> kernelDetectionTaskListener.dispose(); kernelChangeEventListener.dispose(); quickPick.dispose(); resolve({ selected: undefined, items: quickPick.items as KernelQuickPickItem[] }); <del> }); </del> <ins> })); </ins> quickPick.show(); }); <ins> localDisposableStore.dispose(); </ins> if (pick.selected) { return await this._handleQuickPick(editor, pick.selected, pick.items); }


private async displaySelectAnotherQuickPick(editor: IActiveNotebookEditor, kernelListEmpty: boolean): Promise<boolean> { const notebook: NotebookTextModel = editor.textModel; const disposables = new DisposableStore(); <del> const quickPick = this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true }); </del> <ins> const quickPick = disposables.add(this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true })); </ins> const quickPickItem = await new Promise<KernelQuickPickItem | IQuickInputButton | undefined>(resolve => { // select from kernel sources quickPick.title = kernelListEmpty ? localize('select', "Select Kernel") : localize('selectAnotherKernel', "Select Another Kernel");


resolve(button); } })); <del> quickPick.onDidTriggerItemButton(async (e) => { </del> <ins> disposables.add(quickPick.onDidTriggerItemButton(async (e) => { </ins> if (isKernelSourceQuickPickItem(e.item) && e.item.documentation !== undefined) { const uri = URI.isUri(e.item.documentation) ? URI.parse(e.item.documentation) : await this._commandService.executeCommand(e.item.documentation); void this._openerService.open(uri, { openExternal: true }); } <del> }); </del> <ins> })); </ins> disposables.add(quickPick.onDidAccept(async () => { resolve(quickPick.selectedItems[0]); }));


private async _selectOneKernel(notebook: NotebookTextModel, source: string, kernels: INotebookKernel[]) { const quickPickItems: QuickPickInput<KernelPick>[] = kernels.map(kernel => toKernelQuickPick(kernel, undefined)); <del> const quickPick = this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true }); </del> <ins> const localDisposableStore = new DisposableStore(); const quickPick = localDisposableStore.add(this._quickInputService.createQuickPick<KernelQuickPickItem>({ useSeparators: true })); </ins> quickPick.items = quickPickItems; quickPick.canSelectMany = false; quickPick.title = localize('selectKernelFromExtension', "Select Kernel from {0}", source); <del> quickPick.onDidAccept(async () => { </del> <ins> localDisposableStore.add(quickPick.onDidAccept(async () => { </ins> if (quickPick.selectedItems && quickPick.selectedItems.length > 0 && isKernelPick(quickPick.selectedItems[0])) { await this._selecteKernel(notebook, quickPick.selectedItems[0].kernel); } quickPick.hide(); quickPick.dispose(); <del> }); </del> <ins> })); </ins> <del> quickPick.onDidHide(() => { quickPick.dispose(); }); </del> <ins> localDisposableStore.add(quickPick.onDidHide(() => { localDisposableStore.dispose(); })); </ins> quickPick.show(); }


async getExtensions(extensionInfos: ReadonlyArray<IExtensionInfo>, arg1: any, arg2?: any): Promise<IGalleryExtension[]> { const options = CancellationToken.isCancellationToken(arg1) ? {} : arg1 as IExtensionQueryOptions; const token = CancellationToken.isCancellationToken(arg1) ? arg1 : arg2 as CancellationToken; <ins> const result = await this.doGetExtensions(extensionInfos, options, token); const uuids = result.map(r => r.identifier.uuid); const extensionInfosByName: IExtensionInfo[] = []; for (const e of extensionInfos) { if (e.uuid && !uuids.includes(e.uuid)) { extensionInfosByName.push({ ...e, uuid: undefined }); } } if (extensionInfosByName.length) { // report telemetry data for additional query this.telemetryService.publicLog2< { count: number }, { owner: 'sandy081'; comment: 'Report the query to the the Marketplace for fetching extensions by name'; readonly count: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Number of extensions to fetch' }; }>('galleryService:additionalQueryByName', { count: extensionInfosByName.length }); const extensions = await this.doGetExtensions(extensionInfosByName, options, token); result.push(...extensions); } return result; } private async doGetExtensions(extensionInfos: ReadonlyArray<IExtensionInfo>, options: IExtensionQueryOptions, token: CancellationToken): Promise<IGalleryExtension[]> { </ins> const names: string[] = []; const ids: string[] = [], includePreReleases: (IExtensionIdentifier & { includePreRelease: boolean })[] = [], versions: (IExtensionIdentifier & { version: string })[] = []; let isQueryForReleaseVersionFromPreReleaseVersion = true; for (const extensionInfo of extensionInfos) {


if (walkthroughID) { const selectedCategory = typeof walkthroughID === 'string' ? walkthroughID : walkthroughID.category; <del> const selectedStep = typeof walkthroughID === 'string' ? undefined : walkthroughID.category + '#' + walkthroughID.step; </del> <ins> let selectedStep: string | undefined; if (typeof walkthroughID === 'object' && 'category' in walkthroughID && 'step' in walkthroughID) { selectedStep = `${walkthroughID.category}#${walkthroughID.step}`; } else { selectedStep = undefined; } </ins> // We're trying to open the welcome page from the Help menu if (!selectedCategory && !selectedStep) {


// Try first to select the walkthrough on an active welcome page with no selected walkthrough for (const group of editorGroupsService.groups) { if (group.activeEditor instanceof GettingStartedInput) { <ins> const activeEditor = group.activeEditor as GettingStartedInput; activeEditor.showWelcome = false; </ins> (group.activeEditorPane as GettingStartedPage).makeCategoryVisibleWhenAvailable(selectedCategory, selectedStep); return; }


if (!editor.selectedCategory && group) { editor.selectedCategory = selectedCategory; editor.selectedStep = selectedStep; <ins> editor.showWelcome = false; </ins> group.openEditor(editor, { revealIfOpened: true }); return; }


const activeEditor = editorService.activeEditor; // If the walkthrough is already open just reveal the step if (selectedStep && activeEditor instanceof GettingStartedInput && activeEditor.selectedCategory === selectedCategory) { <ins> activeEditor.showWelcome = false; </ins> commandService.executeCommand('walkthroughs.selectStep', selectedStep); return; }


const activeGroup = editorGroupsService.activeGroup; activeGroup.replaceEditors([{ editor: activeEditor, <del> replacement: instantiationService.createInstance(GettingStartedInput, { selectedCategory: selectedCategory, selectedStep: selectedStep }) </del> <ins> replacement: instantiationService.createInstance(GettingStartedInput, { selectedCategory: selectedCategory, selectedStep: selectedStep, showWelcome: false }) </ins> }]); } else { // else open respecting toSide <del> const options: GettingStartedEditorOptions = { selectedCategory: selectedCategory, selectedStep: selectedStep, preserveFocus: toSide ?? false }; </del> <ins> const options: GettingStartedEditorOptions = { selectedCategory: selectedCategory, selectedStep: selectedStep, showWelcome: false, preserveFocus: toSide ?? false }; </ins> editorService.openEditor({ resource: GettingStartedInput.RESOURCE, options


} else { slideManager.classList.add('showDetails'); slideManager.classList.remove('showCategories'); <del> this.container.querySelector<HTMLButtonElement>('.prev-button.button-link')!.style.display = 'block'; </del> <ins> const showGoBackButton = this.editorInput.showWelcome || this.prevWalkthrough; this.container.querySelector<HTMLButtonElement>('.prev-button.button-link')!.style.display = showGoBackButton ? 'block' : 'none'; </ins> this.container.querySelector('.gettingStartedSlideDetails')!.querySelectorAll('button').forEach(button => button.disabled = false); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('button').forEach(button => button.disabled = true); this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('input').forEach(button => button.disabled = true);


export const gettingStartedInputTypeId = 'workbench.editors.gettingStartedInput'; export interface GettingStartedEditorOptions extends IEditorOptions { <del> selectedCategory?: string; selectedStep?: string; showTelemetryNotice?: boolean; </del> <ins> selectedCategory?: string; selectedStep?: string; showTelemetryNotice?: boolean; showWelcome?: boolean; </ins> } export class GettingStartedInput extends EditorInput {


this.selectedCategory = options.selectedCategory; this.selectedStep = options.selectedStep; this.showTelemetryNotice = !!options.showTelemetryNotice; <ins> this.showWelcome = options.showWelcome ?? true; </ins> } override getName() {


selectedCategory: string | undefined; selectedStep: string | undefined; showTelemetryNotice: boolean; <ins> showWelcome: boolean; </ins> }


let result: IInsetRenderOutput | undefined = undefined; const [mimeTypes, pick] = this.output.resolveMimeTypes(this._notebookTextModel, undefined); <del> const pickedMimeTypeRenderer = mimeTypes[pick]; </del> <ins> const pickedMimeTypeRenderer = this.output.pickedMimeType || mimeTypes[pick]; </ins> if (mimeTypes.length > 1) { outputItemDiv.style.position = 'relative'; const mimeTypePicker = DOM.$('.multi-mimetype-output');


} const parsedInclude = include ? parseSearchExcludeInclude(GlobPattern.from(include)) : undefined; <del> const excludePatterns = include ? globsToISearchPatternBuilder(options.exclude) : undefined; </del> <ins> const excludePatterns = globsToISearchPatternBuilder(options.exclude); </ins> return { options: {


{ "name": "code-oss-dev", "version": "1.94.0", <del> "distro": "2560b0e8d341a0b6734d28ef71b08e1920ff2501", </del> <ins> "distro": "3617bc772b253b9c3ffd60d2e7165c4d945ac7c7", </ins> "author": { "name": "Microsoft Corporation" },


// Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { <del> version: '1.91.0-dev', </del> <ins> version: '1.94.0-dev', </ins> nameShort: 'Code - OSS Dev', nameLong: 'Code - OSS Dev', applicationName: 'code-oss',


(emergencyAlert.platform && emergencyAlert.platform !== platform) ||	// platform mismatch (emergencyAlert.arch && emergencyAlert.arch !== arch)					// arch mismatch ) { <del> return; // skip versions we are not on </del> <ins> return; </ins> } this.bannerService.show({


.monaco-inputbox > .ibwrapper { position: relative; width: 100%; <del> height: 100%; </del> } .monaco-inputbox > .ibwrapper > .input {


this._register(editContextAddDisposableListener(this._editContext, 'textupdate', (e) => { const compositionRangeWithinEditor = this._compositionRangeWithinEditor; if (compositionRangeWithinEditor) { <del> const position = this._context.viewModel.getPrimaryCursorState().viewState.position; </del> <ins> const position = this._context.viewModel.getPrimaryCursorState().modelState.position; </ins> const newCompositionRangeWithinEditor = Range.fromPositions(compositionRangeWithinEditor.getStartPosition(), position); this._compositionRangeWithinEditor = newCompositionRangeWithinEditor; }


this._screenReaderSupport.writeScreenReaderContent(); })); this._register(editContextAddDisposableListener(this._editContext, 'compositionstart', (e) => { <del> const position = this._context.viewModel.getPrimaryCursorState().viewState.position; </del> <ins> const position = this._context.viewModel.getPrimaryCursorState().modelState.position; </ins> const newCompositionRange = Range.fromPositions(position, position); this._compositionRangeWithinEditor = newCompositionRange; // Utlimately fires onDidCompositionStart() on the editor to notify for example suggest model of composition state


if (i === this._primarySelection.endLineNumber) { selectionEndOffset += this._primarySelection.endColumn - 1; } else { <del> selectionEndOffset += this._context.viewModel.getLineMaxColumn(i); </del> <ins> selectionEndOffset += this._context.viewModel.model.getLineMaxColumn(i); </ins> } } <del> const endColumnOfEndLineNumber = this._context.viewModel.getLineMaxColumn(this._primarySelection.endLineNumber); </del> <ins> const endColumnOfEndLineNumber = this._context.viewModel.model.getLineMaxColumn(this._primarySelection.endLineNumber); </ins> const rangeOfText = new Range(this._primarySelection.startLineNumber, 1, this._primarySelection.endLineNumber, endColumnOfEndLineNumber); <del> const text = this._context.viewModel.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined); </del> <ins> const text = this._context.viewModel.model.getValueInRange(rangeOfText, EndOfLinePreference.TextDefined); </ins> const textStartPositionWithinEditor = rangeOfText.getStartPosition(); return { text,


this.textModelService.createModelReference(CellUri.generateCellPropertyUri(this.cell.originalDocument.uri, this.cell.original.handle, Schemas.vscodeNotebookCellMetadata)), this.textModelService.createModelReference(CellUri.generateCellPropertyUri(this.cell.modifiedDocument.uri, this.cell.modified.handle, Schemas.vscodeNotebookCellMetadata)) ]); <ins> if (this._isDisposed) { originalMetadataModel.dispose(); modifiedMetadataModel.dispose(); return; } </ins> this._metadataEditorDisposeStore.add(originalMetadataModel); this._metadataEditorDisposeStore.add(modifiedMetadataModel); const vm = this._metadataEditor.createViewModel({ original: originalMetadataModel.object.textEditorModel, modified: modifiedMetadataModel.object.textEditorModel }); <ins> this._metadataEditor.setModel(vm); </ins> // Reduces flicker (compute this before setting the model) // Else when the model is set, the height of the editor will be x, after diff is computed, then height will be y. // & that results in flicker. await vm.waitForDiff(); <del> this._metadataEditor.setModel(vm); </del> <ins> if (this._isDisposed) { return; } </ins> this.cell.metadataHeight = this._metadataEditor.getContentHeight();


import { ILanguageService } from '../../../../editor/common/languages/language.js'; import { tokenizeToString } from '../../../../editor/common/languages/textToHtmlTokenizer.js'; import { IExtensionService } from '../../../services/extensions/common/extensions.js'; <ins> import { markedGfmHeadingIdPlugin } from './markedGfmHeadingIdPlugin.js'; </ins> export const DEFAULT_MARKDOWN_STYLES = ` body {


return tokenizeToString(languageService, code, languageId); } }), <del> MarkedGfmHeadings.gfmHeadingId(), </del> <ins> markedGfmHeadingIdPlugin(), </ins> ...(options?.markedExtensions ?? []), );


*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import * as nls from '../../../../nls.js'; import { IPreferencesService, ISetting } from '../../../services/preferences/common/preferences.js'; import { settingKeyToDisplayFormat } from '../../preferences/browser/settingsTreeModels.js'; </del> <ins> import { ActionViewItem } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; import { IAction } from '../../../../base/common/actions.js'; import type { Tokens } from '../../../../base/common/marked/marked.js'; import { Schemas } from '../../../../base/common/network.js'; </ins> import { URI } from '../../../../base/common/uri.js'; <ins> import * as nls from '../../../../nls.js'; import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; </ins> import { ConfigurationTarget, IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js'; <del> import { ActionViewItem } from '../../../../base/browser/ui/actionbar/actionViewItems.js'; import { IAction } from '../../../../base/common/actions.js'; </del> import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; <del> import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js'; import { Schemas } from '../../../../base/common/network.js'; import { Tokens } from '../../../../base/common/marked/marked.js'; </del> <ins> import { IPreferencesService, ISetting } from '../../../services/preferences/common/preferences.js'; import { settingKeyToDisplayFormat } from '../../preferences/browser/settingsTreeModels.js'; </ins> export class SimpleSettingRenderer { private readonly codeSettingRegex: RegExp;


<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 marked from '../../../../base/common/marked/marked.js'; // Copied from https://github.com/Flet/github-slugger since we can't use esm yet. // eslint-disable-next-line no-control-regex, no-misleading-character-class const githubSlugReplaceRegex = /[0-x1F!-,./:-@[-^`{-xA9xAB-xB4xB6-xB9xBB-xBFxD7xF7u02C2-u02C5u02D2-u02DFu02E5-u02EBu02EDu02EF-u02FFu0375u0378u0379u037Eu0380-u0385u0387u038Bu038Du03A2u03F6u0482u0530u0557u0558u055A-u055Fu0589-u0590u05BEu05C0u05C3u05C6u05C8-u05CFu05EB-u05EEu05F3-u060Fu061B-u061Fu066A-u066Du06D4u06DDu06DEu06E9u06FDu06FEu0700-u070Fu074Bu074Cu07B2-u07BFu07F6-u07F9u07FBu07FCu07FEu07FFu082E-u083Fu085C-u085Fu086B-u089Fu08B5u08C8-u08D2u08E2u0964u0965u0970u0984u098Du098Eu0991u0992u09A9u09B1u09B3-u09B5u09BAu09BBu09C5u09C6u09C9u09CAu09CF-u09D6u09D8-u09DBu09DEu09E4u09E5u09F2-u09FBu09FDu09FFu0A00u0A04u0A0B-u0A0Eu0A11u0A12u0A29u0A31u0A34u0A37u0A3Au0A3Bu0A3Du0A43-u0A46u0A49u0A4Au0A4E-u0A50u0A52-u0A58u0A5Du0A5F-u0A65u0A76-u0A80u0A84u0A8Eu0A92u0AA9u0AB1u0AB4u0ABAu0ABBu0AC6u0ACAu0ACEu0ACFu0AD1-u0ADFu0AE4u0AE5u0AF0-u0AF8u0B00u0B04u0B0Du0B0Eu0B11u0B12u0B29u0B31u0B34u0B3Au0B3Bu0B45u0B46u0B49u0B4Au0B4E-u0B54u0B58-u0B5Bu0B5Eu0B64u0B65u0B70u0B72-u0B81u0B84u0B8B-u0B8Du0B91u0B96-u0B98u0B9Bu0B9Du0BA0-u0BA2u0BA5-u0BA7u0BAB-u0BADu0BBA-u0BBDu0BC3-u0BC5u0BC9u0BCEu0BCFu0BD1-u0BD6u0BD8-u0BE5u0BF0-u0BFFu0C0Du0C11u0C29u0C3A-u0C3Cu0C45u0C49u0C4E-u0C54u0C57u0C5B-u0C5Fu0C64u0C65u0C70-u0C7Fu0C84u0C8Du0C91u0CA9u0CB4u0CBAu0CBBu0CC5u0CC9u0CCE-u0CD4u0CD7-u0CDDu0CDFu0CE4u0CE5u0CF0u0CF3-u0CFFu0D0Du0D11u0D45u0D49u0D4F-u0D53u0D58-u0D5Eu0D64u0D65u0D70-u0D79u0D80u0D84u0D97-u0D99u0DB2u0DBCu0DBEu0DBFu0DC7-u0DC9u0DCB-u0DCEu0DD5u0DD7u0DE0-u0DE5u0DF0u0DF1u0DF4-u0E00u0E3B-u0E3Fu0E4Fu0E5A-u0E80u0E83u0E85u0E8Bu0EA4u0EA6u0EBEu0EBFu0EC5u0EC7u0ECEu0ECFu0EDAu0EDBu0EE0-u0EFFu0F01-u0F17u0F1A-u0F1Fu0F2A-u0F34u0F36u0F38u0F3A-u0F3Du0F48u0F6D-u0F70u0F85u0F98u0FBD-u0FC5u0FC7-u0FFFu104A-u104Fu109Eu109Fu10C6u10C8-u10CCu10CEu10CFu10FBu1249u124Eu124Fu1257u1259u125Eu125Fu1289u128Eu128Fu12B1u12B6u12B7u12BFu12C1u12C6u12C7u12D7u1311u1316u1317u135Bu135Cu1360-u137Fu1390-u139Fu13F6u13F7u13FE-u1400u166Du166Eu1680u169B-u169Fu16EB-u16EDu16F9-u16FFu170Du1715-u171Fu1735-u173Fu1754-u175Fu176Du1771u1774-u177Fu17D4-u17D6u17D8-u17DBu17DEu17DFu17EA-u180Au180Eu180Fu181A-u181Fu1879-u187Fu18AB-u18AFu18F6-u18FFu191Fu192C-u192Fu193C-u1945u196Eu196Fu1975-u197Fu19AC-u19AFu19CA-u19CFu19DA-u19FFu1A1C-u1A1Fu1A5Fu1A7Du1A7Eu1A8A-u1A8Fu1A9A-u1AA6u1AA8-u1AAFu1AC1-u1AFFu1B4C-u1B4Fu1B5A-u1B6Au1B74-u1B7Fu1BF4-u1BFFu1C38-u1C3Fu1C4A-u1C4Cu1C7Eu1C7Fu1C89-u1C8Fu1CBBu1CBCu1CC0-u1CCFu1CD3u1CFB-u1CFFu1DFAu1F16u1F17u1F1Eu1F1Fu1F46u1F47u1F4Eu1F4Fu1F58u1F5Au1F5Cu1F5Eu1F7Eu1F7Fu1FB5u1FBDu1FBF-u1FC1u1FC5u1FCD-u1FCFu1FD4u1FD5u1FDC-u1FDFu1FED-u1FF1u1FF5u1FFD-u203Eu2041-u2053u2055-u2070u2072-u207Eu2080-u208Fu209D-u20CFu20F1-u2101u2103-u2106u2108u2109u2114u2116-u2118u211E-u2123u2125u2127u2129u212Eu213Au213Bu2140-u2144u214A-u214Du214F-u215Fu2189-u24B5u24EA-u2BFFu2C2Fu2C5Fu2CE5-u2CEAu2CF4-u2CFFu2D26u2D28-u2D2Cu2D2Eu2D2Fu2D68-u2D6Eu2D70-u2D7Eu2D97-u2D9Fu2DA7u2DAFu2DB7u2DBFu2DC7u2DCFu2DD7u2DDFu2E00-u2E2Eu2E30-u3004u3008-u3020u3030u3036u3037u303D-u3040u3097u3098u309Bu309Cu30A0u30FBu3100-u3104u3130u318F-u319Fu31C0-u31EFu3200-u33FFu4DC0-u4DFFu9FFD-u9FFFuA48D-uA4CFuA4FEuA4FFuA60D-uA60FuA62C-uA63FuA673uA67EuA6F2-uA716uA720uA721uA789uA78AuA7C0uA7C1uA7CB-uA7F4uA828-uA82BuA82D-uA83FuA874-uA87FuA8C6-uA8CFuA8DA-uA8DFuA8F8-uA8FAuA8FCuA92EuA92FuA954-uA95FuA97D-uA97FuA9C1-uA9CEuA9DA-uA9DFuA9FFuAA37-uAA3FuAA4EuAA4FuAA5A-uAA5FuAA77-uAA79uAAC3-uAADAuAADEuAADFuAAF0uAAF1uAAF7-uAB00uAB07uAB08uAB0FuAB10uAB17-uAB1FuAB27uAB2FuAB5BuAB6A-uAB6FuABEBuABEEuABEFuABFA-uABFFuD7A4-uD7AFuD7C7-uD7CAuD7FC-uD7FFuE000-uF8FFuFA6EuFA6FuFADA-uFAFFuFB07-uFB12uFB18-uFB1CuFB29uFB37uFB3DuFB3FuFB42uFB45uFBB2-uFBD2uFD3E-uFD4FuFD90uFD91uFDC8-uFDEFuFDFC-uFDFFuFE10-uFE1FuFE30-uFE32uFE35-uFE4CuFE50-uFE6FuFE75uFEFD-uFF0FuFF1A-uFF20uFF3B-uFF3EuFF40uFF5B-uFF65uFFBF-uFFC1uFFC8uFFC9uFFD0uFFD1uFFD8uFFD9uFFDD-uFFFF]|uD800[uDC0CuDC27uDC3BuDC3EuDC4EuDC4FuDC5E-uDC7FuDCFB-uDD3FuDD75-uDDFCuDDFE-uDE7FuDE9D-uDE9FuDED1-uDEDFuDEE1-uDEFFuDF20-uDF2CuDF4B-uDF4FuDF7B-uDF7FuDF9EuDF9FuDFC4-uDFC7uDFD0uDFD6-uDFFF]|uD801[uDC9EuDC9FuDCAA-uDCAFuDCD4-uDCD7uDCFC-uDCFFuDD28-uDD2FuDD64-uDDFFuDF37-uDF3FuDF56-uDF5FuDF68-uDFFF]|uD802[uDC06uDC07uDC09uDC36uDC39-uDC3BuDC3DuDC3EuDC56-uDC5FuDC77-uDC7FuDC9F-uDCDFuDCF3uDCF6-uDCFFuDD16-uDD1FuDD3A-uDD7FuDDB8-uDDBDuDDC0-uDDFFuDE04uDE07-uDE0BuDE14uDE18uDE36uDE37uDE3B-uDE3EuDE40-uDE5FuDE7D-uDE7FuDE9D-uDEBFuDEC8uDEE7-uDEFFuDF36-uDF3FuDF56-uDF5FuDF73-uDF7FuDF92-uDFFF]|uD803[uDC49-uDC7FuDCB3-uDCBFuDCF3-uDCFFuDD28-uDD2FuDD3A-uDE7FuDEAAuDEAD-uDEAFuDEB2-uDEFFuDF1D-uDF26uDF28-uDF2FuDF51-uDFAFuDFC5-uDFDFuDFF7-uDFFF]|uD804[uDC47-uDC65uDC70-uDC7EuDCBB-uDCCFuDCE9-uDCEFuDCFA-uDCFFuDD35uDD40-uDD43uDD48-uDD4FuDD74uDD75uDD77-uDD7FuDDC5-uDDC8uDDCDuDDDBuDDDD-uDDFFuDE12uDE38-uDE3DuDE3F-uDE7FuDE87uDE89uDE8EuDE9EuDEA9-uDEAFuDEEB-uDEEFuDEFA-uDEFFuDF04uDF0DuDF0EuDF11uDF12uDF29uDF31uDF34uDF3AuDF45uDF46uDF49uDF4AuDF4EuDF4FuDF51-uDF56uDF58-uDF5CuDF64uDF65uDF6D-uDF6FuDF75-uDFFF]|uD805[uDC4B-uDC4FuDC5A-uDC5DuDC62-uDC7FuDCC6uDCC8-uDCCFuDCDA-uDD7FuDDB6uDDB7uDDC1-uDDD7uDDDE-uDDFFuDE41-uDE43uDE45-uDE4FuDE5A-uDE7FuDEB9-uDEBFuDECA-uDEFFuDF1BuDF1CuDF2C-uDF2FuDF3A-uDFFF]|uD806[uDC3B-uDC9FuDCEA-uDCFEuDD07uDD08uDD0AuDD0BuDD14uDD17uDD36uDD39uDD3AuDD44-uDD4FuDD5A-uDD9FuDDA8uDDA9uDDD8uDDD9uDDE2uDDE5-uDDFFuDE3F-uDE46uDE48-uDE4FuDE9A-uDE9CuDE9E-uDEBFuDEF9-uDFFF]|uD807[uDC09uDC37uDC41-uDC4FuDC5A-uDC71uDC90uDC91uDCA8uDCB7-uDCFFuDD07uDD0AuDD37-uDD39uDD3BuDD3EuDD48-uDD4FuDD5A-uDD5FuDD66uDD69uDD8FuDD92uDD99-uDD9FuDDAA-uDEDFuDEF7-uDFAFuDFB1-uDFFF]|uD808[uDF9A-uDFFF]|uD809[uDC6F-uDC7FuDD44-uDFFF]|[uD80AuD80BuD80E-uD810uD812-uD819uD824-uD82BuD82DuD82EuD830-uD833uD837uD839uD83DuD83FuD87B-uD87DuD87FuD885-uDB3FuDB41-uDBFF][uDC00-uDFFF]|uD80D[uDC2F-uDFFF]|uD811[uDE47-uDFFF]|uD81A[uDE39-uDE3FuDE5FuDE6A-uDECFuDEEEuDEEFuDEF5-uDEFFuDF37-uDF3FuDF44-uDF4FuDF5A-uDF62uDF78-uDF7CuDF90-uDFFF]|uD81B[uDC00-uDE3FuDE80-uDEFFuDF4B-uDF4EuDF88-uDF8EuDFA0-uDFDFuDFE2uDFE5-uDFEFuDFF2-uDFFF]|uD821[uDFF8-uDFFF]|uD823[uDCD6-uDCFFuDD09-uDFFF]|uD82C[uDD1F-uDD4FuDD53-uDD63uDD68-uDD6FuDEFC-uDFFF]|uD82F[uDC6B-uDC6FuDC7D-uDC7FuDC89-uDC8FuDC9A-uDC9CuDC9F-uDFFF]|uD834[uDC00-uDD64uDD6A-uDD6CuDD73-uDD7AuDD83uDD84uDD8C-uDDA9uDDAE-uDE41uDE45-uDFFF]|uD835[uDC55uDC9DuDCA0uDCA1uDCA3uDCA4uDCA7uDCA8uDCADuDCBAuDCBCuDCC4uDD06uDD0BuDD0CuDD15uDD1DuDD3AuDD3FuDD45uDD47-uDD49uDD51uDEA6uDEA7uDEC1uDEDBuDEFBuDF15uDF35uDF4FuDF6FuDF89uDFA9uDFC3uDFCCuDFCD]|uD836[uDC00-uDDFFuDE37-uDE3AuDE6D-uDE74uDE76-uDE83uDE85-uDE9AuDEA0uDEB0-uDFFF]|uD838[uDC07uDC19uDC1AuDC22uDC25uDC2B-uDCFFuDD2D-uDD2FuDD3EuDD3FuDD4A-uDD4DuDD4F-uDEBFuDEFA-uDFFF]|uD83A[uDCC5-uDCCFuDCD7-uDCFFuDD4C-uDD4FuDD5A-uDFFF]|uD83B[uDC00-uDDFFuDE04uDE20uDE23uDE25uDE26uDE28uDE33uDE38uDE3AuDE3C-uDE41uDE43-uDE46uDE48uDE4AuDE4CuDE50uDE53uDE55uDE56uDE58uDE5AuDE5CuDE5EuDE60uDE63uDE65uDE66uDE6BuDE73uDE78uDE7DuDE7FuDE8AuDE9C-uDEA0uDEA4uDEAAuDEBC-uDFFF]|uD83C[uDC00-uDD2FuDD4A-uDD4FuDD6A-uDD6FuDD8A-uDFFF]|uD83E[uDC00-uDFEFuDFFA-uDFFF]|uD869[uDEDE-uDEFF]|uD86D[uDF35-uDF3F]|uD86E[uDC1EuDC1F]|uD873[uDEA2-uDEAF]|uD87A[uDFE1-uDFFF]|uD87E[uDE1E-uDFFF]|uD884[uDF4B-uDFFF]|uDB40[uDC00-uDCFFuDDF0-uDFFF]/g; function slugify(heading: string): string { const slugifiedHeading = heading.trim() .toLowerCase() .replace(githubSlugReplaceRegex, '') .replace(/s/g, '-'); // Replace whitespace with - return slugifiedHeading; } // Copied from https://github.com/markedjs/marked-gfm-heading-id/blob/main/src/index.js // Removed logic for handling duplicate header ids for now // unescape from marked helpers const unescapeTest = /&(#(?:d+)|(?:#x[0-9A-Fa-f]+)|(?:w+));?/ig; function unescape(html: string) { // explicitly match decimal, hex, and named HTML entities return html.replace(unescapeTest, (_, n) => { n = n.toLowerCase(); if (n === 'colon') { return ':'; } if (n.charAt(0) === '#') { return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1)); } return ''; }); } export function markedGfmHeadingIdPlugin({ prefix = '', globalSlugs = false } = {}): marked.MarkedExtension { return { // hooks: { // 	preprocess(src: string) { // 		if (!globalSlugs) { // 			resetHeadings(); // 		} // 		return src; // 	}, // }, renderer: { heading({ tokens, depth }) { const text = this.parser.parseInline(tokens); const raw = unescape(this.parser.parseInline(tokens, this.parser.textRenderer)) .trim() .replace(/<[!/a-z].*?>/gi, ''); const level = depth; const id = `${prefix}${slugify(raw)}`; // const heading = { level, text, id, raw }; // headings.push(heading); return `<h${level} id="${id}">${text}</h${level}>n`; }, }, }; } </ins>


*  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ <del> import { EditorInput } from '../../../common/editor/editorInput.js'; import { EditorModel } from '../../../common/editor/editorModel.js'; import { URI } from '../../../../base/common/uri.js'; </del> <ins> import { Dimension } from '../../../../base/browser/dom.js'; </ins> import { DisposableStore, IReference } from '../../../../base/common/lifecycle.js'; <del> import { ITextEditorModel, ITextModelService } from '../../../../editor/common/services/resolverService.js'; import { marked, Tokens } from '../../../../base/common/marked/marked.js'; </del> <ins> import * as marked from '../../../../base/common/marked/marked.js'; import { Schemas } from '../../../../base/common/network.js'; </ins> import { isEqual } from '../../../../base/common/resources.js'; <del> import { moduleToContent } from '../common/walkThroughContentProvider.js'; import { Dimension } from '../../../../base/browser/dom.js'; import { EditorInputCapabilities, IUntypedEditorInput } from '../../../common/editor.js'; </del> <ins> import { URI } from '../../../../base/common/uri.js'; import { ITextEditorModel, ITextModelService } from '../../../../editor/common/services/resolverService.js'; </ins> import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; <del> import { Schemas } from '../../../../base/common/network.js'; </del> <ins> import { EditorInputCapabilities, IUntypedEditorInput } from '../../../common/editor.js'; import { EditorInput } from '../../../common/editor/editorInput.js'; import { EditorModel } from '../../../common/editor/editorModel.js'; import { markedGfmHeadingIdPlugin } from '../../markdown/browser/markedGfmHeadingIdPlugin.js'; import { moduleToContent } from '../common/walkThroughContentProvider.js'; </ins> class WalkThroughModel extends EditorModel {


const snippets: Promise<IReference<ITextEditorModel>>[] = []; let i = 0; <del> const renderer = new marked.Renderer(); renderer.code = ({ lang }: Tokens.Code) => { </del> <ins> const renderer = new marked.marked.Renderer(); renderer.code = ({ lang }: marked.Tokens.Code) => { </ins> i++; const resource = this.options.resource.with({ scheme: Schemas.walkThroughSnippet, fragment: `${i}.${lang}` }); snippets.push(this.textModelResolverService.createModelReference(resource)); return `<div id="snippet-${resource.fragment}" class="walkThroughEditorContainer" ></div>`; }; <del> content = marked(content, { async: false, renderer }); </del> <ins> const m = new marked.Marked({ renderer }, markedGfmHeadingIdPlugin()); content = m.parse(content, { async: false }); </ins> return Promise.all(snippets) .then(refs => new WalkThroughModel(content, refs)); });


/** * Sanitizes the given `value` and reset the given `node` with it. */ <del> export function safeInnerHtml(node: HTMLElement, value: string): void { </del> <ins> export function safeInnerHtml(node: HTMLElement, value: string, extraDomPurifyConfig?: dompurify.Config): void { </ins> const hook = hookDomPurifyHrefAndSrcSanitizer(defaultSafeProtocols); try { <del> const html = dompurify.sanitize(value, defaultDomPurifyConfig); </del> <ins> const html = dompurify.sanitize(value, { ...defaultDomPurifyConfig, ...extraDomPurifyConfig }); </ins> node.innerHTML = html as unknown as string; } finally { hook.dispose();


readonly token?: CancellationToken; } <del> /*marked.* </del> <ins> /** </ins> * Renders a string of markdown as a document. * * Uses VS Code's syntax highlighting code blocks.


const isServerless = platform.isWeb && !accessor.get(IWorkbenchEnvironmentService).remoteAuthority; return ` ## Interactive Editor Playground <del> The core editor in VS Code is packed with features.  This page highlights a number of them and lets you interactively try them out through the use of a number of embedded editors.  For full details on the editor features for VS Code and more head over to our [documentation](command:workbench.action.openDocumentationUrl). </del> <ins> The core editor in VS Code is packed with features.  This page highlights a number of them and lets you interactively try them out through the use of a number of embedded editors.  For full details on the editor features for VS Code and more head over to our [documentation](https://code.visualstudio.com/docs). </ins> * [Multi-cursor Editing](#multi-cursor-editing) - block selection, select all occurrences, add additional cursors and more. * [IntelliSense](#intellisense) - get code assistance and parameter suggestions for your code and external modules.


const content = model.main; if (!input.resource.path.endsWith('.md')) { <del> safeInnerHtml(this.content, content); </del> <ins> safeInnerHtml(this.content, content, { ALLOW_UNKNOWN_PROTOCOLS: true }); </ins> this.updateSizeClasses(); this.decorateContent();


const innerContent = document.createElement('div'); innerContent.classList.add('walkThroughContent'); // only for markdown files const markdown = this.expandMacros(content); <del> safeInnerHtml(innerContent, markdown); </del> <ins> safeInnerHtml(innerContent, markdown, { ALLOW_UNKNOWN_PROTOCOLS: true }); </ins> this.content.appendChild(innerContent); model.snippets.forEach((snippet, i) => {


import { ServicesAccessor } from '../../../../editor/browser/editorExtensions.js'; import { Schemas } from '../../../../base/common/network.js'; import { ITextEditorOptions } from '../../../../platform/editor/common/editor.js'; <del> import { IUserDataProfileService } from '../../userDataProfile/common/userDataProfile.js'; </del> import { coalesce } from '../../../../base/common/arrays.js'; import { mainWindow, isAuxiliaryWindow } from '../../../../base/browser/window.js'; import { isIOS, isMacintosh } from '../../../../base/common/platform.js';


@ILogService private readonly logService: ILogService, @IDialogService private readonly dialogService: IDialogService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, <del> @IUserDataProfileService private readonly userDataProfileService: IUserDataProfileService, </del> @IUserDataProfilesService private readonly userDataProfilesService: IUserDataProfilesService, ) { super();


} } <del> const newWindowProfile = (options?.forceProfile </del> <ins> const newWindowProfile = options?.forceProfile </ins> ? this.userDataProfilesService.profiles.find(profile => profile.name === options?.forceProfile) <del> : undefined) ?? this.userDataProfileService.currentProfile; if (!newWindowProfile.isDefault) { </del> <ins> : undefined; if (newWindowProfile && !newWindowProfile.isDefault) { </ins> newPayload.push(['profile', newWindowProfile.name]); }


type VoiceChatSessionContext = 'view' | 'inline' | 'terminal' | 'quick' | 'editor'; const VoiceChatSessionContexts: VoiceChatSessionContext[] = ['view', 'inline', 'terminal', 'quick', 'editor']; <del> const TerminalChatExecute = MenuId.for('terminalChatInput'); // unfortunately, terminal decided to go with their own menu (https://github.com/microsoft/vscode/issues/208789) </del> // Global Context Keys (set on global context key service) const CanVoiceChat = ContextKeyExpr.and(CONTEXT_CHAT_ENABLED, HasSpeechProvider); const FocusInChatInput = ContextKeyExpr.or(CTX_INLINE_CHAT_FOCUSED, CONTEXT_IN_CHAT_INPUT);


), group: 'navigation', order: -1 <del> }, { id: TerminalChatExecute, when: ContextKeyExpr.and( HasSpeechProvider, ScopedChatSynthesisInProgress.negate(),	// hide when text to speech is in progress AnyScopedVoiceChatInProgress?.negate(),	// hide when voice chat is in progress ), group: 'navigation', order: -1 </del> }] }); }


when: AnyScopedVoiceChatInProgress, group: 'navigation', order: -1 <del> }, { id: TerminalChatExecute, when: AnyScopedVoiceChatInProgress, group: 'navigation', order: -1 </del> }] }); }


group: 'navigation', order: -1 }, <del> { id: TerminalChatExecute, when: ScopedChatSynthesisInProgress, group: 'navigation', order: -1 } </del> ] }); }


when: HasSpeechProvider.negate(), group: 'navigation', order: -1 <del> }, { id: TerminalChatExecute, when: HasSpeechProvider.negate(), group: 'navigation', order: -1 </del> }] }); }


import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js'; import { IListService, IWorkbenchListOptions, WorkbenchList } from '../../../../../platform/list/browser/listService.js'; <del> import { CursorAtBoundary, ICellViewModel, CellEditState, CellFocusMode, ICellOutputViewModel, CellRevealType, CellRevealRangeType, CursorAtLineBoundary, INotebookViewZoneChangeAccessor } from '../notebookBrowser.js'; </del> <ins> import { CursorAtBoundary, ICellViewModel, CellEditState, ICellOutputViewModel, CellRevealType, CellRevealRangeType, CursorAtLineBoundary, INotebookViewZoneChangeAccessor } from '../notebookBrowser.js'; </ins> import { CellViewModel, NotebookViewModel } from '../viewModel/notebookViewModelImpl.js'; import { diff, NOTEBOOK_EDITOR_CURSOR_BOUNDARY, CellKind, SelectionStateType, NOTEBOOK_EDITOR_CURSOR_LINE_BOUNDARY } from '../../common/notebookCommon.js'; import { ICellRange, cellRangesToIndexes, reduceCellRanges, cellRangesEqual } from '../../common/notebookRange.js';


notebookEditorCursorAtBoundaryContext.set('none'); })); <del> this._localDisposableStore.add(this.view.onMouseDblClick(() => { const focus = this.getFocusedElements()[0]; if (focus && focus.cellKind === CellKind.Markup && !focus.isInputCollapsed && !this._viewModel?.options.isReadOnly) { // scroll the cell into view if out of viewport const focusedCellIndex = this._getViewIndexUpperBound(focus); if (focusedCellIndex >= 0) { this._revealInViewWithMinimalScrolling(focusedCellIndex); } focus.updateEditState(CellEditState.Editing, 'dbclick'); focus.focusMode = CellFocusMode.Editor; } })); </del> // update visibleRanges const updateVisibleRanges = () => { if (!this.view.length) {