mirror of
https://github.com/microsoft/vscode.git
synced 2026-10-01 20:03:17 +01:00
Separate the configuration migration settings again (#334546)
separate settings for chat customization migrations
This commit is contained in:
+3
-3
@@ -96,7 +96,7 @@ const promptFilesMigrationCategory: ICustomizationMigrationCategory = {
|
||||
id: CustomizationMigrationCategoryId.PromptFiles,
|
||||
migrationType: CustomizationMigrationType.PromptFiles,
|
||||
sourceTypes: [PromptsType.prompt],
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsMigrationEnabled,
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsPromptMigrationEnabled,
|
||||
shortcutLabel: localize('promptMigrationShortcutLabel', "Migrate Prompts"),
|
||||
shortcutTooltip: localize('promptMigrationShortcutTooltip', "Convert deprecated prompt files to skills"),
|
||||
cardLabel: localize('promptMigrationCardLabel', "Migrate Prompt Files"),
|
||||
@@ -234,7 +234,7 @@ const userDataMigrationCategory: ICustomizationMigrationCategory = {
|
||||
id: CustomizationMigrationCategoryId.UserData,
|
||||
migrationType: CustomizationMigrationType.UserData,
|
||||
sourceTypes: [PromptsType.agent, PromptsType.instructions],
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsMigrationEnabled,
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled,
|
||||
shortcutLabel: localize('userDataMigrationShortcutLabel', "Migrate User Data"),
|
||||
shortcutTooltip: localize('userDataMigrationShortcutTooltip', "Move user data agents and instructions to the active harness"),
|
||||
cardLabel: localize('userDataMigrationCardLabel', "Migrate User Data Customizations"),
|
||||
@@ -409,7 +409,7 @@ const configuredLocationsMigrationCategory: ICustomizationMigrationCategory = {
|
||||
id: CustomizationMigrationCategoryId.ConfiguredLocations,
|
||||
migrationType: CustomizationMigrationType.ConfiguredLocations,
|
||||
sourceTypes: [PromptsType.agent, PromptsType.instructions, PromptsType.skill],
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsMigrationEnabled,
|
||||
enablementSetting: ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled,
|
||||
configurationSettingIds: CONFIGURED_LOCATION_SETTING_IDS,
|
||||
shortcutLabel: localize('configuredLocationsMigrationShortcutLabel', "Migrate Location Settings"),
|
||||
shortcutTooltip: localize('configuredLocationsMigrationShortcutTooltip', "Move customizations from locations unsupported by the active harness"),
|
||||
|
||||
@@ -2509,12 +2509,24 @@ configurationRegistry.registerConfiguration({
|
||||
description: nls.localize('chat.customizations.structuredPreview.enabled', "Controls whether the Chat Customizations editor shows a structured preview for markdown customization files (agents, skills, instructions, prompts). When disabled, the editor always opens the raw markdown in the embedded code editor."),
|
||||
default: false,
|
||||
},
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: {
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: {
|
||||
type: 'boolean',
|
||||
tags: ['experimental'],
|
||||
description: nls.localize('chat.customizations.migration.enabled', "Controls whether the Chat Customizations editor offers to migrate customizations into formats and locations supported by the active agent-host harness. When disabled, migration cards and sidebar shortcuts are hidden."),
|
||||
description: nls.localize('chat.customizations.promptMigration.enabled', "Controls whether the Chat Customizations editor offers to convert prompt files into skills for agent-host harnesses, which ignore prompt files. When disabled, the migration card and sidebar shortcut are hidden."),
|
||||
default: true,
|
||||
},
|
||||
[ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled]: {
|
||||
type: 'boolean',
|
||||
tags: ['experimental'],
|
||||
description: nls.localize('chat.customizations.userDataMigration.enabled', "Controls whether the Chat Customizations editor offers to move agents and instructions stored in user data to the active agent-host harness, which ignores the user data location. When disabled, the migration card and sidebar shortcut are hidden."),
|
||||
default: false,
|
||||
},
|
||||
[ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled]: {
|
||||
type: 'boolean',
|
||||
tags: ['experimental'],
|
||||
description: nls.localize('chat.customizations.locationsMigration.enabled', "Controls whether the Chat Customizations editor offers to move agents, instructions, and skills from configured locations that are not supported by the active agent-host harness. When disabled, the migration card and sidebar shortcut are hidden."),
|
||||
default: false,
|
||||
},
|
||||
[ChatConfiguration.ChatCustomizationsMigrationHint]: {
|
||||
type: 'string',
|
||||
enum: [CustomizationMigrationHintMode.Never, CustomizationMigrationHintMode.Once, CustomizationMigrationHintMode.Always],
|
||||
|
||||
@@ -106,7 +106,9 @@ export enum ChatConfiguration {
|
||||
TitleBarOpenInAgentsWindowEnabled = 'chat.titleBar.openInAgentsWindow.enabled',
|
||||
|
||||
ChatCustomizationsStructuredPreviewEnabled = 'chat.customizations.structuredPreview.enabled',
|
||||
ChatCustomizationsMigrationEnabled = 'chat.customizations.migration.enabled',
|
||||
ChatCustomizationsPromptMigrationEnabled = 'chat.customizations.promptMigration.enabled',
|
||||
ChatCustomizationsUserDataMigrationEnabled = 'chat.customizations.userDataMigration.enabled',
|
||||
ChatCustomizationsLocationsMigrationEnabled = 'chat.customizations.locationsMigration.enabled',
|
||||
ChatCustomizationsMigrationHint = 'chat.customizations.migrationHint',
|
||||
AutopilotAdvancedEnabled = 'chat.autopilot.advanced.enabled',
|
||||
DefaultPermissionLevel = 'chat.permissions.default',
|
||||
|
||||
+20
-11
@@ -334,10 +334,12 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
editor.editorPreviewDisposables.dispose();
|
||||
});
|
||||
|
||||
test('gates all migration categories on the migration setting', () => {
|
||||
test('gates each migration category on its own experimental setting', () => {
|
||||
const welcomePageCalls: ICustomizationMigrationCategorySummary[][] = [];
|
||||
const configurationService = createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: false,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: false,
|
||||
[ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled]: false,
|
||||
[ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled]: false,
|
||||
}) as IConfigurationService & { setValue(key: string, value: unknown): void };
|
||||
const editor = createTestEditor(undefined, configurationService);
|
||||
editor.customizationsByMigrationCategory = new Map([
|
||||
@@ -365,12 +367,18 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
};
|
||||
|
||||
editor.refreshCustomizationMigrationUi();
|
||||
configurationService.setValue(ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled, true);
|
||||
editor.refreshCustomizationMigrationUi();
|
||||
configurationService.setValue(ChatConfiguration.ChatCustomizationsPromptMigrationEnabled, true);
|
||||
editor.refreshCustomizationMigrationUi();
|
||||
configurationService.setValue(ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled, true);
|
||||
configurationService.setValue('chat.agentFilesLocations', { '/workspace/custom-agents': true });
|
||||
configurationService.setValue(ChatConfiguration.ChatCustomizationsMigrationEnabled, true);
|
||||
editor.refreshCustomizationMigrationUi();
|
||||
|
||||
assert.deepStrictEqual(welcomePageCalls.map(categories => categories.map(category => category.id)), [
|
||||
[],
|
||||
[CustomizationMigrationCategoryId.UserData],
|
||||
[CustomizationMigrationCategoryId.PromptFiles, CustomizationMigrationCategoryId.UserData],
|
||||
[CustomizationMigrationCategoryId.PromptFiles, CustomizationMigrationCategoryId.UserData, CustomizationMigrationCategoryId.ConfiguredLocations],
|
||||
]);
|
||||
editor.editorPreviewDisposables.dispose();
|
||||
@@ -378,7 +386,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('tracks migration selection by URI and storage', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const sharedUri = URI.file('/home/user/shared.prompt.md');
|
||||
const workspacePrompt: MigratableConfiguration = {
|
||||
@@ -498,7 +506,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
const agentSettingId = 'chat.agentFilesLocations';
|
||||
const instructionsSettingId = 'chat.instructionsFilesLocations';
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled]: true,
|
||||
[agentSettingId]: { '/custom/agents': true },
|
||||
[instructionsSettingId]: { '/custom/instructions': true },
|
||||
}));
|
||||
@@ -600,7 +608,8 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('migration banners include destination consequences when applicable', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const userDataCustomizations = [
|
||||
{
|
||||
@@ -686,7 +695,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('opens a migration candidate through the shared Button widget', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const promptFile: MigratableConfiguration = {
|
||||
uri: URI.file('/workspace/.github/prompts/review.prompt.md'),
|
||||
@@ -737,7 +746,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('virtualized migration rows keep checkbox selection and keyboard traversal aligned', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const promptFiles = Array.from({ length: 6 }, (_, index): MigratableConfiguration => ({
|
||||
uri: URI.file(`/workspace/.github/prompts/workspace-${index}.prompt.md`),
|
||||
@@ -782,7 +791,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('group migration selection retains keyboard focus', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const promptFiles = [
|
||||
{
|
||||
@@ -868,7 +877,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('customization migration groups render as flat source sections', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const promptFiles = [
|
||||
{
|
||||
@@ -934,7 +943,7 @@ suite('aiCustomizationManagementEditor', () => {
|
||||
|
||||
test('unchecking every item in a migration group unchecks the group checkbox', () => {
|
||||
const editor = createTestEditor(undefined, createConfigurationServiceStub({
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
}));
|
||||
const promptFiles = [
|
||||
{
|
||||
|
||||
+3
-1
@@ -781,7 +781,9 @@ async function renderEditor(ctx: ComponentFixtureContext, options: IRenderEditor
|
||||
// screenshot fixtures that depend on agent-host harnesses.
|
||||
reg.defineInstance(IConfigurationService, new TestConfigurationService({
|
||||
[ChatConfiguration.ChatCustomizationsStructuredPreviewEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsPromptMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsUserDataMigrationEnabled]: true,
|
||||
[ChatConfiguration.ChatCustomizationsLocationsMigrationEnabled]: true,
|
||||
...options.configuration,
|
||||
}));
|
||||
reg.define(IListService, ListService);
|
||||
|
||||
Reference in New Issue
Block a user