diff --git a/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.ts b/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.ts index c79aa9c30cca7c..3047046e652232 100644 --- a/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.ts @@ -1523,6 +1523,13 @@ export class AICustomizationListWidget extends Disposable { break; case 'remote-client': label = localize('remoteClientGroupShort', "Local"); + if (this.currentSection === AICustomizationManagementSection.Skills) { + description = localize( + 'localSkillsGroupDescription', + "Skills stored on your local machine and synced to {0}, the active remote agent environment.", + this.harnessService.getActiveDescriptor().label, + ); + } break; default: label = formatDisplayName(key); diff --git a/src/vs/workbench/test/browser/componentFixtures/sessions/aiCustomizationManagementEditor.fixture.ts b/src/vs/workbench/test/browser/componentFixtures/sessions/aiCustomizationManagementEditor.fixture.ts index 9e190b023a0322..3adcf877df2673 100644 --- a/src/vs/workbench/test/browser/componentFixtures/sessions/aiCustomizationManagementEditor.fixture.ts +++ b/src/vs/workbench/test/browser/componentFixtures/sessions/aiCustomizationManagementEditor.fixture.ts @@ -168,7 +168,7 @@ function createMockAgentHostCustomizationService(mcpServers: readonly FixtureAge // item provider (bypassing the prompts-service discovery used by local // harnesses). Provide items and writable folders so the fixture exercises // the same discovery and migration availability as the real provider. -function createFixtureAgentHostItemProvider(files: readonly IFixtureFile[]): ICustomizationItemProvider { +function createFixtureAgentHostItemProvider(files: readonly IFixtureFile[], remoteClientSkillName?: string): ICustomizationItemProvider { return { onDidChange: Event.None, async provideChatSessionCustomizations(): Promise { @@ -178,7 +178,7 @@ function createFixtureAgentHostItemProvider(files: readonly IFixtureFile[]): ICu name: file.name ?? '', description: file.description, source: file.storage as AICustomizationSource, - groupKey: 'remote-host', + groupKey: file.type === PromptsType.skill && file.name === remoteClientSkillName ? 'remote-client' : 'remote-host', extensionId: file.extensionId, pluginUri: undefined, })); @@ -681,6 +681,8 @@ interface IRenderEditorOptions { readonly height?: number; readonly skillUIIntegrations?: ReadonlyMap; readonly activeSessionMcpServers?: readonly FixtureAgentHostMcpServer[]; + readonly agentHostFiles?: readonly IFixtureFile[]; + readonly remoteClientSkillName?: string; /** When true, simulates clicking the first list row to enter the embedded editor / detail view. */ readonly openFirstItem?: boolean; readonly openItemLabel?: string; @@ -767,7 +769,7 @@ async function renderEditor(ctx: ComponentFixtureContext, options: IRenderEditor icon: ThemeIcon.fromId(Codicon.server.id), hiddenSections: [AICustomizationManagementSection.Prompts], hideGenerateButton: true, - itemProvider: createFixtureAgentHostItemProvider(allFiles), + itemProvider: createFixtureAgentHostItemProvider(options.agentHostFiles ?? allFiles, options.remoteClientSkillName), }, ]; @@ -1886,6 +1888,9 @@ export default defineThemedFixtureGroup({ path: 'chat/aiCustomizations/' }, { render: ctx => renderEditor(ctx, { sessionResource: agentHostCopilotSessionResource, selectedSection: AICustomizationManagementSection.Skills, + agentHostFiles: allFiles.filter(file => file.type !== PromptsType.skill || file.name === 'Accessibility' || file.name === 'Code Review'), + remoteClientSkillName: 'Code Review', + height: 800, }), }),