genaicode 0.7.0 → 0.8.1
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/dist/cli/cli-params.d.ts +1 -1
- package/dist/cli/cli-params.js +1 -1
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/eval/codegen-summary.test.js +3 -1
- package/dist/eval/codegen-summary.test.js.map +1 -1
- package/dist/eval/data/current-prompt.d.ts +0 -17
- package/dist/eval/data/current-prompt.js +23 -23
- package/dist/eval/data/current-prompt.js.map +1 -1
- package/dist/eval/prompt-debug.test.js +6 -1
- package/dist/eval/prompt-debug.test.js.map +1 -1
- package/dist/files/read-files.d.ts +27 -4
- package/dist/files/read-files.js +20 -5
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +4 -4
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/files/source-code-tree.d.ts +11 -6
- package/dist/files/source-code-tree.js +45 -2
- package/dist/files/source-code-tree.js.map +1 -1
- package/dist/main/codegen-types.d.ts +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.test.js +1 -1
- package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
- package/dist/main/plugin-loader.d.ts +5 -0
- package/dist/main/plugin-loader.js +53 -0
- package/dist/main/plugin-loader.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/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-defs/set-summaries.js +20 -1
- package/dist/prompt/function-defs/set-summaries.js.map +1 -1
- package/dist/prompt/prompt-codegen.test.js +5 -4
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.js +2 -0
- package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
- package/dist/prompt/prompt-service.js +13 -106
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js +0 -2
- 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.js +1 -3
- 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 +0 -2
- 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 +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js +0 -6
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +0 -3
- 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.js +2 -5
- 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.js +0 -3
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +4 -3
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -3
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +20 -6
- package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.js +1 -1
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
- 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 +159 -71
- package/dist/prompt/steps/step-context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.test.js +24 -5
- package/dist/prompt/steps/step-context-optimization.test.js.map +1 -1
- 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-summarization.d.ts +2 -1
- package/dist/prompt/steps/step-summarization.js +44 -11
- package/dist/prompt/steps/step-summarization.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.test.js +2 -2
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/package.json +6 -2
- package/dist/main/ui/frontend/assets/index-5e3ykhy6.js +0 -808
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { FunctionCall, GenerateContentFunction, GenerateImageFunction, PromptItem, PromptItemImage } from '../../../ai-service/common.js';
|
|
2
2
|
import { CodegenOptions } from '../../../main/codegen-types.js';
|
|
3
|
-
import { StepResult } from '../steps-types.js';
|
|
4
3
|
import { PluginActionType } from '../../../main/codegen-types.js';
|
|
5
|
-
export type ActionType = 'sendMessage' | 'sendMessageWithImage' | 'requestPermissions' | 'requestFilesContent' | 'removeFilesFromContext' | 'confirmCodeGeneration' | 'cancelCodeGeneration' | 'contextOptimization' | PluginActionType;
|
|
4
|
+
export type ActionType = 'codeGeneration' | 'sendMessage' | 'sendMessageWithImage' | 'requestPermissions' | 'requestFilesContent' | 'removeFilesFromContext' | 'confirmCodeGeneration' | 'cancelCodeGeneration' | 'contextOptimization' | PluginActionType;
|
|
6
5
|
type AskQuestionArgs = {
|
|
7
6
|
actionType: ActionType;
|
|
8
7
|
message: string;
|
|
@@ -42,7 +41,8 @@ export interface UserItem {
|
|
|
42
41
|
}
|
|
43
42
|
export interface ActionResult {
|
|
44
43
|
breakLoop: boolean;
|
|
45
|
-
|
|
44
|
+
executeCodegen?: boolean;
|
|
45
|
+
stepResult?: FunctionCall[];
|
|
46
46
|
items: Array<{
|
|
47
47
|
assistant: AssistantItem;
|
|
48
48
|
user: UserItem;
|
|
@@ -54,6 +54,7 @@ export type ActionHandlerProps = {
|
|
|
54
54
|
options: CodegenOptions;
|
|
55
55
|
generateContentFn: GenerateContentFunction;
|
|
56
56
|
generateImageFn: GenerateImageFunction;
|
|
57
|
+
waitIfPaused: () => Promise<void>;
|
|
57
58
|
};
|
|
58
59
|
export type ActionHandler = (props: ActionHandlerProps) => Promise<ActionResult>;
|
|
59
60
|
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { FunctionDef, GenerateContentFunction, PromptItem, GenerateImageFunction } from '../../../ai-service/common.js';
|
|
2
|
-
import { StepResult } from '../steps-types.js';
|
|
1
|
+
import { FunctionDef, GenerateContentFunction, PromptItem, GenerateImageFunction, FunctionCall } from '../../../ai-service/common.js';
|
|
3
2
|
import { CodegenOptions } from '../../../main/codegen-types.js';
|
|
4
|
-
export declare function executeStepAskQuestion(generateContentFn: GenerateContentFunction, generateImageFn: GenerateImageFunction, prompt: PromptItem[], functionDefs: FunctionDef[], temperature: number, options: CodegenOptions): Promise<
|
|
3
|
+
export declare function executeStepAskQuestion(generateContentFn: GenerateContentFunction, generateImageFn: GenerateImageFunction, prompt: PromptItem[], functionDefs: FunctionDef[], waitIfPaused: () => Promise<void>, temperature: number, options: CodegenOptions): Promise<FunctionCall[]>;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { StepResult } from '../steps-types.js';
|
|
2
1
|
import { putAssistantMessage, putSystemMessage, putUserMessage } from '../../../main/common/content-bus.js';
|
|
3
2
|
import { abortController } from '../../../main/interactive/codegen-worker.js';
|
|
4
3
|
import { validateAndRecoverSingleResult } from '../step-validate-recover.js';
|
|
@@ -12,7 +11,8 @@ import { handleSendMessageWithImage } from './handlers/handle-send-message-with-
|
|
|
12
11
|
import { handleConfirmCodeGeneration } from './handlers/confirm-code-generation.js';
|
|
13
12
|
import { handleCancelCodeGeneration } from './handlers/cancel-code-generation.js';
|
|
14
13
|
import { getRegisteredActionHandlers } from '../../../main/plugin-loader.js';
|
|
15
|
-
|
|
14
|
+
import { handleCodeGeneration } from './handlers/code-generation.js';
|
|
15
|
+
export async function executeStepAskQuestion(generateContentFn, generateImageFn, prompt, functionDefs, waitIfPaused, temperature, options) {
|
|
16
16
|
console.log('Allowing the assistant to ask a question...');
|
|
17
17
|
while (!abortController?.signal.aborted) {
|
|
18
18
|
try {
|
|
@@ -27,18 +27,31 @@ export async function executeStepAskQuestion(generateContentFn, generateImageFn,
|
|
|
27
27
|
const actionType = askQuestionCall.args?.actionType;
|
|
28
28
|
if (actionType) {
|
|
29
29
|
const actionHandler = getActionHandler(actionType);
|
|
30
|
-
|
|
30
|
+
let result = await actionHandler({
|
|
31
31
|
askQuestionCall,
|
|
32
32
|
prompt,
|
|
33
33
|
options,
|
|
34
34
|
generateContentFn,
|
|
35
35
|
generateImageFn,
|
|
36
|
+
waitIfPaused,
|
|
36
37
|
});
|
|
37
38
|
// This is important to display the content to the user interface (ui or interactive cli)
|
|
38
39
|
putUserMessage(result.items.slice(-1)[0].user.text);
|
|
39
40
|
prompt.push(...result.items.map(({ assistant, user }) => [assistant, user]).flat());
|
|
41
|
+
if (result.executeCodegen) {
|
|
42
|
+
result = await getActionHandler('codeGeneration')({
|
|
43
|
+
askQuestionCall,
|
|
44
|
+
prompt,
|
|
45
|
+
options,
|
|
46
|
+
generateContentFn,
|
|
47
|
+
generateImageFn,
|
|
48
|
+
waitIfPaused,
|
|
49
|
+
});
|
|
50
|
+
putUserMessage(result.items.slice(-1)[0].user.text);
|
|
51
|
+
prompt.push(...result.items.map(({ assistant, user }) => [assistant, user]).flat());
|
|
52
|
+
}
|
|
40
53
|
if (result.breakLoop) {
|
|
41
|
-
return result.stepResult;
|
|
54
|
+
return result.stepResult ?? [];
|
|
42
55
|
}
|
|
43
56
|
console.log('The question was answered');
|
|
44
57
|
}
|
|
@@ -50,11 +63,11 @@ export async function executeStepAskQuestion(generateContentFn, generateImageFn,
|
|
|
50
63
|
catch (error) {
|
|
51
64
|
console.error('Error in executeStepAskQuestion:', error);
|
|
52
65
|
putSystemMessage(`An error occurred: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
|
-
return
|
|
66
|
+
return [];
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
69
|
putSystemMessage('Assistant did not ask a question. This unexpected, we need to abort.');
|
|
57
|
-
return
|
|
70
|
+
return [];
|
|
58
71
|
}
|
|
59
72
|
async function getAskQuestionCall(generateContentFn, prompt, functionDefs, temperature, options) {
|
|
60
73
|
const askQuestionRequest = [prompt, functionDefs, 'askQuestion', temperature, true, options];
|
|
@@ -70,6 +83,7 @@ function getActionHandler(actionType) {
|
|
|
70
83
|
}
|
|
71
84
|
// If no plugin handler is found, use the built-in handlers
|
|
72
85
|
const handlers = {
|
|
86
|
+
codeGeneration: handleCodeGeneration,
|
|
73
87
|
cancelCodeGeneration: handleCancelCodeGeneration,
|
|
74
88
|
confirmCodeGeneration: handleConfirmCodeGeneration,
|
|
75
89
|
requestFilesContent: handleRequestFilesContent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../../src/prompt/steps/step-ask-question/step-ask-question.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../../src/prompt/steps/step-ask-question/step-ask-question.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ export async function executeStepCodegenPlanning(generateContentFn, prompt, opti
|
|
|
45
45
|
planningResult = await validateAndRecoverSingleResult(planningRequest, planningResult, generateContentFn);
|
|
46
46
|
const codegenPlanningRequest = planningResult.find((call) => call.name === 'codegenPlanning');
|
|
47
47
|
if (codegenPlanningRequest) {
|
|
48
|
-
putSystemMessage('Planning phase completed successfully', codegenPlanningRequest
|
|
48
|
+
putSystemMessage('Planning phase completed successfully', codegenPlanningRequest);
|
|
49
49
|
// Store the planning response in conversation history
|
|
50
50
|
prompt.push({ type: 'assistant', functionCalls: planningResult });
|
|
51
51
|
prompt.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-codegen-planning.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-codegen-planning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;qFAcsD,CAAC;AAEtF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,iBAA0C,EAC1C,MAAoB,EACpB,OAAuB;IAEvB,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,GAAG,eAAe,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,eAAe,GAA2E;QAC9F,MAAM;QACN,eAAe,EAAE;QACjB,iBAAiB;QACjB,OAAO,CAAC,WAAW,IAAI,GAAG;QAC1B,OAAO,CAAC,KAAK,IAAI,IAAI;QACrB,OAAO;KACR,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,eAAe,CAAC,CAAC;QACjE,cAAc,GAAG,MAAM,8BAA8B,CAAC,eAAe,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAE1G,MAAM,sBAAsB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QAE9F,IAAI,sBAAsB,EAAE,CAAC;YAC3B,gBAAgB,CAAC,uCAAuC,EAAE,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"step-codegen-planning.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-codegen-planning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;qFAcsD,CAAC;AAEtF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,iBAA0C,EAC1C,MAAoB,EACpB,OAAuB;IAEvB,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,GAAG,eAAe,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,eAAe,GAA2E;QAC9F,MAAM;QACN,eAAe,EAAE;QACjB,iBAAiB;QACjB,OAAO,CAAC,WAAW,IAAI,GAAG;QAC1B,OAAO,CAAC,KAAK,IAAI,IAAI;QACrB,OAAO;KACR,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,eAAe,CAAC,CAAC;QACjE,cAAc,GAAG,MAAM,8BAA8B,CAAC,eAAe,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAE1G,MAAM,sBAAsB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QAE9F,IAAI,sBAAsB,EAAE,CAAC;YAC3B,gBAAgB,CAAC,uCAAuC,EAAE,sBAAsB,CAAC,CAAC;YAElF,sDAAsD;YACtD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,iBAAiB,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxF,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,QAAQ,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,yCAAyC,CAAC,CAAC;YAC5D,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB,CAAC,+BAA+B,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;QAC7E,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FunctionCall, FunctionDef, GenerateContentFunction, GenerateImageFunction, PromptItem } from '../../ai-service/common.js';
|
|
2
|
+
import { CodegenOptions } from '../../main/codegen-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Executes the codegen summary step.
|
|
5
|
+
* This step generates a summary of the planned code changes and processes each file update.
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeStepCodegenSummary(generateContentFn: GenerateContentFunction, prompt: PromptItem[], functionDefs: FunctionDef[], options: CodegenOptions, waitIfPaused?: () => Promise<void>, generateImageFn?: GenerateImageFunction): Promise<FunctionCall[]>;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import mime from 'mime-types';
|
|
4
|
+
import { validateAndRecoverSingleResult } from './step-validate-recover.js';
|
|
5
|
+
import { putSystemMessage } from '../../main/common/content-bus.js';
|
|
6
|
+
import { executeStepGenerateImage } from './step-generate-image.js';
|
|
7
|
+
import { executeStepVerifyPatch } from './step-verify-patch.js';
|
|
8
|
+
import { getPartialPromptTemplate } from '../static-prompts.js';
|
|
9
|
+
import { executeStepEnsureContext } from './step-ensure-context.js';
|
|
10
|
+
import { StepResult } from './steps-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Executes the codegen summary step.
|
|
13
|
+
* This step generates a summary of the planned code changes and processes each file update.
|
|
14
|
+
*/
|
|
15
|
+
export async function executeStepCodegenSummary(generateContentFn, prompt, functionDefs, options, waitIfPaused = () => Promise.resolve(), generateImageFn) {
|
|
16
|
+
const baseRequest = [
|
|
17
|
+
prompt,
|
|
18
|
+
functionDefs,
|
|
19
|
+
'codegenSummary',
|
|
20
|
+
options.temperature ?? 0.7,
|
|
21
|
+
options.cheap ?? false,
|
|
22
|
+
options,
|
|
23
|
+
];
|
|
24
|
+
let baseResult = await generateContentFn(...baseRequest);
|
|
25
|
+
let codegenSummaryRequest = baseResult.find((call) => call.name === 'codegenSummary');
|
|
26
|
+
if (codegenSummaryRequest) {
|
|
27
|
+
// Second stage: for each file request the actual code updates
|
|
28
|
+
baseResult = await validateAndRecoverSingleResult(baseRequest, baseResult, generateContentFn);
|
|
29
|
+
codegenSummaryRequest = baseResult.find((call) => call.name === 'codegenSummary');
|
|
30
|
+
putSystemMessage('Received codegen summary, will collect partial updates', codegenSummaryRequest);
|
|
31
|
+
// Sometimes the result happens to be a string
|
|
32
|
+
assert(Array.isArray(codegenSummaryRequest?.args?.fileUpdates), 'fileUpdates is not an array');
|
|
33
|
+
assert(Array.isArray(codegenSummaryRequest?.args.contextPaths), 'contextPaths is not an array');
|
|
34
|
+
// Ensure all necessary files are in context
|
|
35
|
+
const contextResult = await executeStepEnsureContext(prompt, codegenSummaryRequest, options);
|
|
36
|
+
if (contextResult === StepResult.BREAK) {
|
|
37
|
+
return baseResult;
|
|
38
|
+
}
|
|
39
|
+
// Store the first stage response entirely in conversation history
|
|
40
|
+
prompt.push({ type: 'assistant', functionCalls: baseResult });
|
|
41
|
+
prompt.push({
|
|
42
|
+
type: 'user',
|
|
43
|
+
functionResponses: baseResult.map((call) => ({ name: call.name, call_id: call.id })),
|
|
44
|
+
cache: true,
|
|
45
|
+
});
|
|
46
|
+
const result = [];
|
|
47
|
+
for (const file of codegenSummaryRequest.args.fileUpdates) {
|
|
48
|
+
putSystemMessage('Collecting partial update for: ' + file.filePath + ' using tool: ' + file.updateToolName, file);
|
|
49
|
+
// Check if execution is paused before proceeding
|
|
50
|
+
await waitIfPaused();
|
|
51
|
+
// this is needed, otherwise we will get an error
|
|
52
|
+
if (prompt.slice(-1)[0].type === 'user') {
|
|
53
|
+
prompt.slice(-1)[0].text = file.prompt ?? getPartialPromptTemplate(file.filePath);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
prompt.push({ type: 'user', text: file.prompt ?? getPartialPromptTemplate(file.filePath) });
|
|
57
|
+
}
|
|
58
|
+
if (options.vision && file.contextImageAssets) {
|
|
59
|
+
prompt.slice(-1)[0].images = file.contextImageAssets.map((path) => ({
|
|
60
|
+
path,
|
|
61
|
+
base64url: fs.readFileSync(path, 'base64'),
|
|
62
|
+
mediaType: mime.lookup(path) || '',
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
const partialRequest = [
|
|
66
|
+
prompt,
|
|
67
|
+
functionDefs,
|
|
68
|
+
file.updateToolName,
|
|
69
|
+
file.temperature ?? options.temperature,
|
|
70
|
+
file.cheap === true,
|
|
71
|
+
options,
|
|
72
|
+
];
|
|
73
|
+
let partialResult = await generateContentFn(...partialRequest);
|
|
74
|
+
// Validate if function call is compliant with the schema
|
|
75
|
+
partialResult = await validateAndRecoverSingleResult(partialRequest, partialResult, generateContentFn);
|
|
76
|
+
putSystemMessage('Received partial update', partialResult);
|
|
77
|
+
// Handle image generation requests
|
|
78
|
+
const generateImageCall = partialResult.find((call) => call.name === 'generateImage');
|
|
79
|
+
if (generateImageCall && generateImageFn) {
|
|
80
|
+
partialResult.push(await executeStepGenerateImage(generateImageFn, generateImageCall));
|
|
81
|
+
}
|
|
82
|
+
else if (generateImageCall) {
|
|
83
|
+
console.warn('Image generation requested but generateImageFn not provided');
|
|
84
|
+
}
|
|
85
|
+
// Verify if patchFile is one of the functions called, and test if patch is valid and can be applied successfully
|
|
86
|
+
const patchFileCall = partialResult.find((call) => call.name === 'patchFile');
|
|
87
|
+
if (patchFileCall) {
|
|
88
|
+
partialResult = await executeStepVerifyPatch(patchFileCall.args, generateContentFn, prompt, functionDefs, file.temperature ?? options.temperature, file.cheap === true, options);
|
|
89
|
+
}
|
|
90
|
+
// add the code gen result to the context, as the subsequent code gen may depend on the result
|
|
91
|
+
prompt.push({ type: 'assistant', functionCalls: partialResult }, {
|
|
92
|
+
type: 'user',
|
|
93
|
+
text: 'Update applied.',
|
|
94
|
+
functionResponses: partialResult.map((call) => ({ name: call.name, call_id: call.id })),
|
|
95
|
+
});
|
|
96
|
+
result.push(...partialResult);
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// This is unexpected, if happens probably means no code updates.
|
|
102
|
+
putSystemMessage('Did not receive codegen summary, returning result.');
|
|
103
|
+
return baseResult;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=step-codegen-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-codegen-summary.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-codegen-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { executeStepCodegenSummary } from './step-codegen-summary.js';
|
|
3
|
+
import { getSourceCode } from '../../files/read-files.js';
|
|
4
|
+
vi.mock('../../files/find-files.js', () => ({
|
|
5
|
+
refreshFiles: vi.fn(),
|
|
6
|
+
}));
|
|
7
|
+
vi.mock('../../files/read-files.js', () => ({
|
|
8
|
+
getSourceCode: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
vi.mock('../../main/config.js', () => ({
|
|
11
|
+
rootDir: '/test',
|
|
12
|
+
rcConfig: {
|
|
13
|
+
rootDir: '/test',
|
|
14
|
+
extensions: ['.js', '.ts', '.tsx', '.jsx'],
|
|
15
|
+
},
|
|
16
|
+
importantContext: {},
|
|
17
|
+
}));
|
|
18
|
+
describe('executeStepCodegenSummary', () => {
|
|
19
|
+
const mockGenerateContentFn = vi.fn();
|
|
20
|
+
const mockWaitIfPaused = vi.fn();
|
|
21
|
+
// Mock data
|
|
22
|
+
const mockPrompt = [{ type: 'user', text: 'test prompt' }];
|
|
23
|
+
const mockFunctionDefs = [
|
|
24
|
+
{
|
|
25
|
+
name: 'codegenSummary',
|
|
26
|
+
description: 'Function for generating codegen summary',
|
|
27
|
+
parameters: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
explanation: { type: 'string', description: 'Explanation of changes' },
|
|
31
|
+
fileUpdates: { type: 'array', description: 'List of file updates' },
|
|
32
|
+
contextPaths: { type: 'array', description: 'List of context paths' },
|
|
33
|
+
},
|
|
34
|
+
required: ['explanation', 'fileUpdates', 'contextPaths'],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
const mockOptions = {
|
|
39
|
+
aiService: 'vertex-ai',
|
|
40
|
+
temperature: 0.7,
|
|
41
|
+
askQuestion: false,
|
|
42
|
+
};
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
vi.clearAllMocks();
|
|
45
|
+
mockWaitIfPaused.mockResolvedValue(undefined);
|
|
46
|
+
vi.mocked(getSourceCode).mockReturnValue({});
|
|
47
|
+
});
|
|
48
|
+
it('should handle successful codegen summary generation', async () => {
|
|
49
|
+
const mockCodegenSummary = {
|
|
50
|
+
name: 'codegenSummary',
|
|
51
|
+
args: {
|
|
52
|
+
explanation: 'Test explanation',
|
|
53
|
+
fileUpdates: [
|
|
54
|
+
{
|
|
55
|
+
filePath: '/test/path.ts',
|
|
56
|
+
updateToolName: 'updateFile',
|
|
57
|
+
prompt: 'Update test file',
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
contextPaths: ['/test/context.ts'],
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const mockUpdateResult = {
|
|
64
|
+
name: 'updateFile',
|
|
65
|
+
args: {
|
|
66
|
+
filePath: '/test/path.ts',
|
|
67
|
+
newContent: 'updated content',
|
|
68
|
+
explanation: 'Updated file',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
mockGenerateContentFn.mockResolvedValueOnce([mockCodegenSummary]).mockResolvedValueOnce([mockUpdateResult]);
|
|
72
|
+
const result = await executeStepCodegenSummary(mockGenerateContentFn, mockPrompt, mockFunctionDefs, mockOptions, mockWaitIfPaused);
|
|
73
|
+
expect(result).toHaveLength(1);
|
|
74
|
+
expect(result[0]).toEqual(mockUpdateResult);
|
|
75
|
+
expect(mockGenerateContentFn).toHaveBeenCalledTimes(2);
|
|
76
|
+
});
|
|
77
|
+
it('should handle validation and recovery of invalid codegen summary', async () => {
|
|
78
|
+
const invalidCodegenSummary = {
|
|
79
|
+
name: 'codegenSummary',
|
|
80
|
+
args: {
|
|
81
|
+
// Missing required fields
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
const validCodegenSummary = {
|
|
85
|
+
name: 'codegenSummary',
|
|
86
|
+
args: {
|
|
87
|
+
explanation: 'Recovered explanation',
|
|
88
|
+
fileUpdates: [],
|
|
89
|
+
contextPaths: [],
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
mockGenerateContentFn.mockResolvedValueOnce([invalidCodegenSummary]).mockResolvedValueOnce([validCodegenSummary]);
|
|
93
|
+
const result = await executeStepCodegenSummary(mockGenerateContentFn, mockPrompt, mockFunctionDefs, mockOptions, mockWaitIfPaused);
|
|
94
|
+
expect(result).toHaveLength(0);
|
|
95
|
+
expect(mockGenerateContentFn).toHaveBeenCalledTimes(2);
|
|
96
|
+
});
|
|
97
|
+
it('should handle errors in generate content function', async () => {
|
|
98
|
+
mockGenerateContentFn.mockRejectedValueOnce(new Error('Test error'));
|
|
99
|
+
await expect(executeStepCodegenSummary(mockGenerateContentFn, mockPrompt, mockFunctionDefs, mockOptions, mockWaitIfPaused)).rejects.toThrow('Test error');
|
|
100
|
+
});
|
|
101
|
+
it('should handle no codegen summary in response', async () => {
|
|
102
|
+
mockGenerateContentFn.mockResolvedValueOnce([
|
|
103
|
+
{
|
|
104
|
+
name: 'explanation',
|
|
105
|
+
args: { text: 'No changes needed' },
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
const result = await executeStepCodegenSummary(mockGenerateContentFn, mockPrompt, mockFunctionDefs, mockOptions, mockWaitIfPaused);
|
|
109
|
+
expect(result).toHaveLength(1);
|
|
110
|
+
expect(result[0].name).toBe('explanation');
|
|
111
|
+
});
|
|
112
|
+
it('should respect waitIfPaused during file updates', async () => {
|
|
113
|
+
const mockCodegenSummary = {
|
|
114
|
+
name: 'codegenSummary',
|
|
115
|
+
args: {
|
|
116
|
+
explanation: 'Test pause handling',
|
|
117
|
+
fileUpdates: [
|
|
118
|
+
{ filePath: '/test/file1.ts', updateToolName: 'updateFile', prompt: 'Update 1' },
|
|
119
|
+
{ filePath: '/test/file2.ts', updateToolName: 'updateFile', prompt: 'Update 2' },
|
|
120
|
+
],
|
|
121
|
+
contextPaths: [],
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
mockGenerateContentFn
|
|
125
|
+
.mockResolvedValueOnce([mockCodegenSummary])
|
|
126
|
+
.mockResolvedValueOnce([
|
|
127
|
+
{ name: 'updateFile', args: { filePath: '/test/file1.ts', newContent: 'test', explanation: 'test' } },
|
|
128
|
+
])
|
|
129
|
+
.mockResolvedValueOnce([
|
|
130
|
+
{ name: 'updateFile', args: { filePath: '/test/file2.ts', newContent: 'test', explanation: 'test' } },
|
|
131
|
+
]);
|
|
132
|
+
await executeStepCodegenSummary(mockGenerateContentFn, mockPrompt, mockFunctionDefs, mockOptions, mockWaitIfPaused);
|
|
133
|
+
expect(mockWaitIfPaused).toHaveBeenCalledTimes(2);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=step-codegen-summary.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-codegen-summary.test.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-codegen-summary.test.ts"],"names":[],"mappings":"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"}
|