genaicode 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/cli/cli-params.d.ts +1 -1
  2. package/dist/cli/cli-params.js +1 -1
  3. package/dist/cli/cli-params.js.map +1 -1
  4. package/dist/eval/codegen-summary.test.js +3 -1
  5. package/dist/eval/codegen-summary.test.js.map +1 -1
  6. package/dist/eval/data/current-prompt.d.ts +0 -39
  7. package/dist/eval/data/current-prompt.js +34 -79
  8. package/dist/eval/data/current-prompt.js.map +1 -1
  9. package/dist/eval/prompt-debug.test.js +6 -1
  10. package/dist/eval/prompt-debug.test.js.map +1 -1
  11. package/dist/files/read-files.d.ts +27 -4
  12. package/dist/files/read-files.js +20 -5
  13. package/dist/files/read-files.js.map +1 -1
  14. package/dist/files/read-files.test.js +4 -4
  15. package/dist/files/read-files.test.js.map +1 -1
  16. package/dist/files/source-code-tree.d.ts +11 -6
  17. package/dist/files/source-code-tree.js +45 -2
  18. package/dist/files/source-code-tree.js.map +1 -1
  19. package/dist/main/codegen-types.d.ts +1 -1
  20. package/dist/main/config-lib.js +20 -2
  21. package/dist/main/config-lib.js.map +1 -1
  22. package/dist/main/config.js +4 -28
  23. package/dist/main/config.js.map +1 -1
  24. package/dist/main/interactive/codegen-interactive.test.js +1 -1
  25. package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
  26. package/dist/main/plugin-loader.d.ts +5 -0
  27. package/dist/main/plugin-loader.js +53 -0
  28. package/dist/main/plugin-loader.js.map +1 -1
  29. package/dist/main/ui/frontend/assets/index-QOcNx5ac.js +812 -0
  30. package/dist/main/ui/frontend/index.html +1 -1
  31. package/dist/project-profiles/detection.d.ts +40 -0
  32. package/dist/project-profiles/detection.js +131 -0
  33. package/dist/project-profiles/detection.js.map +1 -0
  34. package/dist/project-profiles/index.d.ts +35 -0
  35. package/dist/project-profiles/index.js +72 -0
  36. package/dist/project-profiles/index.js.map +1 -0
  37. package/dist/project-profiles/profiles/golang.d.ts +65 -0
  38. package/dist/project-profiles/profiles/golang.js +208 -0
  39. package/dist/project-profiles/profiles/golang.js.map +1 -0
  40. package/dist/project-profiles/profiles/java-maven.d.ts +80 -0
  41. package/dist/project-profiles/profiles/java-maven.js +165 -0
  42. package/dist/project-profiles/profiles/java-maven.js.map +1 -0
  43. package/dist/project-profiles/profiles/javascript-npm.d.ts +40 -0
  44. package/dist/project-profiles/profiles/javascript-npm.js +118 -0
  45. package/dist/project-profiles/profiles/javascript-npm.js.map +1 -0
  46. package/dist/project-profiles/profiles/javascript-react.d.ts +46 -0
  47. package/dist/project-profiles/profiles/javascript-react.js +147 -0
  48. package/dist/project-profiles/profiles/javascript-react.js.map +1 -0
  49. package/dist/project-profiles/profiles/python-django.d.ts +58 -0
  50. package/dist/project-profiles/profiles/python-django.js +200 -0
  51. package/dist/project-profiles/profiles/python-django.js.map +1 -0
  52. package/dist/project-profiles/types.d.ts +122 -0
  53. package/dist/project-profiles/types.js +77 -0
  54. package/dist/project-profiles/types.js.map +1 -0
  55. package/dist/prompt/function-defs/set-summaries.js +20 -1
  56. package/dist/prompt/function-defs/set-summaries.js.map +1 -1
  57. package/dist/prompt/prompt-codegen.test.js +5 -4
  58. package/dist/prompt/prompt-codegen.test.js.map +1 -1
  59. package/dist/prompt/prompt-service-ask-question.test.js +2 -0
  60. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
  61. package/dist/prompt/prompt-service.js +13 -106
  62. package/dist/prompt/prompt-service.js.map +1 -1
  63. package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js +0 -2
  64. package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js.map +1 -1
  65. package/dist/prompt/steps/step-ask-question/handlers/code-generation.d.ts +2 -0
  66. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +58 -0
  67. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +1 -0
  68. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +1 -3
  69. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +1 -1
  70. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +0 -2
  71. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +1 -1
  72. package/dist/prompt/steps/step-ask-question/handlers/default-action.js +0 -2
  73. package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
  74. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js +0 -6
  75. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js.map +1 -1
  76. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +0 -2
  77. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -1
  78. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +0 -3
  79. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +1 -1
  80. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +2 -5
  81. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +1 -1
  82. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +0 -3
  83. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
  84. package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +4 -3
  85. package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -3
  86. package/dist/prompt/steps/step-ask-question/step-ask-question.js +20 -6
  87. package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
  88. package/dist/prompt/steps/step-codegen-planning.js +1 -1
  89. package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
  90. package/dist/prompt/steps/step-codegen-summary.d.ts +7 -0
  91. package/dist/prompt/steps/step-codegen-summary.js +106 -0
  92. package/dist/prompt/steps/step-codegen-summary.js.map +1 -0
  93. package/dist/prompt/steps/step-codegen-summary.test.d.ts +1 -0
  94. package/dist/prompt/steps/step-codegen-summary.test.js +136 -0
  95. package/dist/prompt/steps/step-codegen-summary.test.js.map +1 -0
  96. package/dist/prompt/steps/step-context-optimization.js +153 -66
  97. package/dist/prompt/steps/step-context-optimization.js.map +1 -1
  98. package/dist/prompt/steps/step-context-optimization.test.js +24 -5
  99. package/dist/prompt/steps/step-context-optimization.test.js.map +1 -1
  100. package/dist/prompt/steps/step-ensure-context.d.ts +15 -0
  101. package/dist/prompt/steps/step-ensure-context.js +102 -0
  102. package/dist/prompt/steps/step-ensure-context.js.map +1 -0
  103. package/dist/prompt/steps/step-ensure-context.test.d.ts +1 -0
  104. package/dist/prompt/steps/step-ensure-context.test.js +242 -0
  105. package/dist/prompt/steps/step-ensure-context.test.js.map +1 -0
  106. package/dist/prompt/steps/step-summarization.d.ts +2 -1
  107. package/dist/prompt/steps/step-summarization.js +44 -11
  108. package/dist/prompt/steps/step-summarization.js.map +1 -1
  109. package/dist/prompt/steps/steps-types.d.ts +2 -0
  110. package/dist/prompt/steps/steps-types.js.map +1 -1
  111. package/dist/prompt/systemprompt.test.js +2 -2
  112. package/dist/prompt/systemprompt.test.js.map +1 -1
  113. package/package.json +6 -2
  114. package/dist/main/ui/frontend/assets/index-5e3ykhy6.js +0 -808
@@ -0,0 +1,242 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { executeStepEnsureContext } from './step-ensure-context';
3
+ import { getSourceCode } from '../../files/read-files';
4
+ import { putSystemMessage } from '../../main/common/content-bus';
5
+ import { StepResult } from './steps-types';
6
+ import '../../files/find-files.js';
7
+ import { importantContext } from '../../main/config.js';
8
+ // Mock dependencies
9
+ vi.mock('../../files/read-files');
10
+ vi.mock('../../files/find-files.js', () => ({
11
+ getSourceFiles: () => [],
12
+ getImageAssetFiles: () => [],
13
+ refreshFiles: () => null,
14
+ }));
15
+ vi.mock('../../main/common/content-bus');
16
+ vi.mock('../../main/config.js', () => ({
17
+ rootDir: '/test',
18
+ rcConfig: {
19
+ rootDir: '/test',
20
+ extensions: ['.js', '.ts', '.tsx', '.jsx'],
21
+ },
22
+ importantContext: {
23
+ files: ['/test/important.ts'],
24
+ },
25
+ }));
26
+ describe('executeStepEnsureContext', () => {
27
+ const mockOptions = {
28
+ aiService: 'vertex-ai',
29
+ askQuestion: false,
30
+ };
31
+ beforeEach(() => {
32
+ vi.clearAllMocks();
33
+ importantContext.files = ['/test/important.ts'];
34
+ });
35
+ describe('Path extraction from codegenSummary', () => {
36
+ it('should extract paths from fileUpdates and contextPaths', async () => {
37
+ const mockCodegenSummary = {
38
+ name: 'codegenSummary',
39
+ args: {
40
+ fileUpdates: [{ filePath: '/test/file1.ts' }, { filePath: '/test/file2.ts' }],
41
+ contextPaths: ['/test/context1.ts', '/test/context2.ts'],
42
+ explanation: 'test',
43
+ },
44
+ };
45
+ vi.mocked(getSourceCode).mockReturnValue({
46
+ '/test/file1.ts': { content: 'content1' },
47
+ '/test/file2.ts': { content: 'content2' },
48
+ '/test/context1.ts': { content: 'context1' },
49
+ '/test/context2.ts': { content: 'context2' },
50
+ '/test/important.ts': { content: 'important' },
51
+ });
52
+ const prompt = [];
53
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
54
+ expect(result).toBe(StepResult.CONTINUE);
55
+ expect(getSourceCode).toHaveBeenCalledWith(expect.objectContaining({
56
+ filterPaths: expect.arrayContaining([
57
+ '/test/file1.ts',
58
+ '/test/file2.ts',
59
+ '/test/context1.ts',
60
+ '/test/context2.ts',
61
+ '/test/important.ts',
62
+ ]),
63
+ }), mockOptions);
64
+ });
65
+ it('should handle empty fileUpdates and contextPaths', async () => {
66
+ importantContext.files = [];
67
+ const mockCodegenSummary = {
68
+ name: 'codegenSummary',
69
+ args: {
70
+ fileUpdates: [],
71
+ contextPaths: [],
72
+ explanation: 'test',
73
+ },
74
+ };
75
+ vi.mocked(getSourceCode).mockReturnValue({});
76
+ const prompt = [];
77
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
78
+ expect(result).toBe(StepResult.CONTINUE);
79
+ expect(putSystemMessage).toHaveBeenCalledWith(expect.stringContaining('No paths to ensure'));
80
+ });
81
+ });
82
+ describe('Context checking in conversation', () => {
83
+ it('should identify files already in context', async () => {
84
+ const mockCodegenSummary = {
85
+ name: 'codegenSummary',
86
+ args: {
87
+ fileUpdates: [{ filePath: '/test/file1.ts' }],
88
+ contextPaths: ['/test/context1.ts'],
89
+ explanation: 'test',
90
+ },
91
+ };
92
+ const prompt = [
93
+ {
94
+ type: 'user',
95
+ functionResponses: [
96
+ {
97
+ name: 'getSourceCode',
98
+ content: JSON.stringify({
99
+ '/test': {
100
+ 'file1.ts': { content: 'existing content' },
101
+ },
102
+ }),
103
+ },
104
+ ],
105
+ },
106
+ ];
107
+ vi.mocked(getSourceCode).mockReturnValue({
108
+ '/test/context1.ts': { content: 'context1' },
109
+ '/test/important.ts': { content: 'important' },
110
+ });
111
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
112
+ expect(result).toBe(StepResult.CONTINUE);
113
+ expect(getSourceCode).toHaveBeenCalledWith(expect.objectContaining({
114
+ filterPaths: expect.arrayContaining(['/test/context1.ts', '/test/important.ts']),
115
+ }), mockOptions);
116
+ });
117
+ it('should handle both content and summary in context', async () => {
118
+ const mockCodegenSummary = {
119
+ name: 'codegenSummary',
120
+ args: {
121
+ fileUpdates: [{ filePath: '/test/file1.ts' }],
122
+ contextPaths: ['/test/context1.ts'],
123
+ explanation: 'test',
124
+ },
125
+ };
126
+ const prompt = [
127
+ {
128
+ type: 'user',
129
+ functionResponses: [
130
+ {
131
+ name: 'getSourceCode',
132
+ content: JSON.stringify({
133
+ '/test': {
134
+ 'file1.ts': { content: 'existing content' },
135
+ 'context1.ts': { summary: 'summary only' },
136
+ },
137
+ }),
138
+ },
139
+ ],
140
+ },
141
+ ];
142
+ vi.mocked(getSourceCode).mockReturnValue({
143
+ '/test/context1.ts': { content: 'context1' },
144
+ '/test/important.ts': { content: 'important' },
145
+ });
146
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
147
+ expect(result).toBe(StepResult.CONTINUE);
148
+ expect(getSourceCode).toHaveBeenCalledWith(expect.objectContaining({
149
+ filterPaths: expect.arrayContaining(['/test/context1.ts', '/test/important.ts']),
150
+ }), mockOptions);
151
+ });
152
+ });
153
+ describe('getSourceCode appending', () => {
154
+ it('should append getSourceCode call/response for missing files', async () => {
155
+ const mockCodegenSummary = {
156
+ name: 'codegenSummary',
157
+ args: {
158
+ fileUpdates: [{ filePath: '/test/new1.ts' }],
159
+ contextPaths: ['/test/new2.ts'],
160
+ explanation: 'test',
161
+ },
162
+ };
163
+ const prompt = [];
164
+ vi.mocked(getSourceCode).mockReturnValue({
165
+ '/test/new1.ts': { content: 'new1' },
166
+ '/test/new2.ts': { content: 'new2' },
167
+ '/test/important.ts': { content: 'important' },
168
+ });
169
+ await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
170
+ expect(prompt).toHaveLength(2);
171
+ expect(prompt[0].type).toBe('assistant');
172
+ expect(prompt[0].functionCalls?.[0].name).toBe('getSourceCode');
173
+ expect(prompt[1].type).toBe('user');
174
+ expect(prompt[1].functionResponses?.[0].name).toBe('getSourceCode');
175
+ expect(JSON.parse(prompt[1].functionResponses?.[0].content ?? '')).toEqual({
176
+ '/test': {
177
+ 'new1.ts': { content: 'new1' },
178
+ 'new2.ts': { content: 'new2' },
179
+ 'important.ts': { content: 'important' },
180
+ },
181
+ });
182
+ });
183
+ });
184
+ describe('Edge cases and error handling', () => {
185
+ it('should handle invalid getSourceCode responses in context', async () => {
186
+ console.warn = vi.fn();
187
+ const mockCodegenSummary = {
188
+ name: 'codegenSummary',
189
+ args: {
190
+ fileUpdates: [{ filePath: '/test/file1.ts' }],
191
+ contextPaths: [],
192
+ explanation: 'test',
193
+ },
194
+ };
195
+ const prompt = [
196
+ {
197
+ type: 'user',
198
+ functionResponses: [
199
+ {
200
+ name: 'getSourceCode',
201
+ content: 'invalid json',
202
+ },
203
+ ],
204
+ },
205
+ ];
206
+ vi.mocked(getSourceCode).mockReturnValue({
207
+ '/test/file1.ts': { content: 'content1' },
208
+ '/test/important.ts': { content: 'important' },
209
+ });
210
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
211
+ expect(result).toBe(StepResult.CONTINUE);
212
+ expect(console.warn).toHaveBeenCalledWith('Failed to parse getSourceCode response:', expect.any(Error));
213
+ });
214
+ it('should handle missing args in codegenSummary', async () => {
215
+ const mockCodegenSummary = {
216
+ name: 'codegenSummary',
217
+ args: {},
218
+ };
219
+ const prompt = [];
220
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
221
+ expect(result).toEqual(StepResult.BREAK);
222
+ });
223
+ it('should handle getSourceCode errors', async () => {
224
+ const mockCodegenSummary = {
225
+ name: 'codegenSummary',
226
+ args: {
227
+ fileUpdates: [{ filePath: '/test/file1.ts' }],
228
+ contextPaths: [],
229
+ explanation: 'test',
230
+ },
231
+ };
232
+ vi.mocked(getSourceCode).mockImplementation(() => {
233
+ throw new Error('Mock error');
234
+ });
235
+ const prompt = [];
236
+ const result = await executeStepEnsureContext(prompt, mockCodegenSummary, mockOptions);
237
+ expect(result).toBe(StepResult.BREAK);
238
+ expect(putSystemMessage).toHaveBeenCalledWith('Error: Context completeness check failed. This is unexpected.');
239
+ });
240
+ });
241
+ });
242
+ //# sourceMappingURL=step-ensure-context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-ensure-context.test.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ensure-context.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { GenerateContentFunction } from '../../ai-service/common.js';
2
2
  import { CodegenOptions } from '../../main/codegen-types.js';
3
- import { SourceCodeMap } from '../../files/read-files.js';
3
+ import { SourceCodeMap, DependencyInfo } from '../../files/read-files.js';
4
4
  export declare function summarizeSourceCode(generateContentFn: GenerateContentFunction, sourceCode: SourceCodeMap, options: CodegenOptions): Promise<void>;
5
5
  export declare function getSummary(filePath: string): {
6
+ dependencies: DependencyInfo[];
6
7
  summary: string;
7
8
  } | undefined;
@@ -5,21 +5,47 @@ import { estimateTokenCount } from '../token-estimator.js';
5
5
  import { validateAndRecoverSingleResult } from './step-validate-recover.js';
6
6
  const BATCH_SIZE = 50;
7
7
  const MAX_SUMMARY_TOKENS = 10;
8
- const CACHE_VERSION = 'v4';
9
- const SUMMARIZATION_PROMPT = `Your role is to summarize content of files in ${MAX_SUMMARY_TOKENS} tokens or fewer.
10
- Fit as much information as possible given the limit, the summary must be understandable for LLM, does not need to be human readable.
11
- Include as much key information as possible, even if readability and style are sacrificed.
12
- Do not include information if they can be already derived from the file name or file path.
13
- Focus on the main purpose or functionality.
14
- Provide your response using the \`setSummaries\` function.
15
- The length of summary should be max ${MAX_SUMMARY_TOKENS} tokens.
8
+ const CACHE_VERSION = 'v6'; // Incremented version for dependency support
9
+ const SUMMARIZATION_PROMPT = `Your role is to summarize content of files in ${MAX_SUMMARY_TOKENS} tokens or fewer while also detecting dependencies.
10
+
11
+ For the summary:
12
+ - Fit as much information as possible given the limit
13
+ - The summary must be understandable for LLM, does not need to be human readable
14
+ - Include as much key information as possible, even if readability and style are sacrificed
15
+ - Do not include information if they can be already derived from the file name or file path
16
+ - Focus on the main purpose or functionality
17
+ - The length of summary should be max ${MAX_SUMMARY_TOKENS} tokens
18
+
19
+ For dependencies:
20
+ - Identify all import and require statements in the code
21
+ - Detect both local (relative) and external (package) dependencies
22
+ - For local dependencies, include the full resolved path
23
+ - For external dependencies, include the package name
24
+ - Mark dependencies as either 'local' or 'external'
25
+ - Include the original import path as provided in the code
26
+
27
+ Provide your response using the \`setSummaries\` function with the following structure:
28
+ {
29
+ "filePath": "absolute/path/to/file",
30
+ "summary": "concise summary",
31
+ "dependencies": [
32
+ {
33
+ "path": "resolved/path/or/package",
34
+ "type": "local|external",
35
+ }
36
+ ]
37
+ }
38
+
16
39
  The file path must be absolute, exactly the same as you receive in the \`getSourceCode\` function responses.
17
40
  `;
18
- const summaryCache = readCache('summaries', { _version: CACHE_VERSION });
41
+ const summaryCache = readCache('summaries', {
42
+ _version: CACHE_VERSION,
43
+ });
19
44
  export async function summarizeSourceCode(generateContentFn, sourceCode, options) {
20
45
  const items = Object.entries(sourceCode).map(([path, file]) => ({
21
46
  path,
22
47
  content: 'content' in file ? file.content : null,
48
+ dependencies: 'dependencies' in file ? file.dependencies : undefined,
23
49
  }));
24
50
  await summarizeBatch(generateContentFn, items, options);
25
51
  }
@@ -53,11 +79,13 @@ async function summarizeBatch(generateContentFn, items, options) {
53
79
  result = await validateAndRecoverSingleResult(request, result, generateContentFn);
54
80
  const batchSummaries = parseSummarizationResult(result);
55
81
  batchSummaries.forEach((file) => {
56
- const content = items.find((item) => item.path === file.filePath)?.content ?? '';
82
+ const item = items.find((item) => item.path === file.filePath);
83
+ const content = item?.content ?? '';
57
84
  summaryCache[file.filePath] = {
58
85
  tokenCount: estimateTokenCount(content),
59
86
  summary: file.summary,
60
87
  checksum: md5(content),
88
+ dependencies: file.dependencies ?? item?.dependencies ?? [],
61
89
  };
62
90
  });
63
91
  }
@@ -73,6 +101,11 @@ function parseSummarizationResult(result) {
73
101
  }
74
102
  export function getSummary(filePath) {
75
103
  const summary = summaryCache[filePath];
76
- return summary ? { summary: summary.summary } : undefined;
104
+ return summary
105
+ ? {
106
+ summary: summary.summary,
107
+ ...(summary.dependencies && { dependencies: summary.dependencies }),
108
+ }
109
+ : undefined;
77
110
  }
78
111
  //# sourceMappingURL=step-summarization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-summarization.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-summarization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step-summarization.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-summarization.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { DependencyInfo } from '../../files/read-files';
1
2
  export declare enum StepResult {
2
3
  CONTINUE = 0,
3
4
  BREAK = 1
@@ -11,6 +12,7 @@ export type SummaryCache = Record<string, {
11
12
  tokenCount: number;
12
13
  summary: string;
13
14
  checksum: string;
15
+ dependencies: DependencyInfo[];
14
16
  }> & {
15
17
  _version: string;
16
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"steps-types.js","sourceRoot":"","sources":["../../../src/prompt/steps/steps-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAQ,CAAA;IACR,6CAAK,CAAA;AACP,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
1
+ {"version":3,"file":"steps-types.js","sourceRoot":"","sources":["../../../src/prompt/steps/steps-types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,mDAAQ,CAAA;IACR,6CAAK,CAAA;AACP,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
@@ -25,7 +25,7 @@ describe('getSystemPrompt', () => {
25
25
  vi.clearAllMocks();
26
26
  });
27
27
  it('generates correct system prompt', () => {
28
- const systemPrompt = getSystemPrompt({ aiService: 'vertex-ai' });
28
+ const systemPrompt = getSystemPrompt({ aiService: 'vertex-ai', askQuestion: false });
29
29
  expect(systemPrompt).toContain('You are GenAIcode, a code generation assistant');
30
30
  expect(systemPrompt).toContain('You should parse my application source code');
31
31
  expect(systemPrompt).toContain('Please limit any changes to the root directory of my application, which is `/mocked/root/dir`');
@@ -33,7 +33,7 @@ describe('getSystemPrompt', () => {
33
33
  });
34
34
  it('verifies system prompt limit', () => {
35
35
  const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
36
- getSystemPrompt({ aiService: 'vertex-ai', verbose: true });
36
+ getSystemPrompt({ aiService: 'vertex-ai', verbose: true, askQuestion: false });
37
37
  expect(consoleSpy).toHaveBeenCalledWith('System prompt:');
38
38
  expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('You are GenAIcode, a code generation assistant'));
39
39
  consoleSpy.mockRestore();
@@ -1 +1 @@
1
- {"version":3,"file":"systemprompt.test.js","sourceRoot":"","sources":["../../src/prompt/systemprompt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,mBAAmB,CAAC;AAE3B,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,KAAK;IAC3B,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;CACxB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,QAAQ,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;IACzC,gBAAgB,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QAEjE,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACjF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QAC9E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAC5B,+FAA+F,CAChG,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAEnH,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"systemprompt.test.js","sourceRoot":"","sources":["../../src/prompt/systemprompt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,mBAAmB,CAAC;AAE3B,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,KAAK;IAC3B,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;CACxB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,QAAQ,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE;IACzC,gBAAgB,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACjF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QAC9E,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAC5B,+FAA+F,CAChG,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/E,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAEnH,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genaicode",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "author": "Grzegorz Tańczyk",
5
5
  "repository": {
6
6
  "type": "git",
@@ -42,6 +42,7 @@
42
42
  "ui": "node ./bin/genaicode.cjs --ui",
43
43
  "lint": "eslint . --ext js,ts,tsx --report-unused-disable-directives --max-warnings 0",
44
44
  "test": "vitest --config vitest.unit.config.ts",
45
+ "test:ci": "vitest run --config vitest.unit.config.ts --reporter=json",
45
46
  "test:e2e": "vitest --config vitest.e2e.config.ts",
46
47
  "coverage": "vitest run --coverage",
47
48
  "prepare": "husky install || true",
@@ -57,7 +58,9 @@
57
58
  "@types/multer": "^1.4.12",
58
59
  "@types/react": "^18.3.5",
59
60
  "@types/react-dom": "^18.3.0",
61
+ "@types/xml2js": "^0.4.14",
60
62
  "@typescript-eslint/eslint-plugin": "^7.17.0",
63
+ "@uiw/react-json-view": "^2.0.0-alpha.30",
61
64
  "@vitejs/plugin-react": "^4.3.1",
62
65
  "@vitest/coverage-v8": "^2.0.5",
63
66
  "axios": "^1.7.7",
@@ -103,7 +106,8 @@
103
106
  "multer": "^1.4.5-lts.1",
104
107
  "openai": "^4.67.1",
105
108
  "please-upgrade-node": "^3.2.0",
106
- "sharp": "^0.33.4"
109
+ "sharp": "^0.33.4",
110
+ "xml2js": "^0.6.2"
107
111
  },
108
112
  "lint-staged": {
109
113
  "*.{js,ts,css,md}": "prettier --write"