genaicode 0.2.0 → 0.3.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 +2 -0
- package/bin/genaicode-dev.js +2 -1
- package/bin/genaicode.cjs +4 -4
- package/dist/ai-service/ai-studio.js +8 -2
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +21 -8
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/chat-gpt.js +21 -10
- package/dist/ai-service/chat-gpt.js.map +1 -1
- package/dist/ai-service/common.d.ts +9 -5
- package/dist/ai-service/common.js +6 -4
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/common.test.js +3 -3
- package/dist/ai-service/common.test.js.map +1 -1
- package/dist/ai-service/vertex-ai-claude.js +5 -4
- package/dist/ai-service/vertex-ai-claude.js.map +1 -1
- package/dist/ai-service/vertex-ai.js +11 -2
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-params.d.ts +2 -0
- package/dist/cli/cli-params.js +14 -2
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.js +3 -1
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/files/find-files.d.ts +1 -0
- package/dist/files/find-files.js +7 -2
- package/dist/files/find-files.js.map +1 -1
- package/dist/files/read-files.d.ts +2 -2
- package/dist/files/read-files.js +2 -2
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +1 -1
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/main/codegen-types.d.ts +13 -0
- package/dist/main/codegen.d.ts +2 -2
- package/dist/main/codegen.js +86 -52
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/codegen.test.js +7 -4
- package/dist/main/codegen.test.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +16 -0
- package/dist/main/common/content-bus-types.js +7 -0
- package/dist/main/common/content-bus-types.js.map +1 -0
- package/dist/main/common/content-bus.d.ts +9 -0
- package/dist/main/common/content-bus.js +25 -0
- package/dist/main/common/content-bus.js.map +1 -0
- package/dist/main/common/cost-collector.d.ts +15 -0
- package/dist/main/common/cost-collector.js +24 -0
- package/dist/main/common/cost-collector.js.map +1 -0
- package/dist/main/common/user-actions.d.ts +7 -0
- package/dist/main/common/user-actions.js +15 -0
- package/dist/main/common/user-actions.js.map +1 -0
- package/dist/main/config-lib.d.ts +19 -0
- package/dist/main/config-lib.js.map +1 -1
- package/dist/main/config.d.ts +2 -1
- package/dist/main/config.js +3 -0
- package/dist/main/config.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.js +8 -2
- package/dist/main/interactive/codegen-interactive.js.map +1 -1
- package/dist/main/interactive/codegen-worker.d.ts +1 -1
- package/dist/main/interactive/codegen-worker.js +5 -2
- package/dist/main/interactive/codegen-worker.js.map +1 -1
- package/dist/main/interactive/task-file.js +9 -2
- package/dist/main/interactive/task-file.js.map +1 -1
- package/dist/main/interactive/user-action-handlers.d.ts +1 -0
- package/dist/main/interactive/user-action-handlers.js +13 -0
- package/dist/main/interactive/user-action-handlers.js.map +1 -0
- package/dist/main/interactive/user-interrupt.js +1 -1
- package/dist/main/interactive/user-interrupt.js.map +1 -1
- package/dist/main/ui/backend/api-utils.d.ts +2 -0
- package/dist/main/ui/backend/api-utils.js +18 -0
- package/dist/main/ui/backend/api-utils.js.map +1 -0
- package/dist/main/ui/backend/api.d.ts +2 -0
- package/dist/main/ui/backend/api.js +186 -0
- package/dist/main/ui/backend/api.js.map +1 -0
- package/dist/main/ui/backend/server.d.ts +2 -0
- package/dist/main/ui/backend/server.js +81 -0
- package/dist/main/ui/backend/server.js.map +1 -0
- package/dist/main/ui/backend/service.d.ts +47 -0
- package/dist/main/ui/backend/service.js +161 -0
- package/dist/main/ui/backend/service.js.map +1 -0
- package/dist/main/ui/codegen-ui.d.ts +2 -0
- package/dist/main/ui/codegen-ui.js +13 -0
- package/dist/main/ui/codegen-ui.js.map +1 -0
- package/dist/main/ui/frontend/assets/index-D9wcaSJU.js +598 -0
- package/dist/main/ui/frontend/assets/index-S_ocA1xG.css +1 -0
- package/dist/main/ui/frontend/assets/logo-BGHkG1-J.png +0 -0
- package/dist/main/ui/frontend/assets/logo-dark-KAsU1C78.png +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-400-normal-oElOGqNf.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-ext-400-normal-COIQET2s.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-greek-400-normal-DUIT0YPZ.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-BKfmdmKK.woff +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-xj9lRvVs.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-B18ub5-k.woff +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-DDIa4im3.woff2 +0 -0
- package/dist/main/ui/frontend/index.html +16 -0
- package/dist/main/ui/user-action-handlers.d.ts +2 -0
- package/dist/main/ui/user-action-handlers.js +9 -0
- package/dist/main/ui/user-action-handlers.js.map +1 -0
- package/dist/prompt/ai-service-fallback.d.ts +3 -0
- package/dist/prompt/ai-service-fallback.js +79 -0
- package/dist/prompt/ai-service-fallback.js.map +1 -0
- package/dist/prompt/function-calling.js +3 -1
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.d.ts +16 -13
- package/dist/prompt/function-defs/ask-question.js +16 -14
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/codegen-summary.d.ts +23 -21
- package/dist/prompt/function-defs/codegen-summary.js +28 -28
- package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
- package/dist/prompt/function-defs/create-file.d.ts +4 -4
- package/dist/prompt/function-defs/create-file.js +4 -4
- package/dist/prompt/function-defs/create-file.js.map +1 -1
- package/dist/prompt/function-defs/delete-file.d.ts +4 -4
- package/dist/prompt/function-defs/delete-file.js +4 -4
- package/dist/prompt/function-defs/delete-file.js.map +1 -1
- package/dist/prompt/function-defs/generate-image.d.ts +4 -4
- package/dist/prompt/function-defs/generate-image.js +4 -4
- package/dist/prompt/function-defs/generate-image.js.map +1 -1
- package/dist/prompt/function-defs/get-source-code.d.ts +1 -1
- package/dist/prompt/function-defs/get-source-code.js +2 -1
- package/dist/prompt/function-defs/get-source-code.js.map +1 -1
- package/dist/prompt/function-defs/move-file.d.ts +4 -4
- package/dist/prompt/function-defs/move-file.js +4 -4
- package/dist/prompt/function-defs/move-file.js.map +1 -1
- package/dist/prompt/function-defs/optimize-context.d.ts +41 -0
- package/dist/prompt/function-defs/optimize-context.js +42 -0
- package/dist/prompt/function-defs/optimize-context.js.map +1 -0
- package/dist/prompt/function-defs/patch-file.d.ts +4 -4
- package/dist/prompt/function-defs/patch-file.js +4 -4
- package/dist/prompt/function-defs/patch-file.js.map +1 -1
- package/dist/prompt/function-defs/update-file.d.ts +4 -4
- package/dist/prompt/function-defs/update-file.js +4 -4
- package/dist/prompt/function-defs/update-file.js.map +1 -1
- package/dist/prompt/limits.d.ts +3 -3
- package/dist/prompt/limits.js +10 -8
- package/dist/prompt/limits.js.map +1 -1
- package/dist/prompt/limits.test.js +6 -6
- package/dist/prompt/limits.test.js.map +1 -1
- package/dist/prompt/prompt-codegen.js +38 -23
- package/dist/prompt/prompt-codegen.js.map +1 -1
- package/dist/prompt/prompt-codegen.test.js +2 -2
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.js +12 -5
- package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
- package/dist/prompt/prompt-service.d.ts +3 -9
- package/dist/prompt/prompt-service.js +37 -12
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/prompt-service.test.js +40 -25
- package/dist/prompt/prompt-service.test.js.map +1 -1
- package/dist/prompt/steps/step-ask-question.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question.js +35 -20
- package/dist/prompt/steps/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.d.ts +6 -0
- package/dist/prompt/steps/step-context-optimization.js +146 -0
- package/dist/prompt/steps/step-context-optimization.js.map +1 -0
- package/dist/prompt/systemprompt.d.ts +1 -1
- package/dist/prompt/systemprompt.js +82 -32
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/prompt/systemprompt.test.js +5 -8
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/dist/prompt/token-estimator.d.ts +8 -0
- package/dist/prompt/token-estimator.js +31 -0
- package/dist/prompt/token-estimator.js.map +1 -0
- package/package.json +24 -4
- package/dist/main/codegen-interactive-utils.d.ts +0 -8
- package/dist/main/codegen-interactive-utils.js +0 -148
- package/dist/main/codegen-interactive-utils.js.map +0 -1
- package/dist/main/codegen-interactive.d.ts +0 -2
- package/dist/main/codegen-interactive.js +0 -68
- package/dist/main/codegen-interactive.js.map +0 -1
- package/dist/main/interactive/worker-script.d.ts +0 -1
- package/dist/main/interactive/worker-script.js +0 -24
- package/dist/main/interactive/worker-script.js.map +0 -1
- package/dist/main/interactive/worker.d.ts +0 -2
- package/dist/main/interactive/worker.js +0 -55
- package/dist/main/interactive/worker.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChatMessageType } from './content-bus-types.js';
|
|
2
|
+
let contentHandler;
|
|
3
|
+
export function putUserMessage(message) {
|
|
4
|
+
putMessage(message, ChatMessageType.USER);
|
|
5
|
+
}
|
|
6
|
+
export function putSystemMessage(message, data) {
|
|
7
|
+
putMessage(message, ChatMessageType.SYSTEM, data);
|
|
8
|
+
}
|
|
9
|
+
export function putAssistantMessage(message, data) {
|
|
10
|
+
putMessage(message, ChatMessageType.ASSISTANT, data);
|
|
11
|
+
}
|
|
12
|
+
export function putMessage(message, type, data) {
|
|
13
|
+
console.log(message, data);
|
|
14
|
+
contentHandler?.({
|
|
15
|
+
message: { id: (Date.now() + Math.random()).toString(), content: message, type: type, timestamp: new Date() },
|
|
16
|
+
data,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function putContent(content) {
|
|
20
|
+
contentHandler?.(content);
|
|
21
|
+
}
|
|
22
|
+
export function registerContentHandler(handler) {
|
|
23
|
+
contentHandler = handler;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=content-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-bus.js","sourceRoot":"","sources":["../../../src/main/common/content-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,wBAAwB,CAAC;AAIvE,IAAI,cAA0C,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,IAAc;IAC9D,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAc;IACjE,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAqB,EAAE,IAAc;IAC/E,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE3B,cAAc,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;QAC7G,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type CostTuple = {
|
|
2
|
+
timestamp: number;
|
|
3
|
+
cost: number;
|
|
4
|
+
inputTokens: number;
|
|
5
|
+
outputTokens: number;
|
|
6
|
+
cheap: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function collectCost(cost: number, inputTokens: number, outputTokens: number, cheap?: boolean): void;
|
|
9
|
+
export declare function getCollectedCosts(): CostTuple[];
|
|
10
|
+
export declare function getTotalCost(): number;
|
|
11
|
+
export declare function getTotalTokens(): {
|
|
12
|
+
input: number;
|
|
13
|
+
output: number;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const tuples = [];
|
|
2
|
+
export function collectCost(cost, inputTokens, outputTokens, cheap = false) {
|
|
3
|
+
const adjustedCost = cheap ? cost / 10 : cost;
|
|
4
|
+
tuples.push({
|
|
5
|
+
timestamp: Date.now(),
|
|
6
|
+
cost: adjustedCost,
|
|
7
|
+
inputTokens: inputTokens,
|
|
8
|
+
outputTokens: outputTokens,
|
|
9
|
+
cheap: cheap,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function getCollectedCosts() {
|
|
13
|
+
return tuples;
|
|
14
|
+
}
|
|
15
|
+
export function getTotalCost() {
|
|
16
|
+
return tuples.reduce((total, item) => total + item.cost, 0);
|
|
17
|
+
}
|
|
18
|
+
export function getTotalTokens() {
|
|
19
|
+
return tuples.reduce((total, item) => ({
|
|
20
|
+
input: total.input + item.inputTokens,
|
|
21
|
+
output: total.output + item.outputTokens,
|
|
22
|
+
}), { input: 0, output: 0 });
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=cost-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-collector.js","sourceRoot":"","sources":["../../../src/main/common/cost-collector.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,GAAgB,EAAE,CAAC;AAE/B,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,WAAmB,EAAE,YAAoB,EAAE,QAAiB,KAAK;IACzG,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC;QACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,YAAY;QAC1B,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;QACrC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;KACzC,CAAC,EACF,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type InputHandler = (prompt: string, message: string) => Promise<string>;
|
|
2
|
+
type ConfirmHandler = (prompt: string, defaultValue: boolean) => Promise<boolean>;
|
|
3
|
+
export declare function askUserForInput(prompt: string, message: string): Promise<string>;
|
|
4
|
+
export declare function askUserForConfirmation(prompt: string, defaultValue: boolean): Promise<boolean>;
|
|
5
|
+
export declare function registerInputHandler(handler: InputHandler): void;
|
|
6
|
+
export declare function registerConfirmHandler(handler: ConfirmHandler): void;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export async function askUserForInput(prompt, message) {
|
|
2
|
+
return await inputHandler(prompt, message);
|
|
3
|
+
}
|
|
4
|
+
export async function askUserForConfirmation(prompt, defaultValue) {
|
|
5
|
+
return await confirmHandler(prompt, defaultValue);
|
|
6
|
+
}
|
|
7
|
+
let inputHandler;
|
|
8
|
+
let confirmHandler;
|
|
9
|
+
export function registerInputHandler(handler) {
|
|
10
|
+
inputHandler = handler;
|
|
11
|
+
}
|
|
12
|
+
export function registerConfirmHandler(handler) {
|
|
13
|
+
confirmHandler = handler;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=user-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-actions.js","sourceRoot":"","sources":["../../../src/main/common/user-actions.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,OAAe;IACnE,OAAO,MAAM,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,YAAqB;IAChF,OAAO,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,IAAI,YAA0B,CAAC;AAC/B,IAAI,cAA8B,CAAC;AAEnC,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC"}
|
|
@@ -5,12 +5,31 @@ export interface ImportantContext {
|
|
|
5
5
|
textPrompts?: TextPrompt[];
|
|
6
6
|
files?: string[];
|
|
7
7
|
}
|
|
8
|
+
export interface ModelOverrides {
|
|
9
|
+
chatGpt?: {
|
|
10
|
+
cheap?: string;
|
|
11
|
+
default?: string;
|
|
12
|
+
};
|
|
13
|
+
anthropic?: {
|
|
14
|
+
cheap?: string;
|
|
15
|
+
default?: string;
|
|
16
|
+
};
|
|
17
|
+
vertexAi?: {
|
|
18
|
+
cheap?: string;
|
|
19
|
+
default?: string;
|
|
20
|
+
};
|
|
21
|
+
aiStudio?: {
|
|
22
|
+
cheap?: string;
|
|
23
|
+
default?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
8
26
|
export interface RcConfig {
|
|
9
27
|
rootDir: string;
|
|
10
28
|
lintCommand?: string;
|
|
11
29
|
extensions?: string[];
|
|
12
30
|
ignorePaths?: string[];
|
|
13
31
|
importantContext?: ImportantContext;
|
|
32
|
+
modelOverrides?: ModelOverrides;
|
|
14
33
|
}
|
|
15
34
|
export declare function findRcFile(): string;
|
|
16
35
|
export declare function parseRcFile(rcFilePath: string): RcConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-lib.js","sourceRoot":"","sources":["../../src/main/config-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config-lib.js","sourceRoot":"","sources":["../../src/main/config-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAuC1C,yBAAyB;AACzB,MAAM,UAAU,UAAU;IACxB,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,GAAG,kBAAkB,oCAAoC,CAAC,CAAC;QAC7E,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AACnD,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,kBAAkB,YAAY,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAa,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,kDAAkD,CAAC,CAAC;IAEnH,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/main/config.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { RcConfig, ImportantContext } from './config-lib.js';
|
|
1
|
+
import { RcConfig, ImportantContext, ModelOverrides } from './config-lib.js';
|
|
2
2
|
export declare const rcConfig: RcConfig;
|
|
3
3
|
export declare const sourceExtensions: string[];
|
|
4
4
|
export declare const IMAGE_ASSET_EXTENSIONS: string[];
|
|
5
5
|
export declare const ignorePaths: string[];
|
|
6
6
|
export declare const importantContext: ImportantContext;
|
|
7
|
+
export declare const modelOverrides: ModelOverrides;
|
package/dist/main/config.js
CHANGED
|
@@ -31,6 +31,8 @@ export const IMAGE_ASSET_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.webp']
|
|
|
31
31
|
export const ignorePaths = rcConfig.ignorePaths ?? DEFAULT_IGNORE_PATHS;
|
|
32
32
|
// Process and export important context
|
|
33
33
|
export const importantContext = processImportantContext(rcConfig.importantContext);
|
|
34
|
+
// Export model overrides
|
|
35
|
+
export const modelOverrides = rcConfig.modelOverrides ?? {};
|
|
34
36
|
function processImportantContext(context) {
|
|
35
37
|
if (!context)
|
|
36
38
|
return { textPrompts: [], files: [] };
|
|
@@ -42,4 +44,5 @@ function processImportantContext(context) {
|
|
|
42
44
|
console.log('Detected codegen configuration', rcConfig);
|
|
43
45
|
console.log('Root dir:', rcConfig.rootDir);
|
|
44
46
|
console.log('Important context:', importantContext);
|
|
47
|
+
console.log('Model overrides:', modelOverrides);
|
|
45
48
|
//# sourceMappingURL=config.js.map
|
package/dist/main/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAA8C,MAAM,iBAAiB,CAAC;AACtG,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,sDAAsD;AACtD,MAAM,kBAAkB,GAAa;IACnC,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;CACR,CAAC;AAEF,8CAA8C;AAC9C,MAAM,oBAAoB,GAAa,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;AAE1G,mCAAmC;AACnC,MAAM,UAAU,GAAW,UAAU,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAa,WAAW,CAAC,UAAU,CAAC,CAAC;AAE1D,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAa,QAAQ,CAAC,UAAU,IAAI,kBAAkB,CAAC;AAEpF,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3F,sBAAsB;AACtB,MAAM,CAAC,MAAM,WAAW,GAAa,QAAQ,CAAC,WAAW,IAAI,oBAAoB,CAAC;AAElF,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAErG,yBAAyB;AACzB,MAAM,CAAC,MAAM,cAAc,GAAmB,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;AAE5E,SAAS,uBAAuB,CAAC,OAAqC;IACpE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEpD,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -6,8 +6,10 @@ import { getUserOptions } from './configure.js';
|
|
|
6
6
|
import { printHelpMessage } from '../../cli/cli-options.js';
|
|
7
7
|
import { runProcessComments } from './process-comments.js';
|
|
8
8
|
import { handleError } from './error-handling.js';
|
|
9
|
+
import { registerUserActionHandlers } from './user-action-handlers.js';
|
|
9
10
|
// Main function for interactive mode
|
|
10
11
|
export const runInteractiveMode = async (options) => {
|
|
12
|
+
registerUserActionHandlers();
|
|
11
13
|
displayWelcome();
|
|
12
14
|
const nextRun = true;
|
|
13
15
|
while (nextRun) {
|
|
@@ -18,7 +20,10 @@ export const runInteractiveMode = async (options) => {
|
|
|
18
20
|
break;
|
|
19
21
|
}
|
|
20
22
|
await handleUserAction(action, options);
|
|
21
|
-
|
|
23
|
+
// Only prompt for next action if not in task file selection
|
|
24
|
+
if (action !== 'task_file') {
|
|
25
|
+
console.log('Task completed. Returning to main menu...\n');
|
|
26
|
+
}
|
|
22
27
|
}
|
|
23
28
|
catch (error) {
|
|
24
29
|
await handleError(error);
|
|
@@ -34,7 +39,8 @@ const handleUserAction = async (action, options) => {
|
|
|
34
39
|
await runTextPrompt(options);
|
|
35
40
|
break;
|
|
36
41
|
case 'task_file':
|
|
37
|
-
runTaskFile(options);
|
|
42
|
+
await runTaskFile(options);
|
|
43
|
+
// Don't prompt for next action here, let runTaskFile handle it
|
|
38
44
|
break;
|
|
39
45
|
case 'select_ai_service':
|
|
40
46
|
options.aiService = await selectAiService(options.aiService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-interactive.js","sourceRoot":"","sources":["../../../src/main/interactive/codegen-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"codegen-interactive.js","sourceRoot":"","sources":["../../../src/main/interactive/codegen-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAuB,EAAiB,EAAE;IACjF,0BAA0B,EAAE,CAAC;IAE7B,cAAc,EAAE,CAAC;IAEjB,MAAM,OAAO,GAAG,IAAI,CAAC;IACrB,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;YAErC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,MAAM;YACR,CAAC;YAED,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAExC,4DAA4D;YAC5D,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAkB,EAAE,OAAuB,EAAiB,EAAE;IAC5F,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,kBAAkB;YACrB,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM;QACR,KAAK,aAAa;YAChB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,WAAW;YACd,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;YAC3B,+DAA+D;YAC/D,MAAM;QACR,KAAK,mBAAmB;YACtB,OAAO,CAAC,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM;QACR,KAAK,WAAW;YACd,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,MAAM;QACR,KAAK,MAAM;YACT,gBAAgB,EAAE,CAAC;YACnB,MAAM;QACR,KAAK,WAAW;YACd,uCAAuC;YACvC,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { CodegenOptions } from '../codegen-types.js';
|
|
2
2
|
export declare let abortController: AbortController | null;
|
|
3
|
-
export declare const runCodegenWorker: (options: CodegenOptions) => Promise<void>;
|
|
3
|
+
export declare const runCodegenWorker: (options: CodegenOptions, waitIfPaused?: () => Promise<void>) => Promise<void>;
|
|
@@ -3,14 +3,17 @@ import { runCodegenIteration } from '../codegen.js';
|
|
|
3
3
|
import { handleUserInterrupt } from './user-interrupt.js';
|
|
4
4
|
export let abortController = null;
|
|
5
5
|
// Wrapper function to run codegen in the same process
|
|
6
|
-
export const runCodegenWorker = async (options) => {
|
|
6
|
+
export const runCodegenWorker = async (options, waitIfPaused = () => Promise.resolve()) => {
|
|
7
7
|
console.log('Starting operation...');
|
|
8
8
|
abortController = new AbortController();
|
|
9
9
|
setMaxListeners(Infinity, abortController.signal);
|
|
10
10
|
const removeInterruptHandler = createInterruptHandler(abortController);
|
|
11
11
|
try {
|
|
12
12
|
// Set up user interrupt handling
|
|
13
|
-
await Promise.race([
|
|
13
|
+
await Promise.race([
|
|
14
|
+
runCodegenIteration(options, abortController.signal, waitIfPaused),
|
|
15
|
+
handleUserInterrupt(abortController),
|
|
16
|
+
]);
|
|
14
17
|
}
|
|
15
18
|
catch (error) {
|
|
16
19
|
if (error instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen-worker.js","sourceRoot":"","sources":["../../../src/main/interactive/codegen-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,IAAI,eAAe,GAA2B,IAAI,CAAC;AAE1D,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"codegen-worker.js","sourceRoot":"","sources":["../../../src/main/interactive/codegen-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,IAAI,eAAe,GAA2B,IAAI,CAAC;AAE1D,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAAuB,EACvB,eAAoC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAC5C,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC;YAClE,mBAAmB,CAAC,eAAe,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;YAAS,CAAC;QACT,sBAAsB,EAAE,CAAC;QACzB,eAAe,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,sBAAsB,GAAG,CAAC,eAAgC,EAAE,EAAE;IAClE,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEvC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -3,25 +3,32 @@ import { rcConfig } from '../config.js';
|
|
|
3
3
|
import { runCodegenWorker } from './codegen-worker.js';
|
|
4
4
|
export async function runTaskFile(options) {
|
|
5
5
|
try {
|
|
6
|
+
console.log('Entering task file selection. Press Ctrl+C to cancel.');
|
|
6
7
|
const taskFile = await fileSelector({
|
|
7
8
|
message: 'Select task file:',
|
|
8
9
|
path: rcConfig.rootDir,
|
|
9
10
|
allowCancel: true,
|
|
10
11
|
});
|
|
11
12
|
if (taskFile === 'canceled') {
|
|
12
|
-
console.log('Task file selection cancelled.
|
|
13
|
+
console.log('Task file selection cancelled.');
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
else if (taskFile) {
|
|
16
17
|
console.log(`Selected task file: ${taskFile}`);
|
|
17
18
|
await runCodegenWorker({ ...options, taskFile, considerAllFiles: true });
|
|
19
|
+
console.log('Task file processing completed.');
|
|
18
20
|
}
|
|
19
21
|
else {
|
|
22
|
+
console.log('No task file selected.');
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
catch (error) {
|
|
24
|
-
|
|
27
|
+
if (error instanceof Error && error.message === 'Canceled') {
|
|
28
|
+
console.log('Task file selection cancelled.');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.error('Error selecting or processing task file:', error instanceof Error ? error.message : 'Unknown error');
|
|
25
32
|
throw error;
|
|
26
33
|
}
|
|
27
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-file.js","sourceRoot":"","sources":["../../../src/main/interactive/task-file.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;YAClC,OAAO,EAAE,mBAAmB;YAC5B,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"task-file.js","sourceRoot":"","sources":["../../../src/main/interactive/task-file.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC;YAClC,OAAO,EAAE,mBAAmB;YAC5B,IAAI,EAAE,QAAQ,CAAC,OAAO;YACtB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YAC/C,MAAM,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACpH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerUserActionHandlers(): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { input, confirm } from '@inquirer/prompts';
|
|
2
|
+
import { registerInputHandler, registerConfirmHandler } from '../common/user-actions.js';
|
|
3
|
+
export function registerUserActionHandlers() {
|
|
4
|
+
registerInputHandler(askUserForInput);
|
|
5
|
+
registerConfirmHandler(askUserForConfirmation);
|
|
6
|
+
}
|
|
7
|
+
async function askUserForInput(prompt) {
|
|
8
|
+
return await input({ message: prompt });
|
|
9
|
+
}
|
|
10
|
+
async function askUserForConfirmation(message, defaultValue) {
|
|
11
|
+
return await confirm({ message, default: defaultValue });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=user-action-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-action-handlers.js","sourceRoot":"","sources":["../../../src/main/interactive/user-action-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,UAAU,0BAA0B;IACxC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IACtC,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAc;IAC3C,OAAO,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAe,EAAE,YAAqB;IAC1E,OAAO,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -21,7 +21,7 @@ const createReadlineInterface = () => {
|
|
|
21
21
|
});
|
|
22
22
|
};
|
|
23
23
|
const setupKeyPressHandler = (rl, abortController) => {
|
|
24
|
-
const handleKeyPress = (
|
|
24
|
+
const handleKeyPress = (_, key) => {
|
|
25
25
|
if (key.ctrl && key.name === 'c') {
|
|
26
26
|
console.log('\nInterruption requested. Aborting operation...');
|
|
27
27
|
abortController.abort();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-interrupt.js","sourceRoot":"","sources":["../../../src/main/interactive/user-interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAgC,EAAiB,EAAE;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAE5D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAExE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,qBAAqB,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,eAAe,CAAC,MAAM,CAAC,gBAAgB,CACrC,OAAO,EACP,GAAG,EAAE;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,EAAsB,EAAE,eAAgC,EAAE,EAAE;IACxF,MAAM,cAAc,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"user-interrupt.js","sourceRoot":"","sources":["../../../src/main/interactive/user-interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAgC,EAAiB,EAAE;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,uBAAuB,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAE5D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAExE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,qBAAqB,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,eAAe,CAAC,MAAM,CAAC,gBAAgB,CACrC,OAAO,EACP,GAAG,EAAE;YACH,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;IACnC,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,EAAsB,EAAE,eAAgC,EAAE,EAAE;IACxF,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,GAAoC,EAAE,EAAE;QACzE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAE7C,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Validation function for CodegenOptions
|
|
2
|
+
export function validateCodegenOptions(options) {
|
|
3
|
+
const errors = [];
|
|
4
|
+
if (typeof options.aiService !== 'string' ||
|
|
5
|
+
!['vertex-ai', 'ai-studio', 'vertex-ai-claude', 'chat-gpt', 'anthropic'].includes(options.aiService)) {
|
|
6
|
+
errors.push('Invalid aiService');
|
|
7
|
+
}
|
|
8
|
+
if (options.temperature !== undefined &&
|
|
9
|
+
(typeof options.temperature !== 'number' || options.temperature < 0 || options.temperature > 2)) {
|
|
10
|
+
errors.push('Temperature must be a number between 0 and 2');
|
|
11
|
+
}
|
|
12
|
+
if (options.imagen !== undefined && !['vertex-ai', 'dall-e'].includes(options.imagen)) {
|
|
13
|
+
errors.push('Invalid imagen value');
|
|
14
|
+
}
|
|
15
|
+
// Add more validations as needed for other fields
|
|
16
|
+
return errors;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=api-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-utils.js","sourceRoot":"","sources":["../../../../src/main/ui/backend/api-utils.ts"],"names":[],"mappings":"AAEA,yCAAyC;AACzC,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IACE,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QACrC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EACpG,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;IAED,IACE,OAAO,CAAC,WAAW,KAAK,SAAS;QACjC,CAAC,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,EAC/F,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtF,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,kDAAkD;IAElD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import multer from 'multer';
|
|
3
|
+
import { rcConfig as globalRcConfig } from '../../config.js';
|
|
4
|
+
import { validateCodegenOptions } from './api-utils.js';
|
|
5
|
+
const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
|
|
6
|
+
const ALLOWED_FILE_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
|
|
7
|
+
const MAX_IMAGES = 5;
|
|
8
|
+
const storage = multer.memoryStorage();
|
|
9
|
+
const upload = multer({
|
|
10
|
+
storage: storage,
|
|
11
|
+
fileFilter: (_, file, cb) => {
|
|
12
|
+
if (ALLOWED_FILE_TYPES.includes(file.mimetype)) {
|
|
13
|
+
cb(null, true);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
cb(new Error('Invalid file type. Only JPEG, PNG, GIF, and WebP are allowed.'));
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
limits: {
|
|
20
|
+
fileSize: MAX_FILE_SIZE,
|
|
21
|
+
files: MAX_IMAGES,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
export function createRouter(service) {
|
|
25
|
+
const router = express.Router();
|
|
26
|
+
// Apply token validation middleware to all routes
|
|
27
|
+
router.use((req, res, next) => {
|
|
28
|
+
const token = req.headers['authorization']?.split(' ')[1];
|
|
29
|
+
if (!token) {
|
|
30
|
+
return res.status(401).json({ error: 'No token provided' });
|
|
31
|
+
}
|
|
32
|
+
if (!service.validateToken(token)) {
|
|
33
|
+
return res.status(401).json({ error: 'Invalid token' });
|
|
34
|
+
}
|
|
35
|
+
next();
|
|
36
|
+
});
|
|
37
|
+
// Execute codegen (handles both regular and multimodal)
|
|
38
|
+
router.post('/execute-codegen', upload.array('images', MAX_IMAGES), async (req, res) => {
|
|
39
|
+
try {
|
|
40
|
+
const prompt = req.body.prompt;
|
|
41
|
+
const options = JSON.parse(req.body.options);
|
|
42
|
+
const files = req.files;
|
|
43
|
+
if (!prompt || typeof prompt !== 'string') {
|
|
44
|
+
return res.status(400).json({ error: 'Invalid prompt' });
|
|
45
|
+
}
|
|
46
|
+
const validationErrors = validateCodegenOptions(options);
|
|
47
|
+
if (validationErrors.length > 0) {
|
|
48
|
+
return res.status(400).json({ errors: validationErrors });
|
|
49
|
+
}
|
|
50
|
+
const images = files?.map((file) => ({
|
|
51
|
+
buffer: file.buffer,
|
|
52
|
+
mimetype: file.mimetype,
|
|
53
|
+
originalname: file.originalname,
|
|
54
|
+
}));
|
|
55
|
+
const result = await service.executeCodegen(prompt, options, images);
|
|
56
|
+
res.json({ result });
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error('Error executing codegen:', error);
|
|
60
|
+
if (error instanceof multer.MulterError) {
|
|
61
|
+
if (error.code === 'LIMIT_FILE_SIZE') {
|
|
62
|
+
return res.status(400).json({ error: 'File size exceeds the 5MB limit' });
|
|
63
|
+
}
|
|
64
|
+
if (error.code === 'LIMIT_FILE_COUNT') {
|
|
65
|
+
return res.status(400).json({ error: `Maximum of ${MAX_IMAGES} images allowed` });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
res.status(500).json({ error: 'An error occurred while executing codegen' });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
router.get('/content', async (_, res) => {
|
|
72
|
+
try {
|
|
73
|
+
const content = service.getContent();
|
|
74
|
+
res.json({ content });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('Error getting content:', error);
|
|
78
|
+
res.status(500).json({ error: 'An error occurred while getting content' });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Get execution status
|
|
82
|
+
router.get('/execution-status', async (_, res) => {
|
|
83
|
+
try {
|
|
84
|
+
const status = await service.getExecutionStatus();
|
|
85
|
+
res.json({ status });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error('Error getting execution status:', error);
|
|
89
|
+
res.status(500).json({ error: 'An error occurred while getting execution status' });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// Interrupt execution
|
|
93
|
+
router.post('/interrupt-execution', async (_, res) => {
|
|
94
|
+
try {
|
|
95
|
+
await service.interruptExecution();
|
|
96
|
+
res.json({ message: 'Execution interrupted successfully' });
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error('Error interrupting execution:', error);
|
|
100
|
+
res.status(500).json({ error: 'An error occurred while interrupting execution' });
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
// Pause execution
|
|
104
|
+
router.post('/pause-execution', async (_, res) => {
|
|
105
|
+
try {
|
|
106
|
+
await service.pauseExecution();
|
|
107
|
+
res.json({ message: 'Execution paused successfully' });
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.error('Error pausing execution:', error);
|
|
111
|
+
res.status(500).json({ error: 'An error occurred while pausing execution' });
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Resume execution
|
|
115
|
+
router.post('/resume-execution', async (_, res) => {
|
|
116
|
+
try {
|
|
117
|
+
await service.resumeExecution();
|
|
118
|
+
res.json({ message: 'Execution resumed successfully' });
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.error('Error resuming execution:', error);
|
|
122
|
+
res.status(500).json({ error: 'An error occurred while resuming execution' });
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
// Get current question
|
|
126
|
+
router.get('/current-question', async (_, res) => {
|
|
127
|
+
try {
|
|
128
|
+
const question = await service.getCurrentQuestion();
|
|
129
|
+
res.json({ question });
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error('Error getting current question:', error);
|
|
133
|
+
res.status(500).json({ error: 'An error occurred while getting current question' });
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// Answer question
|
|
137
|
+
router.post('/answer-question', async (req, res) => {
|
|
138
|
+
try {
|
|
139
|
+
const { questionId, answer } = req.body;
|
|
140
|
+
if (!questionId || !answer || typeof questionId !== 'string' || typeof answer !== 'string') {
|
|
141
|
+
return res.status(400).json({ error: 'Invalid question ID or answer' });
|
|
142
|
+
}
|
|
143
|
+
await service.answerQuestion(questionId, answer);
|
|
144
|
+
res.json({ message: 'Question answered successfully' });
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.error('Error answering question:', error);
|
|
148
|
+
res.status(500).json({ error: 'An error occurred while answering question' });
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// Get total cost of prompts in the current session
|
|
152
|
+
router.get('/total-cost', async (_, res) => {
|
|
153
|
+
try {
|
|
154
|
+
const totalCost = await service.getTotalCost();
|
|
155
|
+
res.json({ totalCost });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error('Error getting total cost:', error);
|
|
159
|
+
res.status(500).json({ error: 'An error occurred while getting total cost' });
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// Get default CodegenOptions
|
|
163
|
+
router.get('/default-codegen-options', async (_, res) => {
|
|
164
|
+
try {
|
|
165
|
+
const defaultOptions = service.getCodegenOptions();
|
|
166
|
+
res.json({ options: defaultOptions });
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error('Error getting default codegen options:', error);
|
|
170
|
+
res.status(500).json({ error: 'An error occurred while getting default codegen options' });
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
// Get rcConfig settings
|
|
174
|
+
router.get('/rcconfig', async (_, res) => {
|
|
175
|
+
try {
|
|
176
|
+
const rcConfigSettings = globalRcConfig;
|
|
177
|
+
res.json({ rcConfig: rcConfigSettings });
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error('Error getting rcConfig settings:', error);
|
|
181
|
+
res.status(500).json({ error: 'An error occurred while getting rcConfig settings' });
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
return router;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/main/ui/backend/api.ts"],"names":[],"mappings":"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"}
|