genaicode 0.6.1 → 0.8.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.
- package/README.md +0 -2
- package/dist/ai-service/ai-studio.js +7 -1
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +49 -19
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/chat-gpt.js +28 -11
- package/dist/ai-service/chat-gpt.js.map +1 -1
- package/dist/ai-service/common.d.ts +5 -4
- package/dist/ai-service/common.js +3 -4
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/common.test.js +1 -1
- package/dist/ai-service/vertex-ai-claude.js +1 -1
- package/dist/ai-service/vertex-ai-claude.js.map +1 -1
- package/dist/ai-service/vertex-ai.js +7 -1
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-options.js +0 -12
- package/dist/cli/cli-options.js.map +1 -1
- package/dist/cli/cli-params.d.ts +1 -4
- package/dist/cli/cli-params.js +1 -10
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.js +1 -7
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.test.js +1 -1
- package/dist/cli/validate-cli-params.test.js.map +1 -1
- package/dist/eval/codegen-summary.test.d.ts +1 -0
- package/dist/eval/codegen-summary.test.js +93 -0
- package/dist/eval/codegen-summary.test.js.map +1 -0
- package/dist/eval/current-prompt-plugin.d.ts +3 -0
- package/dist/eval/current-prompt-plugin.js +10 -0
- package/dist/eval/current-prompt-plugin.js.map +1 -0
- package/dist/eval/data/current-prompt.d.ts +34 -0
- package/dist/eval/data/current-prompt.js +59 -0
- package/dist/eval/data/current-prompt.js.map +1 -0
- package/dist/eval/data/prompt-assistant-image.d.ts +49 -0
- package/dist/eval/data/prompt-assistant-image.js +67 -0
- package/dist/eval/data/prompt-assistant-image.js.map +1 -0
- package/dist/eval/data/prompt3.d.ts +34 -0
- package/dist/eval/data/prompt3.js +71 -0
- package/dist/eval/data/prompt3.js.map +1 -0
- package/dist/eval/prompt-debug.test.d.ts +1 -0
- package/dist/eval/prompt-debug.test.js +76 -0
- package/dist/eval/prompt-debug.test.js.map +1 -0
- package/dist/eval/prompt2.d.ts +34 -0
- package/dist/eval/prompt2.js +125 -0
- package/dist/eval/prompt2.js.map +1 -0
- package/dist/files/read-files.d.ts +29 -6
- package/dist/files/read-files.js +31 -10
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +15 -9
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/files/source-code-tree.d.ts +17 -0
- package/dist/files/source-code-tree.js +70 -0
- package/dist/files/source-code-tree.js.map +1 -0
- package/dist/main/codegen-types.d.ts +8 -5
- package/dist/main/codegen.ai-services.test.d.ts +3 -0
- package/dist/main/codegen.ai-services.test.js +198 -0
- package/dist/main/codegen.ai-services.test.js.map +1 -0
- package/dist/main/codegen.cli-options.test.d.ts +3 -0
- package/dist/main/codegen.cli-options.test.js +171 -0
- package/dist/main/codegen.cli-options.test.js.map +1 -0
- package/dist/main/codegen.image-generation.test.d.ts +3 -0
- package/dist/main/codegen.image-generation.test.js +187 -0
- package/dist/main/codegen.image-generation.test.js.map +1 -0
- package/dist/main/codegen.js +2 -5
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/codegen.test-utils.d.ts +81 -0
- package/dist/main/codegen.test-utils.js +88 -0
- package/dist/main/codegen.test-utils.js.map +1 -0
- package/dist/main/codegen.test.js +47 -28
- package/dist/main/codegen.test.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +6 -0
- package/dist/main/common/content-bus.d.ts +2 -2
- package/dist/main/common/content-bus.js +3 -1
- package/dist/main/common/content-bus.js.map +1 -1
- package/dist/main/common/user-actions.d.ts +8 -2
- package/dist/main/common/user-actions.js.map +1 -1
- package/dist/main/config-lib.js +20 -2
- package/dist/main/config-lib.js.map +1 -1
- package/dist/main/config.js +4 -28
- package/dist/main/config.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.js +0 -4
- package/dist/main/interactive/codegen-interactive.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.test.js +1 -7
- package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
- package/dist/main/interactive/common.d.ts +1 -1
- package/dist/main/interactive/common.js +0 -2
- package/dist/main/interactive/common.js.map +1 -1
- package/dist/main/interactive/configure.js +0 -2
- package/dist/main/interactive/configure.js.map +1 -1
- package/dist/main/interactive/help.js +0 -2
- package/dist/main/interactive/help.js.map +1 -1
- package/dist/main/interactive/task-file.js +1 -1
- package/dist/main/interactive/task-file.js.map +1 -1
- package/dist/main/interactive/text-prompt.js +1 -1
- package/dist/main/interactive/text-prompt.js.map +1 -1
- package/dist/main/interactive/user-action-handlers.js +4 -2
- package/dist/main/interactive/user-action-handlers.js.map +1 -1
- package/dist/main/plugin-loader.d.ts +7 -1
- package/dist/main/plugin-loader.js +61 -0
- package/dist/main/plugin-loader.js.map +1 -1
- package/dist/main/ui/backend/api.js +9 -3
- package/dist/main/ui/backend/api.js.map +1 -1
- package/dist/main/ui/backend/service.d.ts +2 -1
- package/dist/main/ui/backend/service.js +6 -3
- package/dist/main/ui/backend/service.js.map +1 -1
- package/dist/main/ui/frontend/assets/index-QOcNx5ac.js +812 -0
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/main/ui/user-action-handlers.js +1 -1
- package/dist/main/ui/user-action-handlers.js.map +1 -1
- package/dist/project-profiles/detection.d.ts +40 -0
- package/dist/project-profiles/detection.js +131 -0
- package/dist/project-profiles/detection.js.map +1 -0
- package/dist/project-profiles/index.d.ts +35 -0
- package/dist/project-profiles/index.js +72 -0
- package/dist/project-profiles/index.js.map +1 -0
- package/dist/project-profiles/profiles/golang.d.ts +65 -0
- package/dist/project-profiles/profiles/golang.js +208 -0
- package/dist/project-profiles/profiles/golang.js.map +1 -0
- package/dist/project-profiles/profiles/java-maven.d.ts +80 -0
- package/dist/project-profiles/profiles/java-maven.js +165 -0
- package/dist/project-profiles/profiles/java-maven.js.map +1 -0
- package/dist/project-profiles/profiles/javascript-npm.d.ts +40 -0
- package/dist/project-profiles/profiles/javascript-npm.js +118 -0
- package/dist/project-profiles/profiles/javascript-npm.js.map +1 -0
- package/dist/project-profiles/profiles/javascript-react.d.ts +46 -0
- package/dist/project-profiles/profiles/javascript-react.js +147 -0
- package/dist/project-profiles/profiles/javascript-react.js.map +1 -0
- package/dist/project-profiles/profiles/python-django.d.ts +58 -0
- package/dist/project-profiles/profiles/python-django.js +200 -0
- package/dist/project-profiles/profiles/python-django.js.map +1 -0
- package/dist/project-profiles/types.d.ts +122 -0
- package/dist/project-profiles/types.js +77 -0
- package/dist/project-profiles/types.js.map +1 -0
- package/dist/prompt/function-calling.js +8 -3
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.d.ts +5 -0
- package/dist/prompt/function-defs/ask-question.js +140 -60
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/codegen-planning.d.ts +8 -0
- package/dist/prompt/function-defs/codegen-planning.js +50 -0
- package/dist/prompt/function-defs/codegen-planning.js.map +1 -0
- package/dist/prompt/function-defs/codegen-summary.js +2 -2
- package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
- package/dist/prompt/function-defs/get-source-code.js +32 -2
- package/dist/prompt/function-defs/get-source-code.js.map +1 -1
- package/dist/prompt/function-defs/optimize-context.js +35 -12
- package/dist/prompt/function-defs/optimize-context.js.map +1 -1
- package/dist/prompt/function-defs/set-summaries.js +20 -1
- package/dist/prompt/function-defs/set-summaries.js.map +1 -1
- package/dist/prompt/limits.js +2 -2
- package/dist/prompt/limits.js.map +1 -1
- package/dist/prompt/limits.test.js +3 -3
- package/dist/prompt/limits.test.js.map +1 -1
- package/dist/prompt/prompt-codegen.js +7 -79
- package/dist/prompt/prompt-codegen.js.map +1 -1
- package/dist/prompt/prompt-codegen.test.js +8 -14
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.js +27 -80
- package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
- package/dist/prompt/prompt-service.ai-services.test.d.ts +1 -0
- package/dist/prompt/prompt-service.ai-services.test.js +149 -0
- package/dist/prompt/prompt-service.ai-services.test.js.map +1 -0
- package/dist/prompt/prompt-service.context-optimization.test.d.ts +1 -0
- package/dist/prompt/prompt-service.context-optimization.test.js +212 -0
- package/dist/prompt/prompt-service.context-optimization.test.js.map +1 -0
- package/dist/prompt/prompt-service.image-handling.test.d.ts +1 -0
- package/dist/prompt/prompt-service.image-handling.test.js +212 -0
- package/dist/prompt/prompt-service.image-handling.test.js.map +1 -0
- package/dist/prompt/prompt-service.js +41 -127
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/prompt-service.test-utils.d.ts +66 -0
- package/dist/prompt/prompt-service.test-utils.js +169 -0
- package/dist/prompt/prompt-service.test-utils.js.map +1 -0
- package/dist/prompt/prompt-service.test.js +96 -20
- package/dist/prompt/prompt-service.test.js.map +1 -1
- package/dist/prompt/prompt-service.validation-recovery.test.d.ts +1 -0
- package/dist/prompt/prompt-service.validation-recovery.test.js +263 -0
- package/dist/prompt/prompt-service.validation-recovery.test.js.map +1 -0
- package/dist/prompt/static-prompts.d.ts +16 -0
- package/dist/prompt/static-prompts.js +22 -0
- package/dist/prompt/static-prompts.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js +1 -3
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +58 -0
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +8 -7
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +6 -6
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/default-action.js +1 -4
- package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js +86 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js +97 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +20 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.d.ts +0 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +57 -15
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +109 -12
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +48 -26
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js +1 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +25 -21
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -5
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +36 -33
- package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.d.ts +10 -0
- package/dist/prompt/steps/step-codegen-planning.js +69 -0
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -0
- package/dist/prompt/steps/step-codegen-summary.d.ts +7 -0
- package/dist/prompt/steps/step-codegen-summary.js +106 -0
- package/dist/prompt/steps/step-codegen-summary.js.map +1 -0
- package/dist/prompt/steps/step-codegen-summary.test.d.ts +1 -0
- package/dist/prompt/steps/step-codegen-summary.test.js +136 -0
- package/dist/prompt/steps/step-codegen-summary.test.js.map +1 -0
- package/dist/prompt/steps/step-context-optimization.js +243 -126
- package/dist/prompt/steps/step-context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.test.d.ts +2 -0
- package/dist/prompt/steps/step-context-optimization.test.js +475 -0
- package/dist/prompt/steps/step-context-optimization.test.js.map +1 -0
- package/dist/prompt/steps/step-ensure-context.d.ts +15 -0
- package/dist/prompt/steps/step-ensure-context.js +102 -0
- package/dist/prompt/steps/step-ensure-context.js.map +1 -0
- package/dist/prompt/steps/step-ensure-context.test.d.ts +1 -0
- package/dist/prompt/steps/step-ensure-context.test.js +242 -0
- package/dist/prompt/steps/step-ensure-context.test.js.map +1 -0
- package/dist/prompt/steps/step-generate-image.d.ts +8 -1
- package/dist/prompt/steps/step-generate-image.js +1 -0
- package/dist/prompt/steps/step-generate-image.js.map +1 -1
- package/dist/prompt/steps/step-summarization.d.ts +2 -2
- package/dist/prompt/steps/step-summarization.js +45 -9
- package/dist/prompt/steps/step-summarization.js.map +1 -1
- package/dist/prompt/steps/step-validate-recover.js +24 -15
- package/dist/prompt/steps/step-validate-recover.js.map +1 -1
- package/dist/prompt/steps/steps-types.d.ts +2 -0
- package/dist/prompt/steps/steps-types.js.map +1 -1
- package/dist/prompt/systemprompt.d.ts +2 -2
- package/dist/prompt/systemprompt.js +74 -176
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/prompt/systemprompt.test.js +4 -5
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.js +0 -2
- package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
- package/package.json +6 -2
- package/dist/main/ui/frontend/assets/index-Dk_qaEQg.js +0 -782
|
@@ -1,93 +1,21 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
|
-
import { getSourceCode } from '../files/read-files.js';
|
|
3
|
-
import { CODEGEN_TRIGGER } from './prompt-consts.js';
|
|
4
|
-
import { getDependencyList } from '../files/find-files.js';
|
|
5
2
|
import { verifyCodegenPromptLimit } from './limits.js';
|
|
6
|
-
import { importantContext } from '../main/config.js';
|
|
7
3
|
/** Get codegen prompt */
|
|
8
4
|
export function getCodeGenPrompt(options) {
|
|
9
5
|
let { explicitPrompt } = options;
|
|
10
|
-
const { taskFile,
|
|
6
|
+
const { taskFile, verbose } = options;
|
|
11
7
|
assert(!explicitPrompt || !taskFile, 'Both taskFile and explicitPrompt are not allowed');
|
|
12
8
|
if (taskFile) {
|
|
13
9
|
explicitPrompt = `I want you to perform a coding task. The task is described in the ${taskFile} file. Use those instructions.`;
|
|
14
10
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
codeGenFiles = Object.entries(getSourceCode({ taskFile, forceAll: true }, options))
|
|
18
|
-
.filter(([, { content }]) => content?.match(new RegExp(`([^'^\`]+)${CODEGEN_TRIGGER}`)))
|
|
19
|
-
.map(([path]) => path);
|
|
20
|
-
}
|
|
21
|
-
// Add logic to consider dependency tree
|
|
22
|
-
if (dependencyTree) {
|
|
23
|
-
assert(codeGenFiles.length > 0, `You must use ${CODEGEN_TRIGGER} together with --dependency-tree`);
|
|
24
|
-
const dependencyTreeFiles = new Set();
|
|
25
|
-
codeGenFiles
|
|
26
|
-
.map(getDependencyList)
|
|
27
|
-
.flat()
|
|
28
|
-
.forEach((key) => dependencyTreeFiles.add(key));
|
|
29
|
-
codeGenFiles = Array.from(dependencyTreeFiles);
|
|
30
|
-
}
|
|
31
|
-
const importantTextPrompts = importantContext.textPrompts?.map((prompt) => prompt.content).join('\n\n') || '';
|
|
32
|
-
const requestPermissionText = askQuestion && (interactive || ui) ? ' (request permission via `askQuestion`)' : '';
|
|
33
|
-
const taskPrompt = explicitPrompt
|
|
34
|
-
? 'This is your task: ' + explicitPrompt + '\n\n'
|
|
35
|
-
: codeGenFiles.length > 0
|
|
36
|
-
? `I have marked some files with the ${CODEGEN_TRIGGER} fragments:\n${codeGenFiles.join('\n')}\nYour task is to generate updates for those files according to the ${CODEGEN_TRIGGER} comments/context.`
|
|
37
|
-
: `No files are marked with the ${CODEGEN_TRIGGER} fragment, so you can consider making changes in any file${askQuestion ? ', but you should consult me by asking a question first.' : ''}.`;
|
|
38
|
-
const codeGenPrompt = `${taskPrompt}
|
|
39
|
-
|
|
40
|
-
Before proceeding with code generation, please:
|
|
41
|
-
|
|
42
|
-
1. **Analyze the task and requirements**.
|
|
43
|
-
|
|
44
|
-
2. **Use the \`askQuestion\` function** to seek clarification if needed. For analysis requests, use the 'requestAnswer' actionType.
|
|
45
|
-
|
|
46
|
-
3. **When you believe code changes are necessary**, use the 'confirmCodeGeneration' actionType to confirm with the user before proceeding.
|
|
47
|
-
|
|
48
|
-
4. **Only after confirmation**, summarize the plan of updates by calling the \`codegenSummary\` function with the appropriate arguments.
|
|
49
|
-
|
|
50
|
-
- Ensure that you include:
|
|
51
|
-
- **\`explanation\`**: A brief description of the planned changes or reasoning for no changes.
|
|
52
|
-
- **\`fileUpdates\`**: A list of proposed file updates, each with required properties:
|
|
53
|
-
- **\`path\`**: Absolute file path to be updated.
|
|
54
|
-
- **\`updateToolName\`**: The tool to be used for the update (e.g., \`createFile\`, \`updateFile\`).
|
|
55
|
-
- **\`prompt\`**: A detailed prompt summarizing the planned changes for this file.
|
|
56
|
-
- **Other Properties**: Include any other necessary properties as per the \`codegenSummary\` function definition.
|
|
57
|
-
- **\`contextPaths\`**: A list of file paths that should be used as context for the code generation requests.
|
|
58
|
-
|
|
59
|
-
5. **Context Optimization**: Utilize the \`contextOptimization\` actionType to manage and optimize the context during code generation tasks. Generate a prompt using the \`contextOptimization\` property to guide the LLM in determining which parts of the context are most relevant to keep, enhancing efficiency and focus.
|
|
60
|
-
|
|
61
|
-
6. **Check ActionType Selection**: Always verify that the correct \`actionType\` is being used, especially before requesting file content, to ensure the 'requestFilesContent' actionType is applied. This helps maintain vigilance and accuracy in task execution.
|
|
62
|
-
|
|
63
|
-
## My Requirements for Task Execution:
|
|
64
|
-
|
|
65
|
-
${importantTextPrompts ? `${importantTextPrompts}\n` : ''}
|
|
66
|
-
${considerAllFiles
|
|
67
|
-
? 'You are allowed to modify all files in the application regardless of whether they contain codegen fragments.'
|
|
68
|
-
: 'Do not modify files which do not contain the fragments.'}
|
|
69
|
-
${allowFileCreate ? 'You are allowed to create new files.' : 'Do not create new files. (request permission via `askQuestion`)'}
|
|
70
|
-
${allowFileDelete
|
|
71
|
-
? 'You are allowed to delete files; in such cases, add an empty string as content.'
|
|
72
|
-
: 'Do not delete files. (request permission via `askQuestion`)'}
|
|
73
|
-
${allowDirectoryCreate
|
|
74
|
-
? 'You are allowed to create new directories.'
|
|
75
|
-
: `Do not create new directories.${requestPermissionText}`}
|
|
76
|
-
${allowFileMove ? 'You are allowed to move files.' : 'Do not move files. (request permission via `askQuestion`)'}
|
|
77
|
-
${vision ? 'You are allowed to analyze image assets.' : 'Do not analyze image assets. (request permission via `askQuestion`)'}
|
|
78
|
-
${imagen
|
|
79
|
-
? 'You are allowed to generate images.'
|
|
80
|
-
: 'You are not allowed to generate images. (request permission via `askQuestion`)'}
|
|
81
|
-
|
|
82
|
-
Remember to optimize token usage by reducing context when appropriate during askQuestion conversations. This will help avoid hitting rate limits and improve overall efficiency.
|
|
83
|
-
|
|
84
|
-
Start from generating codegen summary, this summary will be used as a context to generate updates, so make sure that it contains useful information.`;
|
|
11
|
+
assert(explicitPrompt, 'No taskFile or explicitPrompt provided');
|
|
12
|
+
const taskPrompt = explicitPrompt;
|
|
85
13
|
if (verbose) {
|
|
86
14
|
console.log('Code gen prompt:');
|
|
87
|
-
console.log(
|
|
15
|
+
console.log(taskPrompt);
|
|
88
16
|
}
|
|
89
|
-
verifyCodegenPromptLimit(
|
|
90
|
-
return { prompt:
|
|
17
|
+
verifyCodegenPromptLimit(taskPrompt);
|
|
18
|
+
return { prompt: taskPrompt, options };
|
|
91
19
|
}
|
|
92
20
|
/** Get lint fix prompt */
|
|
93
21
|
export function getLintFixPrompt(command, { verbose }, stdout, stderr) {
|
|
@@ -106,7 +34,7 @@ Lint command stderr:
|
|
|
106
34
|
${stderr}
|
|
107
35
|
\`\`\`
|
|
108
36
|
|
|
109
|
-
Please suggest changes to fix these lint errors. Use the '
|
|
37
|
+
Please suggest changes to fix these lint errors. Use the 'sendMessage' actionType if you need any clarifications before proposing fixes.`;
|
|
110
38
|
if (verbose) {
|
|
111
39
|
console.log('Lint fix prompt:');
|
|
112
40
|
console.log(lintFixPrompt);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-codegen.js","sourceRoot":"","sources":["../../src/prompt/prompt-codegen.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prompt-codegen.js","sourceRoot":"","sources":["../../src/prompt/prompt-codegen.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAQvD,yBAAyB;AACzB,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEtC,MAAM,CAAC,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,kDAAkD,CAAC,CAAC;IAEzF,IAAI,QAAQ,EAAE,CAAC;QACb,cAAc,GAAG,qEAAqE,QAAQ,gCAAgC,CAAC;IACjI,CAAC;IAED,MAAM,CAAC,cAAc,EAAE,wCAAwC,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,cAAc,CAAC;IAElC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAErC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,EAAE,OAAO,EAAkB,EAAE,MAAc,EAAE,MAAc;IAC3G,MAAM,aAAa,GAAG;;gBAER,OAAO;;;;EAIrB,MAAM;;;;;;EAMN,MAAM;;;yIAGiI,CAAC;IAExI,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAExC,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -13,8 +13,6 @@ vi.mock('../files/read-files.js', () => ({
|
|
|
13
13
|
}));
|
|
14
14
|
vi.mock('../cli/cli-params.js', () => ({
|
|
15
15
|
disableExplanations: true,
|
|
16
|
-
considerAllFiles: false,
|
|
17
|
-
dependencyTree: false,
|
|
18
16
|
cliExplicitPrompt: false,
|
|
19
17
|
allowFileCreate: false,
|
|
20
18
|
allowFileDelete: false,
|
|
@@ -29,9 +27,8 @@ describe('getCodeGenPrompt', () => {
|
|
|
29
27
|
beforeEach(() => {
|
|
30
28
|
vi.resetAllMocks();
|
|
31
29
|
});
|
|
32
|
-
it('should generate prompt for all files
|
|
30
|
+
it('should generate prompt for all files', () => {
|
|
33
31
|
vi.spyOn(findFiles, 'getSourceFiles').mockReturnValue(['file1.js', 'file2.js']);
|
|
34
|
-
vi.mocked(cliParams).considerAllFiles = true;
|
|
35
32
|
vi.mocked(cliParams).explicitPrompt = undefined;
|
|
36
33
|
vi.mocked(cliParams).allowFileCreate = false;
|
|
37
34
|
vi.mocked(cliParams).allowFileDelete = false;
|
|
@@ -39,16 +36,13 @@ describe('getCodeGenPrompt', () => {
|
|
|
39
36
|
vi.mocked(cliParams).allowFileMove = false;
|
|
40
37
|
vi.spyOn(limits, 'verifyCodegenPromptLimit').mockImplementation(() => 0); // Return 0 instead of void
|
|
41
38
|
const prompt = getCodeGenPrompt({
|
|
42
|
-
considerAllFiles: true,
|
|
43
39
|
aiService: 'vertex-ai',
|
|
44
40
|
temperature: 0.7,
|
|
45
41
|
cheap: false,
|
|
42
|
+
explicitPrompt: 'testx',
|
|
43
|
+
askQuestion: false,
|
|
46
44
|
}).prompt;
|
|
47
|
-
expect(prompt).toContain('
|
|
48
|
-
expect(prompt).toContain('Do not create new files.');
|
|
49
|
-
expect(prompt).toContain('Do not delete files.');
|
|
50
|
-
expect(prompt).toContain('Do not create new directories.');
|
|
51
|
-
expect(prompt).toContain('Do not move files.');
|
|
45
|
+
expect(prompt).toContain('testx');
|
|
52
46
|
});
|
|
53
47
|
// Add more test cases for getCodeGenPrompt as needed
|
|
54
48
|
});
|
|
@@ -61,7 +55,7 @@ describe('getLintFixPrompt', () => {
|
|
|
61
55
|
const command = 'eslint --fix';
|
|
62
56
|
const stdout = 'Fixed 2 errors';
|
|
63
57
|
const stderr = '';
|
|
64
|
-
const prompt = getLintFixPrompt(command, { aiService: 'vertex-ai' }, stdout, stderr);
|
|
58
|
+
const prompt = getLintFixPrompt(command, { aiService: 'vertex-ai', askQuestion: false }, stdout, stderr);
|
|
65
59
|
expect(prompt).toContain('The following lint errors were encountered after the initial code generation:');
|
|
66
60
|
expect(prompt).toContain(`Lint command: ${command}`);
|
|
67
61
|
expect(prompt).toContain('Lint command stdout:');
|
|
@@ -73,7 +67,7 @@ describe('getLintFixPrompt', () => {
|
|
|
73
67
|
const command = 'eslint --fix';
|
|
74
68
|
const stdout = '';
|
|
75
69
|
const stderr = 'Error: Unable to resolve path';
|
|
76
|
-
const prompt = getLintFixPrompt(command, { aiService: 'vertex-ai' }, stdout, stderr);
|
|
70
|
+
const prompt = getLintFixPrompt(command, { aiService: 'vertex-ai', askQuestion: false }, stdout, stderr);
|
|
77
71
|
expect(prompt).toContain('Lint command stderr:');
|
|
78
72
|
expect(prompt).toContain(stderr);
|
|
79
73
|
});
|
|
@@ -81,7 +75,7 @@ describe('getLintFixPrompt', () => {
|
|
|
81
75
|
const command = 'eslint --fix';
|
|
82
76
|
const stdout = 'Fixed 1 error';
|
|
83
77
|
const stderr = '';
|
|
84
|
-
getLintFixPrompt(command, { aiService: 'vertex-ai' }, stdout, stderr);
|
|
78
|
+
getLintFixPrompt(command, { aiService: 'vertex-ai', askQuestion: false }, stdout, stderr);
|
|
85
79
|
expect(limits.verifyCodegenPromptLimit).toHaveBeenCalledWith(expect.any(String));
|
|
86
80
|
});
|
|
87
81
|
it('should log the prompt when verbosePrompt is true', () => {
|
|
@@ -89,7 +83,7 @@ describe('getLintFixPrompt', () => {
|
|
|
89
83
|
const command = 'eslint --fix';
|
|
90
84
|
const stdout = 'Fixed 1 error';
|
|
91
85
|
const stderr = '';
|
|
92
|
-
getLintFixPrompt(command, { aiService: 'vertex-ai', verbose: true }, stdout, stderr);
|
|
86
|
+
getLintFixPrompt(command, { aiService: 'vertex-ai', verbose: true, askQuestion: false }, stdout, stderr);
|
|
93
87
|
expect(consoleSpy).toHaveBeenCalledWith('Lint fix prompt:');
|
|
94
88
|
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('The following lint errors were encountered'));
|
|
95
89
|
consoleSpy.mockRestore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-codegen.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-codegen.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,wBAAwB,CAAC;AAEhC,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;CACxB,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CAC1B,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,IAAI;IACzB,
|
|
1
|
+
{"version":3,"file":"prompt-codegen.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-codegen.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,11 +12,10 @@ import { registerUserActionHandlers } from '../main/interactive/user-action-hand
|
|
|
12
12
|
vi.mock('../ai-service/vertex-ai.js', () => ({ generateContent: vi.fn() }));
|
|
13
13
|
vi.mock('@inquirer/prompts', () => ({
|
|
14
14
|
input: vi.fn(),
|
|
15
|
+
confirm: vi.fn(),
|
|
15
16
|
}));
|
|
16
17
|
vi.mock('../cli/cli-params.js', () => ({
|
|
17
18
|
disableExplanations: true,
|
|
18
|
-
considerAllFiles: false,
|
|
19
|
-
dependencyTree: false,
|
|
20
19
|
explicitPrompt: false,
|
|
21
20
|
allowFileCreate: false,
|
|
22
21
|
allowFileDelete: false,
|
|
@@ -65,9 +64,9 @@ describe('promptService with askQuestion', () => {
|
|
|
65
64
|
{
|
|
66
65
|
name: 'askQuestion',
|
|
67
66
|
args: {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
decisionMakingProcess: '',
|
|
68
|
+
message: 'Do you want to proceed with code generation?',
|
|
69
|
+
actionType: 'confirmCodeGeneration',
|
|
71
70
|
},
|
|
72
71
|
},
|
|
73
72
|
];
|
|
@@ -75,9 +74,9 @@ describe('promptService with askQuestion', () => {
|
|
|
75
74
|
{
|
|
76
75
|
name: 'askQuestion',
|
|
77
76
|
args: {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
decisionMakingProcess: '',
|
|
78
|
+
message: 'Ok lets go',
|
|
79
|
+
actionType: 'confirmCodeGeneration',
|
|
81
80
|
},
|
|
82
81
|
},
|
|
83
82
|
];
|
|
@@ -95,15 +94,19 @@ describe('promptService with askQuestion', () => {
|
|
|
95
94
|
.mockResolvedValueOnce(mockAskQuestionCall)
|
|
96
95
|
.mockResolvedValueOnce(mockAskQuestionCall2)
|
|
97
96
|
.mockResolvedValueOnce(mockCodegenSummary);
|
|
98
|
-
vi.mocked(prompts.
|
|
97
|
+
vi.mocked(prompts.confirm).mockImplementationOnce(() => CancelablePromise.resolve(true));
|
|
99
98
|
await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
100
99
|
aiService: 'vertex-ai',
|
|
101
100
|
disableContextOptimization: true,
|
|
101
|
+
explicitPrompt: 'test',
|
|
102
102
|
interactive: true,
|
|
103
103
|
askQuestion: true,
|
|
104
104
|
}));
|
|
105
|
-
expect(vertexAi.generateContent).toHaveBeenCalledTimes(
|
|
106
|
-
expect(prompts.
|
|
105
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(4);
|
|
106
|
+
expect(prompts.confirm).toHaveBeenCalledWith({
|
|
107
|
+
default: true,
|
|
108
|
+
message: 'The assistant is ready to start code generation. Do you want to proceed?',
|
|
109
|
+
});
|
|
107
110
|
expect(console.log).toHaveBeenCalledWith('Assistant asks:', expect.any(Object));
|
|
108
111
|
expect(console.log).toHaveBeenCalledWith('Proceeding with code generation.', undefined);
|
|
109
112
|
});
|
|
@@ -112,14 +115,20 @@ describe('promptService with askQuestion', () => {
|
|
|
112
115
|
{
|
|
113
116
|
name: 'askQuestion',
|
|
114
117
|
args: {
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
decisionMakingProcess: '',
|
|
119
|
+
message: 'Stopping code generation as requested.',
|
|
117
120
|
actionType: 'cancelCodeGeneration',
|
|
118
121
|
},
|
|
119
122
|
},
|
|
120
123
|
];
|
|
121
124
|
vi.mocked(vertexAi.generateContent).mockResolvedValueOnce(mockAskQuestionCall);
|
|
122
|
-
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
125
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
126
|
+
aiService: 'vertex-ai',
|
|
127
|
+
explicitPrompt: 'testx',
|
|
128
|
+
disableContextOptimization: true,
|
|
129
|
+
interactive: true,
|
|
130
|
+
askQuestion: true,
|
|
131
|
+
}));
|
|
123
132
|
expect(vertexAi.generateContent).toHaveBeenCalledTimes(1);
|
|
124
133
|
expect(result).toEqual([]);
|
|
125
134
|
expect(console.log).toHaveBeenCalledWith('Assistant requested to stop code generation. Exiting...', undefined);
|
|
@@ -137,79 +146,17 @@ describe('promptService with askQuestion', () => {
|
|
|
137
146
|
},
|
|
138
147
|
];
|
|
139
148
|
vi.mocked(vertexAi.generateContent)
|
|
140
|
-
.mockResolvedValueOnce(mockAskQuestionCall)
|
|
141
|
-
.mockResolvedValueOnce(mockAskQuestionCall)
|
|
149
|
+
.mockResolvedValueOnce(mockAskQuestionCall) // First question
|
|
142
150
|
.mockResolvedValueOnce(mockCodegenSummary);
|
|
143
|
-
await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({ aiService: 'vertex-ai', disableContextOptimization: true, interactive: true }));
|
|
144
|
-
expect(vertexAi.generateContent).toHaveBeenCalledTimes(2);
|
|
145
|
-
expect(prompts.input).not.toHaveBeenCalled();
|
|
146
|
-
});
|
|
147
|
-
it('should handle self-reflection mechanism', async () => {
|
|
148
|
-
const mockAskQuestionCall = [
|
|
149
|
-
{
|
|
150
|
-
name: 'askQuestion',
|
|
151
|
-
args: {
|
|
152
|
-
content: 'Do you want to proceed with code generation?',
|
|
153
|
-
actionType: 'requestAnswer',
|
|
154
|
-
promptNecessity: 80,
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
];
|
|
158
|
-
const mockAskQuestionReflectCall = [
|
|
159
|
-
{
|
|
160
|
-
name: 'askQuestionReflect',
|
|
161
|
-
args: {
|
|
162
|
-
shouldEscalate: 70,
|
|
163
|
-
reason: 'The response requires more advanced processing.',
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
];
|
|
167
|
-
const mockAskQuestionReflectCall2 = [
|
|
168
|
-
{
|
|
169
|
-
name: 'askQuestionReflect',
|
|
170
|
-
args: {
|
|
171
|
-
shouldEscalate: 30,
|
|
172
|
-
reason: 'The response is ok.',
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
];
|
|
176
|
-
const mockAskQuestionCall2 = [
|
|
177
|
-
{
|
|
178
|
-
name: 'askQuestion',
|
|
179
|
-
args: {
|
|
180
|
-
content: 'Startin code generation',
|
|
181
|
-
actionType: 'startCodeGeneration',
|
|
182
|
-
promptNecessity: 80,
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
];
|
|
186
|
-
const mockCodegenSummary = [
|
|
187
|
-
{
|
|
188
|
-
name: 'codegenSummary',
|
|
189
|
-
args: {
|
|
190
|
-
fileUpdates: [],
|
|
191
|
-
contextPaths: [],
|
|
192
|
-
explanation: 'No updates needed',
|
|
193
|
-
},
|
|
194
|
-
},
|
|
195
|
-
];
|
|
196
|
-
vi.mocked(vertexAi.generateContent)
|
|
197
|
-
.mockResolvedValueOnce(mockAskQuestionCall)
|
|
198
|
-
.mockResolvedValueOnce(mockAskQuestionReflectCall)
|
|
199
|
-
.mockResolvedValueOnce(mockAskQuestionCall)
|
|
200
|
-
.mockResolvedValueOnce(mockAskQuestionCall2)
|
|
201
|
-
.mockResolvedValueOnce(mockAskQuestionReflectCall2)
|
|
202
|
-
.mockResolvedValueOnce(mockCodegenSummary);
|
|
203
|
-
vi.mocked(prompts.input).mockImplementationOnce(() => CancelablePromise.resolve('Yes'));
|
|
204
151
|
await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
205
152
|
aiService: 'vertex-ai',
|
|
153
|
+
explicitPrompt: 'testx',
|
|
206
154
|
disableContextOptimization: true,
|
|
207
155
|
interactive: true,
|
|
208
156
|
askQuestion: true,
|
|
209
|
-
selfReflectionEnabled: true,
|
|
210
157
|
}));
|
|
211
|
-
expect(vertexAi.generateContent).toHaveBeenCalledTimes(
|
|
212
|
-
expect(
|
|
158
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(3);
|
|
159
|
+
expect(prompts.input).not.toHaveBeenCalled();
|
|
213
160
|
});
|
|
214
161
|
});
|
|
215
162
|
//# sourceMappingURL=prompt-service-ask-question.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-service-ask-question.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-service-ask-question.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAC;AAEvD,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEzF,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"prompt-service-ask-question.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-service-ask-question.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAC;AAEvD,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEzF,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5E,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;IACd,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CACjB,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,KAAK;IAC3B,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;IACpB,0BAA0B,EAAE,KAAK;IACjC,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAClC,yBAAyB;AACzB,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE;IACxB,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE;CAC7B,CAAC,CAAC,CAAC;AAEJ,yBAAyB;AACzB,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IACzB,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CAClC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE;QACR,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3C;IACD,gBAAgB,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,MAAM,oBAAoB,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,eAAe,EAGnE,CAAC;AACF,MAAM,kBAAkB,GAAG,EAA+C,CAAC;AAE3E,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACtB,0BAA0B,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,mBAAmB,GAAG;YAC1B;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE;oBACJ,qBAAqB,EAAE,EAAE;oBACzB,OAAO,EAAE,8CAA8C;oBACvD,UAAU,EAAE,uBAAuB;iBACpC;aACF;SACF,CAAC;QACF,MAAM,oBAAoB,GAAG;YAC3B;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE;oBACJ,qBAAqB,EAAE,EAAE;oBACzB,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,uBAAuB;iBACpC;aACF;SACF,CAAC;QACF,MAAM,kBAAkB,GAAG;YACzB;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE;oBACJ,WAAW,EAAE,EAAE;oBACf,YAAY,EAAE,EAAE;oBAChB,WAAW,EAAE,mBAAmB;iBACjC;aACF;SACF,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;aAChC,qBAAqB,CAAC,mBAAmB,CAAC;aAC1C,qBAAqB,CAAC,oBAAoB,CAAC;aAC3C,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAE7C,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAC/C,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAA+B,CACpE,CAAC;QAEF,MAAM,aAAa,CACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,CAAC;YACf,SAAS,EAAE,WAAW;YACtB,0BAA0B,EAAE,IAAI;YAChC,cAAc,EAAE,MAAM;YACtB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;SAClB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;YAC3C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,0EAA0E;SACpF,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,EAAE,SAAS,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,mBAAmB,GAAG;YAC1B;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE;oBACJ,qBAAqB,EAAE,EAAE;oBACzB,OAAO,EAAE,wCAAwC;oBACjD,UAAU,EAAE,sBAAsB;iBACnC;aACF;SACF,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QAE/E,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,CAAC;YACf,SAAS,EAAE,WAAW;YACtB,cAAc,EAAE,OAAO;YACvB,0BAA0B,EAAE,IAAI;YAChC,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;SAClB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,yDAAyD,EAAE,SAAS,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,mBAAmB,GAAmB,EAAE,CAAC;QAC/C,MAAM,kBAAkB,GAAG;YACzB;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE;oBACJ,WAAW,EAAE,EAAE;oBACf,YAAY,EAAE,EAAE;oBAChB,WAAW,EAAE,mBAAmB;iBACjC;aACF;SACF,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;aAChC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,iBAAiB;aAC5D,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAE7C,MAAM,aAAa,CACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,CAAC;YACf,SAAS,EAAE,WAAW;YACtB,cAAc,EAAE,OAAO;YACvB,0BAA0B,EAAE,IAAI;YAChC,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;SAClB,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
+
import { promptService } from './prompt-service.js';
|
|
3
|
+
import * as vertexAi from '../ai-service/vertex-ai.js';
|
|
4
|
+
import * as vertexAiClaude from '../ai-service/vertex-ai-claude.js';
|
|
5
|
+
import * as chatGpt from '../ai-service/chat-gpt.js';
|
|
6
|
+
import * as anthropic from '../ai-service/anthropic.js';
|
|
7
|
+
import * as dalleService from '../ai-service/dall-e.js';
|
|
8
|
+
import * as vertexAiImagen from '../ai-service/vertex-ai-imagen.js';
|
|
9
|
+
import * as cliParams from '../cli/cli-params.js';
|
|
10
|
+
import { getCodeGenPrompt } from './prompt-codegen.js';
|
|
11
|
+
import { mockData, mockResponses, testConfigs } from './prompt-service.test-utils.js';
|
|
12
|
+
// Mock all external dependencies
|
|
13
|
+
vi.mock('../ai-service/vertex-ai-claude.js', () => ({ generateContent: vi.fn() }));
|
|
14
|
+
vi.mock('../ai-service/vertex-ai.js', () => ({ generateContent: vi.fn() }));
|
|
15
|
+
vi.mock('../ai-service/chat-gpt.js', () => ({ generateContent: vi.fn() }));
|
|
16
|
+
vi.mock('../ai-service/anthropic.js', () => ({ generateContent: vi.fn() }));
|
|
17
|
+
vi.mock('../ai-service/dall-e.js', () => ({ generateImage: vi.fn() }));
|
|
18
|
+
vi.mock('../ai-service/vertex-ai-imagen.js', () => ({ generateImage: vi.fn() }));
|
|
19
|
+
vi.mock('../cli/cli-params.js', () => ({
|
|
20
|
+
disableExplanations: true,
|
|
21
|
+
explicitPrompt: false,
|
|
22
|
+
allowFileCreate: false,
|
|
23
|
+
allowFileDelete: false,
|
|
24
|
+
allowDirectoryCreate: false,
|
|
25
|
+
allowFileMove: false,
|
|
26
|
+
verbosePrompt: false,
|
|
27
|
+
disableContextOptimization: true,
|
|
28
|
+
vision: false,
|
|
29
|
+
imagen: false,
|
|
30
|
+
temperature: 0.7,
|
|
31
|
+
cheap: false,
|
|
32
|
+
askQuestion: false,
|
|
33
|
+
}));
|
|
34
|
+
vi.mock('../files/cache-file.js');
|
|
35
|
+
vi.mock('../files/find-files.js', () => ({
|
|
36
|
+
getSourceFiles: () => [],
|
|
37
|
+
getImageAssetFiles: () => [],
|
|
38
|
+
}));
|
|
39
|
+
vi.mock('../files/read-files.js', () => ({
|
|
40
|
+
getSourceCode: () => ({}),
|
|
41
|
+
getImageAssets: vi.fn(() => ({})),
|
|
42
|
+
}));
|
|
43
|
+
vi.mock('../main/config.js', () => ({
|
|
44
|
+
rootDir: '/mocked/root/dir',
|
|
45
|
+
rcConfig: {
|
|
46
|
+
rootDir: '/mocked/root/dir',
|
|
47
|
+
extensions: ['.js', '.ts', '.tsx', '.jsx'],
|
|
48
|
+
},
|
|
49
|
+
importantContext: {},
|
|
50
|
+
}));
|
|
51
|
+
const GENERATE_CONTENT_FNS = {
|
|
52
|
+
'vertex-ai-claude': vertexAiClaude.generateContent,
|
|
53
|
+
'vertex-ai': vertexAi.generateContent,
|
|
54
|
+
'ai-studio': vertexAi.generateContent,
|
|
55
|
+
anthropic: anthropic.generateContent,
|
|
56
|
+
'chat-gpt': chatGpt.generateContent,
|
|
57
|
+
};
|
|
58
|
+
const GENERATE_IMAGE_FNS = {
|
|
59
|
+
'dall-e': dalleService.generateImage,
|
|
60
|
+
'vertex-ai': vertexAiImagen.generateImage,
|
|
61
|
+
};
|
|
62
|
+
describe('promptService - AI Services', () => {
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
vi.resetAllMocks();
|
|
65
|
+
vi.mocked(cliParams).dryRun = false;
|
|
66
|
+
vi.mocked(cliParams).vision = false;
|
|
67
|
+
vi.mocked(cliParams).imagen = undefined;
|
|
68
|
+
vi.mocked(cliParams).disableContextOptimization = true;
|
|
69
|
+
vi.mocked(cliParams).explicitPrompt = 'testx';
|
|
70
|
+
});
|
|
71
|
+
it('should process requests with Vertex AI', async () => {
|
|
72
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
73
|
+
// Setup mocks for the entire flow
|
|
74
|
+
vi.mocked(vertexAi.generateContent)
|
|
75
|
+
// First mock for codegenPlanning
|
|
76
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
77
|
+
// Second mock for codegenSummary
|
|
78
|
+
.mockResolvedValueOnce(mockResponses.mockCodegenSummary(mockData.paths.test))
|
|
79
|
+
// Third mock for the actual update
|
|
80
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Hello");'));
|
|
81
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
82
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(3);
|
|
83
|
+
expect(result).toEqual(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Hello");'));
|
|
84
|
+
});
|
|
85
|
+
it('should process requests with ChatGPT', async () => {
|
|
86
|
+
vi.mocked(cliParams).aiService = 'chat-gpt';
|
|
87
|
+
// Setup mocks for the entire flow
|
|
88
|
+
vi.mocked(chatGpt.generateContent)
|
|
89
|
+
// First mock for codegenPlanning
|
|
90
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
91
|
+
// Second mock for codegenSummary
|
|
92
|
+
.mockResolvedValueOnce(mockResponses.mockCodegenSummary(mockData.paths.test, 'createFile'))
|
|
93
|
+
// Third mock for the actual create
|
|
94
|
+
.mockResolvedValueOnce(mockResponses.mockCreateFile(mockData.paths.test, 'const x = 5;'));
|
|
95
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
96
|
+
...testConfigs.baseConfig,
|
|
97
|
+
aiService: 'chat-gpt',
|
|
98
|
+
}));
|
|
99
|
+
expect(chatGpt.generateContent).toHaveBeenCalledTimes(3);
|
|
100
|
+
expect(result).toEqual(mockResponses.mockCreateFile(mockData.paths.test, 'const x = 5;'));
|
|
101
|
+
});
|
|
102
|
+
it('should process requests with Anthropic', async () => {
|
|
103
|
+
vi.mocked(cliParams).aiService = 'anthropic';
|
|
104
|
+
// Setup mocks for the entire flow
|
|
105
|
+
vi.mocked(anthropic.generateContent)
|
|
106
|
+
// First mock for codegenPlanning
|
|
107
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
108
|
+
// Second mock for codegenSummary
|
|
109
|
+
.mockResolvedValueOnce(mockResponses.mockCodegenSummary(mockData.paths.test, 'deleteFile'))
|
|
110
|
+
// Third mock for the actual delete
|
|
111
|
+
.mockResolvedValueOnce(mockResponses.mockDeleteFile(mockData.paths.test));
|
|
112
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
113
|
+
...testConfigs.baseConfig,
|
|
114
|
+
aiService: 'anthropic',
|
|
115
|
+
}));
|
|
116
|
+
expect(anthropic.generateContent).toHaveBeenCalledTimes(3);
|
|
117
|
+
expect(result).toEqual(mockResponses.mockDeleteFile(mockData.paths.test));
|
|
118
|
+
});
|
|
119
|
+
it('should not update files in dry run mode', async () => {
|
|
120
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
121
|
+
vi.mocked(cliParams).dryRun = true;
|
|
122
|
+
// Setup mocks for the entire flow
|
|
123
|
+
vi.mocked(vertexAi.generateContent)
|
|
124
|
+
// First mock for codegenPlanning
|
|
125
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
126
|
+
// Second mock for codegenSummary
|
|
127
|
+
.mockResolvedValueOnce(mockResponses.mockCodegenSummary(mockData.paths.test))
|
|
128
|
+
// Third mock for the actual update
|
|
129
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Dry run");'));
|
|
130
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt({
|
|
131
|
+
...testConfigs.baseConfig,
|
|
132
|
+
dryRun: true,
|
|
133
|
+
}));
|
|
134
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(3);
|
|
135
|
+
expect(result).toEqual(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Dry run");'));
|
|
136
|
+
});
|
|
137
|
+
it('should handle unexpected response without codegen summary', async () => {
|
|
138
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
139
|
+
const mockUnexpectedResponse = mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Unexpected response");');
|
|
140
|
+
// Mock only the codegenPlanning response, then return unexpected response
|
|
141
|
+
vi.mocked(vertexAi.generateContent)
|
|
142
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
143
|
+
.mockResolvedValueOnce(mockUnexpectedResponse);
|
|
144
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
145
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(2);
|
|
146
|
+
expect(result).toEqual(mockUnexpectedResponse);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=prompt-service.ai-services.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-service.ai-services.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-service.ai-services.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|