genaicode 0.3.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +24 -7
  2. package/dist/ai-service/ai-studio.js +58 -9
  3. package/dist/ai-service/ai-studio.js.map +1 -1
  4. package/dist/ai-service/anthropic.js +1 -0
  5. package/dist/ai-service/anthropic.js.map +1 -1
  6. package/dist/ai-service/chat-gpt.js +4 -2
  7. package/dist/ai-service/chat-gpt.js.map +1 -1
  8. package/dist/ai-service/common.d.ts +13 -4
  9. package/dist/ai-service/common.js +4 -3
  10. package/dist/ai-service/common.js.map +1 -1
  11. package/dist/ai-service/common.test.js +3 -3
  12. package/dist/ai-service/common.test.js.map +1 -1
  13. package/dist/ai-service/unescape-function-call.d.ts +7 -0
  14. package/dist/ai-service/unescape-function-call.js +59 -0
  15. package/dist/ai-service/unescape-function-call.js.map +1 -0
  16. package/dist/ai-service/unescape-function-call.test.d.ts +1 -0
  17. package/dist/ai-service/unescape-function-call.test.js +18 -0
  18. package/dist/ai-service/unescape-function-call.test.js.map +1 -0
  19. package/dist/ai-service/vertex-ai-claude.js +7 -1
  20. package/dist/ai-service/vertex-ai-claude.js.map +1 -1
  21. package/dist/ai-service/vertex-ai.d.ts +0 -1
  22. package/dist/ai-service/vertex-ai.js +64 -14
  23. package/dist/ai-service/vertex-ai.js.map +1 -1
  24. package/dist/cli/cli-options.js +22 -2
  25. package/dist/cli/cli-options.js.map +1 -1
  26. package/dist/cli/cli-params.d.ts +6 -2
  27. package/dist/cli/cli-params.js +14 -10
  28. package/dist/cli/cli-params.js.map +1 -1
  29. package/dist/cli/validate-cli-params.js +11 -2
  30. package/dist/cli/validate-cli-params.js.map +1 -1
  31. package/dist/files/cache-file.d.ts +3 -0
  32. package/dist/files/cache-file.js +36 -0
  33. package/dist/files/cache-file.js.map +1 -0
  34. package/dist/files/read-files.d.ts +4 -1
  35. package/dist/files/read-files.js +5 -3
  36. package/dist/files/read-files.js.map +1 -1
  37. package/dist/files/read-files.test.js +1 -0
  38. package/dist/files/read-files.test.js.map +1 -1
  39. package/dist/files/update-files.js +1 -4
  40. package/dist/files/update-files.js.map +1 -1
  41. package/dist/main/codegen-types.d.ts +3 -4
  42. package/dist/main/codegen.js +17 -4
  43. package/dist/main/codegen.js.map +1 -1
  44. package/dist/main/codegen.test.d.ts +1 -0
  45. package/dist/main/codegen.test.js +22 -8
  46. package/dist/main/codegen.test.js.map +1 -1
  47. package/dist/main/common/content-bus-types.d.ts +5 -0
  48. package/dist/main/common/content-bus-types.js +4 -0
  49. package/dist/main/common/content-bus-types.js.map +1 -1
  50. package/dist/main/common/content-bus.d.ts +7 -6
  51. package/dist/main/common/content-bus.js +25 -11
  52. package/dist/main/common/content-bus.js.map +1 -1
  53. package/dist/main/common/cost-collector.d.ts +10 -14
  54. package/dist/main/common/cost-collector.js +83 -17
  55. package/dist/main/common/cost-collector.js.map +1 -1
  56. package/dist/main/interactive/codegen-interactive.test.d.ts +1 -0
  57. package/dist/main/interactive/codegen-interactive.test.js +3 -1
  58. package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
  59. package/dist/main/interactive/codegen-worker.js +5 -2
  60. package/dist/main/interactive/codegen-worker.js.map +1 -1
  61. package/dist/main/interactive/error-handling.d.ts +0 -3
  62. package/dist/main/interactive/error-handling.js +0 -6
  63. package/dist/main/interactive/error-handling.js.map +1 -1
  64. package/dist/main/ui/backend/api.js +15 -3
  65. package/dist/main/ui/backend/api.js.map +1 -1
  66. package/dist/main/ui/backend/server.js +9 -6
  67. package/dist/main/ui/backend/server.js.map +1 -1
  68. package/dist/main/ui/backend/service.d.ts +4 -2
  69. package/dist/main/ui/backend/service.js +14 -8
  70. package/dist/main/ui/backend/service.js.map +1 -1
  71. package/dist/main/ui/frontend/assets/index-Dicb_1yw.js +779 -0
  72. package/dist/main/ui/frontend/index.html +1 -1
  73. package/dist/prompt/ai-service-fallback.js +5 -0
  74. package/dist/prompt/ai-service-fallback.js.map +1 -1
  75. package/dist/prompt/function-calling-validate.js +70 -4
  76. package/dist/prompt/function-calling-validate.js.map +1 -1
  77. package/dist/prompt/function-calling.js +11 -3
  78. package/dist/prompt/function-calling.js.map +1 -1
  79. package/dist/prompt/function-defs/ask-question-reflect.d.ts +20 -0
  80. package/dist/prompt/function-defs/ask-question-reflect.js +21 -0
  81. package/dist/prompt/function-defs/ask-question-reflect.js.map +1 -0
  82. package/dist/prompt/function-defs/ask-question.d.ts +22 -11
  83. package/dist/prompt/function-defs/ask-question.js +42 -11
  84. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  85. package/dist/prompt/function-defs/codegen-summary.d.ts +3 -3
  86. package/dist/prompt/function-defs/codegen-summary.js +4 -4
  87. package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
  88. package/dist/prompt/function-defs/optimize-context.d.ts +16 -11
  89. package/dist/prompt/function-defs/optimize-context.js +16 -11
  90. package/dist/prompt/function-defs/optimize-context.js.map +1 -1
  91. package/dist/prompt/function-defs/read-history.d.ts +13 -0
  92. package/dist/prompt/function-defs/read-history.js +14 -0
  93. package/dist/prompt/function-defs/read-history.js.map +1 -0
  94. package/dist/prompt/function-defs/set-summaries.d.ts +31 -0
  95. package/dist/prompt/function-defs/set-summaries.js +32 -0
  96. package/dist/prompt/function-defs/set-summaries.js.map +1 -0
  97. package/dist/prompt/function-defs/update-history.d.ts +21 -0
  98. package/dist/prompt/function-defs/update-history.js +22 -0
  99. package/dist/prompt/function-defs/update-history.js.map +1 -0
  100. package/dist/prompt/limits.js +2 -2
  101. package/dist/prompt/limits.test.js +3 -3
  102. package/dist/prompt/prompt-codegen.js +25 -13
  103. package/dist/prompt/prompt-codegen.js.map +1 -1
  104. package/dist/prompt/prompt-codegen.test.js +1 -1
  105. package/dist/prompt/prompt-codegen.test.js.map +1 -1
  106. package/dist/prompt/prompt-service-ask-question.test.d.ts +1 -0
  107. package/dist/prompt/prompt-service-ask-question.test.js +75 -9
  108. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
  109. package/dist/prompt/prompt-service.d.ts +0 -17
  110. package/dist/prompt/prompt-service.js +47 -21
  111. package/dist/prompt/prompt-service.js.map +1 -1
  112. package/dist/prompt/prompt-service.test.d.ts +1 -0
  113. package/dist/prompt/prompt-service.test.js +41 -31
  114. package/dist/prompt/prompt-service.test.js.map +1 -1
  115. package/dist/prompt/steps/step-ask-question-handlers.d.ts +10 -0
  116. package/dist/prompt/steps/step-ask-question-handlers.js +265 -0
  117. package/dist/prompt/steps/step-ask-question-handlers.js.map +1 -0
  118. package/dist/prompt/steps/step-ask-question-reflect.d.ts +4 -0
  119. package/dist/prompt/steps/step-ask-question-reflect.js +48 -0
  120. package/dist/prompt/steps/step-ask-question-reflect.js.map +1 -0
  121. package/dist/prompt/steps/step-ask-question-types.d.ts +53 -0
  122. package/dist/prompt/steps/step-ask-question-types.js +2 -0
  123. package/dist/prompt/steps/step-ask-question-types.js.map +1 -0
  124. package/dist/prompt/steps/step-ask-question.d.ts +2 -2
  125. package/dist/prompt/steps/step-ask-question.js +65 -82
  126. package/dist/prompt/steps/step-ask-question.js.map +1 -1
  127. package/dist/prompt/steps/step-context-optimization.d.ts +1 -3
  128. package/dist/prompt/steps/step-context-optimization.js +120 -73
  129. package/dist/prompt/steps/step-context-optimization.js.map +1 -1
  130. package/dist/prompt/steps/step-generate-summary.d.ts +3 -0
  131. package/dist/prompt/steps/step-generate-summary.js +41 -0
  132. package/dist/prompt/steps/step-generate-summary.js.map +1 -0
  133. package/dist/prompt/steps/step-history-update.d.ts +5 -0
  134. package/dist/prompt/steps/step-history-update.js +54 -0
  135. package/dist/prompt/steps/step-history-update.js.map +1 -0
  136. package/dist/prompt/steps/step-summarization.d.ts +8 -0
  137. package/dist/prompt/steps/step-summarization.js +75 -0
  138. package/dist/prompt/steps/step-summarization.js.map +1 -0
  139. package/dist/prompt/steps/step-validate-recover.d.ts +2 -13
  140. package/dist/prompt/steps/step-validate-recover.js +3 -3
  141. package/dist/prompt/steps/step-validate-recover.js.map +1 -1
  142. package/dist/prompt/steps/step-verify-patch.d.ts +1 -2
  143. package/dist/prompt/steps/step-verify-patch.js +3 -10
  144. package/dist/prompt/steps/step-verify-patch.js.map +1 -1
  145. package/dist/prompt/steps/steps-types.d.ts +12 -0
  146. package/dist/prompt/steps/steps-utils.d.ts +7 -0
  147. package/dist/prompt/steps/steps-utils.js +11 -0
  148. package/dist/prompt/steps/steps-utils.js.map +1 -0
  149. package/dist/prompt/systemprompt.js +124 -12
  150. package/dist/prompt/systemprompt.js.map +1 -1
  151. package/dist/prompt/systemprompt.test.js +4 -4
  152. package/dist/prompt/systemprompt.test.js.map +1 -1
  153. package/package.json +6 -2
  154. package/dist/main/ui/frontend/assets/index-D9wcaSJU.js +0 -598
@@ -0,0 +1,265 @@
1
+ import { StepResult } from './steps-types.js';
2
+ import { askUserForConfirmation, askUserForInput } from '../../main/common/user-actions.js';
3
+ import { putSystemMessage } from '../../main/common/content-bus.js';
4
+ import { getSourceFiles, refreshFiles } from '../../files/find-files.js';
5
+ import { executeStepContextOptimization } from './step-context-optimization.js';
6
+ import { getSourceCodeResponse } from './steps-utils.js';
7
+ import { getSourceCode } from '../../files/read-files.js';
8
+ export async function handleCancelCodeGeneration({ askQuestionCall }) {
9
+ putSystemMessage('Assistant requested to stop code generation. Exiting...');
10
+ return {
11
+ breakLoop: true,
12
+ stepResult: StepResult.BREAK,
13
+ items: [
14
+ {
15
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
16
+ user: { type: 'user', text: 'Code generation cancelled.' },
17
+ },
18
+ ],
19
+ };
20
+ }
21
+ export async function handleConfirmCodeGeneration({ askQuestionCall }) {
22
+ const userConfirmation = await askUserForConfirmation('The assistant is ready to start code generation. Do you want to proceed?', true);
23
+ if (userConfirmation) {
24
+ putSystemMessage('Proceeding with code generation.');
25
+ return {
26
+ breakLoop: true,
27
+ stepResult: StepResult.CONTINUE,
28
+ items: [
29
+ {
30
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
31
+ user: { type: 'user', text: 'Confirmed. Proceed with code generation.' },
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ else {
37
+ putSystemMessage('Declined. Continuing the conversation.');
38
+ return {
39
+ breakLoop: false,
40
+ stepResult: StepResult.CONTINUE,
41
+ items: [
42
+ {
43
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
44
+ user: {
45
+ type: 'user',
46
+ text: 'Declined. Please continue the conversation.',
47
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
48
+ },
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ }
54
+ export async function handleStartCodeGeneration({ askQuestionCall }) {
55
+ putSystemMessage('Proceeding with code generation.');
56
+ return {
57
+ breakLoop: true,
58
+ stepResult: StepResult.CONTINUE,
59
+ items: [
60
+ {
61
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
62
+ user: { type: 'user', text: 'Proceeding with code generation.' },
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ export async function handleRequestFilesContent({ askQuestionCall, prompt, options, }) {
68
+ const requestedFiles = askQuestionCall.args?.requestFilesContent ?? [];
69
+ // the request may be caused be an appearance of a new file, so lets refresh
70
+ refreshFiles();
71
+ const { legitimateFiles, illegitimateFiles } = categorizeLegitimateFiles(requestedFiles);
72
+ const assistant = {
73
+ type: 'assistant',
74
+ text: askQuestionCall.args?.content ?? '',
75
+ functionCalls: [askQuestionCall],
76
+ };
77
+ const user = {
78
+ type: 'user',
79
+ text: '',
80
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
81
+ };
82
+ if (legitimateFiles.length > 0) {
83
+ addFileContentsToPrompt(prompt, legitimateFiles, options);
84
+ }
85
+ user.text =
86
+ illegitimateFiles.length > 0
87
+ ? 'Some files are not legitimate and their content cannot be provided'
88
+ : 'All requested file contents have been provided automatically.';
89
+ return { breakLoop: false, stepResult: StepResult.CONTINUE, items: [{ assistant, user }] };
90
+ }
91
+ export async function handleRequestPermissions({ askQuestionCall, options, }) {
92
+ const userConfirmation = await askUserForConfirmation('The assistant is requesting additional permissions. Do you want to grant them?', false);
93
+ const user = {
94
+ type: 'user',
95
+ text: userConfirmation ? 'Permissions granted.' : 'Permission request denied.',
96
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
97
+ };
98
+ if (userConfirmation) {
99
+ updatePermissions(askQuestionCall, options);
100
+ }
101
+ return {
102
+ breakLoop: false,
103
+ stepResult: StepResult.CONTINUE,
104
+ items: [
105
+ {
106
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
107
+ user,
108
+ },
109
+ ],
110
+ };
111
+ }
112
+ export async function handleRemoveFilesFromContext({ askQuestionCall, prompt, }) {
113
+ const filesToRemove = askQuestionCall.args?.removeFilesFromContext ?? [];
114
+ let userText = '';
115
+ if (filesToRemove.length > 0) {
116
+ removeFileContentsFromPrompt(prompt, filesToRemove);
117
+ putSystemMessage('Context reduction applied', filesToRemove);
118
+ userText = 'Context reduction applied';
119
+ }
120
+ else {
121
+ userText = 'No specific files were provided for context reduction. The context remains unchanged.';
122
+ }
123
+ return {
124
+ breakLoop: false,
125
+ stepResult: StepResult.CONTINUE,
126
+ items: [
127
+ {
128
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
129
+ user: {
130
+ type: 'user',
131
+ text: userText,
132
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
133
+ },
134
+ },
135
+ ],
136
+ };
137
+ }
138
+ export async function handleContextOptimization({ askQuestionCall, prompt, options, generateContentFn, }) {
139
+ const userConfirmation = await askUserForConfirmation('The assistant suggests optimizing the context to reduce token usage, cost, and latency. Do you want to proceed?', false);
140
+ const user = {
141
+ type: 'user',
142
+ text: userConfirmation ? 'Context optimization applied.' : 'Context optimization not applied.',
143
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
144
+ };
145
+ const assistant = {
146
+ type: 'assistant',
147
+ text: askQuestionCall.args?.content ?? '',
148
+ functionCalls: [askQuestionCall],
149
+ };
150
+ if (userConfirmation) {
151
+ // the request may be caused be an appearance of a new file, so lets refresh
152
+ refreshFiles();
153
+ // Execute context optimization step
154
+ putSystemMessage('Executing context optimization step.');
155
+ await executeStepContextOptimization(generateContentFn, [...prompt, assistant, user], options);
156
+ }
157
+ return {
158
+ breakLoop: false,
159
+ stepResult: StepResult.CONTINUE,
160
+ items: [
161
+ {
162
+ assistant,
163
+ user,
164
+ },
165
+ ],
166
+ };
167
+ }
168
+ export async function handleRequestAnswer({ askQuestionCall }) {
169
+ const userText = await askUserForInput('Your answer', askQuestionCall.args?.content ?? '');
170
+ return {
171
+ breakLoop: false,
172
+ stepResult: StepResult.CONTINUE,
173
+ items: [
174
+ {
175
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
176
+ user: {
177
+ type: 'user',
178
+ text: userText,
179
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
180
+ },
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ export async function handleDefaultAction({ askQuestionCall }) {
186
+ return {
187
+ breakLoop: false,
188
+ stepResult: StepResult.CONTINUE,
189
+ items: [
190
+ {
191
+ assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
192
+ user: {
193
+ type: 'user',
194
+ text: "I don't want to start the code generation yet, let's talk a bit more.",
195
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
196
+ },
197
+ },
198
+ ],
199
+ };
200
+ }
201
+ function categorizeLegitimateFiles(requestedFiles) {
202
+ const legitimateFiles = [];
203
+ const illegitimateFiles = [];
204
+ requestedFiles.forEach((filePath) => {
205
+ if (isFilePathLegitimate(filePath)) {
206
+ legitimateFiles.push(filePath);
207
+ }
208
+ else {
209
+ illegitimateFiles.push(filePath);
210
+ }
211
+ });
212
+ return { legitimateFiles, illegitimateFiles };
213
+ }
214
+ function addFileContentsToPrompt(prompt, filesToAdd, options) {
215
+ putSystemMessage('Automatically providing content for legitimate files', filesToAdd);
216
+ const response = getSourceCodeResponse(prompt);
217
+ if (!response || !response.content) {
218
+ throw new Error('Could not find source code response');
219
+ }
220
+ const sourceCode = getSourceCode({ filterPaths: filesToAdd, forceAll: true }, options);
221
+ const contentObj = JSON.parse(response.content);
222
+ filesToAdd.forEach((file) => {
223
+ contentObj[file] = sourceCode[file];
224
+ });
225
+ response.content = JSON.stringify(contentObj);
226
+ }
227
+ function updatePermissions(askQuestionCall, options) {
228
+ if (askQuestionCall.args &&
229
+ typeof askQuestionCall.args === 'object' &&
230
+ 'requestPermissions' in askQuestionCall.args) {
231
+ const permissions = askQuestionCall.args.requestPermissions;
232
+ if (permissions && typeof permissions === 'object') {
233
+ if ('enableImagen' in permissions && permissions.enableImagen) {
234
+ options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
235
+ }
236
+ if ('enableVision' in permissions && permissions.enableVision)
237
+ options.vision = true;
238
+ if ('allowDirectoryCreate' in permissions && permissions.allowDirectoryCreate)
239
+ options.allowDirectoryCreate = true;
240
+ if ('allowFileCreate' in permissions && permissions.allowFileCreate)
241
+ options.allowFileCreate = true;
242
+ if ('allowFileDelete' in permissions && permissions.allowFileDelete)
243
+ options.allowFileDelete = true;
244
+ if ('allowFileMove' in permissions && permissions.allowFileMove)
245
+ options.allowFileMove = true;
246
+ }
247
+ }
248
+ }
249
+ function removeFileContentsFromPrompt(prompt, filesToRemove) {
250
+ const response = getSourceCodeResponse(prompt);
251
+ if (!response || !response.content) {
252
+ throw new Error('Could not find source code response');
253
+ }
254
+ const contentObj = JSON.parse(response.content);
255
+ filesToRemove.forEach((file) => {
256
+ if (contentObj[file]) {
257
+ delete contentObj[file].content;
258
+ }
259
+ });
260
+ response.content = JSON.stringify(contentObj);
261
+ }
262
+ function isFilePathLegitimate(filePath) {
263
+ return getSourceFiles().includes(filePath);
264
+ }
265
+ //# sourceMappingURL=step-ask-question-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-ask-question-handlers.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { FunctionDef, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
2
+ import { CodegenOptions } from '../../main/codegen-types.js';
3
+ import { AskQuestionCall, EscalationDecision, SelfReflectionContext } from './step-ask-question-types.js';
4
+ export declare function performSelfReflection(askQuestionCall: AskQuestionCall, context: SelfReflectionContext, prompt: PromptItem[], functionDefs: FunctionDef[], options: CodegenOptions, generateContentFn: GenerateContentFunction): Promise<EscalationDecision>;
@@ -0,0 +1,48 @@
1
+ export async function performSelfReflection(askQuestionCall, context, prompt, functionDefs, options, generateContentFn) {
2
+ if (!options.selfReflectionEnabled) {
3
+ return {
4
+ shouldEscalate: false,
5
+ reason: 'Self-reflection is disabled by user configuration.',
6
+ };
7
+ }
8
+ const currentTime = Date.now();
9
+ const shouldEscalate = await runSelfReflect(askQuestionCall, prompt, functionDefs, options, generateContentFn);
10
+ if (shouldEscalate) {
11
+ context.escalationCount++;
12
+ context.lastEscalationTime = currentTime;
13
+ }
14
+ return {
15
+ shouldEscalate,
16
+ reason: shouldEscalate
17
+ ? 'Response must be escalated to non cheap model'
18
+ : 'Response should not be escalated to non cheap model',
19
+ };
20
+ }
21
+ async function runSelfReflect(askQuestionCall, prompt, functionDefs, options, generateContentFn) {
22
+ const result = await generateContentFn([
23
+ ...prompt,
24
+ { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
25
+ {
26
+ type: 'user',
27
+ text: `Please reflect on your last response provided in \`askQuestion\` function call in the context of our conversation by considering these questions:
28
+
29
+ - Did you fully understand and address the user's request?
30
+ - Was your response clear, accurate, and helpful?
31
+ - Are you confident that no further clarification or escalation is needed?
32
+
33
+ Common problems/pitfals:
34
+
35
+ - There is a in-depth question to the user, but actionType is set to confirmCodeGeneration, while it should be requestAnswer
36
+ - Question was already answered before, but the assistant is asking the same question again
37
+ - The question content is incomplete, for example the question content ends with a colon.
38
+ - Saying that an analysis will be done, instead of actually doing the analysis.
39
+
40
+ If your response meets these criteria, continue the conversation as usual. If you believe that escalating to a more advanced model would significantly improve assistance, please indicate that using the \`shouldEscalate\` parameter.`,
41
+ functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
42
+ },
43
+ ], functionDefs, 'askQuestionReflect', 0.2, true, options);
44
+ // TODO: return reason, and use it to improve next question call
45
+ const shouldEscalate = result.find((call) => call.name === 'askQuestionReflect')?.args?.shouldEscalate;
46
+ return shouldEscalate > 50;
47
+ }
48
+ //# sourceMappingURL=step-ask-question-reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-ask-question-reflect.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-reflect.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,eAAgC,EAChC,OAA8B,EAC9B,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnC,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE,oDAAoD;SAC7D,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE/G,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,CAAC,kBAAkB,GAAG,WAAW,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,cAAc;QACd,MAAM,EAAE,cAAc;YACpB,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,qDAAqD;KAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,eAAgC,EAChC,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;QACE,GAAG,MAAM;QAET,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;QAClG;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;;;;;;;;;;;;;wOAa0N;YAChO,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;SACpG;KACF,EACD,YAAY,EACZ,oBAAoB,EACpB,GAAG,EACH,IAAI,EACJ,OAAO,CACR,CAAC;IACF,gEAAgE;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,EAAE,IAAI,EAAE,cAAwB,CAAC;IACjH,OAAO,cAAc,GAAG,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { FunctionCall, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
2
+ import { CodegenOptions } from '../../main/codegen-types.js';
3
+ import { StepResult } from './steps-types.js';
4
+ export type ActionType = 'requestAnswer' | 'requestPermissions' | 'requestFilesContent' | 'removeFilesFromContext' | 'confirmCodeGeneration' | 'startCodeGeneration' | 'cancelCodeGeneration' | 'contextOptimization';
5
+ type AskQuestionArgs = {
6
+ actionType: ActionType;
7
+ content: string;
8
+ requestFilesContent?: string[];
9
+ requestPermissions?: Record<'allowDirectoryCreate' | 'allowFileCreate' | 'allowFileDelete' | 'allowFileMove' | 'enableVision' | 'enableImagen', boolean>;
10
+ removeFilesFromContext?: string[];
11
+ };
12
+ export type AskQuestionCall = FunctionCall<AskQuestionArgs>;
13
+ export interface AssistantItem {
14
+ type: 'assistant';
15
+ text: string;
16
+ functionCalls: FunctionCall[];
17
+ }
18
+ export interface UserItem {
19
+ type: 'user';
20
+ text: string;
21
+ functionResponses?: Array<{
22
+ name: string;
23
+ call_id: string;
24
+ content: string | undefined;
25
+ }>;
26
+ }
27
+ export interface ActionResult {
28
+ breakLoop: boolean;
29
+ stepResult: StepResult;
30
+ items: Array<{
31
+ assistant: AssistantItem;
32
+ user: UserItem;
33
+ }>;
34
+ }
35
+ export type ActionHandlerProps = {
36
+ askQuestionCall: AskQuestionCall;
37
+ prompt: PromptItem[];
38
+ options: CodegenOptions;
39
+ generateContentFn: GenerateContentFunction;
40
+ messages: {
41
+ contextSourceCode: (paths: string[], pathsOnly: boolean) => string;
42
+ };
43
+ };
44
+ export type ActionHandler = (props: ActionHandlerProps) => Promise<ActionResult>;
45
+ export interface EscalationDecision {
46
+ shouldEscalate: boolean;
47
+ reason: string;
48
+ }
49
+ export interface SelfReflectionContext {
50
+ escalationCount: number;
51
+ lastEscalationTime: number;
52
+ }
53
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=step-ask-question-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-ask-question-types.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-types.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
- import { FunctionCall, FunctionDef, PromptItem } from '../../ai-service/common.js';
1
+ import { FunctionDef, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
2
2
  import { StepResult } from './steps-types.js';
3
3
  import { CodegenOptions } from '../../main/codegen-types.js';
4
- export declare function executeStepAskQuestion(generateContentFn: (prompt: PromptItem[], functionDefs: FunctionDef[], requiredFunctionName: string, temperature: number, cheap: boolean, options: CodegenOptions) => Promise<FunctionCall[]>, prompt: PromptItem[], functionDefs: FunctionDef[], temperature: number, cheap: boolean, messages: {
4
+ export declare function executeStepAskQuestion(generateContentFn: GenerateContentFunction, prompt: PromptItem[], functionDefs: FunctionDef[], temperature: number, messages: {
5
5
  contextSourceCode: (paths: string[], pathsOnly: boolean) => string;
6
6
  }, options: CodegenOptions): Promise<StepResult>;
@@ -1,97 +1,80 @@
1
1
  import { StepResult } from './steps-types.js';
2
- import { askUserForConfirmation, askUserForInput } from '../../main/common/user-actions.js';
3
2
  import { putAssistantMessage, putSystemMessage, putUserMessage } from '../../main/common/content-bus.js';
4
3
  import { abortController } from '../../main/interactive/codegen-worker.js';
5
- export async function executeStepAskQuestion(generateContentFn, prompt, functionDefs, temperature, cheap, messages, options) {
4
+ import { validateAndRecoverSingleResult } from './step-validate-recover.js';
5
+ import { handleCancelCodeGeneration, handleConfirmCodeGeneration, handleStartCodeGeneration, handleRequestFilesContent, handleRequestPermissions, handleRemoveFilesFromContext, handleRequestAnswer, handleDefaultAction, handleContextOptimization, } from './step-ask-question-handlers.js';
6
+ import { performSelfReflection } from './step-ask-question-reflect.js';
7
+ export async function executeStepAskQuestion(generateContentFn, prompt, functionDefs, temperature, messages, options) {
6
8
  console.log('Allowing the assistant to ask a question...');
7
- const questionAsked = false;
8
- while (!questionAsked) {
9
- const askQuestionResult = await generateContentFn(prompt, functionDefs, 'askQuestion', temperature, cheap, options);
10
- const askQuestionCall = askQuestionResult.find((call) => call.name === 'askQuestion');
11
- if (askQuestionCall) {
9
+ const selfReflectionContext = {
10
+ escalationCount: 0,
11
+ lastEscalationTime: 0,
12
+ };
13
+ while (!abortController?.signal.aborted) {
14
+ try {
15
+ const askQuestionCall = await getAskQuestionCall(generateContentFn, prompt, functionDefs, temperature, options, selfReflectionContext);
16
+ if (!askQuestionCall) {
17
+ break;
18
+ }
12
19
  console.log('Assistant asks:', askQuestionCall.args);
13
20
  if (askQuestionCall.args?.content) {
14
- putAssistantMessage(askQuestionCall.args?.content, askQuestionCall.args);
15
- }
16
- if (askQuestionCall.args?.stopCodegen) {
17
- putSystemMessage('Assistant requested to stop code generation. Exiting...');
18
- return StepResult.BREAK;
19
- }
20
- else if (!askQuestionCall.args?.shouldPrompt) {
21
- putSystemMessage('Proceeding with code generation.');
22
- break;
21
+ putAssistantMessage(askQuestionCall.args.content, askQuestionCall.args);
23
22
  }
24
- const fileContentRequested = (askQuestionCall.args?.requestFilesContent?.length ?? 0) > 0;
25
- const permissionsRequested = Object.entries(askQuestionCall.args?.requestPermissions ?? {}).filter(([, enabled]) => enabled).length > 0;
26
- const userAnswer = askQuestionCall.args?.shouldPrompt
27
- ? fileContentRequested
28
- ? (await askUserForConfirmation('The assistant is requesting file contents. Do you want to provide them?', true))
29
- ? 'Providing requested files content.'
30
- : 'Request for file contents denied.'
31
- : permissionsRequested
32
- ? (await askUserForConfirmation('The assistant is requesting additional permissions. Do you want to grant them?', false))
33
- ? 'Permissions granted.'
34
- : 'Permission request denied.'
35
- : await askUserForInput('Your answer', askQuestionCall.args?.content)
36
- : "Let's proceed with code generation.";
37
- putUserMessage(userAnswer);
38
- if (permissionsRequested && askQuestionCall.args?.requestPermissions && userAnswer === 'Permissions granted.') {
39
- if (askQuestionCall.args?.requestPermissions.enableImagen) {
40
- options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
41
- }
42
- if (askQuestionCall.args?.requestPermissions.enableVision) {
43
- options.vision = true;
44
- }
45
- if (askQuestionCall.args?.requestPermissions.allowDirectoryCreate) {
46
- options.allowDirectoryCreate = true;
47
- }
48
- if (askQuestionCall.args?.requestPermissions.allowFileCreate) {
49
- options.allowFileCreate = true;
50
- }
51
- if (askQuestionCall.args?.requestPermissions.allowFileDelete) {
52
- options.allowFileDelete = true;
53
- }
54
- if (askQuestionCall.args?.requestPermissions.allowFileMove) {
55
- options.allowFileMove = true;
23
+ const actionType = askQuestionCall.args?.actionType;
24
+ if (actionType) {
25
+ const actionHandler = getActionHandler(actionType);
26
+ const result = await actionHandler({ askQuestionCall, prompt, options, messages, generateContentFn });
27
+ // This is important to display the content to the user interface (ui or interactive cli)
28
+ putUserMessage(result.items.slice(-1)[0].user.text);
29
+ if (result.breakLoop) {
30
+ return result.stepResult;
56
31
  }
32
+ prompt.push(...result.items.map(({ assistant, user }) => [assistant, user]).flat());
33
+ console.log('The question was answered');
57
34
  }
58
- const assistantItem = { type: 'assistant', functionCalls: [askQuestionCall] };
59
- const userItem = {
60
- type: 'user',
61
- text: userAnswer,
62
- functionResponses: [
63
- {
64
- name: 'askQuestion',
65
- call_id: askQuestionCall.id,
66
- content: undefined,
67
- },
68
- ],
69
- };
70
- prompt.push(assistantItem, userItem);
71
- const fileContentProvided = fileContentRequested && userAnswer === 'Providing requested files content.';
72
- if (fileContentProvided) {
73
- assistantItem.functionCalls.push({
74
- name: 'getSourceCode',
75
- args: { filePaths: askQuestionCall.args.requestFilesContent },
76
- id: askQuestionCall.id + '_src',
77
- });
78
- userItem.functionResponses.push({
79
- name: 'getSourceCode',
80
- content: messages.contextSourceCode(askQuestionCall.args.requestFilesContent, true),
81
- call_id: askQuestionCall.id + '_src',
82
- });
83
- console.log('File content provided.');
84
- }
85
- console.log('The question was answered', userAnswer);
86
- if (abortController?.signal.aborted) {
87
- return StepResult.BREAK;
35
+ else {
36
+ console.error('Invalid action type received');
37
+ break;
88
38
  }
89
39
  }
90
- else {
91
- console.log('Assistant did not ask a question. Proceeding with code generation.');
92
- break;
40
+ catch (error) {
41
+ console.error('Error in executeStepAskQuestion:', error);
42
+ putSystemMessage(`An error occurred: ${error instanceof Error ? error.message : String(error)}`);
43
+ return StepResult.BREAK;
93
44
  }
94
45
  }
95
- return StepResult.CONTINUE;
46
+ putSystemMessage('Assistant did not ask a question. This unexpected, we need to abort.');
47
+ return StepResult.BREAK;
48
+ }
49
+ async function getAskQuestionCall(generateContentFn, prompt, functionDefs, temperature, options, selfReflectionContext) {
50
+ const askQuestionRequest = [prompt, functionDefs, 'askQuestion', temperature, true, options];
51
+ let askQuestionResult = await generateContentFn(...askQuestionRequest);
52
+ askQuestionResult = await validateAndRecoverSingleResult(askQuestionRequest, askQuestionResult, generateContentFn);
53
+ const cheapModelResponse = askQuestionResult.find((call) => call.name === 'askQuestion');
54
+ if (cheapModelResponse) {
55
+ const escalationDecision = await performSelfReflection(cheapModelResponse, selfReflectionContext, prompt, functionDefs, options, generateContentFn);
56
+ if (escalationDecision.shouldEscalate) {
57
+ console.log('Self-reflection suggests escalating to non-cheap model.');
58
+ // Re-run with non-cheap model
59
+ const nonCheapRequest = [prompt, functionDefs, 'askQuestion', temperature, false, options];
60
+ let nonCheapResult = await generateContentFn(...nonCheapRequest);
61
+ nonCheapResult = await validateAndRecoverSingleResult(nonCheapRequest, nonCheapResult, generateContentFn);
62
+ return nonCheapResult.find((call) => call.name === 'askQuestion');
63
+ }
64
+ }
65
+ return cheapModelResponse;
66
+ }
67
+ function getActionHandler(actionType) {
68
+ const handlers = {
69
+ cancelCodeGeneration: handleCancelCodeGeneration,
70
+ confirmCodeGeneration: handleConfirmCodeGeneration,
71
+ startCodeGeneration: handleStartCodeGeneration,
72
+ requestFilesContent: handleRequestFilesContent,
73
+ requestPermissions: handleRequestPermissions,
74
+ removeFilesFromContext: handleRemoveFilesFromContext,
75
+ requestAnswer: handleRequestAnswer,
76
+ contextOptimization: handleContextOptimization,
77
+ };
78
+ return handlers[actionType] || handleDefaultAction;
96
79
  }
97
80
  //# sourceMappingURL=step-ask-question.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,iBAA0C,EAC1C,MAAoB,EACpB,YAA2B,EAC3B,WAAmB,EACnB,QAEC,EACD,OAAuB;IAEvB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,MAAM,qBAAqB,GAA0B;QACnD,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;KACtB,CAAC;IAEF,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAC9C,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,WAAW,EACX,OAAO,EACP,qBAAqB,CACtB,CAAC;YAEF,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC;YACpD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAEtG,yFAAyF;gBACzF,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEpD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,OAAO,MAAM,CAAC,UAAU,CAAC;gBAC3B,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC9C,MAAM;YACR,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,gBAAgB,CAAC,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjG,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,sEAAsE,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,KAAK,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,iBAA0C,EAC1C,MAAoB,EACpB,YAA2B,EAC3B,WAAmB,EACnB,OAAuB,EACvB,qBAA4C;IAE5C,MAAM,kBAAkB,GAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClH,IAAI,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACvE,iBAAiB,GAAG,MAAM,8BAA8B,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAEnH,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAE1E,CAAC;IAEd,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CACpD,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,EACN,YAAY,EACZ,OAAO,EACP,iBAAiB,CAClB,CAAC;QAEF,IAAI,kBAAkB,CAAC,cAAc,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,8BAA8B;YAC9B,MAAM,eAAe,GAAwB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAChH,IAAI,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,eAAe,CAAC,CAAC;YACjE,cAAc,GAAG,MAAM,8BAA8B,CAAC,eAAe,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAC1G,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAgC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB;IAC9C,MAAM,QAAQ,GAAsC;QAClD,oBAAoB,EAAE,0BAA0B;QAChD,qBAAqB,EAAE,2BAA2B;QAClD,mBAAmB,EAAE,yBAAyB;QAC9C,mBAAmB,EAAE,yBAAyB;QAC9C,kBAAkB,EAAE,wBAAwB;QAC5C,sBAAsB,EAAE,4BAA4B;QACpD,aAAa,EAAE,mBAAmB;QAClC,mBAAmB,EAAE,yBAAyB;KAC/C,CAAC;IAEF,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC;AACrD,CAAC"}
@@ -1,6 +1,4 @@
1
1
  import { GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
2
2
  import { CodegenOptions } from '../../main/codegen-types.js';
3
3
  import { StepResult } from './steps-types.js';
4
- export declare function executeStepContextOptimization(generateContentFn: GenerateContentFunction, prompt: PromptItem[], sourceCode: Record<string, {
5
- content: string | null;
6
- }>, options: CodegenOptions): Promise<StepResult>;
4
+ export declare function executeStepContextOptimization(generateContentFn: GenerateContentFunction, prompt: PromptItem[], options: CodegenOptions): Promise<StepResult>;