Skip to content

Commit 098b7d5

Browse files
committed
Refactor state management to use workspaceState exclusively and implement recently used configurations tracking for code completion and edit context tools
1 parent bc28cfa commit 098b7d5

6 files changed

Lines changed: 108 additions & 114 deletions

File tree

‎packages/vscode/src/commands/code-completion-commands.ts‎

Lines changed: 83 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import {
1010
import { Logger } from '@shared/utils/logger'
1111
import he from 'he'
1212
import { PROVIDERS } from '@shared/constants/providers'
13-
import { LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY } from '@/constants/state-keys'
13+
import {
14+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
15+
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY
16+
} from '@/constants/state-keys'
1417
import { ToolConfig } from '@/services/model-providers-manager'
1518
import { PanelProvider } from '@/views/panel/backend/panel-provider'
1619
import { dictionary } from '@shared/constants/dictionary'
@@ -38,10 +41,6 @@ const show_inline_completion = async (params: {
3841
const change_listener = vscode.workspace.onDidChangeTextDocument(
3942
async (e) => {
4043
if (e.document === document) {
41-
await vscode.commands.executeCommand(
42-
'editor.action.formatDocument',
43-
document.uri
44-
)
4544
controller.dispose()
4645
change_listener.dispose()
4746
}
@@ -88,13 +87,9 @@ const get_code_completion_config = async (
8887
if (default_config) {
8988
selected_config = default_config
9089
} else {
91-
const last_selected_id =
92-
context.workspaceState.get<string>(
93-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
94-
) ??
95-
context.globalState.get<string>(
96-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
97-
)
90+
const last_selected_id = context.workspaceState.get<string>(
91+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
92+
)
9893
if (last_selected_id) {
9994
selected_config =
10095
code_completions_configs.find(
@@ -109,7 +104,33 @@ const get_code_completion_config = async (
109104

110105
if (!selected_config || show_quick_pick) {
111106
const create_items = () => {
112-
return code_completions_configs.map((config: ToolConfig, index) => {
107+
const recent_ids =
108+
context.workspaceState.get<string[]>(
109+
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY
110+
) || []
111+
112+
const matched_recent_configs: ToolConfig[] = []
113+
const remaining_configs: ToolConfig[] = []
114+
115+
code_completions_configs.forEach((config) => {
116+
const id = get_tool_config_id(config)
117+
if (recent_ids.includes(id)) {
118+
matched_recent_configs.push(config)
119+
} else {
120+
remaining_configs.push(config)
121+
}
122+
})
123+
124+
matched_recent_configs.sort((a, b) => {
125+
const id_a = get_tool_config_id(a)
126+
const id_b = get_tool_config_id(b)
127+
return recent_ids.indexOf(id_a) - recent_ids.indexOf(id_b)
128+
})
129+
130+
const recent_configs = matched_recent_configs
131+
const other_configs = remaining_configs
132+
133+
const map_config_to_item = (config: ToolConfig) => {
113134
const description_parts = [config.provider_name]
114135
if (config.temperature != null) {
115136
description_parts.push(`${config.temperature}`)
@@ -118,38 +139,64 @@ const get_code_completion_config = async (
118139
description_parts.push(`${config.reasoning_effort}`)
119140
}
120141

142+
const buttons: vscode.QuickInputButton[] = []
143+
121144
return {
122145
label: config.model,
123146
description: description_parts.join(' · '),
147+
buttons,
124148
config,
125-
index,
126149
id: get_tool_config_id(config)
127150
}
128-
})
151+
}
152+
153+
const items: (vscode.QuickPickItem & {
154+
config?: ToolConfig
155+
id?: string
156+
})[] = []
157+
158+
if (recent_configs.length > 0) {
159+
items.push({
160+
label: 'recently used',
161+
kind: vscode.QuickPickItemKind.Separator
162+
})
163+
items.push(...recent_configs.map(map_config_to_item))
164+
}
165+
166+
if (other_configs.length > 0) {
167+
if (recent_configs.length > 0) {
168+
items.push({
169+
label: 'other configurations',
170+
kind: vscode.QuickPickItemKind.Separator
171+
})
172+
}
173+
items.push(...other_configs.map(map_config_to_item))
174+
}
175+
176+
return items
129177
}
130178

131179
const quick_pick = vscode.window.createQuickPick()
132180
quick_pick.items = create_items()
133181
quick_pick.placeholder = 'Select code completions configuration'
134182
quick_pick.matchOnDescription = true
135183

136-
const last_selected_id =
137-
context.workspaceState.get<string>(
138-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
139-
) ??
140-
context.globalState.get<string>(
141-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
142-
)
184+
const last_selected_id = context.workspaceState.get<string>(
185+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
186+
)
143187

144188
const items = quick_pick.items as (vscode.QuickPickItem & { id: string })[]
145-
const last_selected_item = items.find(
146-
(item) => item.id === last_selected_id
147-
)
189+
const last_selected_item = items.find((item) => item.id == last_selected_id)
148190

149191
if (last_selected_item) {
150192
quick_pick.activeItems = [last_selected_item]
151193
} else if (items.length > 0) {
152-
quick_pick.activeItems = [items[0]]
194+
const first_selectable = items.find(
195+
(i) => i.kind !== vscode.QuickPickItemKind.Separator
196+
)
197+
if (first_selectable) {
198+
quick_pick.activeItems = [first_selectable]
199+
}
153200
}
154201

155202
return new Promise<{ provider: any; config: any } | undefined>(
@@ -158,7 +205,7 @@ const get_code_completion_config = async (
158205
const selected = quick_pick.selectedItems[0] as any
159206
quick_pick.hide()
160207

161-
if (!selected) {
208+
if (!selected || !selected.config) {
162209
resolve(undefined)
163210
return
164211
}
@@ -167,9 +214,15 @@ const get_code_completion_config = async (
167214
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
168215
selected.id
169216
)
170-
context.globalState.update(
171-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
172-
selected.id
217+
218+
let recents =
219+
context.workspaceState.get<string[]>(
220+
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY
221+
) || []
222+
recents = [selected.id, ...recents.filter((id) => id != selected.id)]
223+
context.workspaceState.update(
224+
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY,
225+
recents
173226
)
174227

175228
if (panel_provider) {

‎packages/vscode/src/utils/intelligent-update-utils.ts‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,9 @@ export const get_intelligent_update_config = async (
6464
'Select the Intelligent Update API tool configuration'
6565
quick_pick.matchOnDescription = true
6666

67-
const last_selected_id =
68-
context.workspaceState.get<string>(
69-
LAST_SELECTED_INTELLIGENT_UPDATE_CONFIG_ID_STATE_KEY
70-
) ??
71-
context.globalState.get<string>(
72-
LAST_SELECTED_INTELLIGENT_UPDATE_CONFIG_ID_STATE_KEY
73-
)
67+
const last_selected_id = context.workspaceState.get<string>(
68+
LAST_SELECTED_INTELLIGENT_UPDATE_CONFIG_ID_STATE_KEY
69+
)
7470
const last_selected_item = items.find((item) => item.id == last_selected_id)
7571

7672
if (last_selected_item) {
@@ -94,10 +90,6 @@ export const get_intelligent_update_config = async (
9490
LAST_SELECTED_INTELLIGENT_UPDATE_CONFIG_ID_STATE_KEY,
9591
selected.id
9692
)
97-
context.globalState.update(
98-
LAST_SELECTED_INTELLIGENT_UPDATE_CONFIG_ID_STATE_KEY,
99-
selected.id
100-
)
10193

10294
const provider = await api_providers_manager.get_provider(
10395
selected.config.provider_name

‎packages/vscode/src/views/panel/backend/message-handlers/handle-code-completion.ts‎

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ const get_code_completion_config = async (
4949
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
5050
config_id
5151
)
52-
context.globalState.update(
53-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
54-
config_id
55-
)
5652

5753
if (panel_provider) {
5854
panel_provider.send_message({
@@ -63,13 +59,9 @@ const get_code_completion_config = async (
6359
}
6460
}
6561
} else if (!show_quick_pick) {
66-
const last_selected_id =
67-
context.workspaceState.get<string>(
68-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
69-
) ??
70-
context.globalState.get<string>(
71-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
72-
)
62+
const last_selected_id = context.workspaceState.get<string>(
63+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
64+
)
7365
if (last_selected_id) {
7466
selected_config =
7567
code_completions_configs.find(
@@ -161,13 +153,9 @@ const get_code_completion_config = async (
161153
quick_pick.placeholder = 'Select code completions configuration'
162154
quick_pick.matchOnDescription = true
163155

164-
const last_selected_id =
165-
context.workspaceState.get<string>(
166-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
167-
) ??
168-
context.globalState.get<string>(
169-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
170-
)
156+
const last_selected_id = context.workspaceState.get<string>(
157+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
158+
)
171159

172160
const items = quick_pick.items as (vscode.QuickPickItem & { id: string })[]
173161
const last_selected_item = items.find(
@@ -200,19 +188,12 @@ const get_code_completion_config = async (
200188
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
201189
selected.id
202190
)
203-
context.globalState.update(
204-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY,
205-
selected.id
206-
)
207191

208192
let recents =
209193
context.workspaceState.get<string[]>(
210194
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY
211195
) || []
212-
recents = [
213-
selected.id,
214-
...recents.filter((id) => id != selected.id)
215-
].slice(0, 10)
196+
recents = [selected.id, ...recents.filter((id) => id != selected.id)]
216197
context.workspaceState.update(
217198
RECENTLY_USED_CODE_COMPLETION_CONFIG_IDS_STATE_KEY,
218199
recents

‎packages/vscode/src/views/panel/backend/message-handlers/handle-commit-changes/utils/get-commit-message-config.ts‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,9 @@ export const get_commit_message_config = async (
6464
quick_pick.placeholder = 'Select configuration for commit message'
6565
quick_pick.matchOnDescription = true
6666

67-
const last_selected_id =
68-
context.workspaceState.get<string>(
69-
LAST_SELECTED_COMMIT_MESSAGES_CONFIG_ID_STATE_KEY
70-
) ??
71-
context.globalState.get<string>(
72-
LAST_SELECTED_COMMIT_MESSAGES_CONFIG_ID_STATE_KEY
73-
)
67+
const last_selected_id = context.workspaceState.get<string>(
68+
LAST_SELECTED_COMMIT_MESSAGES_CONFIG_ID_STATE_KEY
69+
)
7470
const last_selected_item = (
7571
quick_pick.items as (vscode.QuickPickItem & { id: string })[]
7672
).find((item) => item.id == last_selected_id)
@@ -93,10 +89,6 @@ export const get_commit_message_config = async (
9389
LAST_SELECTED_COMMIT_MESSAGES_CONFIG_ID_STATE_KEY,
9490
selected.id
9591
)
96-
context.globalState.update(
97-
LAST_SELECTED_COMMIT_MESSAGES_CONFIG_ID_STATE_KEY,
98-
selected.id
99-
)
10092
resolve(selected.config)
10193
} else {
10294
resolve(undefined)

‎packages/vscode/src/views/panel/backend/message-handlers/handle-edit-context.ts‎

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,6 @@ const get_edit_context_config = async (
6262
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY,
6363
config_id
6464
)
65-
context.globalState.update(
66-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY,
67-
config_id
68-
)
6965

7066
if (panel_provider) {
7167
panel_provider.send_message({
@@ -76,13 +72,9 @@ const get_edit_context_config = async (
7672
}
7773
}
7874
} else if (!show_quick_pick) {
79-
const last_selected_id =
80-
context.workspaceState.get<string>(
81-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
82-
) ??
83-
context.globalState.get<string>(
84-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
85-
)
75+
const last_selected_id = context.workspaceState.get<string>(
76+
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
77+
)
8678
if (last_selected_id) {
8779
selected_config =
8880
edit_context_configs.find(
@@ -171,13 +163,9 @@ const get_edit_context_config = async (
171163
quick_pick.placeholder = 'Select configuration'
172164
quick_pick.matchOnDescription = true
173165

174-
const last_selected_id =
175-
context.workspaceState.get<string>(
176-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
177-
) ??
178-
context.globalState.get<string>(
179-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
180-
)
166+
const last_selected_id = context.workspaceState.get<string>(
167+
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
168+
)
181169

182170
const items = quick_pick.items
183171
const last_selected_item = items.find((item) => item.id == last_selected_id)
@@ -211,10 +199,6 @@ const get_edit_context_config = async (
211199
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY,
212200
selected.id
213201
)
214-
context.globalState.update(
215-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY,
216-
selected.id
217-
)
218202

219203
let recents =
220204
context.workspaceState.get<string[]>(

‎packages/vscode/src/views/panel/backend/panel-provider.ts‎

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -725,20 +725,12 @@ export class PanelProvider implements vscode.WebviewViewProvider {
725725
})
726726
),
727727
selected_configuration_id_by_mode: {
728-
'edit-context':
729-
this.context.workspaceState.get<string>(
730-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
731-
) ??
732-
this.context.globalState.get<string>(
733-
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
734-
),
735-
'code-completions':
736-
this.context.workspaceState.get<string>(
737-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
738-
) ??
739-
this.context.globalState.get<string>(
740-
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
741-
)
728+
'edit-context': this.context.workspaceState.get<string>(
729+
LAST_SELECTED_EDIT_CONTEXT_CONFIG_ID_STATE_KEY
730+
),
731+
'code-completions': this.context.workspaceState.get<string>(
732+
LAST_SELECTED_CODE_COMPLETION_CONFIG_ID_STATE_KEY
733+
)
742734
}
743735
})
744736
}

0 commit comments

Comments
 (0)