genaicode 0.6.0 → 0.7.0

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 (217) hide show
  1. package/README.md +1 -3
  2. package/dist/ai-service/ai-studio.js +7 -1
  3. package/dist/ai-service/ai-studio.js.map +1 -1
  4. package/dist/ai-service/anthropic.js +49 -19
  5. package/dist/ai-service/anthropic.js.map +1 -1
  6. package/dist/ai-service/chat-gpt.js +28 -11
  7. package/dist/ai-service/chat-gpt.js.map +1 -1
  8. package/dist/ai-service/common.d.ts +5 -4
  9. package/dist/ai-service/common.js +3 -4
  10. package/dist/ai-service/common.js.map +1 -1
  11. package/dist/ai-service/common.test.js +1 -1
  12. package/dist/ai-service/vertex-ai-claude.js +1 -1
  13. package/dist/ai-service/vertex-ai-claude.js.map +1 -1
  14. package/dist/ai-service/vertex-ai.js +7 -1
  15. package/dist/ai-service/vertex-ai.js.map +1 -1
  16. package/dist/cli/cli-options.js +0 -12
  17. package/dist/cli/cli-options.js.map +1 -1
  18. package/dist/cli/cli-params.d.ts +0 -3
  19. package/dist/cli/cli-params.js +0 -9
  20. package/dist/cli/cli-params.js.map +1 -1
  21. package/dist/cli/validate-cli-params.js +1 -7
  22. package/dist/cli/validate-cli-params.js.map +1 -1
  23. package/dist/cli/validate-cli-params.test.js +1 -1
  24. package/dist/cli/validate-cli-params.test.js.map +1 -1
  25. package/dist/eval/codegen-summary.test.d.ts +1 -0
  26. package/dist/eval/codegen-summary.test.js +91 -0
  27. package/dist/eval/codegen-summary.test.js.map +1 -0
  28. package/dist/eval/current-prompt-plugin.d.ts +3 -0
  29. package/dist/eval/current-prompt-plugin.js +10 -0
  30. package/dist/eval/current-prompt-plugin.js.map +1 -0
  31. package/dist/eval/data/current-prompt.d.ts +73 -0
  32. package/dist/eval/data/current-prompt.js +104 -0
  33. package/dist/eval/data/current-prompt.js.map +1 -0
  34. package/dist/eval/data/prompt-assistant-image.d.ts +49 -0
  35. package/dist/eval/data/prompt-assistant-image.js +67 -0
  36. package/dist/eval/data/prompt-assistant-image.js.map +1 -0
  37. package/dist/eval/data/prompt3.d.ts +34 -0
  38. package/dist/eval/data/prompt3.js +71 -0
  39. package/dist/eval/data/prompt3.js.map +1 -0
  40. package/dist/eval/prompt-debug.test.d.ts +1 -0
  41. package/dist/eval/prompt-debug.test.js +71 -0
  42. package/dist/eval/prompt-debug.test.js.map +1 -0
  43. package/dist/eval/prompt2.d.ts +34 -0
  44. package/dist/eval/prompt2.js +125 -0
  45. package/dist/eval/prompt2.js.map +1 -0
  46. package/dist/files/read-files.d.ts +2 -2
  47. package/dist/files/read-files.js +13 -7
  48. package/dist/files/read-files.js.map +1 -1
  49. package/dist/files/read-files.test.js +12 -6
  50. package/dist/files/read-files.test.js.map +1 -1
  51. package/dist/files/source-code-tree.d.ts +12 -0
  52. package/dist/files/source-code-tree.js +27 -0
  53. package/dist/files/source-code-tree.js.map +1 -0
  54. package/dist/main/codegen-types.d.ts +9 -4
  55. package/dist/main/codegen-utils.d.ts +1 -1
  56. package/dist/main/codegen-utils.js +1 -3
  57. package/dist/main/codegen-utils.js.map +1 -1
  58. package/dist/main/codegen.ai-services.test.d.ts +3 -0
  59. package/dist/main/codegen.ai-services.test.js +198 -0
  60. package/dist/main/codegen.ai-services.test.js.map +1 -0
  61. package/dist/main/codegen.cli-options.test.d.ts +3 -0
  62. package/dist/main/codegen.cli-options.test.js +171 -0
  63. package/dist/main/codegen.cli-options.test.js.map +1 -0
  64. package/dist/main/codegen.image-generation.test.d.ts +3 -0
  65. package/dist/main/codegen.image-generation.test.js +187 -0
  66. package/dist/main/codegen.image-generation.test.js.map +1 -0
  67. package/dist/main/codegen.js +4 -7
  68. package/dist/main/codegen.js.map +1 -1
  69. package/dist/main/codegen.test-utils.d.ts +81 -0
  70. package/dist/main/codegen.test-utils.js +88 -0
  71. package/dist/main/codegen.test-utils.js.map +1 -0
  72. package/dist/main/codegen.test.js +47 -28
  73. package/dist/main/codegen.test.js.map +1 -1
  74. package/dist/main/common/content-bus-types.d.ts +6 -0
  75. package/dist/main/common/content-bus.d.ts +2 -2
  76. package/dist/main/common/content-bus.js +3 -1
  77. package/dist/main/common/content-bus.js.map +1 -1
  78. package/dist/main/common/user-actions.d.ts +8 -2
  79. package/dist/main/common/user-actions.js.map +1 -1
  80. package/dist/main/interactive/codegen-interactive.js +0 -4
  81. package/dist/main/interactive/codegen-interactive.js.map +1 -1
  82. package/dist/main/interactive/codegen-interactive.test.js +0 -6
  83. package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
  84. package/dist/main/interactive/common.d.ts +1 -1
  85. package/dist/main/interactive/common.js +0 -2
  86. package/dist/main/interactive/common.js.map +1 -1
  87. package/dist/main/interactive/configure.js +0 -2
  88. package/dist/main/interactive/configure.js.map +1 -1
  89. package/dist/main/interactive/help.js +0 -2
  90. package/dist/main/interactive/help.js.map +1 -1
  91. package/dist/main/interactive/task-file.js +1 -1
  92. package/dist/main/interactive/task-file.js.map +1 -1
  93. package/dist/main/interactive/text-prompt.js +1 -1
  94. package/dist/main/interactive/text-prompt.js.map +1 -1
  95. package/dist/main/interactive/user-action-handlers.js +4 -2
  96. package/dist/main/interactive/user-action-handlers.js.map +1 -1
  97. package/dist/main/plugin-loader.d.ts +2 -1
  98. package/dist/main/plugin-loader.js +8 -0
  99. package/dist/main/plugin-loader.js.map +1 -1
  100. package/dist/main/ui/backend/api.js +9 -3
  101. package/dist/main/ui/backend/api.js.map +1 -1
  102. package/dist/main/ui/backend/service.d.ts +2 -1
  103. package/dist/main/ui/backend/service.js +6 -3
  104. package/dist/main/ui/backend/service.js.map +1 -1
  105. package/dist/main/ui/frontend/assets/{index-Dk_qaEQg.js → index-5e3ykhy6.js} +129 -103
  106. package/dist/main/ui/frontend/index.html +1 -1
  107. package/dist/main/ui/user-action-handlers.js +1 -1
  108. package/dist/main/ui/user-action-handlers.js.map +1 -1
  109. package/dist/prompt/function-calling.js +8 -3
  110. package/dist/prompt/function-calling.js.map +1 -1
  111. package/dist/prompt/function-defs/ask-question.d.ts +5 -0
  112. package/dist/prompt/function-defs/ask-question.js +140 -60
  113. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  114. package/dist/prompt/function-defs/codegen-planning.d.ts +8 -0
  115. package/dist/prompt/function-defs/codegen-planning.js +50 -0
  116. package/dist/prompt/function-defs/codegen-planning.js.map +1 -0
  117. package/dist/prompt/function-defs/codegen-summary.js +2 -2
  118. package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
  119. package/dist/prompt/function-defs/get-source-code.js +32 -2
  120. package/dist/prompt/function-defs/get-source-code.js.map +1 -1
  121. package/dist/prompt/function-defs/optimize-context.js +35 -12
  122. package/dist/prompt/function-defs/optimize-context.js.map +1 -1
  123. package/dist/prompt/limits.js +2 -2
  124. package/dist/prompt/limits.js.map +1 -1
  125. package/dist/prompt/limits.test.js +3 -3
  126. package/dist/prompt/limits.test.js.map +1 -1
  127. package/dist/prompt/prompt-codegen.js +7 -79
  128. package/dist/prompt/prompt-codegen.js.map +1 -1
  129. package/dist/prompt/prompt-codegen.test.js +3 -10
  130. package/dist/prompt/prompt-codegen.test.js.map +1 -1
  131. package/dist/prompt/prompt-service-ask-question.test.js +26 -81
  132. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
  133. package/dist/prompt/prompt-service.ai-services.test.d.ts +1 -0
  134. package/dist/prompt/prompt-service.ai-services.test.js +149 -0
  135. package/dist/prompt/prompt-service.ai-services.test.js.map +1 -0
  136. package/dist/prompt/prompt-service.context-optimization.test.d.ts +1 -0
  137. package/dist/prompt/prompt-service.context-optimization.test.js +212 -0
  138. package/dist/prompt/prompt-service.context-optimization.test.js.map +1 -0
  139. package/dist/prompt/prompt-service.image-handling.test.d.ts +1 -0
  140. package/dist/prompt/prompt-service.image-handling.test.js +212 -0
  141. package/dist/prompt/prompt-service.image-handling.test.js.map +1 -0
  142. package/dist/prompt/prompt-service.js +36 -29
  143. package/dist/prompt/prompt-service.js.map +1 -1
  144. package/dist/prompt/prompt-service.test-utils.d.ts +66 -0
  145. package/dist/prompt/prompt-service.test-utils.js +169 -0
  146. package/dist/prompt/prompt-service.test-utils.js.map +1 -0
  147. package/dist/prompt/prompt-service.test.js +96 -20
  148. package/dist/prompt/prompt-service.test.js.map +1 -1
  149. package/dist/prompt/prompt-service.validation-recovery.test.d.ts +1 -0
  150. package/dist/prompt/prompt-service.validation-recovery.test.js +263 -0
  151. package/dist/prompt/prompt-service.validation-recovery.test.js.map +1 -0
  152. package/dist/prompt/static-prompts.d.ts +16 -0
  153. package/dist/prompt/static-prompts.js +22 -0
  154. package/dist/prompt/static-prompts.js.map +1 -0
  155. package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js +1 -1
  156. package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js.map +1 -1
  157. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.d.ts +1 -1
  158. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +7 -4
  159. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +1 -1
  160. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +6 -4
  161. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +1 -1
  162. package/dist/prompt/steps/step-ask-question/handlers/default-action.js +1 -2
  163. package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
  164. package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.d.ts +2 -0
  165. package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js +86 -0
  166. package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js.map +1 -0
  167. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.d.ts +2 -0
  168. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js +103 -0
  169. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js.map +1 -0
  170. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.d.ts +2 -0
  171. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +22 -0
  172. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -0
  173. package/dist/prompt/steps/step-ask-question/handlers/handler-utils.d.ts +0 -0
  174. package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js +2 -0
  175. package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js.map +1 -0
  176. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.d.ts +1 -1
  177. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +58 -13
  178. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +1 -1
  179. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.d.ts +1 -1
  180. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +110 -10
  181. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +1 -1
  182. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.d.ts +1 -1
  183. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +49 -24
  184. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
  185. package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js +1 -1
  186. package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js.map +1 -1
  187. package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js +1 -0
  188. package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js.map +1 -1
  189. package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +22 -19
  190. package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -4
  191. package/dist/prompt/steps/step-ask-question/step-ask-question.js +18 -29
  192. package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
  193. package/dist/prompt/steps/step-codegen-planning.d.ts +10 -0
  194. package/dist/prompt/steps/step-codegen-planning.js +69 -0
  195. package/dist/prompt/steps/step-codegen-planning.js.map +1 -0
  196. package/dist/prompt/steps/step-context-optimization.js +110 -80
  197. package/dist/prompt/steps/step-context-optimization.js.map +1 -1
  198. package/dist/prompt/steps/step-context-optimization.test.d.ts +2 -0
  199. package/dist/prompt/steps/step-context-optimization.test.js +456 -0
  200. package/dist/prompt/steps/step-context-optimization.test.js.map +1 -0
  201. package/dist/prompt/steps/step-generate-image.d.ts +8 -1
  202. package/dist/prompt/steps/step-generate-image.js +1 -0
  203. package/dist/prompt/steps/step-generate-image.js.map +1 -1
  204. package/dist/prompt/steps/step-summarization.d.ts +0 -1
  205. package/dist/prompt/steps/step-summarization.js +6 -3
  206. package/dist/prompt/steps/step-summarization.js.map +1 -1
  207. package/dist/prompt/steps/step-validate-recover.js +24 -15
  208. package/dist/prompt/steps/step-validate-recover.js.map +1 -1
  209. package/dist/prompt/systemprompt.d.ts +2 -2
  210. package/dist/prompt/systemprompt.js +74 -176
  211. package/dist/prompt/systemprompt.js.map +1 -1
  212. package/dist/prompt/systemprompt.test.js +2 -3
  213. package/dist/prompt/systemprompt.test.js.map +1 -1
  214. package/dist/vite-genaicode/vite-genaicode-plugin.d.ts +2 -1
  215. package/dist/vite-genaicode/vite-genaicode-plugin.js +15 -2
  216. package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
  217. package/package.json +3 -2
@@ -0,0 +1,103 @@
1
+ import { askUserForInput } from '../../../../main/common/user-actions.js';
2
+ import { putAssistantMessage, putSystemMessage } from '../../../../main/common/content-bus.js';
3
+ import { StepResult } from '../../steps-types.js';
4
+ import { executeStepGenerateImage } from '../../step-generate-image.js';
5
+ import { getFunctionDefs } from '../../../function-calling.js';
6
+ export async function handleSendMessageWithImage({ askQuestionCall, options, generateContentFn, prompt, generateImageFn, }) {
7
+ if (!options.imagen) {
8
+ putSystemMessage('Image generation is not enabled. Please enable it using --imagen parameter.');
9
+ return {
10
+ breakLoop: true,
11
+ stepResult: StepResult.BREAK,
12
+ items: [],
13
+ };
14
+ }
15
+ const [sendMessageWithImageCall] = (await generateContentFn([
16
+ ...prompt,
17
+ {
18
+ type: 'assistant',
19
+ text: askQuestionCall.args?.message ?? '',
20
+ },
21
+ {
22
+ type: 'user',
23
+ text: 'Yes, you can generate an image.',
24
+ },
25
+ ], getFunctionDefs(), 'sendMessageWithImage', 0.7, true, options));
26
+ if (!sendMessageWithImageCall) {
27
+ return {
28
+ breakLoop: true,
29
+ stepResult: StepResult.BREAK,
30
+ items: [],
31
+ };
32
+ }
33
+ // Get the image generation request from the args
34
+ const imageGenerationRequest = sendMessageWithImageCall.args;
35
+ if (!imageGenerationRequest?.prompt) {
36
+ putSystemMessage('Image generation request with prompt is required for sendMessageWithImage action.');
37
+ return {
38
+ breakLoop: true,
39
+ stepResult: StepResult.BREAK,
40
+ items: [],
41
+ };
42
+ }
43
+ // Create a temporary file path for the generated image
44
+ const tempImagePath = `/tmp/question-image-${Date.now()}.png`;
45
+ // Generate the image using generateImage function call
46
+ const generateImageCall = {
47
+ id: 'generate_image_' + sendMessageWithImageCall.id,
48
+ name: 'generateImage',
49
+ args: {
50
+ prompt: imageGenerationRequest.prompt,
51
+ filePath: tempImagePath,
52
+ width: 1024,
53
+ height: 1024,
54
+ explanation: 'Generating image to support the question',
55
+ ...(imageGenerationRequest.contextImage && { contextImagePath: imageGenerationRequest.contextImage }),
56
+ },
57
+ };
58
+ // Execute image generation
59
+ const downloadFileCall = await executeStepGenerateImage(generateImageFn, generateImageCall);
60
+ // If image generation failed, the downloadFileCall will be an explanation
61
+ if (!downloadFileCall.args?.downloadUrl) {
62
+ putSystemMessage('Failed to generate image for the question.');
63
+ return {
64
+ breakLoop: true,
65
+ stepResult: StepResult.BREAK,
66
+ items: [],
67
+ };
68
+ }
69
+ const response = await fetch(downloadFileCall.args?.downloadUrl);
70
+ const arrayBuffer = await response.arrayBuffer();
71
+ const buffer = Buffer.from(arrayBuffer);
72
+ const imageData = {
73
+ base64url: buffer.toString('base64'),
74
+ mediaType: 'image/png',
75
+ };
76
+ putAssistantMessage('Here is the image to support the question:', generateImageCall.args, [], [imageData]);
77
+ // Get user's response with the image displayed
78
+ const inputResponse = await askUserForInput('Your answer', askQuestionCall.args?.message ?? '');
79
+ if (inputResponse.options?.aiService) {
80
+ options.aiService = inputResponse.options.aiService;
81
+ }
82
+ // Return the conversation items with the generated image included in the context
83
+ return {
84
+ breakLoop: false,
85
+ stepResult: StepResult.CONTINUE,
86
+ items: [
87
+ {
88
+ assistant: {
89
+ type: 'assistant',
90
+ text: askQuestionCall.args?.message ?? '',
91
+ functionCalls: [generateImageCall],
92
+ },
93
+ user: {
94
+ type: 'user',
95
+ text: inputResponse.answer,
96
+ images: [imageData],
97
+ functionResponses: [{ name: generateImageCall.name, call_id: generateImageCall.id, content: undefined }],
98
+ },
99
+ },
100
+ ],
101
+ };
102
+ }
103
+ //# sourceMappingURL=handle-send-message-with-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-send-message-with-image.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { ActionHandlerProps, ActionResult } from '../step-ask-question-types.js';
2
+ export declare function handleSendMessage({ askQuestionCall, options }: ActionHandlerProps): Promise<ActionResult>;
@@ -0,0 +1,22 @@
1
+ import { askUserForInput } from '../../../../main/common/user-actions.js';
2
+ import { StepResult } from '../../steps-types.js';
3
+ export async function handleSendMessage({ askQuestionCall, options }) {
4
+ const response = await askUserForInput('Your answer', askQuestionCall.args?.message ?? '');
5
+ if (response.options?.aiService) {
6
+ options.aiService = response.options.aiService;
7
+ }
8
+ return {
9
+ breakLoop: false,
10
+ stepResult: StepResult.CONTINUE,
11
+ items: [
12
+ {
13
+ assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '' },
14
+ user: {
15
+ type: 'user',
16
+ text: response.answer,
17
+ },
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ //# sourceMappingURL=handle-send-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-send-message.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/handle-send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAE,eAAe,EAAE,OAAO,EAAsB;IACtF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAC3F,IAAI,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;IACjD,CAAC;IACD,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE;gBAC3E,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ,CAAC,MAAM;iBACtB;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=handler-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-utils.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/handler-utils.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
1
  import { ActionHandlerProps, ActionResult } from '../step-ask-question-types.js';
2
- export declare function handleRemoveFilesFromContext({ askQuestionCall, prompt, }: ActionHandlerProps): Promise<ActionResult>;
2
+ export declare function handleRemoveFilesFromContext({ askQuestionCall, generateContentFn, prompt, options, }: ActionHandlerProps): Promise<ActionResult>;
@@ -1,8 +1,27 @@
1
+ import { getSourceCodeTree, parseSourceCodeTree } from '../../../../files/source-code-tree.js';
1
2
  import { putSystemMessage } from '../../../../main/common/content-bus.js';
3
+ import { getFunctionDefs } from '../../../function-calling.js';
2
4
  import { StepResult } from '../../steps-types.js';
3
- import { getSourceCodeResponse } from '../../steps-utils.js';
4
- export async function handleRemoveFilesFromContext({ askQuestionCall, prompt, }) {
5
- const filesToRemove = askQuestionCall.args?.removeFilesFromContext ?? [];
5
+ export async function handleRemoveFilesFromContext({ askQuestionCall, generateContentFn, prompt, options, }) {
6
+ const [removeFilesFromContextCall] = (await generateContentFn([
7
+ ...prompt,
8
+ {
9
+ type: 'assistant',
10
+ text: askQuestionCall.args?.message ?? '',
11
+ },
12
+ {
13
+ type: 'user',
14
+ text: 'Yes, you can request the removal of files from context.',
15
+ },
16
+ ], getFunctionDefs(), 'removeFilesFromContext', 0.7, true, options));
17
+ if (!removeFilesFromContextCall) {
18
+ return {
19
+ breakLoop: true,
20
+ stepResult: StepResult.BREAK,
21
+ items: [],
22
+ };
23
+ }
24
+ const filesToRemove = removeFilesFromContextCall.args?.filePaths ?? [];
6
25
  let userText = '';
7
26
  if (filesToRemove.length > 0) {
8
27
  removeFileContentsFromPrompt(prompt, filesToRemove);
@@ -17,27 +36,53 @@ export async function handleRemoveFilesFromContext({ askQuestionCall, prompt, })
17
36
  stepResult: StepResult.CONTINUE,
18
37
  items: [
19
38
  {
20
- assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
39
+ assistant: {
40
+ type: 'assistant',
41
+ text: askQuestionCall.args?.message ?? '',
42
+ functionCalls: [removeFilesFromContextCall],
43
+ },
21
44
  user: {
22
45
  type: 'user',
23
46
  text: userText,
24
- functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
47
+ functionResponses: [
48
+ { name: 'removeFilesFromContext', call_id: removeFilesFromContextCall.id, content: undefined },
49
+ ],
25
50
  },
26
51
  },
27
52
  ],
28
53
  };
29
54
  }
30
55
  function removeFileContentsFromPrompt(prompt, filesToRemove) {
31
- const response = getSourceCodeResponse(prompt);
32
- if (!response || !response.content) {
33
- throw new Error('Could not find source code response');
56
+ // Find all source code responses in the prompt history
57
+ const sourceCodeResponses = prompt.filter((item) => item.type === 'user' && item.functionResponses?.some((fr) => fr.name === 'getSourceCode'));
58
+ if (sourceCodeResponses.length === 0) {
59
+ console.warn('No source code responses found in prompt history');
60
+ return;
34
61
  }
35
- const contentObj = JSON.parse(response.content);
36
- filesToRemove.forEach((file) => {
37
- if (contentObj[file]) {
38
- delete contentObj[file].content;
62
+ sourceCodeResponses.forEach((response) => {
63
+ const sourceCodeResponse = response.functionResponses?.find((fr) => fr.name === 'getSourceCode');
64
+ if (!sourceCodeResponse || !sourceCodeResponse.content) {
65
+ console.warn('Skipping invalid source code response');
66
+ return;
67
+ }
68
+ try {
69
+ const contentObj = parseSourceCodeTree(JSON.parse(sourceCodeResponse.content));
70
+ let modifiedFiles = 0;
71
+ filesToRemove.forEach((file) => {
72
+ if (contentObj[file] && 'content' in contentObj[file]) {
73
+ contentObj[file].content = null;
74
+ modifiedFiles++;
75
+ }
76
+ });
77
+ // Only update if files were actually modified
78
+ if (modifiedFiles > 0) {
79
+ sourceCodeResponse.content = JSON.stringify(getSourceCodeTree(contentObj));
80
+ console.log(`Removed content from ${modifiedFiles} files in source code response`);
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error('Error processing source code response:', error);
39
85
  }
40
86
  });
41
- response.content = JSON.stringify(contentObj);
42
87
  }
43
88
  //# sourceMappingURL=remove-files-from-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove-files-from-context.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/remove-files-from-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EACjD,eAAe,EACf,MAAM,GACa;IACnB,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,sBAAsB,IAAI,EAAE,CAAC;IACzE,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACpD,gBAAgB,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;QAC7D,QAAQ,GAAG,2BAA2B,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,uFAAuF,CAAC;IACrG,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC7G,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;iBACpG;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAoB,EAAE,aAAuB;IACjF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"remove-files-from-context.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/remove-files-from-context.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import { ActionHandlerProps, ActionResult } from '../step-ask-question-types.js';
2
- export declare function handleRequestFilesContent({ askQuestionCall, options, }: ActionHandlerProps): Promise<ActionResult>;
2
+ export declare function handleRequestFilesContent({ askQuestionCall, options, prompt, generateContentFn, }: ActionHandlerProps): Promise<ActionResult>;
@@ -1,25 +1,111 @@
1
1
  import { getSourceFiles, refreshFiles } from '../../../../files/find-files.js';
2
2
  import { getSourceCode } from '../../../../files/read-files.js';
3
+ import { getSourceCodeTree } from '../../../../files/source-code-tree.js';
4
+ import { getFunctionDefs } from '../../../function-calling.js';
3
5
  import { StepResult } from '../../steps-types.js';
4
- export async function handleRequestFilesContent({ askQuestionCall, options, }) {
5
- const requestedFiles = askQuestionCall.args?.requestFilesContent ?? [];
6
+ /**
7
+ * Checks if a file's content is already provided in the conversation history
8
+ * @param filePath The path of the file to check
9
+ * @param prompt The conversation history
10
+ * @returns true if the file content is already available in the history
11
+ */
12
+ function isFileContentAlreadyProvided(filePath, prompt) {
13
+ return prompt.some((item) => {
14
+ if (item.type !== 'user' || !item.functionResponses) {
15
+ return false;
16
+ }
17
+ return item.functionResponses.some((response) => {
18
+ if (response.name !== 'getSourceCode' || !response.content) {
19
+ return false;
20
+ }
21
+ try {
22
+ const sourceCodeTree = JSON.parse(response.content);
23
+ const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));
24
+ const fileName = filePath.substring(filePath.lastIndexOf('/') + 1);
25
+ return (sourceCodeTree[dirPath] && sourceCodeTree[dirPath][fileName] && 'content' in sourceCodeTree[dirPath][fileName]);
26
+ }
27
+ catch (error) {
28
+ console.warn('Error parsing getSourceCode response:', error);
29
+ return false;
30
+ }
31
+ });
32
+ });
33
+ }
34
+ export async function handleRequestFilesContent({ askQuestionCall, options, prompt, generateContentFn, }) {
35
+ let requestFilesContentCall = await generateRequestFilesContentCall(generateContentFn, prompt, askQuestionCall, options, false);
36
+ if (!requestFilesContentCall) {
37
+ return {
38
+ breakLoop: true,
39
+ stepResult: StepResult.BREAK,
40
+ items: [],
41
+ };
42
+ }
43
+ let requestedFiles = requestFilesContentCall.args?.filePaths ?? [];
44
+ // Check which files are already provided in the conversation history
45
+ const alreadyProvidedFiles = requestedFiles.filter((file) => isFileContentAlreadyProvided(file, prompt));
46
+ if (alreadyProvidedFiles.length === requestedFiles.length) {
47
+ // All requested files are already provided
48
+ const assistant = {
49
+ type: 'assistant',
50
+ text: askQuestionCall.args?.message ?? '',
51
+ functionCalls: [requestFilesContentCall],
52
+ };
53
+ const user = {
54
+ type: 'user',
55
+ text: 'The requested file contents are already provided in the conversation history.',
56
+ functionResponses: [
57
+ {
58
+ name: 'requestFilesContent',
59
+ call_id: requestFilesContentCall.id,
60
+ content: JSON.stringify({ filePaths: requestedFiles }),
61
+ },
62
+ ],
63
+ cache: true,
64
+ };
65
+ return { breakLoop: false, stepResult: StepResult.CONTINUE, items: [{ assistant, user }] };
66
+ }
67
+ // Filter out already provided files
68
+ requestedFiles = requestedFiles.filter((file) => !isFileContentAlreadyProvided(file, prompt));
6
69
  // the request may be caused be an appearance of a new file, so lets refresh
7
70
  refreshFiles();
8
- const { legitimateFiles, illegitimateFiles } = categorizeLegitimateFiles(requestedFiles);
9
- const sourceCallId = (askQuestionCall.id ?? '') + '_source';
71
+ let { legitimateFiles, illegitimateFiles } = categorizeLegitimateFiles(requestedFiles);
72
+ if (illegitimateFiles.length > 0) {
73
+ requestFilesContentCall = await generateRequestFilesContentCall(generateContentFn, prompt, askQuestionCall, options, false);
74
+ if (!requestFilesContentCall) {
75
+ return {
76
+ breakLoop: true,
77
+ stepResult: StepResult.BREAK,
78
+ items: [],
79
+ };
80
+ }
81
+ requestedFiles = requestFilesContentCall.args?.filePaths ?? [];
82
+ const categorized = categorizeLegitimateFiles(requestedFiles);
83
+ legitimateFiles = categorized.legitimateFiles;
84
+ illegitimateFiles = categorized.illegitimateFiles;
85
+ }
86
+ const sourceCallId = (askQuestionCall.id ?? askQuestionCall.name) + '_source';
10
87
  const assistant = {
11
88
  type: 'assistant',
12
- text: askQuestionCall.args?.content ?? '',
13
- functionCalls: [askQuestionCall, { name: 'getSourceCode', id: sourceCallId, args: { filePaths: legitimateFiles } }],
89
+ text: askQuestionCall.args?.message ?? '',
90
+ functionCalls: [
91
+ requestFilesContentCall,
92
+ { name: 'getSourceCode', id: sourceCallId, args: { filePaths: legitimateFiles } },
93
+ ],
14
94
  };
15
- const sourceCode = getSourceCode({ filterPaths: legitimateFiles, forceAll: true }, options);
95
+ const sourceCode = getSourceCodeTree(getSourceCode({ filterPaths: legitimateFiles, forceAll: true, ignoreImportantFiles: true }, options));
16
96
  const user = {
17
97
  type: 'user',
18
98
  text: illegitimateFiles.length > 0
19
- ? 'Some files are not legitimate and their content cannot be provided'
20
- : 'All requested file contents have been provided.',
99
+ ? `Some files are not legitimate and their content cannot be provided:\n\n${illegitimateFiles.join('\n')}`
100
+ : alreadyProvidedFiles.length > 0
101
+ ? `Some files were already provided in the conversation history:\n${alreadyProvidedFiles.join('\n')}\n\nProviding content for the remaining files.`
102
+ : 'All requested file contents have been provided.',
21
103
  functionResponses: [
22
- { name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined },
104
+ {
105
+ name: 'requestFilesContent',
106
+ call_id: requestFilesContentCall.id,
107
+ content: JSON.stringify({ filePaths: requestedFiles }),
108
+ },
23
109
  {
24
110
  name: 'getSourceCode',
25
111
  call_id: sourceCallId,
@@ -30,6 +116,20 @@ export async function handleRequestFilesContent({ askQuestionCall, options, }) {
30
116
  };
31
117
  return { breakLoop: false, stepResult: StepResult.CONTINUE, items: [{ assistant, user }] };
32
118
  }
119
+ async function generateRequestFilesContentCall(generateContentFn, prompt, askQuestionCall, options, cheap) {
120
+ const [requestFilesContentCall] = (await generateContentFn([
121
+ ...prompt,
122
+ {
123
+ type: 'assistant',
124
+ text: askQuestionCall.args?.message ?? '',
125
+ },
126
+ {
127
+ type: 'user',
128
+ text: 'Yes, you can request the files contents.',
129
+ },
130
+ ], getFunctionDefs(), 'requestFilesContent', 0.7, cheap, options));
131
+ return requestFilesContentCall;
132
+ }
33
133
  function categorizeLegitimateFiles(requestedFiles) {
34
134
  const legitimateFiles = [];
35
135
  const illegitimateFiles = [];
@@ -1 +1 @@
1
- {"version":3,"file":"request-files-content.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/request-files-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,eAAe,EACf,OAAO,GACY;IACnB,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,EAAE,mBAAmB,IAAI,EAAE,CAAC;IACvE,4EAA4E;IAC5E,YAAY,EAAE,CAAC;IAEf,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAEzF,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IAC5D,MAAM,SAAS,GAAkB;QAC/B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;QACzC,aAAa,EAAE,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,CAAC;KACpH,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EACF,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC1B,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,iDAAiD;QACvD,iBAAiB,EAAE;YACjB,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;YAC9E;gBACE,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;aACpC;SACF;QACD,KAAK,EAAE,IAAI;KACZ,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,yBAAyB,CAAC,cAAwB;IAIzD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,OAAO,cAAc,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"request-files-content.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/request-files-content.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import { ActionHandlerProps, ActionResult } from '../step-ask-question-types.js';
2
- export declare function handleRequestPermissions({ askQuestionCall, options, }: ActionHandlerProps): Promise<ActionResult>;
2
+ export declare function handleRequestPermissions({ askQuestionCall, options, prompt, generateContentFn, }: ActionHandlerProps): Promise<ActionResult>;
@@ -1,46 +1,71 @@
1
1
  import { askUserForConfirmation } from '../../../../main/common/user-actions.js';
2
+ import { getFunctionDefs } from '../../../function-calling.js';
2
3
  import { StepResult } from '../../steps-types.js';
3
- export async function handleRequestPermissions({ askQuestionCall, options, }) {
4
+ export async function handleRequestPermissions({ askQuestionCall, options, prompt, generateContentFn, }) {
5
+ const [requestPermissionsCall] = (await generateContentFn([
6
+ ...prompt,
7
+ {
8
+ type: 'assistant',
9
+ text: askQuestionCall.args?.message ?? '',
10
+ },
11
+ {
12
+ type: 'user',
13
+ text: 'Yes, you can request the permissions.',
14
+ },
15
+ ], getFunctionDefs(), 'requestPermissions', 0.7, true, options));
16
+ if (!requestPermissionsCall) {
17
+ return {
18
+ breakLoop: true,
19
+ stepResult: StepResult.BREAK,
20
+ items: [],
21
+ };
22
+ }
4
23
  const userConfirmation = await askUserForConfirmation('The assistant is requesting additional permissions. Do you want to grant them?', false);
5
24
  const user = {
6
25
  type: 'user',
7
26
  text: userConfirmation ? 'Permissions granted.' : 'Permission request denied.',
8
- functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
27
+ functionResponses: [
28
+ {
29
+ name: 'requestPermissions',
30
+ call_id: requestPermissionsCall.id,
31
+ content: JSON.stringify({ confirmed: userConfirmation.confirmed }),
32
+ },
33
+ ],
9
34
  };
10
- if (userConfirmation) {
11
- updatePermissions(askQuestionCall, options);
35
+ if (userConfirmation.confirmed) {
36
+ updatePermissions(requestPermissionsCall, options);
12
37
  }
13
38
  return {
14
39
  breakLoop: false,
15
40
  stepResult: StepResult.CONTINUE,
16
41
  items: [
17
42
  {
18
- assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
43
+ assistant: {
44
+ type: 'assistant',
45
+ text: askQuestionCall.args?.message ?? '',
46
+ functionCalls: [requestPermissionsCall],
47
+ },
19
48
  user,
20
49
  },
21
50
  ],
22
51
  };
23
52
  }
24
- function updatePermissions(askQuestionCall, options) {
25
- if (askQuestionCall.args &&
26
- typeof askQuestionCall.args === 'object' &&
27
- 'requestPermissions' in askQuestionCall.args) {
28
- const permissions = askQuestionCall.args.requestPermissions;
29
- if (permissions && typeof permissions === 'object') {
30
- if ('enableImagen' in permissions && permissions.enableImagen) {
31
- options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
32
- }
33
- if ('enableVision' in permissions && permissions.enableVision)
34
- options.vision = true;
35
- if ('allowDirectoryCreate' in permissions && permissions.allowDirectoryCreate)
36
- options.allowDirectoryCreate = true;
37
- if ('allowFileCreate' in permissions && permissions.allowFileCreate)
38
- options.allowFileCreate = true;
39
- if ('allowFileDelete' in permissions && permissions.allowFileDelete)
40
- options.allowFileDelete = true;
41
- if ('allowFileMove' in permissions && permissions.allowFileMove)
42
- options.allowFileMove = true;
53
+ function updatePermissions(requestPermissionsCall, options) {
54
+ const permissions = requestPermissionsCall.args;
55
+ if (permissions) {
56
+ if ('enableImagen' in permissions && permissions.enableImagen) {
57
+ options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
43
58
  }
59
+ if ('enableVision' in permissions && permissions.enableVision)
60
+ options.vision = true;
61
+ if ('allowDirectoryCreate' in permissions && permissions.allowDirectoryCreate)
62
+ options.allowDirectoryCreate = true;
63
+ if ('allowFileCreate' in permissions && permissions.allowFileCreate)
64
+ options.allowFileCreate = true;
65
+ if ('allowFileDelete' in permissions && permissions.allowFileDelete)
66
+ options.allowFileDelete = true;
67
+ if ('allowFileMove' in permissions && permissions.allowFileMove)
68
+ options.allowFileMove = true;
44
69
  }
45
70
  }
46
71
  //# sourceMappingURL=request-permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-permissions.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/request-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAC7C,eAAe,EACf,OAAO,GACY;IACnB,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CACnD,gFAAgF,EAChF,KAAK,CACN,CAAC;IAEF,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,4BAA4B;QAC9E,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;KACpG,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;gBAC7G,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAgC,EAAE,OAAuB;IAClF,IACE,eAAe,CAAC,IAAI;QACpB,OAAO,eAAe,CAAC,IAAI,KAAK,QAAQ;QACxC,oBAAoB,IAAI,eAAe,CAAC,IAAI,EAC5C,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC5D,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACnD,IAAI,cAAc,IAAI,WAAW,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC9D,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;YAC7E,CAAC;YACD,IAAI,cAAc,IAAI,WAAW,IAAI,WAAW,CAAC,YAAY;gBAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACrF,IAAI,sBAAsB,IAAI,WAAW,IAAI,WAAW,CAAC,oBAAoB;gBAC3E,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACtC,IAAI,iBAAiB,IAAI,WAAW,IAAI,WAAW,CAAC,eAAe;gBAAE,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YACpG,IAAI,iBAAiB,IAAI,WAAW,IAAI,WAAW,CAAC,eAAe;gBAAE,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YACpG,IAAI,eAAe,IAAI,WAAW,IAAI,WAAW,CAAC,aAAa;gBAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QAChG,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"request-permissions.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/request-permissions.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export async function handleStartCodeGeneration({ askQuestionCall }) {
7
7
  stepResult: StepResult.CONTINUE,
8
8
  items: [
9
9
  {
10
- assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
10
+ assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '' },
11
11
  user: { type: 'user', text: 'Proceeding with code generation.' },
12
12
  },
13
13
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"start-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/start-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAE,eAAe,EAAsB;IACrF,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;IACrD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;gBAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,EAAE;aACjE;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"start-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/start-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAAE,eAAe,EAAsB;IACrF,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;IACrD,OAAO;QACL,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE;gBAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,EAAE;aACjE;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -19,6 +19,7 @@ Common problems/pitfalls:
19
19
  - Saying that an analysis will be done, instead of actually doing the analysis
20
20
  - The response is too similar to a previous question or response
21
21
  - The assistant takes on the user's voice or persona instead of maintaining its own identity
22
+ - The assistant is using invalid actionType values, for example when requesting files contents not using requestFilesContent action types
22
23
 
23
24
  Specific examples of problematic responses:
24
25
 
@@ -1 +1 @@
1
- {"version":3,"file":"step-ask-question-reflect.js","sourceRoot":"","sources":["../../../../src/prompt/steps/step-ask-question/step-ask-question-reflect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG7E,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0WAuC8U,CAAC;AAE3W,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,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CACrD,eAAe,EACf,MAAM,EACN,YAAY,EACZ,OAAO,EACP,iBAAiB,CAClB,CAAC;IAEF,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;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,eAAgC,EAChC,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAE5D,MAAM,cAAc,GAAwB;QAC1C;YACE,GAAG,MAAM;YACT,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;YAC9E;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aACpG;SACF;QACD,YAAY;QACZ,oBAAoB;QACpB,GAAG;QACH,IAAI;QACJ,OAAO;KACR,CAAC;IAEF,IAAI,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,cAAc,CAAC,CAAC;IACxD,MAAM,GAAG,MAAM,8BAA8B,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,EAAE,IAAI,CAAC;IACzF,MAAM,cAAc,GAAG,CAAE,gBAAgB,EAAE,cAAqC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAI,gBAAgB,EAAE,MAAiB,IAAI,EAAE,CAAC;IAE1D,OAAO;QACL,cAAc;QACd,MAAM,EACJ,MAAM;YACN,CAAC,cAAc;gBACb,CAAC,CAAC,uDAAuD;gBACzD,CAAC,CAAC,sCAAsC,CAAC;KAC9C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"step-ask-question-reflect.js","sourceRoot":"","sources":["../../../../src/prompt/steps/step-ask-question/step-ask-question-reflect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG7E,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0WAwC8U,CAAC;AAE3W,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,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CACrD,eAAe,EACf,MAAM,EACN,YAAY,EACZ,OAAO,EACP,iBAAiB,CAClB,CAAC;IAEF,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;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,eAAgC,EAChC,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAE5D,MAAM,cAAc,GAAwB;QAC1C;YACE,GAAG,MAAM;YACT,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;YAC9E;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;aACpG;SACF;QACD,YAAY;QACZ,oBAAoB;QACpB,GAAG;QACH,IAAI;QACJ,OAAO;KACR,CAAC;IAEF,IAAI,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,cAAc,CAAC,CAAC;IACxD,MAAM,GAAG,MAAM,8BAA8B,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAEzF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,EAAE,IAAI,CAAC;IACzF,MAAM,cAAc,GAAG,CAAE,gBAAgB,EAAE,cAAqC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAI,gBAAgB,EAAE,MAAiB,IAAI,EAAE,CAAC;IAE1D,OAAO;QACL,cAAc;QACd,MAAM,EACJ,MAAM;YACN,CAAC,cAAc;gBACb,CAAC,CAAC,uDAAuD;gBACzD,CAAC,CAAC,sCAAsC,CAAC;KAC9C,CAAC;AACJ,CAAC"}