src/vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution.ts/RemoteTunnelWorkbenchContribution/recommendRemoteExtensionIfNeeded
class RemoteTunnelWorkbenchContribution:	private async recommendRemoteExtensionIfNeeded() {
		const remoteExtension = this.serverConfiguration.extension;
		const shouldRecommend = async () => {
			if (this.storageService.getBoolean(REMOTE_TUNNEL_EXTENSION_RECOMMENDED_KEY, StorageScope.APPLICATION)) {
				return false;
			}
			if (await this.extensionService.getExtension(remoteExtension.extensionId)) {
				return false;
			}
			const usedOnHost = this.storageService.get(REMOTE_TUNNEL_USED_STORAGE_KEY, StorageScope.APPLICATION);
			if (!usedOnHost) {
				return false;
			}
			const currentHostName = await this.remoteTunnelService.getHostName();
			if (!currentHostName || currentHostName === usedOnHost) {
				return false;
			}
			return usedOnHost;
		};
		const recommed = async () => {
			const usedOnHost = await shouldRecommend();
			if (!usedOnHost) {
				return false;
			}
			this.notificationService.notify({
				severity: Severity.Info,
				message:
					localize(
						{
							key: 'recommend.remoteExtension',
							comment: ['{0} will be a host name, {1} will the link address to the web UI, {6} an extension name. [label](command:commandId) is a markdown link. Only translate the label, do not modify the format']
						},
						"'{0}' has turned on remote access. The {1} extension can be used to connect to it.",
						usedOnHost, remoteExtension.friendlyName
					),
				actions: {
					primary: [
						new Action('showExtension', localize('action.showExtension', "Show Extension"), undefined, true, () => {
							return this.commandService.executeCommand('workbench.extensions.action.showExtensionsWithIds', [remoteExtension.extensionId]);
						}),
						new Action('doNotShowAgain', localize('action.doNotShowAgain', "Do not show again"), undefined, true, () => {
							this.storageService.store(REMOTE_TUNNEL_EXTENSION_RECOMMENDED_KEY, true, StorageScope.APPLICATION, StorageTarget.USER);
						}),
					]
				}
			});
			return true;
		};
		if (await shouldRecommend()) {
			const storageListener = this.storageService.onDidChangeValue(async e => {
				if (e.key === REMOTE_TUNNEL_USED_STORAGE_KEY) {
					const success = await recommed();
					if (success) {
						storageListener.dispose();
					}

				}
			});
		}
	}