jiebi/CodeConvo huggingface dataset:
private async addOrUpdateAccount(providerId: string, account: AuthenticationSessionAccount): Promise<void> { let accounts = this.groupedAccounts.get(providerId); <del> if (accounts) { const existingAccount = accounts.find(a => a.id === account.id); if (existingAccount) { // Update the label if it has changed if (existingAccount.label !== account.label) { existingAccount.label = account.label; } return; } } else { </del> <ins> if (!accounts) { </ins> accounts = []; this.groupedAccounts.set(providerId, accounts); } const sessionFromEmbedder = await this.sessionFromEmbedder.value; <del> // If the session stored from the embedder allows sign out, then we can treat it and all others as sign out-able let canSignOut = !!sessionFromEmbedder?.canSignOut; if (!canSignOut) { if (sessionFromEmbedder?.id) { const sessions = (await this.authenticationService.getSessions(providerId)).filter(s => s.account.id === account.id); canSignOut = !sessions.some(s => s.id === sessionFromEmbedder.id); } else { // The default if we don't have a session from the embedder is to allow sign out canSignOut = true; } </del> <ins> let canSignOut = true; if ( sessionFromEmbedder												// if we have a session from the embedder && !sessionFromEmbedder.canSignOut								// and that session says we can't sign out && (await this.authenticationService.getSessions(providerId))	// and that session is associated with the account we are adding/updating .some(s => s.id === sessionFromEmbedder.id && s.account.id === account.id ) ) { canSignOut = false; </ins> } <del> accounts.push({ ...account, canSignOut }); </del> <ins> const existingAccount = accounts.find(a => a.label === account.label); if (existingAccount) { // if we have an existing account and we discover that we // can't sign out of it, update the account to mark it as "can't sign out" if (!canSignOut) { existingAccount.canSignOut = canSignOut; } } else { accounts.push({ ...account, canSignOut }); } </ins> } private removeAccount(providerId: string, account: AuthenticationSessionAccount): void {
"ts-loader": "^9.4.2", "ts-node": "^10.9.1", "tsec": "0.1.4", <del> "typescript": "^5.2.0-dev.20230524", </del> <ins> "typescript": "^5.2.0-dev.20230602", </ins> "typescript-formatter": "7.1.0", "underscore": "^1.12.1", "util": "^0.12.4",
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== <del> typescript@^5.2.0-dev.20230524: version "5.2.0-dev.20230524" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.0-dev.20230524.tgz#c2714b82f5ef8c63328a253692ae0b8c244c86d6" integrity sha512-1XzSUJCt31jm7jIZ3vBKzK46ZxnmqX2VdVg/dur9AIaz9WmidrABs7F8H8d4onpIV8RYD/L6xW6MXR5EHjl+LA== </del> <ins> typescript@^5.2.0-dev.20230602: version "5.2.0-dev.20230602" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.0-dev.20230602.tgz#01e2055aa8d8bde4431947c0c048c07c23cc6027" integrity sha512-LenKdxmkwzZRmEKzShAq83TvEuvCGR8pCYBe0VpUTuJ7NMSK4r2yV2GTmJrSqtk8IoJAmc+PfymMQIfwX1JGQQ== </ins> typical@^4.0.0: version "4.0.0"
get title(): string { const firstRequestMessage = this._requests[0]?.message; <del> if (typeof firstRequestMessage === 'string') { return firstRequestMessage; } else if (firstRequestMessage) { return firstRequestMessage.message; } else { return ''; } </del> <ins> const message = typeof firstRequestMessage === 'string' ? firstRequestMessage : firstRequestMessage?.message ?? ''; return message.split('n')[0].substring(0, 50); </ins> } constructor(
const model = this.model.read(reader); const suggestion = model?.selectedInlineCompletion.read(reader); const ghostText = model?.ghostText.read(reader); <del> const selectedSuggestItem = model?.selectedSuggestItem.read(reader); this.inlineCompletionVisible.set(selectedSuggestItem === undefined && ghostText !== undefined && !ghostText.isEmpty()); </del> <ins> this.inlineCompletionVisible.set(ghostText !== undefined && !ghostText.isEmpty()); </ins> if (ghostText && suggestion) { this.suppressSuggestions.set(suggestion.inlineCompletion.source.inlineCompletions.suppressSuggestions);
*--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; <ins> import { Lazy } from 'vs/base/common/lazy'; </ins> import { IDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService';
export class LivePreviewStrategy extends LiveStrategy { <del> private readonly _diffZone: InlineChatLivePreviewWidget; private readonly _previewZone: InlineChatFileCreatePreviewWidget; </del> <ins> private readonly _diffZone: Lazy<InlineChatLivePreviewWidget>; private readonly _previewZone: Lazy<InlineChatFileCreatePreviewWidget>; </ins> constructor( session: Session,
) { super(session, editor, widget, contextKeyService, storageService, bulkEditService, editorWorkerService, instaService); <del> this._diffZone = instaService.createInstance(InlineChatLivePreviewWidget, editor, session); this._previewZone = instaService.createInstance(InlineChatFileCreatePreviewWidget, editor); </del> <ins> this._diffZone = new Lazy(() => instaService.createInstance(InlineChatLivePreviewWidget, editor, session)); this._previewZone = new Lazy(() => instaService.createInstance(InlineChatFileCreatePreviewWidget, editor)); </ins> } override dispose(): void { <del> this._diffZone.hide(); this._diffZone.dispose(); this._previewZone.hide(); this._previewZone.dispose(); </del> <ins> this._diffZone.rawValue?.hide(); this._diffZone.rawValue?.dispose(); this._previewZone.rawValue?.hide(); this._previewZone.rawValue?.dispose(); </ins> super.dispose(); }
this._updateSummaryMessage(); if (this._diffEnabled) { <del> this._diffZone.show(); </del> <ins> this._diffZone.value.show(); </ins> } if (response.singleCreateFileEdit) { <del> this._previewZone.showCreation(this._session.wholeRange.value, response.singleCreateFileEdit.uri, await Promise.all(response.singleCreateFileEdit.edits)); </del> <ins> this._previewZone.value.showCreation(this._session.wholeRange.value, response.singleCreateFileEdit.uri, await Promise.all(response.singleCreateFileEdit.edits)); </ins> } else { <del> this._previewZone.hide(); </del> <ins> this._previewZone.value.hide(); </ins> } } override async undoChanges(response: EditResponse): Promise<void> { <del> this._diffZone.lockToDiff(); </del> <ins> this._diffZone.value.lockToDiff(); </ins> super.undoChanges(response); } protected override _doToggleDiff(): void { const scrollState = StableEditorScrollState.capture(this._editor); if (this._diffEnabled) { <del> this._diffZone.show(); </del> <ins> this._diffZone.value.show(); </ins> } else { <del> this._diffZone.hide(); </del> <ins> this._diffZone.value.hide(); </ins> } scrollState.restore(this._editor); } override hasFocus(): boolean { <del> return super.hasFocus() || this._diffZone.hasFocus() || this._previewZone.hasFocus(); </del> <ins> return super.hasFocus() || this._diffZone.value.hasFocus() || this._previewZone.value.hasFocus(); </ins> } }
async getLocalExtensions(profile: IUserDataProfile): Promise<IProfileExtension[]> { return this.withProfileScopedServices(profile, async (extensionEnablementService) => { <del> const result: Array<IProfileExtension & { displayName?: string }> = []; </del> <ins> const result = new Map<string, IProfileExtension & { displayName?: string }>(); </ins> const installedExtensions = await this.extensionManagementService.getInstalled(undefined, profile.extensionsResource); const disabledExtensions = extensionEnablementService.getDisabledExtensions(); for (const extension of installedExtensions) {
} private _layout(): void { <del> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> const { fontSize, lineHeight } = this._editor.getOption(EditorOption.fontInfo); const contentsDomNode = this._hover.contentsDomNode; contentsDomNode.style.fontSize = `${fontSize}px`; contentsDomNode.style.lineHeight = `${lineHeight / fontSize}`; <del> this._setContentsDomNodeMaxDimensions(Math.max(this._editor.getLayoutInfo().width * 0.66, 500), height); </del> <ins> this._setContentsDomNodeMaxDimensions(width, height); </ins> } private _updateFont(): void {
} private _updateContentsDomNodeMaxDimensions() { <del> const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500); const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> this._setContentsDomNodeMaxDimensions(width, height); }
} const originalProfile = this.userDataProfileService.currentProfile; <del> await this.userDataProfileImportExportService.createTemporaryProfile(this.userDataProfileService.currentProfile, localize('troubleshoot issue', "Troubleshoot Issue"), true); </del> <ins> await this.userDataProfileImportExportService.createTroubleshootProfile(); </ins> this.state = new TroubleShootState(TroubleshootStage.EXTENSIONS, originalProfile.id); await this.resume(); }
} } <del> async createTemporaryProfile(profile: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, profile, extensionsDisabled); </del> <ins> async createTroubleshootProfile(): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, true); </ins> try { <del> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(name, undefined); await this.importAndSwitch(profileTemplate, true, true, extensionsDisabled, localize('import', "Create Profile")); </del> <ins> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(localize('troubleshoot issue', "Troubleshoot Issue"), undefined); await this.progressService.withProgress({ location: ProgressLocation.Notification, delay: 1000, sticky: true, }, progress => this.importAndSwitchWithProgress(profileTemplate, true, true, true, message => progress.report({ message: localize('troubleshoot profile progress', "Setting up Troubleshoot Profile: {0}", message) }))); </ins> } finally { userDataProfilesExportState.dispose(); }
importProfile(uri: URI, options?: IProfileImportOptions): Promise<void>; showProfileContents(): Promise<void>; createFromCurrentProfile(name: string): Promise<void>; <del> createTemporaryProfile(from: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void>; </del> <ins> createTroubleshootProfile(): Promise<void>; </ins> setProfile(profile: IUserDataProfileTemplate): Promise<void>; }
return markdownTooltip; } <del> private async installAndRunStartCommand(metadata: RemoteExtensionMetadata) { const extensionId = metadata.id; </del> <ins> private async installExtension(extensionId: string) { </ins> const galleryExtension = (await this.extensionGalleryService.getExtensions([{ id: extensionId }], CancellationToken.None))[0]; await this.extensionManagementService.installFromGallery(galleryExtension, {
donotIncludePackAndDependencies: false, context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } }); <ins> } private async runRemoteStartCommand(extensionId: string, startCommand: string) { // check to ensure the extension is installed </ins> await retry(async () => { <del> const ext = await this.extensionService.getExtension(metadata.id); </del> <ins> const ext = await this.extensionService.getExtension(extensionId); </ins> if (!ext) { throw Error('Failed to find installed remote extension'); } return ext; }, 300, 10); <del> this.commandService.executeCommand(metadata.startCommand); </del> <ins> this.commandService.executeCommand(startCommand); </ins> this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', { id: 'remoteInstallAndRun', detail: extensionId,
quickPick.items = []; quickPick.busy = true; quickPick.placeholder = nls.localize('remote.startActions.installingExtension', 'Installing extension... '); <del> await this.installAndRunStartCommand(remoteExtension); </del> <ins> await this.installExtension(remoteExtension.id); quickPick.hide(); await this.runRemoteStartCommand(remoteExtension.id, remoteExtension.startCommand); </ins> } else { this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', {
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { AriaRole } from 'vs/base/browser/ui/aria/aria'; import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; <del> import { IHoverWidget } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; </del> <ins> import { IHoverDelegate, IHoverWidget } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; </ins> import { IconLabel, IIconLabelValueOptions } from 'vs/base/browser/ui/iconLabel/iconLabel'; import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
const row2 = dom.append(rows, $('.quick-input-list-row')); // Label <del> data.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true }); </del> <ins> data.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate }); </ins> data.toDisposeTemplate.push(data.label); data.icon = <HTMLInputElement>dom.prepend(data.label.element, $('.quick-input-list-icon'));
// Detail const detailContainer = dom.append(row2, $('.quick-input-list-label-meta')); <del> data.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true }); </del> <ins> data.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate }); </ins> data.toDisposeTemplate.push(data.detail); // Separator data.separator = dom.append(data.entry, $('.quick-input-list-separator')); // Actions <del> data.actionBar = new ActionBar(data.entry); </del> <ins> data.actionBar = new ActionBar(data.entry, this.hoverDelegate ? { hoverDelegate: this.hoverDelegate } : undefined); </ins> data.actionBar.domNode.classList.add('quick-input-list-entry-action-bar'); data.toDisposeTemplate.push(data.actionBar);
// Label const options: IIconLabelValueOptions = { matches: labelHighlights || [], <del> descriptionTitle: element.saneDescription, </del> <ins> // If we have a tooltip, we want that to be shown and not any other hover descriptionTitle: element.saneTooltip ? undefined : element.saneDescription, </ins> descriptionMatches: descriptionHighlights || [], labelEscapeNewLines: true };
data.detail.element.style.display = ''; data.detail.setLabel(element.saneDetail, undefined, { matches: detailHighlights, <del> title: element.saneDetail, </del> <ins> // If we have a tooltip, we want that to be shown and not any other hover title: element.saneTooltip ? undefined : element.saneDetail, </ins> labelEscapeNewLines: true }); } else {
this.container = dom.append(this.parent, $('.quick-input-list')); const delegate = new ListElementDelegate(); const accessibilityProvider = new QuickInputAccessibilityProvider(); <del> this.list = options.createList('QuickInput', this.container, delegate, [new ListElementRenderer(themeService)], { </del> <ins> this.list = options.createList('QuickInput', this.container, delegate, [new ListElementRenderer(themeService, options.hoverDelegate)], { </ins> identityProvider: { getId: element => { // always prefer item over separator because if item is defined, it must be the main item type
async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) { try { <del> const permalink = await getLink(gitAPI, useSelection, getVscodeDevHost(), 'headlink', context, includeRange); </del> <ins> const permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange); </ins> if (permalink) { return vscode.env.clipboard.writeText(permalink); }
async function openVscodeDevLink(gitAPI: GitAPI): Promise<vscode.Uri | undefined> { try { <del> const headlink = await getLink(gitAPI, true, getVscodeDevHost(), 'headlink'); </del> <ins> const headlink = await getLink(gitAPI, true, false, getVscodeDevHost(), 'headlink'); </ins> return headlink ? vscode.Uri.parse(headlink) : undefined; } catch (err) { if (!(err instanceof vscode.CancellationError)) {
return path.split('/').map((segment) => encodeURIComponent(segment)).join('/'); } <del> export async function getLink(gitAPI: GitAPI, useSelection: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise<string | undefined> { </del> <ins> export async function getLink(gitAPI: GitAPI, useSelection: boolean, shouldEnsurePublished: boolean, hostPrefix?: string, linkType: 'permalink' | 'headlink' = 'permalink', context?: LinkContext, useRange?: boolean): Promise<string | undefined> { </ins> hostPrefix = hostPrefix ?? 'https://github.com'; const fileAndPosition = getFileAndPosition(context); if (!fileAndPosition) {
const data = this.editorTransfer.getData(DraggedEditorIdentifier.prototype); if (Array.isArray(data)) { const draggedEditor = data[0].identifier; <del> const targetGroup = ensureTargetGroup(); </del> const sourceGroup = this.accessor.getGroup(draggedEditor.groupId); if (sourceGroup) { <del> if (sourceGroup === targetGroup) { return; </del> <ins> const copyEditor = this.isCopyOperation(event, draggedEditor); let targetGroup: IEditorGroupView | undefined = undefined; // Optimization: if we move the last editor of an editor group // and we are configured to close empty editor groups, we can // rather move the entire editor group according to the direction if (this.editorGroupService.partOptions.closeEmptyGroups && sourceGroup.count === 1 && typeof splitDirection === 'number' && !copyEditor) { targetGroup = this.accessor.moveGroup(sourceGroup, this.groupView, splitDirection); </ins> } <del> // Open in target group const options = fillActiveEditorViewState(sourceGroup, draggedEditor.editor, { pinned: true,										// always pin dropped editor sticky: sourceGroup.isSticky(draggedEditor.editor),	// preserve sticky state }); </del> <ins> // In any other case do a normal move/copy operation else { targetGroup = ensureTargetGroup(); if (sourceGroup === targetGroup) { return; } </ins> <del> const copyEditor = this.isCopyOperation(event, draggedEditor); if (!copyEditor) { sourceGroup.moveEditor(draggedEditor.editor, targetGroup, options); } else { sourceGroup.copyEditor(draggedEditor.editor, targetGroup, options); </del> <ins> // Open in target group const options = fillActiveEditorViewState(sourceGroup, draggedEditor.editor, { pinned: true,										// always pin dropped editor sticky: sourceGroup.isSticky(draggedEditor.editor),	// preserve sticky state }); if (!copyEditor) { sourceGroup.moveEditor(draggedEditor.editor, targetGroup, options); } else { sourceGroup.copyEditor(draggedEditor.editor, targetGroup, options); } </ins> } // Ensure target has focus
"jschardet": "3.0.0", "keytar": "7.9.0", "minimist": "^1.2.6", <del> "native-is-elevated": "0.6.0", </del> <ins> "native-is-elevated": "0.7.0", </ins> "native-keymap": "^3.3.2", "native-watchdog": "^1.4.1", "node-pty": "1.1.0-beta1",
resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== <del> native-is-elevated@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/native-is-elevated/-/native-is-elevated-0.6.0.tgz#9fd9c9c53bfd87d6e6af15a5d6bcb8e592b7ec79" integrity sha512-HW1wDo4WYZC7W68kaS0cs7FtDTrcFoAY1APc4SlU4Un/FuL7pjilXFEteBCA58EWClKk0912JLIoekOJ/NohnQ== </del> <ins> native-is-elevated@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/native-is-elevated/-/native-is-elevated-0.7.0.tgz#77499639e232edad1886403969e2bf236294e7af" integrity sha512-tp8hUqK7vexBiyIWKMvmRxdG6kqUtO+3eay9iB0i16NYgvCqE5wMe1Y0guHilpkmRgvVXEWNW4et1+qqcwpLBA== </ins> native-keymap@^3.3.2: version "3.3.3"
import * as dom from 'vs/base/browser/dom'; import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; <del> import { equals } from 'vs/base/common/arrays'; </del> import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import 'vs/css!./stickyScroll'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser';
readonly lineNumbers: number[], readonly lastLineRelativePosition: number ) { } <del> public equals(other: StickyScrollWidgetState | undefined): boolean { return !!other && this.lastLineRelativePosition === other.lastLineRelativePosition && equals(this.lineNumbers, other.lineNumbers); } </del> } const _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });
private _onDidChangeTaskSystemInfo: Emitter<void> = new Emitter(); private _willRestart: boolean = false; public onDidChangeTaskSystemInfo: Event<void> = this._onDidChangeTaskSystemInfo.event; <ins> private _onDidReconnectToTasks: Emitter<void> = new Emitter(); public onDidReconnectToTasks: Event<void> = this._onDidReconnectToTasks.event; </ins> constructor( @IConfigurationService private readonly _configurationService: IConfigurationService,
} if (executeResult.kind === TaskExecuteKind.Active) { const active = executeResult.active; <ins> if (active && active.same && runSource === TaskRunSource.FolderOpen) { // ignore, the task is already active, likely from being reconnected. this._logService.debug('Ignoring task that is already active', executeResult.task); return executeResult.promise; } </ins> if (active && active.same) { if (this._taskSystem?.isTaskVisible(executeResult.task)) { const message = nls.localize('TaskSystem.activeSame.noBackground', 'The task '{0}' is already active.', executeResult.task.getQualifiedLabel());
@IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService, @ILogService private readonly _logService: ILogService) { super(); <del> if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { this._tryRunTasks(); } </del> <ins> this._taskService.onDidReconnectToTasks((() => { if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { this._tryRunTasks(); } })); </ins> this._register(this._workspaceTrustManagementService.onDidChangeTrust(async trusted => { if (trusted) { await this._tryRunTasks();
*--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; <del> import { Emitter } from 'vs/base/common/event'; </del> <ins> import { Emitter, Event } from 'vs/base/common/event'; </ins> import { ISettableObservable, autorun, derived, ITransaction, observableFromEvent, observableValue, transaction, keepAlive } from 'vs/base/common/observable'; import { BaseObservable, IObservable, IObserver } from 'vs/base/common/observableImpl/base';