Skip to content

Commit ca9d384

Browse files
committed
Rename the 'presets' configuration setting to 'chatPresetsForEditContext' and implement a migration for existing users
1 parent b46b9c3 commit ca9d384

17 files changed

Lines changed: 118 additions & 26 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ Generate meaningful commit messages precisely adhering to your preferred style.
119119

120120
- `Code Web Chat: Ignored Extensions` - List of file extensions to ignore in the context.
121121

122-
- `Code Web Chat: Presets` - Conveniently edit chat presets as they're stored in JSON.
122+
- `Code Web Chat: Chat Presets For Edit Context` - Conveniently edit chat presets as they're stored in JSON.
123123

124124
## <span style="background-color: #fbb100; color: black; padding: 0.2em 0.6em; border-radius: 999px">Community</span>
125125

packages/vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@
600600
"description": "Style instructions for chat responses when using diff format.",
601601
"default": "Whenever proposing a file use the markdown code block syntax. Each code block should be a diff patch."
602602
},
603-
"codeWebChat.presets": {
603+
"codeWebChat.chatPresetsForEditContext": {
604604
"type": "array",
605605
"default": [
606606
{

packages/vscode/src/commands/chat-commands.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,10 @@ export function chat_using_command(
230230
if (!instructions) return
231231

232232
const config = vscode.workspace.getConfiguration('codeWebChat')
233-
const web_chat_presets = config.get<ConfigPresetFormat[]>('presets', [])
233+
const web_chat_presets = config.get<ConfigPresetFormat[]>(
234+
'chatPresetsForEditContext',
235+
[]
236+
)
234237

235238
const preset_quick_pick_items = web_chat_presets
236239
.filter((preset) => CHATBOTS[preset.chatbot])
@@ -278,15 +281,18 @@ export function chat_command(
278281
}
279282

280283
const config = vscode.workspace.getConfiguration('codeWebChat')
281-
const web_chat_presets = config.get<ConfigPresetFormat[]>('presets', [])
284+
const chat_presets = config.get<ConfigPresetFormat[]>(
285+
'chatPresetsForEditContext',
286+
[]
287+
)
282288

283289
let selected_names = context.globalState.get<string[]>(
284290
'selectedPresets',
285291
[]
286292
)
287293

288294
if (!selected_names.length) {
289-
const preset_quick_pick_items = web_chat_presets
295+
const preset_quick_pick_items = chat_presets
290296
.filter((preset) => CHATBOTS[preset.chatbot])
291297
.map((preset) => ({
292298
label: preset.name,

packages/vscode/src/commands/code-completion-in-chat-commands.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,10 @@ export function code_completion_in_chat_with_command(
118118
'codeWebChat.codeCompletionInChatUsing',
119119
async () => {
120120
const config = vscode.workspace.getConfiguration('codeWebChat')
121-
const all_presets = config.get<ConfigPresetFormat[]>('presets', [])
121+
const all_presets = config.get<ConfigPresetFormat[]>(
122+
'chatPresetsForEditContext',
123+
[]
124+
)
122125
const presets = filter_presets_with_affixes(all_presets)
123126

124127
if (presets.length == 0) {
@@ -170,7 +173,10 @@ export function code_completion_in_chat_command(
170173
'codeWebChat.codeCompletionInChat',
171174
async () => {
172175
const config = vscode.workspace.getConfiguration('codeWebChat')
173-
const all_presets = config.get<ConfigPresetFormat[]>('presets', [])
176+
const all_presets = config.get<ConfigPresetFormat[]>(
177+
'chatPresetsForEditContext',
178+
[]
179+
)
174180
const presets = filter_presets_with_affixes(all_presets)
175181

176182
if (presets.length == 0) {

packages/vscode/src/extension.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
migrate_api_providers_to_secret_storage,
99
migrate_commit_message_prompt_to_instructions,
1010
migrate_chat_code_completion_instructions,
11-
migrate_refactoring_to_intelligent_update
11+
migrate_refactoring_to_intelligent_update,
12+
migrate_presets_to_chat_presets_for_edit_context
1213
} from './migrations'
1314
import {
1415
apply_chat_response_command,
@@ -66,6 +67,8 @@ export async function activate(context: vscode.ExtensionContext) {
6667
await migrate_chat_code_completion_instructions(context)
6768
// 31 May 2025
6869
await migrate_refactoring_to_intelligent_update(context)
70+
// 14 July 2025
71+
await migrate_presets_to_chat_presets_for_edit_context(context)
6972
}
7073

7174
await migrations()

packages/vscode/src/migrations/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export * from './migrate-api-providers-to-secret-storage'
44
export * from './migrate-commit-message-prompt-to-instructions'
55
export * from './migrate-chat-code-completion-instructions'
66
export * from './migrate-refactoring-to-intelligent-update'
7+
export * from './migrate-presets-to-chat-presets-for-edit-context'
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import * as vscode from 'vscode'
2+
import { Logger } from '../utils/logger'
3+
4+
const MIGRATION_ID =
5+
'presets-to-chat-presets-for-edit-context-migration-20250714'
6+
const OLD_SETTING_KEY = 'codeWebChat.presets'
7+
const NEW_SETTING_KEY = 'codeWebChat.chatPresetsForEditContext'
8+
9+
/**
10+
* Migration to rename presets to chatPresetsForEditContext.
11+
* This migration runs only once per extension installation.
12+
*/
13+
export async function migrate_presets_to_chat_presets_for_edit_context(
14+
context: vscode.ExtensionContext
15+
): Promise<void> {
16+
try {
17+
if (context.globalState.get(MIGRATION_ID)) {
18+
return
19+
}
20+
21+
const config = vscode.workspace.getConfiguration()
22+
const inspect = config.inspect(OLD_SETTING_KEY)
23+
24+
if (inspect?.globalValue !== undefined) {
25+
await config.update(
26+
NEW_SETTING_KEY,
27+
inspect.globalValue,
28+
vscode.ConfigurationTarget.Global
29+
)
30+
await config.update(
31+
OLD_SETTING_KEY,
32+
undefined,
33+
vscode.ConfigurationTarget.Global
34+
)
35+
}
36+
37+
if (inspect?.workspaceValue !== undefined) {
38+
await config.update(
39+
NEW_SETTING_KEY,
40+
inspect.workspaceValue,
41+
vscode.ConfigurationTarget.Workspace
42+
)
43+
await config.update(
44+
OLD_SETTING_KEY,
45+
undefined,
46+
vscode.ConfigurationTarget.Workspace
47+
)
48+
}
49+
50+
await context.globalState.update(MIGRATION_ID, true)
51+
Logger.log({
52+
function_name: 'migrate_presets_to_chat_presets_for_edit_context',
53+
message: 'Migration for presets to chatPresetsForEditContext completed.'
54+
})
55+
} catch (error) {
56+
Logger.error({
57+
function_name: 'migrate_presets_to_chat_presets_for_edit_context',
58+
message: 'Error migrating presets to chatPresetsForEditContext',
59+
data: error instanceof Error ? error.message : String(error)
60+
})
61+
}
62+
}

packages/vscode/src/services/websocket-manager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ export class WebSocketManager {
265265
}
266266

267267
const config = vscode.workspace.getConfiguration('codeWebChat')
268-
const web_chat_presets = config.get<any[]>('presets') ?? []
268+
const web_chat_presets =
269+
config.get<any[]>('chatPresetsForEditContext') ?? []
269270

270271
for (const chat of chats) {
271272
const preset = web_chat_presets.find((p) => p.name == chat.preset_name)

packages/vscode/src/utils/apply-preset-affixes.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ export function get_presets_by_names(preset_names: string[]): Array<{
77
prompt_suffix?: string
88
}> {
99
const config = vscode.workspace.getConfiguration('codeWebChat')
10-
const all_presets = config.get<ConfigPresetFormat[]>('presets', [])
10+
const all_presets = config.get<ConfigPresetFormat[]>(
11+
'chatPresetsForEditContext',
12+
[]
13+
)
1114

1215
return all_presets
1316
.filter((preset) => preset_names.includes(preset.name))

packages/vscode/src/view/backend/message-handlers/handle-create-preset.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import {
1010
export const handle_create_preset = async (
1111
provider: ViewProvider
1212
): Promise<void> => {
13-
// Get current presets
1413
const config = vscode.workspace.getConfiguration('codeWebChat')
15-
const current_presets = config.get<ConfigPresetFormat[]>('presets', []) || []
14+
const current_presets =
15+
config.get<ConfigPresetFormat[]>('chatPresetsForEditContext', []) || []
1616

17-
// Generate unique name
1817
let new_name = ''
1918
let copy_number = 0
2019
while (current_presets.some((p) => p.name == new_name)) {
@@ -36,7 +35,7 @@ export const handle_create_preset = async (
3635
command: 'PRESET_CREATED',
3736
preset: config_preset_to_ui_format(new_preset)
3837
})
39-
await config.update('presets', updated_presets, true)
38+
await config.update('chatPresetsForEditContext', updated_presets, true)
4039
} catch (error) {
4140
vscode.window.showErrorMessage(`Failed to create preset: ${error}`)
4241
}

0 commit comments

Comments
 (0)