Path: blob/main/extensions/copilot/src/extension/chatSessions/copilotcli/node/copilotCLISkills.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import type { Uri } from 'vscode';6import { IConfigurationService } from '../../../../platform/configuration/common/configurationService';7import { INativeEnvService } from '../../../../platform/env/common/envService';8import { ILogService } from '../../../../platform/log/common/logService';9import { IWorkspaceService } from '../../../../platform/workspace/common/workspaceService';10import { createServiceIdentifier } from '../../../../util/common/services';11import { Disposable } from '../../../../util/vs/base/common/lifecycle';12import { ResourceSet } from '../../../../util/vs/base/common/map';13import { Schemas } from '../../../../util/vs/base/common/network';14import { dirname } from '../../../../util/vs/base/common/resources';15import { IInstantiationService } from '../../../../util/vs/platform/instantiation/common/instantiation';16import { IPromptsService } from '../../../../platform/promptFiles/common/promptsService';17import { CancellationToken } from '../../../../util/vs/base/common/cancellation';18import { isEnabledForCopilotCLI } from './copilotCli';19import { resolveSkillConfigLocations } from '../../common/skillConfigLocations';2021export interface ICopilotCLISkills {22readonly _serviceBrand: undefined;23getSkillsLocations(token: CancellationToken): Promise<Uri[]>;24}2526export const ICopilotCLISkills = createServiceIdentifier<ICopilotCLISkills>('ICopilotCLISkills');2728export class CopilotCLISkills extends Disposable implements ICopilotCLISkills {29declare _serviceBrand: undefined;30constructor(31@ILogService protected readonly logService: ILogService,32@IInstantiationService protected readonly instantiationService: IInstantiationService,33@IConfigurationService private readonly configurationService: IConfigurationService,34@INativeEnvService private readonly envService: INativeEnvService,35@IWorkspaceService private readonly workspaceService: IWorkspaceService,36@IPromptsService private readonly promptsService: IPromptsService,37) {38super();39}4041public async getSkillsLocations(token: CancellationToken): Promise<Uri[]> {42const configSkillLocationUris = new ResourceSet();43for (const uri of resolveSkillConfigLocations(this.configurationService, this.envService, this.workspaceService)) {44configSkillLocationUris.add(uri);45}46(await this.promptsService.getSkills(token))47.filter(isEnabledForCopilotCLI)48.filter(s => s.uri.scheme === Schemas.file)49.map(s => s.uri)50.map(uri => dirname(dirname(uri)))51.forEach(uri => configSkillLocationUris.add(uri));5253return Array.from(configSkillLocationUris);54}55}565758