genaicode 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +3 -1
  2. package/bin/genaicode.cjs +7 -0
  3. package/dist/ai-service/ai-studio.d.ts +2 -1
  4. package/dist/ai-service/ai-studio.js +5 -5
  5. package/dist/ai-service/ai-studio.js.map +1 -1
  6. package/dist/ai-service/anthropic.d.ts +2 -1
  7. package/dist/ai-service/anthropic.js +6 -4
  8. package/dist/ai-service/anthropic.js.map +1 -1
  9. package/dist/ai-service/chat-gpt.js +2 -1
  10. package/dist/ai-service/chat-gpt.js.map +1 -1
  11. package/dist/ai-service/common.d.ts +4 -3
  12. package/dist/ai-service/common.js.map +1 -1
  13. package/dist/ai-service/dall-e.js +3 -2
  14. package/dist/ai-service/dall-e.js.map +1 -1
  15. package/dist/ai-service/vertex-ai-claude.js +2 -1
  16. package/dist/ai-service/vertex-ai-claude.js.map +1 -1
  17. package/dist/ai-service/vertex-ai-imagen.js +3 -0
  18. package/dist/ai-service/vertex-ai-imagen.js.map +1 -1
  19. package/dist/ai-service/vertex-ai.d.ts +3 -3
  20. package/dist/ai-service/vertex-ai.js +18 -23
  21. package/dist/ai-service/vertex-ai.js.map +1 -1
  22. package/dist/cli/cli-options.js +2 -2
  23. package/dist/cli/cli-options.js.map +1 -1
  24. package/dist/cli/cli-params.d.ts +4 -3
  25. package/dist/cli/cli-params.js +11 -5
  26. package/dist/cli/cli-params.js.map +1 -1
  27. package/dist/cli/validate-cli-params.js +2 -1
  28. package/dist/cli/validate-cli-params.js.map +1 -1
  29. package/dist/files/read-files.d.ts +6 -1
  30. package/dist/files/read-files.js +13 -8
  31. package/dist/files/read-files.js.map +1 -1
  32. package/dist/files/read-files.test.js +5 -6
  33. package/dist/files/read-files.test.js.map +1 -1
  34. package/dist/files/update-files.d.ts +2 -1
  35. package/dist/files/update-files.js +6 -6
  36. package/dist/files/update-files.js.map +1 -1
  37. package/dist/main/codegen-interactive-utils.d.ts +8 -0
  38. package/dist/main/codegen-interactive-utils.js +148 -0
  39. package/dist/main/codegen-interactive-utils.js.map +1 -0
  40. package/dist/main/codegen-interactive.d.ts +2 -0
  41. package/dist/main/codegen-interactive.js +68 -0
  42. package/dist/main/codegen-interactive.js.map +1 -0
  43. package/dist/main/codegen-types.d.ts +28 -0
  44. package/dist/main/codegen-types.js +2 -0
  45. package/dist/main/codegen-types.js.map +1 -0
  46. package/dist/main/codegen.d.ts +2 -0
  47. package/dist/main/codegen.js +88 -25
  48. package/dist/main/codegen.js.map +1 -1
  49. package/dist/main/codegen.test.js +36 -22
  50. package/dist/main/codegen.test.js.map +1 -1
  51. package/dist/main/config-lib.d.ts +8 -0
  52. package/dist/main/config-lib.js.map +1 -1
  53. package/dist/main/config.d.ts +2 -1
  54. package/dist/main/config.js +12 -0
  55. package/dist/main/config.js.map +1 -1
  56. package/dist/main/interactive/codegen-interactive.d.ts +2 -0
  57. package/dist/main/interactive/codegen-interactive.js +55 -0
  58. package/dist/main/interactive/codegen-interactive.js.map +1 -0
  59. package/dist/main/interactive/codegen-interactive.test.d.ts +4 -0
  60. package/dist/main/interactive/codegen-interactive.test.js +77 -0
  61. package/dist/main/interactive/codegen-interactive.test.js.map +1 -0
  62. package/dist/main/interactive/codegen-worker.d.ts +3 -0
  63. package/dist/main/interactive/codegen-worker.js +47 -0
  64. package/dist/main/interactive/codegen-worker.js.map +1 -0
  65. package/dist/main/interactive/common.d.ts +5 -0
  66. package/dist/main/interactive/common.js +51 -0
  67. package/dist/main/interactive/common.js.map +1 -0
  68. package/dist/main/interactive/configure.d.ts +2 -0
  69. package/dist/main/interactive/configure.js +99 -0
  70. package/dist/main/interactive/configure.js.map +1 -0
  71. package/dist/main/interactive/error-handling.d.ts +4 -0
  72. package/dist/main/interactive/error-handling.js +49 -0
  73. package/dist/main/interactive/error-handling.js.map +1 -0
  74. package/dist/main/interactive/help.d.ts +1 -0
  75. package/dist/main/interactive/help.js +22 -0
  76. package/dist/main/interactive/help.js.map +1 -0
  77. package/dist/main/interactive/process-comments.d.ts +2 -0
  78. package/dist/main/interactive/process-comments.js +39 -0
  79. package/dist/main/interactive/process-comments.js.map +1 -0
  80. package/dist/main/interactive/select-ai-service.d.ts +2 -0
  81. package/dist/main/interactive/select-ai-service.js +27 -0
  82. package/dist/main/interactive/select-ai-service.js.map +1 -0
  83. package/dist/main/interactive/task-file.d.ts +2 -0
  84. package/dist/main/interactive/task-file.js +28 -0
  85. package/dist/main/interactive/task-file.js.map +1 -0
  86. package/dist/main/interactive/text-prompt.d.ts +2 -0
  87. package/dist/main/interactive/text-prompt.js +18 -0
  88. package/dist/main/interactive/text-prompt.js.map +1 -0
  89. package/dist/main/interactive/user-interrupt.d.ts +1 -0
  90. package/dist/main/interactive/user-interrupt.js +36 -0
  91. package/dist/main/interactive/user-interrupt.js.map +1 -0
  92. package/dist/main/interactive/worker-script.d.ts +1 -0
  93. package/dist/main/interactive/worker-script.js +24 -0
  94. package/dist/main/interactive/worker-script.js.map +1 -0
  95. package/dist/main/interactive/worker.d.ts +2 -0
  96. package/dist/main/interactive/worker.js +55 -0
  97. package/dist/main/interactive/worker.js.map +1 -0
  98. package/dist/prompt/function-calling-validate.d.ts +1 -1
  99. package/dist/prompt/function-calling-validate.js +21 -15
  100. package/dist/prompt/function-calling-validate.js.map +1 -1
  101. package/dist/prompt/function-defs/ask-question.d.ts +35 -1
  102. package/dist/prompt/function-defs/ask-question.js +36 -1
  103. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  104. package/dist/prompt/function-defs/codegen-summary.d.ts +5 -5
  105. package/dist/prompt/function-defs/codegen-summary.js +8 -8
  106. package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
  107. package/dist/prompt/function-defs/generate-image.d.ts +8 -15
  108. package/dist/prompt/function-defs/generate-image.js +8 -15
  109. package/dist/prompt/function-defs/generate-image.js.map +1 -1
  110. package/dist/prompt/limits.js +2 -2
  111. package/dist/prompt/limits.test.js +5 -5
  112. package/dist/prompt/prompt-codegen.d.ts +7 -2
  113. package/dist/prompt/prompt-codegen.js +26 -17
  114. package/dist/prompt/prompt-codegen.js.map +1 -1
  115. package/dist/prompt/prompt-codegen.test.js +11 -7
  116. package/dist/prompt/prompt-codegen.test.js.map +1 -1
  117. package/dist/prompt/prompt-service-ask-question.test.js +14 -18
  118. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
  119. package/dist/prompt/prompt-service.d.ts +20 -5
  120. package/dist/prompt/prompt-service.js +35 -150
  121. package/dist/prompt/prompt-service.js.map +1 -1
  122. package/dist/prompt/prompt-service.test.js +42 -22
  123. package/dist/prompt/prompt-service.test.js.map +1 -1
  124. package/dist/prompt/steps/step-ask-question.d.ts +6 -0
  125. package/dist/prompt/steps/step-ask-question.js +82 -0
  126. package/dist/prompt/steps/step-ask-question.js.map +1 -0
  127. package/dist/prompt/steps/step-generate-image.d.ts +2 -0
  128. package/dist/prompt/steps/step-generate-image.js +29 -0
  129. package/dist/prompt/steps/step-generate-image.js.map +1 -0
  130. package/dist/prompt/steps/step-validate-recover.d.ts +13 -0
  131. package/dist/prompt/steps/step-validate-recover.js +51 -0
  132. package/dist/prompt/steps/step-validate-recover.js.map +1 -0
  133. package/dist/prompt/steps/step-verify-patch.d.ts +7 -0
  134. package/dist/prompt/steps/step-verify-patch.js +41 -0
  135. package/dist/prompt/steps/step-verify-patch.js.map +1 -0
  136. package/dist/prompt/steps/steps-types.d.ts +4 -0
  137. package/dist/prompt/steps/steps-types.js +6 -0
  138. package/dist/prompt/steps/steps-types.js.map +1 -0
  139. package/dist/prompt/systemprompt.d.ts +2 -1
  140. package/dist/prompt/systemprompt.js +11 -7
  141. package/dist/prompt/systemprompt.js.map +1 -1
  142. package/dist/prompt/systemprompt.test.d.ts +1 -0
  143. package/dist/prompt/systemprompt.test.js +4 -5
  144. package/dist/prompt/systemprompt.test.js.map +1 -1
  145. package/package.json +4 -3
  146. package/bin/vertex-monkey-patch.cjs +0 -33
@@ -0,0 +1,77 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import * as common from './common.js';
3
+ import * as textPrompt from './text-prompt.js';
4
+ import * as taskFile from './task-file.js';
5
+ import * as processComments from './process-comments.js';
6
+ import * as selectAiService from './select-ai-service.js';
7
+ import * as configure from './configure.js';
8
+ import * as help from '../../cli/cli-options.js';
9
+ import '../../cli/cli-params.js';
10
+ import '../../files/read-files.js';
11
+ import '../../files/find-files.js';
12
+ import '../config.js';
13
+ import { runInteractiveMode } from './codegen-interactive.js';
14
+ // Mock all imported modules
15
+ vi.mock('../../cli/cli-params.js', () => ({
16
+ requireExplanations: false,
17
+ }));
18
+ vi.mock('../config.js', () => ({ rcConfig: {}, sourceExtensions: [] }));
19
+ vi.mock('./common');
20
+ vi.mock('../../files/find-files.js', () => ({}));
21
+ vi.mock('../../files/read-files.js', () => ({}));
22
+ vi.mock('./text-prompt');
23
+ vi.mock('./task-file');
24
+ vi.mock('./process-comments');
25
+ vi.mock('./select-ai-service');
26
+ vi.mock('./configure');
27
+ vi.mock('../../cli/cli-options');
28
+ vi.mock('./codegen-worker.js');
29
+ describe('runInteractiveMode', () => {
30
+ const mockOptions = { aiService: 'vertex-ai' };
31
+ beforeEach(() => {
32
+ vi.resetAllMocks();
33
+ // Mock console.log to prevent output during tests
34
+ vi.spyOn(console, 'log').mockImplementation(() => { });
35
+ });
36
+ afterEach(() => {
37
+ vi.restoreAllMocks();
38
+ });
39
+ it('should handle text prompt action', async () => {
40
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('text_prompt').mockResolvedValueOnce('exit');
41
+ await runInteractiveMode(mockOptions);
42
+ expect(textPrompt.runTextPrompt).toBeCalled();
43
+ });
44
+ it('should handle task file action', async () => {
45
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('task_file').mockResolvedValueOnce('exit');
46
+ await runInteractiveMode(mockOptions);
47
+ expect(taskFile.runTaskFile).toBeCalled();
48
+ });
49
+ it('should handle process comments action', async () => {
50
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('process_comments').mockResolvedValueOnce('exit');
51
+ await runInteractiveMode(mockOptions);
52
+ expect(processComments.runProcessComments).toBeCalled();
53
+ });
54
+ it('should handle select AI service action', async () => {
55
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('select_ai_service').mockResolvedValueOnce('exit');
56
+ vi.spyOn(selectAiService, 'selectAiService').mockResolvedValueOnce('chat-gpt');
57
+ await runInteractiveMode(mockOptions);
58
+ expect(selectAiService.selectAiService).toHaveBeenCalledWith('vertex-ai');
59
+ });
60
+ it('should handle configure action', async () => {
61
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('configure').mockResolvedValueOnce('exit');
62
+ vi.spyOn(configure, 'getUserOptions').mockResolvedValueOnce({ ...mockOptions, dryRun: true });
63
+ await runInteractiveMode(mockOptions);
64
+ expect(configure.getUserOptions).toHaveBeenCalledWith(mockOptions);
65
+ });
66
+ it('should handle help action', async () => {
67
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('help').mockResolvedValueOnce('exit');
68
+ await runInteractiveMode(mockOptions);
69
+ expect(help.printHelpMessage).toHaveBeenCalled();
70
+ });
71
+ it('should handle exit action', async () => {
72
+ vi.spyOn(common, 'getUserAction').mockResolvedValueOnce('exit');
73
+ await runInteractiveMode(mockOptions);
74
+ expect(console.log).toHaveBeenCalledWith('Exiting Genaicode Interactive Mode. Goodbye!');
75
+ });
76
+ });
77
+ //# sourceMappingURL=codegen-interactive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-interactive.test.js","sourceRoot":"","sources":["../../../src/main/interactive/codegen-interactive.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CodegenOptions } from '../codegen-types.js';
2
+ export declare let abortController: AbortController | null;
3
+ export declare const runCodegenWorker: (options: CodegenOptions) => Promise<void>;
@@ -0,0 +1,47 @@
1
+ import { setMaxListeners } from 'events';
2
+ import { runCodegenIteration } from '../codegen.js';
3
+ import { handleUserInterrupt } from './user-interrupt.js';
4
+ export let abortController = null;
5
+ // Wrapper function to run codegen in the same process
6
+ export const runCodegenWorker = async (options) => {
7
+ console.log('Starting operation...');
8
+ abortController = new AbortController();
9
+ setMaxListeners(Infinity, abortController.signal);
10
+ const removeInterruptHandler = createInterruptHandler(abortController);
11
+ try {
12
+ // Set up user interrupt handling
13
+ await Promise.race([runCodegenIteration(options, abortController.signal), handleUserInterrupt(abortController)]);
14
+ }
15
+ catch (error) {
16
+ if (error instanceof Error) {
17
+ if (error.name === 'AbortError') {
18
+ console.log('Operation was aborted.');
19
+ }
20
+ else {
21
+ console.error(`Error:`, error);
22
+ }
23
+ }
24
+ else {
25
+ console.log('Unknown error occurred', error);
26
+ }
27
+ }
28
+ finally {
29
+ removeInterruptHandler();
30
+ abortController = null;
31
+ console.log('Cleanup complete.');
32
+ }
33
+ };
34
+ // Utility function to handle interruptions with AbortSignal
35
+ const createInterruptHandler = (abortController) => {
36
+ const handleInterrupt = () => {
37
+ console.log('Interrupt signal received. Aborting operation...');
38
+ abortController.abort();
39
+ };
40
+ process.on('SIGINT', handleInterrupt);
41
+ process.on('SIGTERM', handleInterrupt);
42
+ return () => {
43
+ process.off('SIGINT', handleInterrupt);
44
+ process.off('SIGTERM', handleInterrupt);
45
+ };
46
+ };
47
+ //# sourceMappingURL=codegen-worker.js.map
@@ -0,0 +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,EAAE,OAAuB,EAAiB,EAAE;IAC/E,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,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnH,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"}
@@ -0,0 +1,5 @@
1
+ export declare const displayWelcome: () => void;
2
+ export type UserAction = 'text_prompt' | 'task_file' | 'process_comments' | 'select_ai_service' | 'configure' | 'help' | 'exit' | 're_run' | 'main_menu' | 'interrupt';
3
+ export declare const getUserAction: () => Promise<UserAction>;
4
+ export declare const handleCodegenError: (error: Error) => Promise<UserAction>;
5
+ export declare const confirmAction: (message: string) => Promise<boolean>;
@@ -0,0 +1,51 @@
1
+ import { select, Separator } from '@inquirer/prompts';
2
+ import { createRequire } from 'module';
3
+ import { CODEGEN_TRIGGER } from '../../prompt/prompt-consts.js';
4
+ const require = createRequire(import.meta.url);
5
+ const packageJson = require('../../../package.json');
6
+ export const displayWelcome = () => {
7
+ console.log(`Welcome to Genaicode v${packageJson.version}`);
8
+ };
9
+ const getUserActionChoices = () => [
10
+ { name: 'Enter a text prompt', value: 'text_prompt' },
11
+ { name: 'Select a task file', value: 'task_file' },
12
+ { name: `Process ${CODEGEN_TRIGGER} comments`, value: 'process_comments' },
13
+ new Separator(),
14
+ { name: 'Select AI service', value: 'select_ai_service' },
15
+ { name: 'Configuration', value: 'configure' },
16
+ { name: 'Print help', value: 'help' },
17
+ new Separator(),
18
+ { name: 'Exit', value: 'exit' },
19
+ ];
20
+ export const getUserAction = async () => {
21
+ const choices = getUserActionChoices();
22
+ return await select({
23
+ message: 'What would you like to do?',
24
+ pageSize: choices.length,
25
+ choices,
26
+ });
27
+ };
28
+ export const handleCodegenError = async (error) => {
29
+ console.error('An error occurred during code generation:');
30
+ console.error(error.message);
31
+ const choices = [
32
+ { name: 'Re-run the operation', value: 're_run' },
33
+ { name: 'Return to main menu', value: 'main_menu' },
34
+ ];
35
+ return await select({
36
+ message: 'How would you like to proceed?',
37
+ pageSize: choices.length,
38
+ choices,
39
+ });
40
+ };
41
+ export const confirmAction = async (message) => {
42
+ const choices = [
43
+ { name: 'Yes', value: true },
44
+ { name: 'No, return to main menu', value: false },
45
+ ];
46
+ return await select({
47
+ message,
48
+ choices,
49
+ });
50
+ };
51
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/main/interactive/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC;AAcF,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAChC;IACE,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,EAAE;IACrD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,WAAW,eAAe,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC1E,IAAI,SAAS,EAAE;IACf,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACzD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE;IAC7C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;IACrC,IAAI,SAAS,EAAE;IACf,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CACvB,CAAC;AAEb,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAyB,EAAE;IAC3D,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,OAAO,MAAM,MAAM,CAAa;QAC9B,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,OAAO,CAAC,MAAM;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,KAAY,EAAuB,EAAE;IAC5E,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE;QACjD,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,WAAW,EAAE;KAC3C,CAAC;IAEX,OAAO,MAAM,MAAM,CAAa;QAC9B,OAAO,EAAE,gCAAgC;QACzC,QAAQ,EAAE,OAAO,CAAC,MAAM;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;IACvE,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAC5B,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE;KAClD,CAAC;IAEF,OAAO,MAAM,MAAM,CAAU;QAC3B,OAAO;QACP,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CodegenOptions } from '../codegen-types.js';
2
+ export declare const getUserOptions: (options: CodegenOptions) => Promise<CodegenOptions>;
@@ -0,0 +1,99 @@
1
+ import { checkbox, confirm, input, select } from '@inquirer/prompts';
2
+ export const getUserOptions = async (options) => {
3
+ const updatedOptions = { ...options };
4
+ await configureGeneralOptions(updatedOptions);
5
+ await configureFileOperationOptions(updatedOptions);
6
+ await configureAIModelOptions(updatedOptions);
7
+ await configureVisionAndImageOptions(updatedOptions);
8
+ await configureContentMaskAndIgnorePatterns(updatedOptions);
9
+ return updatedOptions;
10
+ };
11
+ const configureGeneralOptions = async (options) => {
12
+ const generalOptions = await checkbox({
13
+ message: 'Select general options:',
14
+ choices: [
15
+ { name: 'Consider all files', value: 'considerAllFiles', checked: options.considerAllFiles },
16
+ { name: 'Dry run', value: 'dryRun', checked: options.dryRun },
17
+ { name: 'Verbose', value: 'verbose', checked: options.verbose },
18
+ { name: 'Require explanations', value: 'requireExplanations', checked: options.requireExplanations },
19
+ { name: 'Disable initial lint', value: 'disableInitialLint', checked: options.disableInitialLint },
20
+ { name: 'Ask questions', value: 'askQuestion', checked: options.askQuestion },
21
+ { name: 'Disable cache', value: 'disableCache', checked: options.disableCache },
22
+ ],
23
+ });
24
+ options.considerAllFiles = generalOptions.includes('considerAllFiles');
25
+ options.dryRun = generalOptions.includes('dryRun');
26
+ options.verbose = generalOptions.includes('verbose');
27
+ options.requireExplanations = generalOptions.includes('requireExplanations');
28
+ options.disableInitialLint = generalOptions.includes('disableInitialLint');
29
+ options.askQuestion = generalOptions.includes('askQuestion');
30
+ options.disableCache = generalOptions.includes('disableCache');
31
+ };
32
+ const configureFileOperationOptions = async (options) => {
33
+ const fileOptions = await checkbox({
34
+ message: 'Select file operation options:',
35
+ choices: [
36
+ { name: 'Allow file creation', value: 'allowFileCreate', checked: options.allowFileCreate },
37
+ { name: 'Allow file deletion', value: 'allowFileDelete', checked: options.allowFileDelete },
38
+ { name: 'Allow directory creation', value: 'allowDirectoryCreate', checked: options.allowDirectoryCreate },
39
+ { name: 'Allow file moving', value: 'allowFileMove', checked: options.allowFileMove },
40
+ ],
41
+ });
42
+ options.allowFileCreate = fileOptions.includes('allowFileCreate');
43
+ options.allowFileDelete = fileOptions.includes('allowFileDelete');
44
+ options.allowDirectoryCreate = fileOptions.includes('allowDirectoryCreate');
45
+ options.allowFileMove = fileOptions.includes('allowFileMove');
46
+ };
47
+ const configureAIModelOptions = async (options) => {
48
+ options.disableContextOptimization = await confirm({
49
+ message: 'Disable context optimization?',
50
+ default: options.disableContextOptimization || false,
51
+ });
52
+ options.temperature = parseFloat(await input({
53
+ message: 'Enter temperature (0.0 - 2.0):',
54
+ default: options.temperature?.toString() || '0.7',
55
+ validate: (value) => {
56
+ const num = parseFloat(value);
57
+ return (num >= 0 && num <= 2) || 'Please enter a number between 0 and 2';
58
+ },
59
+ }));
60
+ options.cheap = await confirm({
61
+ message: 'Use cheaper, faster model?',
62
+ default: options.cheap || false,
63
+ });
64
+ options.geminiBlockNone = await confirm({
65
+ message: 'Disable safety settings for Gemini Pro model?',
66
+ default: options.geminiBlockNone || false,
67
+ });
68
+ };
69
+ const configureVisionAndImageOptions = async (options) => {
70
+ options.vision = await confirm({
71
+ message: 'Enable vision capabilities?',
72
+ default: options.vision || false,
73
+ });
74
+ if (await confirm({ message: 'Enable image generation?', default: !!options.imagen })) {
75
+ options.imagen = await select({
76
+ message: 'Select image generation service:',
77
+ choices: [
78
+ { name: 'Vertex AI', value: 'vertex-ai' },
79
+ { name: 'DALL-E', value: 'dall-e' },
80
+ ],
81
+ default: options.imagen || 'vertex-ai',
82
+ });
83
+ }
84
+ else {
85
+ options.imagen = undefined;
86
+ }
87
+ };
88
+ const configureContentMaskAndIgnorePatterns = async (options) => {
89
+ options.contentMask = await input({
90
+ message: 'Enter content mask (prefix of path relative to rootDir):',
91
+ default: options.contentMask || '',
92
+ });
93
+ const ignorePatterns = await input({
94
+ message: 'Enter ignore patterns (comma-separated):',
95
+ default: options.ignorePatterns?.join(',') || '',
96
+ });
97
+ options.ignorePatterns = ignorePatterns ? ignorePatterns.split(',').map((p) => p.trim()) : undefined;
98
+ };
99
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/main/interactive/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function handleError(error: unknown): Promise<void>;
2
+ export declare class CodegenError extends Error {
3
+ constructor(message: string);
4
+ }
@@ -0,0 +1,49 @@
1
+ import { handleCodegenError } from './common.js';
2
+ export async function handleError(error) {
3
+ console.error('An error occurred:');
4
+ if (error instanceof Error) {
5
+ console.error(error.message);
6
+ if (error.stack) {
7
+ console.error('Stack trace:');
8
+ console.error(error.stack);
9
+ }
10
+ }
11
+ else {
12
+ console.error(String(error));
13
+ }
14
+ let action;
15
+ if (isCodegenError(error)) {
16
+ action = await handleCodegenError(error);
17
+ }
18
+ else {
19
+ action = await handleGeneralError();
20
+ }
21
+ handleErrorAction(action);
22
+ }
23
+ function isCodegenError(error) {
24
+ return error instanceof Error && error.name === 'CodegenError';
25
+ }
26
+ async function handleGeneralError() {
27
+ console.log('An unexpected error occurred. Returning to main menu.');
28
+ return 'main_menu';
29
+ }
30
+ function handleErrorAction(action) {
31
+ switch (action) {
32
+ case 're_run':
33
+ console.log('Re-running the last operation...');
34
+ // Logic to re-run the last operation should be implemented here
35
+ break;
36
+ case 'main_menu':
37
+ console.log('Returning to main menu...');
38
+ break;
39
+ default:
40
+ console.log('Invalid action. Returning to main menu...');
41
+ }
42
+ }
43
+ export class CodegenError extends Error {
44
+ constructor(message) {
45
+ super(message);
46
+ this.name = 'CodegenError';
47
+ }
48
+ }
49
+ //# sourceMappingURL=error-handling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.js","sourceRoot":"","sources":["../../../src/main/interactive/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAc;IAC9C,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,MAAkB,CAAC;IAEvB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACtC,CAAC;IAED,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAkB;IAC3C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,gEAAgE;YAChE,MAAM;QACR,KAAK,WAAW;YACd,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export declare function displayHelp(): void;
@@ -0,0 +1,22 @@
1
+ import { printHelpMessage } from '../../cli/cli-options.js';
2
+ import { CODEGEN_TRIGGER } from '../../prompt/prompt-consts.js';
3
+ export function displayHelp() {
4
+ console.log('Genaicode Interactive Mode Help');
5
+ console.log('===============================');
6
+ console.log('This interactive mode allows you to use Genaicode with various options.');
7
+ console.log('Here are the available actions:');
8
+ console.log('');
9
+ console.log('1. Enter a text prompt: Provide a custom prompt for code generation.');
10
+ console.log('2. Select a task file: Choose a file containing a task description.');
11
+ console.log(`3. Process ${CODEGEN_TRIGGER} comments: Analyze and process ${CODEGEN_TRIGGER} comments in your codebase.`);
12
+ console.log('4. Select AI service: Choose the AI model for code generation.');
13
+ console.log('5. Configuration: Modify various options for code generation.');
14
+ console.log('6. Print help: Display this help message.');
15
+ console.log('7. Exit: Quit the interactive mode.');
16
+ console.log('');
17
+ console.log('For more detailed information about CLI options, see below:');
18
+ console.log('');
19
+ // Print the CLI help message
20
+ printHelpMessage();
21
+ }
22
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/main/interactive/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CACT,cAAc,eAAe,kCAAkC,eAAe,6BAA6B,CAC5G,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,6BAA6B;IAC7B,gBAAgB,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CodegenOptions } from '../codegen-types.js';
2
+ export declare function runProcessComments(options: CodegenOptions): Promise<void>;
@@ -0,0 +1,39 @@
1
+ import fs from 'fs';
2
+ import { getSourceFiles } from '../../files/find-files.js';
3
+ import { CODEGEN_TRIGGER } from '../../prompt/prompt-consts.js';
4
+ import { runCodegenWorker } from './codegen-worker.js';
5
+ // Function to check for CODEGEN comments in source files
6
+ const checkForCodegenComments = () => {
7
+ try {
8
+ const sourceFiles = getSourceFiles();
9
+ return sourceFiles.some((file) => {
10
+ try {
11
+ const content = fs.readFileSync(file, 'utf-8');
12
+ return content.includes(CODEGEN_TRIGGER);
13
+ }
14
+ catch (error) {
15
+ console.error(`Error reading file ${file}:`, error);
16
+ return false;
17
+ }
18
+ });
19
+ }
20
+ catch (error) {
21
+ console.error('Error getting source files:', error);
22
+ return false;
23
+ }
24
+ };
25
+ export async function runProcessComments(options) {
26
+ try {
27
+ const hasCodegenComments = checkForCodegenComments();
28
+ if (!hasCodegenComments) {
29
+ console.warn(`Warning: No ${CODEGEN_TRIGGER} comments found in the source code.`);
30
+ }
31
+ console.log(`Processing ${CODEGEN_TRIGGER} comments...`);
32
+ await runCodegenWorker(options);
33
+ }
34
+ catch (error) {
35
+ console.error('Error in runProcessComments:', error);
36
+ return Promise.reject(error);
37
+ }
38
+ }
39
+ //# sourceMappingURL=process-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-comments.js","sourceRoot":"","sources":["../../../src/main/interactive/process-comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,yDAAyD;AACzD,MAAM,uBAAuB,GAAG,GAAY,EAAE;IAC5C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,OAAO,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAuB;IAC9D,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,uBAAuB,EAAE,CAAC;QACrD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,eAAe,eAAe,qCAAqC,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,eAAe,cAAc,CAAC,CAAC;QAEzD,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { AiServiceType } from '../codegen-types.js';
2
+ export declare const selectAiService: (defaultAiService: AiServiceType | undefined) => Promise<AiServiceType>;
@@ -0,0 +1,27 @@
1
+ import { select } from '@inquirer/prompts';
2
+ const AI_SERVICE_CHOICES = [
3
+ { name: 'Vertex AI (Gemini)', value: 'vertex-ai' },
4
+ { name: 'AI Studio (Gemini)', value: 'ai-studio' },
5
+ { name: 'ChatGPT', value: 'chat-gpt' },
6
+ { name: 'Anthropic Claude', value: 'anthropic' },
7
+ { name: 'Claude via Vertex AI', value: 'vertex-ai-claude' },
8
+ ];
9
+ export const selectAiService = async (defaultAiService) => {
10
+ try {
11
+ const selectedAiService = await select({
12
+ message: 'Select the AI model you want to use:',
13
+ pageSize: AI_SERVICE_CHOICES.length,
14
+ choices: AI_SERVICE_CHOICES.map((choice) => ({
15
+ ...choice,
16
+ checked: defaultAiService === choice.value,
17
+ })),
18
+ default: defaultAiService,
19
+ });
20
+ return selectedAiService;
21
+ }
22
+ catch (error) {
23
+ console.error('Error selecting AI service:', error);
24
+ throw error;
25
+ }
26
+ };
27
+ //# sourceMappingURL=select-ai-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-ai-service.js","sourceRoot":"","sources":["../../../src/main/interactive/select-ai-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,MAAM,kBAAkB,GAAG;IACzB,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;IACtC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,EAAE;IAChD,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACnD,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,gBAA2C,EAA0B,EAAE;IAC3G,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAgB;YACpD,OAAO,EAAE,sCAAsC;YAC/C,QAAQ,EAAE,kBAAkB,CAAC,MAAM;YACnC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC3C,GAAG,MAAM;gBACT,OAAO,EAAE,gBAAgB,KAAK,MAAM,CAAC,KAAK;aAC3C,CAAC,CAAC;YACH,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CodegenOptions } from '../codegen-types.js';
2
+ export declare function runTaskFile(options: CodegenOptions): Promise<void>;
@@ -0,0 +1,28 @@
1
+ import fileSelector from 'inquirer-file-selector';
2
+ import { rcConfig } from '../config.js';
3
+ import { runCodegenWorker } from './codegen-worker.js';
4
+ export async function runTaskFile(options) {
5
+ try {
6
+ const taskFile = await fileSelector({
7
+ message: 'Select task file:',
8
+ path: rcConfig.rootDir,
9
+ allowCancel: true,
10
+ });
11
+ if (taskFile === 'canceled') {
12
+ console.log('Task file selection cancelled. Returning to main menu...');
13
+ return;
14
+ }
15
+ else if (taskFile) {
16
+ console.log(`Selected task file: ${taskFile}`);
17
+ await runCodegenWorker({ ...options, taskFile, considerAllFiles: true });
18
+ }
19
+ else {
20
+ return;
21
+ }
22
+ }
23
+ catch (error) {
24
+ console.error('Error selecting task file:', error);
25
+ throw error;
26
+ }
27
+ }
28
+ //# sourceMappingURL=task-file.js.map
@@ -0,0 +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,0DAA0D,CAAC,CAAC;YACxE,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;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CodegenOptions } from '../codegen-types.js';
2
+ export declare function runTextPrompt(options: CodegenOptions): Promise<void>;
@@ -0,0 +1,18 @@
1
+ import { input } from '@inquirer/prompts';
2
+ import { runCodegenWorker } from './codegen-worker.js';
3
+ export async function runTextPrompt(options) {
4
+ try {
5
+ const prompt = await input({
6
+ message: 'Enter your text prompt:',
7
+ });
8
+ console.log(`Received prompt: ${prompt}`);
9
+ if (prompt) {
10
+ await runCodegenWorker({ ...options, explicitPrompt: prompt, considerAllFiles: true });
11
+ }
12
+ }
13
+ catch (error) {
14
+ console.error('Error getting text prompt:', error);
15
+ throw error;
16
+ }
17
+ }
18
+ //# sourceMappingURL=text-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-prompt.js","sourceRoot":"","sources":["../../../src/main/interactive/text-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;YACzB,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,gBAAgB,CAAC,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const handleUserInterrupt: (abortController: AbortController) => Promise<void>;
@@ -0,0 +1,36 @@
1
+ import readline from 'readline';
2
+ export const handleUserInterrupt = (abortController) => {
3
+ return new Promise((resolve) => {
4
+ const rl = createReadlineInterface();
5
+ console.log('\nPress Ctrl+C to interrupt the operation...');
6
+ const removeKeyPressHandler = setupKeyPressHandler(rl, abortController);
7
+ rl.on('close', () => {
8
+ removeKeyPressHandler();
9
+ resolve();
10
+ });
11
+ abortController.signal.addEventListener('abort', () => {
12
+ rl.close();
13
+ resolve();
14
+ }, { once: true });
15
+ });
16
+ };
17
+ const createReadlineInterface = () => {
18
+ return readline.createInterface({
19
+ input: process.stdin,
20
+ output: process.stdout,
21
+ });
22
+ };
23
+ const setupKeyPressHandler = (rl, abortController) => {
24
+ const handleKeyPress = (str, key) => {
25
+ if (key.ctrl && key.name === 'c') {
26
+ console.log('\nInterruption requested. Aborting operation...');
27
+ abortController.abort();
28
+ rl.close();
29
+ }
30
+ };
31
+ process.stdin.on('keypress', handleKeyPress);
32
+ return () => {
33
+ process.stdin.removeListener('keypress', handleKeyPress);
34
+ };
35
+ };
36
+ //# sourceMappingURL=user-interrupt.js.map
@@ -0,0 +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,GAAW,EAAE,GAAoC,EAAE,EAAE;QAC3E,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 @@
1
+ export {};