genaicode 0.0.37 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/bin/genaicode-dev.js +11 -0
  2. package/bin/genaicode.cjs +8 -1
  3. package/dist/ai-service/ai-studio.d.ts +5 -0
  4. package/dist/ai-service/ai-studio.js +135 -0
  5. package/dist/ai-service/ai-studio.js.map +1 -0
  6. package/dist/ai-service/anthropic.d.ts +5 -0
  7. package/dist/ai-service/anthropic.js +133 -0
  8. package/dist/ai-service/anthropic.js.map +1 -0
  9. package/dist/ai-service/chat-gpt.d.ts +5 -0
  10. package/dist/ai-service/chat-gpt.js +131 -0
  11. package/dist/ai-service/chat-gpt.js.map +1 -0
  12. package/dist/ai-service/common.d.ts +57 -0
  13. package/dist/ai-service/common.js +38 -0
  14. package/dist/ai-service/common.js.map +1 -0
  15. package/dist/ai-service/common.test.d.ts +1 -0
  16. package/dist/ai-service/common.test.js +85 -0
  17. package/dist/ai-service/common.test.js.map +1 -0
  18. package/dist/ai-service/dall-e.d.ts +14 -0
  19. package/dist/ai-service/dall-e.js +47 -0
  20. package/dist/ai-service/dall-e.js.map +1 -0
  21. package/dist/ai-service/vertex-ai-claude.d.ts +5 -0
  22. package/dist/ai-service/vertex-ai-claude.js +93 -0
  23. package/dist/ai-service/vertex-ai-claude.js.map +1 -0
  24. package/dist/ai-service/vertex-ai-imagen.d.ts +14 -0
  25. package/dist/ai-service/vertex-ai-imagen.js +74 -0
  26. package/dist/ai-service/vertex-ai-imagen.js.map +1 -0
  27. package/dist/ai-service/vertex-ai.d.ts +7 -0
  28. package/dist/ai-service/vertex-ai.js +147 -0
  29. package/dist/ai-service/vertex-ai.js.map +1 -0
  30. package/dist/cli/cli-options.d.ts +10 -0
  31. package/dist/cli/cli-options.js +124 -0
  32. package/dist/cli/cli-options.js.map +1 -0
  33. package/dist/cli/cli-options.test.d.ts +1 -0
  34. package/dist/cli/cli-options.test.js +34 -0
  35. package/dist/cli/cli-options.test.js.map +1 -0
  36. package/dist/cli/cli-params.d.ts +29 -0
  37. package/dist/cli/cli-params.js +103 -0
  38. package/dist/cli/cli-params.js.map +1 -0
  39. package/dist/cli/cli-params.test.d.ts +1 -0
  40. package/dist/cli/cli-params.test.js +38 -0
  41. package/dist/cli/cli-params.test.js.map +1 -0
  42. package/dist/cli/service-autodetect.d.ts +2 -0
  43. package/dist/cli/service-autodetect.js +17 -0
  44. package/dist/cli/service-autodetect.js.map +1 -0
  45. package/dist/cli/service-autodetect.test.d.ts +1 -0
  46. package/dist/cli/service-autodetect.test.js +38 -0
  47. package/dist/cli/service-autodetect.test.js.map +1 -0
  48. package/dist/cli/validate-cli-params.d.ts +18 -0
  49. package/dist/cli/validate-cli-params.js +128 -0
  50. package/dist/cli/validate-cli-params.js.map +1 -0
  51. package/dist/cli/validate-cli-params.test.d.ts +1 -0
  52. package/dist/cli/validate-cli-params.test.js +106 -0
  53. package/dist/cli/validate-cli-params.test.js.map +1 -0
  54. package/dist/files/file-utils.d.ts +2 -0
  55. package/dist/files/file-utils.js +7 -0
  56. package/dist/files/file-utils.js.map +1 -0
  57. package/dist/files/file-utils.test.d.ts +1 -0
  58. package/dist/files/file-utils.test.js +18 -0
  59. package/dist/files/file-utils.test.js.map +1 -0
  60. package/dist/files/find-files.d.ts +8 -0
  61. package/dist/files/find-files.js +76 -0
  62. package/dist/files/find-files.js.map +1 -0
  63. package/dist/files/read-files.d.ts +13 -0
  64. package/dist/files/read-files.js +61 -0
  65. package/dist/files/read-files.js.map +1 -0
  66. package/dist/files/read-files.test.d.ts +1 -0
  67. package/dist/files/read-files.test.js +89 -0
  68. package/dist/files/read-files.test.js.map +1 -0
  69. package/dist/files/temp-buffer.d.ts +2 -0
  70. package/dist/files/temp-buffer.js +12 -0
  71. package/dist/files/temp-buffer.js.map +1 -0
  72. package/dist/files/update-files.d.ts +5 -0
  73. package/dist/files/update-files.js +197 -0
  74. package/dist/files/update-files.js.map +1 -0
  75. package/dist/images/ensure-alpha.d.ts +1 -0
  76. package/dist/images/ensure-alpha.js +5 -0
  77. package/dist/images/ensure-alpha.js.map +1 -0
  78. package/dist/images/imgly-remove-background.d.ts +2 -0
  79. package/dist/images/imgly-remove-background.js +21 -0
  80. package/dist/images/imgly-remove-background.js.map +1 -0
  81. package/dist/images/resize-image.d.ts +19 -0
  82. package/dist/images/resize-image.js +22 -0
  83. package/dist/images/resize-image.js.map +1 -0
  84. package/dist/images/split-image.d.ts +18 -0
  85. package/dist/images/split-image.js +25 -0
  86. package/dist/images/split-image.js.map +1 -0
  87. package/dist/main/codegen.d.ts +2 -0
  88. package/dist/main/codegen.js +101 -0
  89. package/dist/main/codegen.js.map +1 -0
  90. package/dist/main/codegen.test.d.ts +2 -0
  91. package/dist/main/codegen.test.js +259 -0
  92. package/dist/main/codegen.test.js.map +1 -0
  93. package/dist/main/config-lib.d.ts +8 -0
  94. package/dist/main/config-lib.js +28 -0
  95. package/dist/main/config-lib.js.map +1 -0
  96. package/dist/main/config-lib.test.d.ts +1 -0
  97. package/dist/main/config-lib.test.js +64 -0
  98. package/dist/main/config-lib.test.js.map +1 -0
  99. package/dist/main/config.d.ts +5 -0
  100. package/{src → dist}/main/config.js +16 -22
  101. package/dist/main/config.js.map +1 -0
  102. package/dist/prompt/function-calling-validate.d.ts +3 -0
  103. package/dist/prompt/function-calling-validate.js +27 -0
  104. package/dist/prompt/function-calling-validate.js.map +1 -0
  105. package/dist/prompt/function-calling.d.ts +5 -0
  106. package/{src → dist}/prompt/function-calling.js +25 -24
  107. package/dist/prompt/function-calling.js.map +1 -0
  108. package/dist/prompt/function-defs/ask-question.d.ts +31 -0
  109. package/dist/prompt/function-defs/ask-question.js +32 -0
  110. package/dist/prompt/function-defs/ask-question.js.map +1 -0
  111. package/dist/prompt/function-defs/codegen-summary.d.ts +63 -0
  112. package/dist/prompt/function-defs/codegen-summary.js +80 -0
  113. package/dist/prompt/function-defs/codegen-summary.js.map +1 -0
  114. package/dist/prompt/function-defs/create-directory.d.ts +21 -0
  115. package/dist/prompt/function-defs/create-directory.js +22 -0
  116. package/dist/prompt/function-defs/create-directory.js.map +1 -0
  117. package/dist/prompt/function-defs/create-file.d.ts +25 -0
  118. package/dist/prompt/function-defs/create-file.js +26 -0
  119. package/dist/prompt/function-defs/create-file.js.map +1 -0
  120. package/dist/prompt/function-defs/delete-file.d.ts +21 -0
  121. package/dist/prompt/function-defs/delete-file.js +22 -0
  122. package/dist/prompt/function-defs/delete-file.js.map +1 -0
  123. package/dist/prompt/function-defs/download-file.d.ts +25 -0
  124. package/dist/prompt/function-defs/download-file.js +26 -0
  125. package/dist/prompt/function-defs/download-file.js.map +1 -0
  126. package/dist/prompt/function-defs/explanation.d.ts +17 -0
  127. package/dist/prompt/function-defs/explanation.js +18 -0
  128. package/dist/prompt/function-defs/explanation.js.map +1 -0
  129. package/dist/prompt/function-defs/generate-image.d.ts +48 -0
  130. package/dist/prompt/function-defs/generate-image.js +49 -0
  131. package/dist/prompt/function-defs/generate-image.js.map +1 -0
  132. package/dist/prompt/function-defs/get-image-assets.d.ts +20 -0
  133. package/dist/prompt/function-defs/get-image-assets.js +21 -0
  134. package/dist/prompt/function-defs/get-image-assets.js.map +1 -0
  135. package/dist/prompt/function-defs/get-source-code.d.ts +20 -0
  136. package/dist/prompt/function-defs/get-source-code.js +21 -0
  137. package/dist/prompt/function-defs/get-source-code.js.map +1 -0
  138. package/dist/prompt/function-defs/imgly-remove-background.d.ts +25 -0
  139. package/dist/prompt/function-defs/imgly-remove-background.js +26 -0
  140. package/dist/prompt/function-defs/imgly-remove-background.js.map +1 -0
  141. package/dist/prompt/function-defs/move-file.d.ts +25 -0
  142. package/dist/prompt/function-defs/move-file.js +26 -0
  143. package/dist/prompt/function-defs/move-file.js.map +1 -0
  144. package/dist/prompt/function-defs/patch-file.d.ts +25 -0
  145. package/dist/prompt/function-defs/patch-file.js +39 -0
  146. package/dist/prompt/function-defs/patch-file.js.map +1 -0
  147. package/dist/prompt/function-defs/resize-image.d.ts +36 -0
  148. package/dist/prompt/function-defs/resize-image.js +37 -0
  149. package/dist/prompt/function-defs/resize-image.js.map +1 -0
  150. package/dist/prompt/function-defs/split-image.d.ts +57 -0
  151. package/dist/prompt/function-defs/split-image.js +46 -0
  152. package/dist/prompt/function-defs/split-image.js.map +1 -0
  153. package/dist/prompt/function-defs/update-file.d.ts +25 -0
  154. package/dist/prompt/function-defs/update-file.js +26 -0
  155. package/dist/prompt/function-defs/update-file.js.map +1 -0
  156. package/dist/prompt/limits.d.ts +3 -0
  157. package/dist/prompt/limits.js +19 -0
  158. package/dist/prompt/limits.js.map +1 -0
  159. package/dist/prompt/limits.test.d.ts +1 -0
  160. package/dist/prompt/limits.test.js +35 -0
  161. package/dist/prompt/limits.test.js.map +1 -0
  162. package/dist/prompt/prompt-codegen.d.ts +4 -0
  163. package/dist/prompt/prompt-codegen.js +81 -0
  164. package/dist/prompt/prompt-codegen.js.map +1 -0
  165. package/dist/prompt/prompt-codegen.test.d.ts +1 -0
  166. package/dist/prompt/prompt-codegen.test.js +94 -0
  167. package/dist/prompt/prompt-codegen.test.js.map +1 -0
  168. package/dist/prompt/prompt-consts.d.ts +1 -0
  169. package/{src → dist}/prompt/prompt-consts.js +1 -0
  170. package/dist/prompt/prompt-consts.js.map +1 -0
  171. package/dist/prompt/prompt-service-ask-question.test.d.ts +3 -0
  172. package/dist/prompt/prompt-service-ask-question.test.js +146 -0
  173. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -0
  174. package/dist/prompt/prompt-service.d.ts +13 -0
  175. package/dist/prompt/prompt-service.js +278 -0
  176. package/dist/prompt/prompt-service.js.map +1 -0
  177. package/dist/prompt/prompt-service.test.d.ts +1 -0
  178. package/dist/prompt/prompt-service.test.js +511 -0
  179. package/dist/prompt/prompt-service.test.js.map +1 -0
  180. package/dist/prompt/systemprompt.d.ts +2 -0
  181. package/dist/prompt/systemprompt.js +43 -0
  182. package/dist/prompt/systemprompt.js.map +1 -0
  183. package/dist/prompt/systemprompt.test.d.ts +2 -0
  184. package/dist/prompt/systemprompt.test.js +47 -0
  185. package/dist/prompt/systemprompt.test.js.map +1 -0
  186. package/package.json +13 -4
  187. package/bin/genaicode.js +0 -5
  188. package/src/ai-service/anthropic.js +0 -126
  189. package/src/ai-service/chat-gpt.js +0 -126
  190. package/src/ai-service/common.js +0 -49
  191. package/src/ai-service/common.test.js +0 -107
  192. package/src/ai-service/dall-e.js +0 -50
  193. package/src/ai-service/vertex-ai-claude.js +0 -99
  194. package/src/ai-service/vertex-ai-imagen.js +0 -78
  195. package/src/ai-service/vertex-ai.js +0 -156
  196. package/src/cli/cli-options.js +0 -132
  197. package/src/cli/cli-options.test.js +0 -50
  198. package/src/cli/cli-params.js +0 -114
  199. package/src/cli/cli-params.test.js +0 -43
  200. package/src/cli/service-autodetect.js +0 -11
  201. package/src/cli/service-autodetect.test.js +0 -43
  202. package/src/cli/validate-cli-params.js +0 -137
  203. package/src/cli/validate-cli-params.test.js +0 -134
  204. package/src/files/file-utils.js +0 -7
  205. package/src/files/file-utils.test.js +0 -21
  206. package/src/files/find-files.js +0 -86
  207. package/src/files/read-files.js +0 -65
  208. package/src/files/read-files.test.js +0 -103
  209. package/src/files/temp-buffer.js +0 -13
  210. package/src/files/update-files.js +0 -205
  211. package/src/images/ensure-alpha.js +0 -5
  212. package/src/images/imgly-remove-background.js +0 -23
  213. package/src/images/resize-image.js +0 -23
  214. package/src/images/split-image.js +0 -26
  215. package/src/main/codegen.js +0 -120
  216. package/src/main/codegen.test.js +0 -335
  217. package/src/main/config-lib.js +0 -33
  218. package/src/main/config-lib.test.js +0 -80
  219. package/src/prompt/function-calling-validate.js +0 -25
  220. package/src/prompt/function-defs/ask-question.js +0 -33
  221. package/src/prompt/function-defs/codegen-summary.js +0 -87
  222. package/src/prompt/function-defs/create-directory.js +0 -21
  223. package/src/prompt/function-defs/create-file.js +0 -26
  224. package/src/prompt/function-defs/delete-file.js +0 -21
  225. package/src/prompt/function-defs/download-file.js +0 -25
  226. package/src/prompt/function-defs/explanation.js +0 -17
  227. package/src/prompt/function-defs/generate-image.js +0 -51
  228. package/src/prompt/function-defs/get-image-assets.js +0 -21
  229. package/src/prompt/function-defs/get-source-code.js +0 -21
  230. package/src/prompt/function-defs/imgly-remove-background.js +0 -25
  231. package/src/prompt/function-defs/move-file.js +0 -25
  232. package/src/prompt/function-defs/patch-file.js +0 -39
  233. package/src/prompt/function-defs/resize-image.js +0 -36
  234. package/src/prompt/function-defs/split-image.js +0 -45
  235. package/src/prompt/function-defs/update-file.js +0 -26
  236. package/src/prompt/limits.js +0 -23
  237. package/src/prompt/limits.test.js +0 -40
  238. package/src/prompt/prompt-codegen.js +0 -106
  239. package/src/prompt/prompt-codegen.test.js +0 -116
  240. package/src/prompt/prompt-service-ask-question.test.js +0 -163
  241. package/src/prompt/prompt-service.js +0 -335
  242. package/src/prompt/prompt-service.test.js +0 -602
  243. package/src/prompt/systemprompt.js +0 -39
  244. package/src/prompt/systemprompt.test.js +0 -64
@@ -0,0 +1,106 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { validateCliParams, getCliParamValue, hasCliParam } from './validate-cli-params.js';
3
+ describe('validateCliParams', () => {
4
+ const originalArgv = process.argv;
5
+ beforeEach(() => {
6
+ process.argv = ['node', 'script.js'];
7
+ });
8
+ afterEach(() => {
9
+ process.argv = originalArgv;
10
+ });
11
+ it('should not throw for valid parameters', () => {
12
+ process.argv.push('--dry-run', '--consider-all-files');
13
+ expect(() => validateCliParams()).not.toThrow();
14
+ });
15
+ it('should throw for invalid parameters', () => {
16
+ process.argv.push('--invalid-param');
17
+ expect(() => validateCliParams()).toThrow();
18
+ });
19
+ it('should throw for parameters without --', () => {
20
+ process.argv.push('invalid-param');
21
+ expect(() => validateCliParams()).toThrow();
22
+ });
23
+ it('should not throw for valid --temperature parameter', () => {
24
+ process.argv.push('--temperature=0.5');
25
+ expect(() => validateCliParams()).not.toThrow();
26
+ });
27
+ it('should throw for invalid --temperature parameter', () => {
28
+ process.argv.push('--temperature=invalid');
29
+ expect(() => validateCliParams()).toThrow();
30
+ });
31
+ it('should throw an error when both vision and vertexAi flags are true', () => {
32
+ process.argv.push('--vision');
33
+ process.argv.push('--vertex-ai');
34
+ expect(() => validateCliParams()).toThrow('--vision and --vertex-ai are currently not supported together.');
35
+ });
36
+ // New tests for --imagen parameter
37
+ it('should not throw for valid --imagen parameter with vertex-ai', () => {
38
+ process.argv.push('--imagen=vertex-ai');
39
+ expect(() => validateCliParams()).not.toThrow();
40
+ });
41
+ it('should not throw for valid --imagen parameter with dall-e', () => {
42
+ process.argv.push('--imagen=dall-e');
43
+ expect(() => validateCliParams()).not.toThrow();
44
+ });
45
+ it('should throw for invalid --imagen parameter value', () => {
46
+ process.argv.push('--imagen=invalid-service');
47
+ expect(() => validateCliParams()).toThrow('Invalid --imagen value. It must be either "vertex-ai" or "dall-e".');
48
+ });
49
+ it('should throw for --imagen parameter without value', () => {
50
+ process.argv.push('--imagen=');
51
+ expect(() => validateCliParams()).toThrow('Invalid --imagen value. It must be either "vertex-ai" or "dall-e".');
52
+ });
53
+ });
54
+ describe('getCliParamValue', () => {
55
+ const originalArgv = process.argv;
56
+ beforeEach(() => {
57
+ process.argv = ['node', 'script.js'];
58
+ });
59
+ afterEach(() => {
60
+ process.argv = originalArgv;
61
+ });
62
+ it('should return the value for a parameter with a value', () => {
63
+ process.argv.push('--explicit-prompt=Test prompt');
64
+ expect(getCliParamValue('--explicit-prompt')).toBe('Test prompt');
65
+ });
66
+ it('should return null for a parameter without a value', () => {
67
+ process.argv.push('--dry-run');
68
+ expect(getCliParamValue('--dry-run')).toBeNull();
69
+ });
70
+ it('should return null for a non-existent parameter', () => {
71
+ expect(getCliParamValue('--non-existent')).toBeNull();
72
+ });
73
+ it('should return the value for --temperature parameter', () => {
74
+ process.argv.push('--temperature=0.5');
75
+ expect(getCliParamValue('--temperature')).toBe('0.5');
76
+ });
77
+ it('should return the value for --imagen parameter', () => {
78
+ process.argv.push('--imagen=vertex-ai');
79
+ expect(getCliParamValue('--imagen')).toBe('vertex-ai');
80
+ });
81
+ });
82
+ describe('hasCliParam', () => {
83
+ const originalArgv = process.argv;
84
+ beforeEach(() => {
85
+ process.argv = ['node', 'script.js'];
86
+ });
87
+ afterEach(() => {
88
+ process.argv = originalArgv;
89
+ });
90
+ it('should return true for an existing parameter', () => {
91
+ process.argv.push('--dry-run');
92
+ expect(hasCliParam('--dry-run')).toBe(true);
93
+ });
94
+ it('should return false for a non-existent parameter', () => {
95
+ expect(hasCliParam('--non-existent')).toBe(false);
96
+ });
97
+ it('should return true for --temperature parameter', () => {
98
+ process.argv.push('--temperature=0.5');
99
+ expect(hasCliParam('--temperature')).toBe(true);
100
+ });
101
+ it('should return true for --imagen parameter', () => {
102
+ process.argv.push('--imagen=dall-e');
103
+ expect(hasCliParam('--imagen')).toBe(true);
104
+ });
105
+ });
106
+ //# sourceMappingURL=validate-cli-params.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-cli-params.test.js","sourceRoot":"","sources":["../../src/cli/validate-cli-params.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Check if directory is ancestor of given directory */
2
+ export declare function isAncestorDirectory(parent: string, dir: string): boolean;
@@ -0,0 +1,7 @@
1
+ import path from 'path';
2
+ /** Check if directory is ancestor of given directory */
3
+ export function isAncestorDirectory(parent, dir) {
4
+ const relative = path.relative(parent, dir);
5
+ return parent === dir || (relative ? !relative.startsWith('..') && !path.isAbsolute(relative) : false);
6
+ }
7
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/files/file-utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,GAAW;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACzG,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import { vi, describe, beforeEach, it, expect } from 'vitest';
2
+ import { isAncestorDirectory } from './file-utils.js';
3
+ // Test for isAncestorDirectory
4
+ describe('isAncestorDirectory', () => {
5
+ beforeEach(() => {
6
+ vi.resetAllMocks();
7
+ });
8
+ it('should return true if directories are the same', () => {
9
+ expect(isAncestorDirectory('/project', '/project')).toBe(true);
10
+ });
11
+ it('should return true if parent is ancestor of dir', () => {
12
+ expect(isAncestorDirectory('/project', '/project/src')).toBe(true);
13
+ });
14
+ it('should return false if parent is not ancestor of dir', () => {
15
+ expect(isAncestorDirectory('/project', '/other')).toBe(false);
16
+ });
17
+ });
18
+ //# sourceMappingURL=file-utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.test.js","sourceRoot":"","sources":["../../src/files/file-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,+BAA+B;AAC/B,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ type DependencyList = string[];
2
+ /** Generates a dependency list for given file */
3
+ export declare function getDependencyList(entryFile: string): DependencyList;
4
+ /** Get source files of the application */
5
+ export declare function getSourceFiles(): string[];
6
+ /** Get source files of the application */
7
+ export declare function getImageAssetFiles(): string[];
8
+ export {};
@@ -0,0 +1,76 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { rcConfig, sourceExtensions, IMAGE_ASSET_EXTENSIONS, ignorePaths } from '../main/config.js';
4
+ // List of possible extensions for dependency resolution
5
+ const POSSIBLE_DEPENDENCY_EXTENSIONS = ['.ts', '.js', '.tsx', '.jsx'];
6
+ function findFiles(dir, recursive, extensions) {
7
+ const files = [];
8
+ const items = fs.readdirSync(dir);
9
+ for (const item of items) {
10
+ const fullPath = path.join(dir, item);
11
+ if (ignorePaths.some((ignorePath) => fullPath.endsWith(ignorePath))) {
12
+ continue;
13
+ }
14
+ if (fs.statSync(fullPath).isDirectory()) {
15
+ if (recursive) {
16
+ files.push(...findFiles(fullPath, true, extensions));
17
+ }
18
+ }
19
+ else if (extensions.includes(path.extname(fullPath))) {
20
+ files.push(fullPath);
21
+ }
22
+ }
23
+ return files;
24
+ }
25
+ function getDependencies(filePath) {
26
+ const content = fs.readFileSync(filePath, 'utf-8');
27
+ const dependencyRegex = /import\s+.+?\s+from\s+['"](.+?\/?[^'"]+)['"]/g;
28
+ const dependencies = [];
29
+ let match;
30
+ while ((match = dependencyRegex.exec(content)) !== null) {
31
+ const dependencyPath = match[1];
32
+ // Resolve relative paths from the file's directory
33
+ const resolvedPath = path.resolve(path.dirname(filePath), dependencyPath);
34
+ // Only add the dependency if it's a local file and not a module
35
+ if (fs.existsSync(resolvedPath)) {
36
+ dependencies.push(resolvedPath);
37
+ }
38
+ else {
39
+ const possibleExtensions = POSSIBLE_DEPENDENCY_EXTENSIONS;
40
+ for (const ext of possibleExtensions) {
41
+ const extendedPath = resolvedPath + ext;
42
+ if (fs.existsSync(extendedPath)) {
43
+ dependencies.push(extendedPath);
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return dependencies;
49
+ }
50
+ /** Generates a dependency list for given file */
51
+ export function getDependencyList(entryFile) {
52
+ const visitedFiles = new Set();
53
+ const result = new Set();
54
+ function traverse(file) {
55
+ if (visitedFiles.has(file))
56
+ return;
57
+ visitedFiles.add(file);
58
+ const dependencies = getDependencies(file);
59
+ dependencies.forEach((dependency) => result.add(dependency));
60
+ dependencies.forEach(traverse);
61
+ }
62
+ result.add(path.resolve(entryFile));
63
+ traverse(entryFile);
64
+ return Array.from(result);
65
+ }
66
+ const sourceFiles = findFiles(rcConfig.rootDir, true, sourceExtensions);
67
+ /** Get source files of the application */
68
+ export function getSourceFiles() {
69
+ return [...sourceFiles];
70
+ }
71
+ const imageAssetFiles = findFiles(rcConfig.rootDir, true, IMAGE_ASSET_EXTENSIONS);
72
+ /** Get source files of the application */
73
+ export function getImageAssetFiles() {
74
+ return [...imageAssetFiles];
75
+ }
76
+ //# sourceMappingURL=find-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-files.js","sourceRoot":"","sources":["../../src/files/find-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type SourceCodeMap = Record<string, {
2
+ content: string | null;
3
+ } | undefined>;
4
+ type ImageAssetsMap = Record<string, {
5
+ mimeType: string | false;
6
+ width: number;
7
+ height: number;
8
+ }>;
9
+ /** Print source code of all source files */
10
+ export declare function getSourceCode(filterPaths?: string[]): SourceCodeMap;
11
+ /** Get image asset files summary */
12
+ export declare function getImageAssets(): ImageAssetsMap;
13
+ export {};
@@ -0,0 +1,61 @@
1
+ import fs from 'fs';
2
+ import mime from 'mime-types';
3
+ import sizeOf from 'image-size';
4
+ import path from 'path';
5
+ import globRegex from 'glob-regex';
6
+ import { getSourceFiles, getImageAssetFiles } from './find-files.js';
7
+ import { rcConfig } from '../main/config.js';
8
+ import { verifySourceCodeLimit } from '../prompt/limits.js';
9
+ import { taskFile, contentMask, ignorePatterns } from '../cli/cli-params.js';
10
+ /**
11
+ * Read contents of source files and create a map with file path as key and file content as value
12
+ */
13
+ function readSourceFiles(filterPaths) {
14
+ const sourceCode = {};
15
+ for (const file of getSourceFiles()) {
16
+ if (!filterPaths || filterPaths.includes(file)) {
17
+ // Apply content mask filter if it's set
18
+ if (!filterPaths && contentMask) {
19
+ const relativePath = path.relative(rcConfig.rootDir, file);
20
+ if (!relativePath.startsWith(contentMask)) {
21
+ sourceCode[file] = { content: null }; // Include the file path but set content to null
22
+ continue;
23
+ }
24
+ }
25
+ if (ignorePatterns.some((pattern) => globRegex.default(pattern).test(file))) {
26
+ sourceCode[file] = { content: null };
27
+ }
28
+ else {
29
+ const content = fs.readFileSync(file, 'utf-8');
30
+ sourceCode[file] = { content };
31
+ }
32
+ }
33
+ }
34
+ return sourceCode;
35
+ }
36
+ /** Print source code of all source files */
37
+ export function getSourceCode(filterPaths) {
38
+ const sourceCode = readSourceFiles(filterPaths);
39
+ if (taskFile && !sourceCode[taskFile]) {
40
+ sourceCode[taskFile] = {
41
+ content: fs.readFileSync(taskFile, 'utf-8'),
42
+ };
43
+ }
44
+ verifySourceCodeLimit(JSON.stringify(sourceCode));
45
+ return sourceCode;
46
+ }
47
+ /** Get image asset files summary */
48
+ export function getImageAssets() {
49
+ const imageAssets = {};
50
+ for (const file of getImageAssetFiles()) {
51
+ const dimensions = sizeOf.default(file);
52
+ imageAssets[file] = {
53
+ mimeType: mime.lookup(file),
54
+ width: dimensions.width,
55
+ height: dimensions.height,
56
+ };
57
+ }
58
+ verifySourceCodeLimit(JSON.stringify(imageAssets));
59
+ return imageAssets;
60
+ }
61
+ //# sourceMappingURL=read-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-files.js","sourceRoot":"","sources":["../../src/files/read-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,MAAM,MAAM,YAAY,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAa7E;;GAEG;AACH,SAAS,eAAe,CAAC,WAAsB;IAC7C,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,wCAAwC;YACxC,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,gDAAgD;oBACtF,SAAS;gBACX,CAAC;YACH,CAAC;YACD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC5E,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,WAAsB;IAClD,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,UAAU,CAAC,QAAQ,CAAC,GAAG;YACrB,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,WAAW,CAAC,IAAI,CAAC,GAAG;YAClB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAM;YACxB,MAAM,EAAE,UAAU,CAAC,MAAO;SAC3B,CAAC;IACJ,CAAC;IACD,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,89 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import fs from 'fs';
3
+ import mime from 'mime-types';
4
+ import sizeOf from 'image-size';
5
+ import { getSourceCode, getImageAssets } from './read-files.js';
6
+ import { getSourceFiles, getImageAssetFiles } from './find-files.js';
7
+ import { verifySourceCodeLimit } from '../prompt/limits.js';
8
+ import * as cliParams from '../cli/cli-params.js';
9
+ import { rcConfig } from '../main/config.js';
10
+ vi.mock('fs');
11
+ vi.mock('mime-types');
12
+ vi.mock('image-size');
13
+ vi.mock('./find-files.js', () => ({
14
+ getImageAssetFiles: vi.fn(),
15
+ getSourceFiles: vi.fn(),
16
+ }));
17
+ vi.mock('../prompt/limits.js');
18
+ vi.mock('../cli/cli-params.js', () => ({
19
+ taskFile: null,
20
+ contentMask: null,
21
+ ignorePatterns: [],
22
+ }));
23
+ vi.mock('../main/config.js', () => ({
24
+ rcConfig: { rootDir: '/home/project' },
25
+ }));
26
+ describe('read-files', () => {
27
+ beforeEach(() => {
28
+ vi.resetAllMocks();
29
+ vi.mocked(cliParams).contentMask = null;
30
+ });
31
+ afterEach(() => {
32
+ vi.clearAllMocks();
33
+ });
34
+ describe('getSourceCode', () => {
35
+ it('should return source code for all files', () => {
36
+ const mockFiles = ['/home/project/file1.js', '/home/project/file2.js'];
37
+ vi.mocked(getSourceFiles).mockReturnValue(mockFiles);
38
+ vi.mocked(fs).readFileSync.mockImplementation((file) => `Content of ${file}`);
39
+ rcConfig.rootDir = '/home/project';
40
+ const result = getSourceCode();
41
+ expect(result).toEqual({
42
+ '/home/project/file1.js': { content: 'Content of /home/project/file1.js' },
43
+ '/home/project/file2.js': { content: 'Content of /home/project/file2.js' },
44
+ });
45
+ expect(verifySourceCodeLimit).toHaveBeenCalled();
46
+ });
47
+ it('should apply content mask when specified', () => {
48
+ const mockFiles = ['/home/project/file1.js', '/home/project/subfolder/file2.js'];
49
+ vi.mocked(getSourceFiles).mockReturnValue(mockFiles);
50
+ vi.mocked(fs).readFileSync.mockImplementation((file) => `Content of ${file}`);
51
+ rcConfig.rootDir = '/home/project';
52
+ vi.mocked(cliParams).contentMask = 'subfolder';
53
+ const result = getSourceCode();
54
+ expect(result).toEqual({
55
+ '/home/project/file1.js': { content: null },
56
+ '/home/project/subfolder/file2.js': {
57
+ content: 'Content of /home/project/subfolder/file2.js',
58
+ },
59
+ });
60
+ });
61
+ it('should include task file when specified', () => {
62
+ const mockFiles = ['/home/project/file1.js'];
63
+ vi.mocked(getSourceFiles).mockReturnValue(mockFiles);
64
+ vi.mocked(fs).readFileSync.mockImplementation((file) => `Content of ${file}`);
65
+ rcConfig.rootDir = '/home/project';
66
+ vi.mocked(cliParams).taskFile = '/home/project/task.md';
67
+ const result = getSourceCode();
68
+ expect(result).toEqual({
69
+ '/home/project/file1.js': { content: 'Content of /home/project/file1.js' },
70
+ '/home/project/task.md': { content: 'Content of /home/project/task.md' },
71
+ });
72
+ });
73
+ });
74
+ describe('getImageAssets', () => {
75
+ it('should return image assets information', () => {
76
+ const mockImageFiles = ['/home/project/image1.png', '/home/project/image2.jpg'];
77
+ vi.mocked(getImageAssetFiles).mockReturnValue(mockImageFiles);
78
+ vi.mocked(mime).lookup.mockImplementation((file) => (file.endsWith('.png') ? 'image/png' : 'image/jpeg'));
79
+ vi.mocked(sizeOf).default.mockImplementation(() => ({ width: 100, height: 200 }));
80
+ const result = getImageAssets();
81
+ expect(result).toEqual({
82
+ '/home/project/image1.png': { mimeType: 'image/png', width: 100, height: 200 },
83
+ '/home/project/image2.jpg': { mimeType: 'image/jpeg', width: 100, height: 200 },
84
+ });
85
+ expect(verifySourceCodeLimit).toHaveBeenCalled();
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=read-files.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-files.test.js","sourceRoot":"","sources":["../../src/files/read-files.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getTempBuffer(url: string): Buffer | undefined;
2
+ export declare function setTempBuffer(buffer: Buffer): string;
@@ -0,0 +1,12 @@
1
+ /** Temporary storage */
2
+ let tempId = 1;
3
+ const temp = {};
4
+ export function getTempBuffer(url) {
5
+ return temp[url];
6
+ }
7
+ export function setTempBuffer(buffer) {
8
+ const imageUrl = 'temp://' + tempId++;
9
+ temp[imageUrl] = buffer;
10
+ return imageUrl;
11
+ }
12
+ //# sourceMappingURL=temp-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temp-buffer.js","sourceRoot":"","sources":["../../src/files/temp-buffer.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,MAAM,IAAI,GAA8B,EAAE,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { FunctionCall } from '../ai-service/common.js';
2
+ /**
3
+ * @param functionCalls Result of the code generation, a map of file paths to new content
4
+ */
5
+ export declare function updateFiles(functionCalls: FunctionCall[]): Promise<void>;