Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --in my project, there are several extensions in our recommended , but vscode sneaks in recommendations that are not recommended by workspace, but by vscode itself: ! in this screenshot, the WSL extension is recommended by vscode, and the YAML extension is recommended by the workspace. you have to hover over the star icon to figure out which recommendations are actually relevant for this workspace. this makes it confusing for new developers who just want to install the extensions required for the workspace, and not random additional ones that vscode suggests. as a workaround, i can add these vscode recommendations to the array, but that's annoying because i would have to update that list whenever new recommendations show up.
VS Code shows workspace recommendations on the top followed by other recommendations. If you are not seeing in this order, can you please share the steps to reproduce?
i don't know if i could, since it seems to be some sort of recommendation algorithm that shows different results based on all sorts of unknown factors. (i feel like it'd be comparable to coming up with steps to reproduce an ad i saw in a social media feed.) but i'll give it a go
it seems that the docker and wsl extensions (ones made by microsoft) always appear above workspace recommendations. steps to reproduce: to the workspace recommended extensions a to trigger the non-workspace recommendation to the extensions tab and look at the recommended extensions list ! ! even if these were showing up in the correct order (workspace recommendations first), it's still extremely confusing and misleading to the user to use the exact same icon for two completely different types of recommendations. i get that microsoft wants to get as many people using their extensions as possible, but this seems comparable to an advertisement that is not clearly labelled as one.
I found out that there is a bug in showing them in the right order. Will fix that. I am not sure how much it makes sense to show different icons for different kinds of recommendations. It might be super noisy or confusing. I believe at present we have a right balance to show an icon for recommendation and explanation on hover.

Discussion:
// Get All types of recommendations, trimmed to show a max of 8 at any given time private async getAllRecommendationsModel(options: IQueryOptions, token: CancellationToken): Promise<IPagedModel<IExtension>> { <del> const local = (await this.extensionsWorkbenchService.queryLocal(this.options.server)).map(e => e.identifier.id.toLowerCase()); </del> <ins> const localExtensions = await this.extensionsWorkbenchService.queryLocal(this.options.server); const localExtensionIds = localExtensions.map(e => e.identifier.id.toLowerCase()); </ins> const allRecommendations = distinct( flatten(await Promise.all([

this.extensionRecommendationsService.getImportantRecommendations(), this.extensionRecommendationsService.getFileBasedRecommendations(), this.extensionRecommendationsService.getOtherRecommendations() <del> ])).filter(extensionId => !isString(extensionId) || !local.includes(extensionId.toLowerCase()))); </del> <ins> ])).filter(extensionId => { if (isString(extensionId)) { return !localExtensionIds.includes(extensionId.toLowerCase()); } return !localExtensions.some(localExtension => localExtension.local && this.uriIdentityService.extUri.isEqual(localExtension.local.location, extensionId)); })); </ins> const installableRecommendations = await this.getInstallableRecommendations(allRecommendations, { ...options, source: 'recommendations-all', sortBy: undefined }, token); <del> return new PagedModel(installableRecommendations.slice(0, 8)); </del> <ins> const result: IExtension[] = []; for (let i = 0; i < installableRecommendations.length && result.length < 8; i++) { const recommendation = allRecommendations[i]; if (isString(recommendation)) { const extension = installableRecommendations.find(extension => areSameExtensions(extension.identifier, { id: recommendation })); if (extension) { result.push(extension); } } else { const extension = installableRecommendations.find(extension => extension.resourceExtension && this.uriIdentityService.extUri.isEqual(extension.resourceExtension.location, recommendation)); if (extension) { result.push(extension); } } } return new PagedModel(result); </ins> } private async searchRecommendations(query: Query, options: IQueryOptions, token: CancellationToken): Promise<IPagedModel<IExtension>> {