Skip to content

Commit 11d4a7f

Browse files
committed
Extract prompt payload building logic into a shared utility function and refactor handlers
- make sure other files/recent files are properly passed to the prompt builder - in `apps/editor/src/views/prompt/backend/message-handlers/utils` place util abstracting the use of FilesCollector.collect_files across handlers (to remove code repetition) - [Pasted text] └── apps └── editor └── src ├── commands │ ├── code-at-cursor-command │ │ └── utils │ │ └── perform-code-at-cursor.ts │ └── copy-markdown-command.ts └── views └── prompt └── backend └── message-handlers ├── handle-autofill.ts ├── handle-copy-prompt.ts ├── handle-make-api-call.ts └── handle-preview-web-configuration.ts
1 parent 9fad4a3 commit 11d4a7f

6 files changed

Lines changed: 106 additions & 92 deletions

File tree

‎apps/editor/src/commands/copy-markdown-command.ts‎

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ export const copy_markdown_commands = (
1313
) => {
1414
return [
1515
vscode.commands.registerCommand('codeWebChat.copyMarkdown', async () => {
16-
let context_text = ''
16+
let other_files = ''
17+
let recent_files = ''
1718

1819
try {
1920
const collected = await FilesCollector.collect_files({
2021
workspace_provider,
2122
open_editors_provider
2223
})
23-
context_text = collected.other_files + collected.recent_files
24+
other_files = collected.other_files
25+
recent_files = collected.recent_files
2426
} catch (error: any) {
2527
console.error('Error collecting files:', error)
2628
vscode.window.showErrorMessage(
@@ -31,14 +33,17 @@ export const copy_markdown_commands = (
3133
return
3234
}
3335

34-
if (context_text == '') {
36+
if (!other_files && !recent_files) {
3537
vscode.window.showWarningMessage(t('common.warning.no-files-selected'))
3638
return
3739
}
3840

39-
context_text =
40-
PromptBuilder.build_prompt({ context_text, separator: true })
41-
.full_prompt + '\n'
41+
const context_text =
42+
PromptBuilder.build_prompt({
43+
other_files,
44+
recent_files,
45+
separator: true
46+
}).full_prompt + '\n'
4247
await vscode.env.clipboard.writeText(context_text)
4348
vscode.window.showInformationMessage(
4449
t('command.copy-markdown.info.context-copied')
@@ -118,8 +123,10 @@ export const copy_markdown_commands = (
118123
if (context_text == '') return
119124

120125
context_text =
121-
PromptBuilder.build_prompt({ context_text, separator: true })
122-
.full_prompt + '\n'
126+
PromptBuilder.build_prompt({
127+
other_files: context_text,
128+
separator: true
129+
}).full_prompt + '\n'
123130
await vscode.env.clipboard.writeText(context_text)
124131
vscode.window.showInformationMessage(
125132
t('command.copy-markdown.info.context-from-editors-copied')

‎apps/editor/src/views/prompt/backend/message-handlers/handle-autofill.ts‎

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { PromptViewProvider } from '@/views/prompt/backend/prompt-view-provider'
22
import * as vscode from 'vscode'
3-
import { FilesCollector } from '@/utils/files-collector'
3+
import { build_prompt_payload } from './utils/build-prompt-payload'
44
import { get_last_used_web_configuration_key } from '@/constants/state-keys'
55
import { ConfigWebConfigurationFormat } from '@/utils/web-configuration-format-converters'
66
import { MODE } from '@shared/types/mode'
@@ -14,7 +14,6 @@ import {
1414
EDIT_FORMAT_INSTRUCTIONS_DIFF
1515
} from '@/constants/edit-format-instructions'
1616
import { handle_update_last_used_web_configuration } from './handle-update-last-used-web-configuration'
17-
import { replace_symbols } from '@/views/prompt/backend/utils/symbols/replace-symbols'
1817
import { show_configuration_quick_pick } from '@/utils/show-configuration-quick-pick'
1918
import { PromptBuilder } from '@/utils/prompt-builder'
2019

@@ -56,27 +55,17 @@ export const handle_autofill = async (params: {
5655

5756
let sent = false
5857

59-
const additional_paths: string[] = []
60-
61-
let context_text = ''
62-
if (params.prompt_view_provider.include_selected_files) {
63-
const collected = await FilesCollector.collect_files({
64-
workspace_provider: params.prompt_view_provider.workspace_provider,
65-
open_editors_provider: params.prompt_view_provider.open_editors_provider,
66-
additional_paths
67-
})
68-
context_text = collected.other_files + collected.recent_files
69-
}
70-
7158
const current_instructions = params.prompt_view_provider.current_instructions
7259

73-
const { instructions: processed_instructions, skill_definitions } =
74-
await replace_symbols({
75-
instructions: current_instructions,
76-
extension_context: params.prompt_view_provider.extension_context,
77-
workspace_provider: params.prompt_view_provider.workspace_provider,
78-
remove_images: true
79-
})
60+
const {
61+
other_files,
62+
recent_files,
63+
processed_instructions,
64+
skill_definitions
65+
} = await build_prompt_payload({
66+
prompt_view_provider: params.prompt_view_provider,
67+
remove_images: true
68+
})
8069

8170
let formatted_system_instructions = ''
8271
const user_instructions = processed_instructions
@@ -93,7 +82,8 @@ export const handle_autofill = async (params: {
9382
}
9483

9584
const { full_prompt: text } = PromptBuilder.build_prompt({
96-
context_text,
85+
other_files,
86+
recent_files,
9787
skill_definitions,
9888
system_instructions: formatted_system_instructions,
9989
user_instructions,

‎apps/editor/src/views/prompt/backend/message-handlers/handle-copy-prompt.ts‎

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,27 @@
11
import { PromptViewProvider } from '@/views/prompt/backend/prompt-view-provider'
22
import * as vscode from 'vscode'
3-
import { FilesCollector } from '@/utils/files-collector'
3+
import { build_prompt_payload } from './utils/build-prompt-payload'
44
import {
55
EDIT_FORMAT_INSTRUCTIONS_WHOLE,
66
EDIT_FORMAT_INSTRUCTIONS_TRUNCATED,
77
EDIT_FORMAT_INSTRUCTIONS_SEARCH_REPLACE,
88
EDIT_FORMAT_INSTRUCTIONS_DIFF
99
} from '@/constants/edit-format-instructions'
10-
import { replace_symbols } from '@/views/prompt/backend/utils/symbols/replace-symbols'
1110
import { PromptBuilder } from '@/utils/prompt-builder'
1211
import { t } from '@/i18n'
1312

1413
export const handle_copy_prompt = async (params: {
1514
prompt_view_provider: PromptViewProvider
1615
}): Promise<void> => {
17-
let context_text = ''
18-
if (params.prompt_view_provider.include_selected_files) {
19-
const collected = await FilesCollector.collect_files({
20-
workspace_provider: params.prompt_view_provider.workspace_provider,
21-
open_editors_provider: params.prompt_view_provider.open_editors_provider
22-
})
23-
context_text = collected.other_files + collected.recent_files
24-
}
25-
26-
const current_instructions = params.prompt_view_provider.current_instructions
27-
28-
const { instructions: processed_instructions, skill_definitions } =
29-
await replace_symbols({
30-
instructions: current_instructions,
31-
extension_context: params.prompt_view_provider.extension_context,
32-
workspace_provider: params.prompt_view_provider.workspace_provider,
33-
remove_images: true
34-
})
16+
const {
17+
other_files,
18+
recent_files,
19+
processed_instructions,
20+
skill_definitions
21+
} = await build_prompt_payload({
22+
prompt_view_provider: params.prompt_view_provider,
23+
remove_images: true
24+
})
3525

3626
let formatted_system_instructions = ''
3727
const user_instructions = processed_instructions
@@ -50,7 +40,8 @@ export const handle_copy_prompt = async (params: {
5040
}
5141

5242
const { full_prompt: text } = PromptBuilder.build_prompt({
53-
context_text,
43+
other_files,
44+
recent_files,
5445
skill_definitions,
5546
system_instructions: formatted_system_instructions,
5647
user_instructions,

‎apps/editor/src/views/prompt/backend/message-handlers/handle-make-api-call.ts‎

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as vscode from 'vscode'
22
import { t } from '@/i18n'
3-
import { FilesCollector } from '@/utils/files-collector'
3+
import { build_prompt_payload } from './utils/build-prompt-payload'
44
import { Logger } from '@shared/utils/logger'
55
import {
66
ModelProvidersManager,
@@ -17,7 +17,6 @@ import { MakeApiCallMessage } from '@/views/prompt/types/messages'
1717
import { dictionary } from '@shared/constants/dictionary'
1818
import { default_system_instructions } from '@shared/constants/default-system-instructions'
1919
import { build_user_content } from '@/utils/build-user-content'
20-
import { replace_symbols } from '@/views/prompt/backend/utils/symbols/replace-symbols'
2120
import {
2221
show_configuration_quick_pick,
2322
map_api_configuration_to_item
@@ -166,26 +165,15 @@ export const handle_make_api_call = async (
166165
return
167166
}
168167

169-
const { instructions: processed_instructions, skill_definitions } =
170-
await replace_symbols({
171-
instructions: current_instructions,
172-
extension_context: prompt_view_provider.extension_context,
173-
workspace_provider: prompt_view_provider.workspace_provider
174-
})
175-
176-
let collected_files = ''
177-
let other_files = ''
178-
let recent_files = ''
179-
180-
if (prompt_view_provider.include_selected_files) {
181-
const collected = await FilesCollector.collect_files({
182-
workspace_provider: prompt_view_provider.workspace_provider,
183-
open_editors_provider: prompt_view_provider.open_editors_provider
184-
})
185-
other_files = collected.other_files
186-
recent_files = collected.recent_files
187-
collected_files = other_files + recent_files
188-
}
168+
const {
169+
other_files,
170+
recent_files,
171+
collected_files,
172+
processed_instructions,
173+
skill_definitions
174+
} = await build_prompt_payload({
175+
prompt_view_provider
176+
})
189177

190178
if (prompt_view_provider.include_selected_files && !collected_files) {
191179
prompt_view_provider.send_message({

‎apps/editor/src/views/prompt/backend/message-handlers/handle-preview-web-configuration.ts‎

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import * as vscode from 'vscode'
22
import { PromptViewProvider } from '@/views/prompt/backend/prompt-view-provider'
33
import { PreviewWebConfigurationMessage } from '@/views/prompt/types/messages'
4-
import { FilesCollector } from '@/utils/files-collector'
4+
import { build_prompt_payload } from './utils/build-prompt-payload'
55
import { WebConfiguration } from '@shared/types/web-configuration'
66
import {
77
EDIT_FORMAT_INSTRUCTIONS_WHOLE,
88
EDIT_FORMAT_INSTRUCTIONS_TRUNCATED,
99
EDIT_FORMAT_INSTRUCTIONS_SEARCH_REPLACE,
1010
EDIT_FORMAT_INSTRUCTIONS_DIFF
1111
} from '@/constants/edit-format-instructions'
12-
import { replace_symbols } from '@/views/prompt/backend/utils/symbols/replace-symbols'
1312
import { PromptBuilder } from '@/utils/prompt-builder'
1413

1514
export const handle_preview_web_configuration = async (
@@ -20,22 +19,15 @@ export const handle_preview_web_configuration = async (
2019

2120
const current_instructions = prompt_view_provider.current_instructions
2221

23-
let context_text = ''
24-
if (prompt_view_provider.include_selected_files) {
25-
const collected = await FilesCollector.collect_files({
26-
workspace_provider: prompt_view_provider.workspace_provider,
27-
open_editors_provider: prompt_view_provider.open_editors_provider
28-
})
29-
context_text = collected.other_files + collected.recent_files
30-
}
31-
32-
const { instructions: processed_instructions, skill_definitions } =
33-
await replace_symbols({
34-
instructions: current_instructions,
35-
extension_context: prompt_view_provider.extension_context,
36-
workspace_provider: prompt_view_provider.workspace_provider,
37-
remove_images: true
38-
})
22+
const {
23+
other_files,
24+
recent_files,
25+
processed_instructions,
26+
skill_definitions
27+
} = await build_prompt_payload({
28+
prompt_view_provider,
29+
remove_images: true
30+
})
3931

4032
let formatted_system_instructions = ''
4133
const user_instructions = processed_instructions
@@ -52,7 +44,8 @@ export const handle_preview_web_configuration = async (
5244
}
5345

5446
const { full_prompt: built_prompt } = PromptBuilder.build_prompt({
55-
context_text,
47+
other_files,
48+
recent_files,
5649
skill_definitions,
5750
system_instructions: formatted_system_instructions,
5851
user_instructions,
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { PromptViewProvider } from '@/views/prompt/backend/prompt-view-provider'
2+
import { FilesCollector } from '@/utils/files-collector'
3+
import { replace_symbols } from '@/views/prompt/backend/utils/symbols/replace-symbols'
4+
5+
export const build_prompt_payload = async (params: {
6+
prompt_view_provider: PromptViewProvider
7+
remove_images?: boolean
8+
}): Promise<{
9+
other_files: string
10+
recent_files: string
11+
collected_files: string
12+
processed_instructions: string
13+
skill_definitions: string
14+
}> => {
15+
const { prompt_view_provider, remove_images } = params
16+
let other_files = ''
17+
let recent_files = ''
18+
let collected_files = ''
19+
20+
if (prompt_view_provider.include_selected_files) {
21+
const collected = await FilesCollector.collect_files({
22+
workspace_provider: prompt_view_provider.workspace_provider,
23+
open_editors_provider: prompt_view_provider.open_editors_provider
24+
})
25+
other_files = collected.other_files
26+
recent_files = collected.recent_files
27+
collected_files = other_files + recent_files
28+
}
29+
30+
const { instructions: processed_instructions, skill_definitions } =
31+
await replace_symbols({
32+
instructions: prompt_view_provider.current_instructions || '',
33+
extension_context: prompt_view_provider.extension_context,
34+
workspace_provider: prompt_view_provider.workspace_provider,
35+
remove_images
36+
})
37+
38+
return {
39+
other_files,
40+
recent_files,
41+
collected_files,
42+
processed_instructions,
43+
skill_definitions
44+
}
45+
}

0 commit comments

Comments
 (0)