Add support for .agents for skills resolution (#292428)

This commit is contained in:
Paul
2026-02-02 17:14:54 -08:00
committed by GitHub
parent fd454beca9
commit e72265635f
4 changed files with 39 additions and 1 deletions

View File

@@ -67,6 +67,8 @@ export enum PromptFileSource {
CopilotPersonal = 'copilot-personal',
ClaudePersonal = 'claude-personal',
ClaudeWorkspace = 'claude-workspace',
AgentsWorkspace = 'agents-workspace',
AgentsPersonal = 'agents-personal',
ConfigWorkspace = 'config-workspace',
ConfigPersonal = 'config-personal',
ExtensionContribution = 'extension-contribution',
@@ -114,8 +116,10 @@ export interface IResolvedPromptFile {
*/
export const DEFAULT_SKILL_SOURCE_FOLDERS: readonly IPromptSourceFolder[] = [
{ path: '.github/skills', source: PromptFileSource.GitHubWorkspace, storage: PromptsStorage.local },
{ path: '.agents/skills', source: PromptFileSource.AgentsWorkspace, storage: PromptsStorage.local },
{ path: '.claude/skills', source: PromptFileSource.ClaudeWorkspace, storage: PromptsStorage.local },
{ path: '~/.copilot/skills', source: PromptFileSource.CopilotPersonal, storage: PromptsStorage.user },
{ path: '~/.agents/skills', source: PromptFileSource.AgentsPersonal, storage: PromptsStorage.user },
{ path: '~/.claude/skills', source: PromptFileSource.ClaudePersonal, storage: PromptsStorage.user },
];

View File

@@ -792,6 +792,8 @@ export class PromptsService extends Disposable implements IPromptsService {
claudeWorkspace: number;
copilotPersonal: number;
githubWorkspace: number;
agentsPersonal: number;
agentsWorkspace: number;
configPersonal: number;
configWorkspace: number;
extensionContribution: number;
@@ -809,6 +811,8 @@ export class PromptsService extends Disposable implements IPromptsService {
claudeWorkspace: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of Claude workspace skills.' };
copilotPersonal: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of Copilot personal skills.' };
githubWorkspace: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of GitHub workspace skills.' };
agentsPersonal: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of .agents personal skills.' };
agentsWorkspace: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of .agents workspace skills.' };
configPersonal: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of custom configured personal skills.' };
configWorkspace: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of custom configured workspace skills.' };
extensionContribution: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of extension contributed skills.' };
@@ -828,6 +832,8 @@ export class PromptsService extends Disposable implements IPromptsService {
claudeWorkspace: skillsBySource.get(PromptFileSource.ClaudeWorkspace) ?? 0,
copilotPersonal: skillsBySource.get(PromptFileSource.CopilotPersonal) ?? 0,
githubWorkspace: skillsBySource.get(PromptFileSource.GitHubWorkspace) ?? 0,
agentsPersonal: skillsBySource.get(PromptFileSource.AgentsPersonal) ?? 0,
agentsWorkspace: skillsBySource.get(PromptFileSource.AgentsWorkspace) ?? 0,
configWorkspace: skillsBySource.get(PromptFileSource.ConfigWorkspace) ?? 0,
configPersonal: skillsBySource.get(PromptFileSource.ConfigPersonal) ?? 0,
extensionContribution: skillsBySource.get(PromptFileSource.ExtensionContribution) ?? 0,

View File

@@ -428,7 +428,7 @@ suite('PromptsConfig', () => {
test('empty object returns default skill folders', () => {
assert.deepStrictEqual(
getPaths(PromptsConfig.promptSourceFolders(createMock({}), PromptsType.skill)),
['.github/skills', '.claude/skills', '~/.copilot/skills', '~/.claude/skills'],
['.github/skills', '.agents/skills', '.claude/skills', '~/.copilot/skills', '~/.agents/skills', '~/.claude/skills'],
'Must return default skill folders.',
);
});
@@ -441,8 +441,10 @@ suite('PromptsConfig', () => {
}), PromptsType.skill)),
[
'.github/skills',
'.agents/skills',
'.claude/skills',
'~/.copilot/skills',
'~/.agents/skills',
'~/.claude/skills',
'/custom/skills',
'./local/skills',
@@ -458,8 +460,10 @@ suite('PromptsConfig', () => {
'/custom/skills': true,
}), PromptsType.skill)),
[
'.agents/skills',
'.claude/skills',
'~/.copilot/skills',
'~/.agents/skills',
'~/.claude/skills',
'/custom/skills',
],
@@ -471,8 +475,10 @@ suite('PromptsConfig', () => {
assert.deepStrictEqual(
getPaths(PromptsConfig.promptSourceFolders(createMock({
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
'/only/custom/skills': true,
}), PromptsType.skill)),
@@ -494,8 +500,10 @@ suite('PromptsConfig', () => {
}), PromptsType.skill)),
[
'.github/skills',
'.agents/skills',
'.claude/skills',
'~/.copilot/skills',
'~/.agents/skills',
'~/.claude/skills',
'/valid/skills',
'./another/valid',
@@ -508,15 +516,19 @@ suite('PromptsConfig', () => {
assert.deepStrictEqual(
getPaths(PromptsConfig.promptSourceFolders(createMock({
'.github/skills': true,
'.agents/skills': true,
'.claude/skills': true,
'~/.copilot/skills': true,
'~/.agents/skills': true,
'~/.claude/skills': true,
'/extra/skills': true,
}), PromptsType.skill)),
[
'.github/skills',
'.agents/skills',
'.claude/skills',
'~/.copilot/skills',
'~/.agents/skills',
'~/.claude/skills',
'/extra/skills',
],

View File

@@ -2629,8 +2629,10 @@ suite('PromptFilesLocator', () => {
'**/skills': true,
// disable defaults
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2652,8 +2654,10 @@ suite('PromptFilesLocator', () => {
'/absolute/path/skills': true,
// disable defaults
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2676,8 +2680,10 @@ suite('PromptFilesLocator', () => {
'custom/skills': true,
// disable defaults
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2702,8 +2708,10 @@ suite('PromptFilesLocator', () => {
'../shared-skills': true,
// disable defaults
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2727,8 +2735,10 @@ suite('PromptFilesLocator', () => {
'~/my-skills': true,
// disable defaults
'.github/skills': false,
'.agents/skills': false,
'.claude/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2755,7 +2765,9 @@ suite('PromptFilesLocator', () => {
'custom-skills': true,
// explicitly disable other defaults we don't want for this test
'.github/skills': false,
'.agents/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
[
@@ -2787,7 +2799,9 @@ suite('PromptFilesLocator', () => {
'/absolute/skills': true, // absolute - should be filtered out
// explicitly disable other defaults we don't want for this test
'.github/skills': false,
'.agents/skills': false,
'~/.copilot/skills': false,
'~/.agents/skills': false,
'~/.claude/skills': false,
},
['/Users/legomushroom/repos/vscode'],
@@ -2820,8 +2834,10 @@ suite('PromptFilesLocator', () => {
[
// defaults
'/Users/legomushroom/repos/vscode/.github/skills',
'/Users/legomushroom/repos/vscode/.agents/skills',
'/Users/legomushroom/repos/vscode/.claude/skills',
'/Users/legomushroom/.copilot/skills',
'/Users/legomushroom/.agents/skills',
'/Users/legomushroom/.claude/skills',
// custom
'/Users/legomushroom/repos/vscode/custom-skills',