1
>
/*---------------------------------------------------------------------------------------------
promptFilesLocator.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { URI } from '../../../../../../base/common/uri.js';
7
>
import { isAbsolute } from '../../../../../../base/common/path.js';
8
>
import { ResourceSet } from '../../../../../../base/common/map.js';
9
>
import * as nls from '../../../../../../nls.js';
10
>
import { FileOperation, FileOperationError, FileOperationResult, IFileService } from '../../../../../../platform/files/common/files.js';
11
>
import { getPromptFileLocationsConfigKey, isTildePath, PromptsConfig } from '../config/config.js';
12
>
import { basename, dirname, isEqual, isEqualOrParent, joinPath } from '../../../../../../base/common/resources.js';
13
>
import { IWorkspaceContextService, IWorkspaceFolder } from '../../../../../../platform/workspace/common/workspace.js';
14
>
import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js';
15
>
import { AGENTS_SOURCE_FOLDER, CLAUDE_CONFIG_FOLDER, COPILOT_CONFIG_FOLDER, GITHUB_CONFIG_FOLDER, getPromptFileExtension, getPromptFileType, LEGACY_MODE_FILE_EXTENSION, getCleanPromptName, AGENT_FILE_EXTENSION, getPromptFileDefaultLocations, SKILL_FILENAME, IPromptSourceFolder, IResolvedPromptSourceFolder } from '../config/promptFileLocations.js';
16
>
import { PromptFileSource, PromptsType } from '../promptTypes.js';
17
>
import { IWorkbenchEnvironmentService } from '../../../../../services/environment/common/environmentService.js';
18
>
import { Schemas } from '../../../../../../base/common/network.js';
19
>
import { getExcludes, IFileQuery, ISearchConfiguration, ISearchService, QueryType } from '../../../../../services/search/common/search.js';
20
>
import { CancellationToken, CancellationTokenSource } from '../../../../../../base/common/cancellation.js';
21
>
import { isCancellationError } from '../../../../../../base/common/errors.js';
22
>
import { AgentInstructionFileType, IPromptPath, IAgentInstructionFile, Logger, PromptsStorage } from '../service/promptsService.js';
23
>
import { IUserDataProfileService } from '../../../../../services/userDataProfile/common/userDataProfile.js';
24
>
import { Emitter, Event } from '../../../../../../base/common/event.js';
25
>
import { DisposableStore, toDisposable } from '../../../../../../base/common/lifecycle.js';
26
>
import { ILogService } from '../../../../../../platform/log/common/log.js';
27
>
import { IPathService } from '../../../../../services/path/common/pathService.js';
28
>
import { equalsIgnoreCase } from '../../../../../../base/common/strings.js';
29
>
import { IWorkspaceTrustManagementService } from '../../../../../../platform/workspace/common/workspaceTrust.js';
30
>
import { AGENT_HOST_SCHEME } from '../../../../../../platform/agentHost/common/agentHostUri.js';
31
>
32
>
/**
33
>
* Maximum recursion depth when traversing subdirectories for instruction files.
34
>
*/
35
>
const MAX_INSTRUCTIONS_RECURSION_DEPTH = 5;
36
>
37
>
export interface IWorkspaceInstructionFile {
38
>
readonly fileName: string;
39
>
readonly type: AgentInstructionFileType;
40
>
}
41
>
42
>
/**
43
>
* Utility class to locate prompt files.
44
>
*/
45
>
export class PromptFilesLocator {
46
>
47
>
private readonly userDataFolder: IResolvedPromptSourceFolder;
48
>
49
>
constructor(
50
@IFileService private readonly fileService: IFileService,
51
@IConfigurationService private readonly configService: IConfigurationService,