@vybestack/llxprt-code-core 0.1.13 → 0.1.14

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 (218) hide show
  1. package/README.md +24 -0
  2. package/dist/src/code_assist/codeAssist.d.ts +2 -1
  3. package/dist/src/code_assist/codeAssist.js +4 -3
  4. package/dist/src/code_assist/codeAssist.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.js +9 -2
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +94 -2
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/code_assist/server.d.ts +5 -6
  10. package/dist/src/code_assist/server.js +7 -70
  11. package/dist/src/code_assist/server.js.map +1 -1
  12. package/dist/src/code_assist/setup.d.ts +6 -1
  13. package/dist/src/code_assist/setup.js +4 -1
  14. package/dist/src/code_assist/setup.js.map +1 -1
  15. package/dist/src/code_assist/setup.test.js +4 -1
  16. package/dist/src/code_assist/setup.test.js.map +1 -1
  17. package/dist/src/code_assist/types.d.ts +2 -2
  18. package/dist/src/config/config.d.ts +25 -3
  19. package/dist/src/config/config.js +47 -10
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/config.test.js +1 -26
  22. package/dist/src/config/config.test.js.map +1 -1
  23. package/dist/src/config/flashFallback.test.js +1 -1
  24. package/dist/src/config/flashFallback.test.js.map +1 -1
  25. package/dist/src/core/client.d.ts +6 -2
  26. package/dist/src/core/client.js +41 -18
  27. package/dist/src/core/client.js.map +1 -1
  28. package/dist/src/core/client.test.js +78 -24
  29. package/dist/src/core/client.test.js.map +1 -1
  30. package/dist/src/core/contentGenerator.d.ts +1 -1
  31. package/dist/src/core/contentGenerator.js +1 -1
  32. package/dist/src/core/contentGenerator.js.map +1 -1
  33. package/dist/src/core/coreToolScheduler.js +14 -1
  34. package/dist/src/core/coreToolScheduler.js.map +1 -1
  35. package/dist/src/core/coreToolScheduler.test.js +80 -0
  36. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  37. package/dist/src/core/geminiChat.d.ts +4 -3
  38. package/dist/src/core/geminiChat.js +8 -11
  39. package/dist/src/core/geminiChat.js.map +1 -1
  40. package/dist/src/core/geminiRequest.js +2 -37
  41. package/dist/src/core/geminiRequest.js.map +1 -1
  42. package/dist/src/core/logger.js +6 -0
  43. package/dist/src/core/logger.js.map +1 -1
  44. package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -5
  45. package/dist/src/core/prompts.js +42 -18
  46. package/dist/src/core/prompts.js.map +1 -1
  47. package/dist/src/core/prompts.test.js +121 -4
  48. package/dist/src/core/prompts.test.js.map +1 -1
  49. package/dist/src/core/turn.d.ts +7 -2
  50. package/dist/src/core/turn.js +9 -0
  51. package/dist/src/core/turn.js.map +1 -1
  52. package/dist/src/core/turn.test.js +129 -0
  53. package/dist/src/core/turn.test.js.map +1 -1
  54. package/dist/src/ide/ide-client.d.ts +28 -0
  55. package/dist/src/ide/ide-client.js +79 -0
  56. package/dist/src/ide/ide-client.js.map +1 -0
  57. package/dist/src/ide/ideContext.d.ts +174 -0
  58. package/dist/src/{services → ide}/ideContext.js +28 -25
  59. package/dist/src/ide/ideContext.js.map +1 -0
  60. package/dist/src/{services → ide}/ideContext.test.js +39 -39
  61. package/dist/src/ide/ideContext.test.js.map +1 -0
  62. package/dist/src/index.d.ts +3 -1
  63. package/dist/src/index.js +4 -1
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/mcp/google-auth-provider.d.ts +23 -0
  66. package/dist/src/mcp/google-auth-provider.js +63 -0
  67. package/dist/src/mcp/google-auth-provider.js.map +1 -0
  68. package/dist/src/mcp/google-auth-provider.test.js +54 -0
  69. package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
  70. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  71. package/dist/src/providers/gemini/GeminiProvider.d.ts +2 -0
  72. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +36 -0
  73. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +1 -1
  74. package/dist/src/providers/gemini/GeminiProvider.js +57 -10
  75. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  76. package/dist/src/providers/openai/OpenAIProvider.js +10 -7
  77. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  78. package/dist/src/services/fileDiscoveryService.d.ts +4 -4
  79. package/dist/src/services/fileDiscoveryService.js +8 -8
  80. package/dist/src/services/gitService.js +1 -1
  81. package/dist/src/services/gitService.js.map +1 -1
  82. package/dist/src/services/gitService.test.js +1 -1
  83. package/dist/src/services/gitService.test.js.map +1 -1
  84. package/dist/src/services/loopDetectionService.d.ts +48 -5
  85. package/dist/src/services/loopDetectionService.js +127 -41
  86. package/dist/src/services/loopDetectionService.js.map +1 -1
  87. package/dist/src/services/loopDetectionService.test.js +50 -123
  88. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  89. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
  90. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +17 -2
  91. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  92. package/dist/src/telemetry/constants.d.ts +16 -15
  93. package/dist/src/telemetry/constants.js +16 -15
  94. package/dist/src/telemetry/constants.js.map +1 -1
  95. package/dist/src/telemetry/file-exporters.d.ts +28 -0
  96. package/dist/src/telemetry/file-exporters.js +62 -0
  97. package/dist/src/telemetry/file-exporters.js.map +1 -0
  98. package/dist/src/telemetry/loggers.d.ts +2 -1
  99. package/dist/src/telemetry/loggers.js +18 -3
  100. package/dist/src/telemetry/loggers.js.map +1 -1
  101. package/dist/src/telemetry/sdk.js +22 -7
  102. package/dist/src/telemetry/sdk.js.map +1 -1
  103. package/dist/src/telemetry/types.d.ts +9 -2
  104. package/dist/src/telemetry/types.js +13 -1
  105. package/dist/src/telemetry/types.js.map +1 -1
  106. package/dist/src/tools/ToolFormatter.js +19 -1
  107. package/dist/src/tools/ToolFormatter.js.map +1 -1
  108. package/dist/src/tools/edit.js +10 -4
  109. package/dist/src/tools/edit.js.map +1 -1
  110. package/dist/src/tools/edit.test.js +12 -0
  111. package/dist/src/tools/edit.test.js.map +1 -1
  112. package/dist/src/tools/grep.test.js +1 -1
  113. package/dist/src/tools/grep.test.js.map +1 -1
  114. package/dist/src/tools/ls.d.ts +5 -2
  115. package/dist/src/tools/ls.js +39 -10
  116. package/dist/src/tools/ls.js.map +1 -1
  117. package/dist/src/tools/mcp-client.d.ts +5 -1
  118. package/dist/src/tools/mcp-client.js +416 -29
  119. package/dist/src/tools/mcp-client.js.map +1 -1
  120. package/dist/src/tools/mcp-client.test.js +46 -6
  121. package/dist/src/tools/mcp-client.test.js.map +1 -1
  122. package/dist/src/tools/mcp-tool.js +1 -1
  123. package/dist/src/tools/mcp-tool.js.map +1 -1
  124. package/dist/src/tools/mcp-tool.test.js +34 -0
  125. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  126. package/dist/src/tools/read-file.js +1 -1
  127. package/dist/src/tools/read-file.test.js +98 -69
  128. package/dist/src/tools/read-file.test.js.map +1 -1
  129. package/dist/src/tools/read-many-files.d.ts +5 -2
  130. package/dist/src/tools/read-many-files.js +61 -16
  131. package/dist/src/tools/read-many-files.js.map +1 -1
  132. package/dist/src/tools/read-many-files.test.js +5 -2
  133. package/dist/src/tools/read-many-files.test.js.map +1 -1
  134. package/dist/src/tools/shell.d.ts +15 -26
  135. package/dist/src/tools/shell.js +137 -358
  136. package/dist/src/tools/shell.js.map +1 -1
  137. package/dist/src/tools/shell.test.js +73 -318
  138. package/dist/src/tools/shell.test.js.map +1 -1
  139. package/dist/src/tools/tool-registry.d.ts +13 -1
  140. package/dist/src/tools/tool-registry.js +45 -1
  141. package/dist/src/tools/tool-registry.js.map +1 -1
  142. package/dist/src/tools/tool-registry.test.js +3 -3
  143. package/dist/src/tools/tool-registry.test.js.map +1 -1
  144. package/dist/src/utils/bfsFileSearch.d.ts +2 -0
  145. package/dist/src/utils/bfsFileSearch.js +4 -1
  146. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  147. package/dist/src/utils/bfsFileSearch.test.js +108 -105
  148. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  149. package/dist/src/utils/editCorrector.js +4 -4
  150. package/dist/src/utils/editCorrector.js.map +1 -1
  151. package/dist/src/utils/editCorrector.test.js +1 -1
  152. package/dist/src/utils/editor.js +16 -10
  153. package/dist/src/utils/editor.js.map +1 -1
  154. package/dist/src/utils/editor.test.js +128 -28
  155. package/dist/src/utils/editor.test.js.map +1 -1
  156. package/dist/src/utils/errorReporting.d.ts +1 -1
  157. package/dist/src/utils/errorReporting.js +2 -2
  158. package/dist/src/utils/errorReporting.js.map +1 -1
  159. package/dist/src/utils/errorReporting.test.js +44 -38
  160. package/dist/src/utils/errorReporting.test.js.map +1 -1
  161. package/dist/src/utils/fileUtils.d.ts +4 -4
  162. package/dist/src/utils/fileUtils.js +31 -15
  163. package/dist/src/utils/fileUtils.js.map +1 -1
  164. package/dist/src/utils/fileUtils.test.js +37 -37
  165. package/dist/src/utils/fileUtils.test.js.map +1 -1
  166. package/dist/src/utils/getFolderStructure.d.ts +3 -2
  167. package/dist/src/utils/getFolderStructure.js +27 -28
  168. package/dist/src/utils/getFolderStructure.js.map +1 -1
  169. package/dist/src/utils/getFolderStructure.test.js +169 -185
  170. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  171. package/dist/src/utils/gitIgnoreParser.js +4 -7
  172. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  173. package/dist/src/utils/gitIgnoreParser.test.js +71 -62
  174. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  175. package/dist/src/utils/memoryDiscovery.d.ts +2 -1
  176. package/dist/src/utils/memoryDiscovery.js +11 -5
  177. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  178. package/dist/src/utils/memoryDiscovery.test.js +160 -371
  179. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  180. package/dist/src/utils/partUtils.d.ts +14 -0
  181. package/dist/src/utils/partUtils.js +65 -0
  182. package/dist/src/utils/partUtils.js.map +1 -0
  183. package/dist/src/utils/partUtils.test.d.ts +6 -0
  184. package/dist/src/utils/partUtils.test.js +130 -0
  185. package/dist/src/utils/partUtils.test.js.map +1 -0
  186. package/dist/src/utils/paths.d.ts +11 -0
  187. package/dist/src/utils/paths.js +17 -1
  188. package/dist/src/utils/paths.js.map +1 -1
  189. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  190. package/dist/src/utils/retry.js +1 -1
  191. package/dist/src/utils/retry.js.map +1 -1
  192. package/dist/src/utils/schemaValidator.js +5 -2
  193. package/dist/src/utils/schemaValidator.js.map +1 -1
  194. package/dist/src/utils/shell-utils.d.ts +44 -0
  195. package/dist/src/utils/shell-utils.js +243 -0
  196. package/dist/src/utils/shell-utils.js.map +1 -0
  197. package/dist/src/utils/shell-utils.test.d.ts +6 -0
  198. package/dist/src/utils/shell-utils.test.js +450 -0
  199. package/dist/src/utils/shell-utils.test.js.map +1 -0
  200. package/dist/src/utils/summarizer.js +1 -30
  201. package/dist/src/utils/summarizer.js.map +1 -1
  202. package/dist/src/utils/systemEncoding.d.ts +40 -0
  203. package/dist/src/utils/systemEncoding.js +149 -0
  204. package/dist/src/utils/systemEncoding.js.map +1 -0
  205. package/dist/src/utils/systemEncoding.test.d.ts +6 -0
  206. package/dist/src/utils/systemEncoding.test.js +368 -0
  207. package/dist/src/utils/systemEncoding.test.js.map +1 -0
  208. package/dist/src/utils/user_account.test.js +1 -1
  209. package/dist/src/utils/user_account.test.js.map +1 -1
  210. package/dist/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +4 -1
  212. package/dist/src/core/geminiRequest.test.js +0 -72
  213. package/dist/src/core/geminiRequest.test.js.map +0 -1
  214. package/dist/src/services/ideContext.d.ts +0 -126
  215. package/dist/src/services/ideContext.js.map +0 -1
  216. package/dist/src/services/ideContext.test.js.map +0 -1
  217. /package/dist/src/{services → ide}/ideContext.test.d.ts +0 -0
  218. /package/dist/src/{core/geminiRequest.test.d.ts → mcp/google-auth-provider.test.d.ts} +0 -0
@@ -30,71 +30,171 @@ describe('editor utils', () => {
30
30
  });
31
31
  describe('checkHasEditorType', () => {
32
32
  const testCases = [
33
- { editor: 'vscode', command: 'code', win32Command: 'code.cmd' },
34
- { editor: 'vscodium', command: 'codium', win32Command: 'codium.cmd' },
35
- { editor: 'windsurf', command: 'windsurf', win32Command: 'windsurf' },
36
- { editor: 'cursor', command: 'cursor', win32Command: 'cursor' },
37
- { editor: 'vim', command: 'vim', win32Command: 'vim' },
38
- { editor: 'neovim', command: 'nvim', win32Command: 'nvim' },
39
- { editor: 'zed', command: 'zed', win32Command: 'zed' },
33
+ { editor: 'vscode', commands: ['code'], win32Commands: ['code.cmd'] },
34
+ {
35
+ editor: 'vscodium',
36
+ commands: ['codium'],
37
+ win32Commands: ['codium.cmd'],
38
+ },
39
+ {
40
+ editor: 'windsurf',
41
+ commands: ['windsurf'],
42
+ win32Commands: ['windsurf'],
43
+ },
44
+ { editor: 'cursor', commands: ['cursor'], win32Commands: ['cursor'] },
45
+ { editor: 'vim', commands: ['vim'], win32Commands: ['vim'] },
46
+ { editor: 'neovim', commands: ['nvim'], win32Commands: ['nvim'] },
47
+ { editor: 'zed', commands: ['zed', 'zeditor'], win32Commands: ['zed'] },
40
48
  ];
41
- for (const { editor, command, win32Command } of testCases) {
49
+ for (const { editor, commands, win32Commands } of testCases) {
42
50
  describe(`${editor}`, () => {
43
- it(`should return true if "${command}" command exists on non-windows`, () => {
51
+ // Non-windows tests
52
+ it(`should return true if first command "${commands[0]}" exists on non-windows`, () => {
44
53
  Object.defineProperty(process, 'platform', { value: 'linux' });
45
- execSync.mockReturnValue(Buffer.from(`/usr/bin/${command}`));
54
+ execSync.mockReturnValue(Buffer.from(`/usr/bin/${commands[0]}`));
46
55
  expect(checkHasEditorType(editor)).toBe(true);
47
- expect(execSync).toHaveBeenCalledWith(`command -v ${command}`, {
56
+ expect(execSync).toHaveBeenCalledWith(`command -v ${commands[0]}`, {
48
57
  stdio: 'ignore',
49
58
  });
50
59
  });
51
- it(`should return false if "${command}" command does not exist on non-windows`, () => {
60
+ if (commands.length > 1) {
61
+ it(`should return true if first command doesn't exist but second command "${commands[1]}" exists on non-windows`, () => {
62
+ Object.defineProperty(process, 'platform', { value: 'linux' });
63
+ execSync
64
+ .mockImplementationOnce(() => {
65
+ throw new Error(); // first command not found
66
+ })
67
+ .mockReturnValueOnce(Buffer.from(`/usr/bin/${commands[1]}`)); // second command found
68
+ expect(checkHasEditorType(editor)).toBe(true);
69
+ expect(execSync).toHaveBeenCalledTimes(2);
70
+ });
71
+ }
72
+ it(`should return false if none of the commands exist on non-windows`, () => {
52
73
  Object.defineProperty(process, 'platform', { value: 'linux' });
53
74
  execSync.mockImplementation(() => {
54
- throw new Error();
75
+ throw new Error(); // all commands not found
55
76
  });
56
77
  expect(checkHasEditorType(editor)).toBe(false);
78
+ expect(execSync).toHaveBeenCalledTimes(commands.length);
57
79
  });
58
- it(`should return true if "${win32Command}" command exists on windows`, () => {
80
+ // Windows tests
81
+ it(`should return true if first command "${win32Commands[0]}" exists on windows`, () => {
59
82
  Object.defineProperty(process, 'platform', { value: 'win32' });
60
- execSync.mockReturnValue(Buffer.from(`C:\\Program Files\\...\\${win32Command}`));
83
+ execSync.mockReturnValue(Buffer.from(`C:\\Program Files\\...\\${win32Commands[0]}`));
61
84
  expect(checkHasEditorType(editor)).toBe(true);
62
- expect(execSync).toHaveBeenCalledWith(`where.exe ${win32Command}`, {
85
+ expect(execSync).toHaveBeenCalledWith(`where.exe ${win32Commands[0]}`, {
63
86
  stdio: 'ignore',
64
87
  });
65
88
  });
66
- it(`should return false if "${win32Command}" command does not exist on windows`, () => {
89
+ if (win32Commands.length > 1) {
90
+ it(`should return true if first command doesn't exist but second command "${win32Commands[1]}" exists on windows`, () => {
91
+ Object.defineProperty(process, 'platform', { value: 'win32' });
92
+ execSync
93
+ .mockImplementationOnce(() => {
94
+ throw new Error(); // first command not found
95
+ })
96
+ .mockReturnValueOnce(Buffer.from(`C:\\Program Files\\...\\${win32Commands[1]}`)); // second command found
97
+ expect(checkHasEditorType(editor)).toBe(true);
98
+ expect(execSync).toHaveBeenCalledTimes(2);
99
+ });
100
+ }
101
+ it(`should return false if none of the commands exist on windows`, () => {
67
102
  Object.defineProperty(process, 'platform', { value: 'win32' });
68
103
  execSync.mockImplementation(() => {
69
- throw new Error();
104
+ throw new Error(); // all commands not found
70
105
  });
71
106
  expect(checkHasEditorType(editor)).toBe(false);
107
+ expect(execSync).toHaveBeenCalledTimes(win32Commands.length);
72
108
  });
73
109
  });
74
110
  }
75
111
  });
76
112
  describe('getDiffCommand', () => {
77
113
  const guiEditors = [
78
- { editor: 'vscode', command: 'code', win32Command: 'code.cmd' },
79
- { editor: 'vscodium', command: 'codium', win32Command: 'codium.cmd' },
80
- { editor: 'windsurf', command: 'windsurf', win32Command: 'windsurf' },
81
- { editor: 'cursor', command: 'cursor', win32Command: 'cursor' },
82
- { editor: 'zed', command: 'zed', win32Command: 'zed' },
114
+ { editor: 'vscode', commands: ['code'], win32Commands: ['code.cmd'] },
115
+ {
116
+ editor: 'vscodium',
117
+ commands: ['codium'],
118
+ win32Commands: ['codium.cmd'],
119
+ },
120
+ {
121
+ editor: 'windsurf',
122
+ commands: ['windsurf'],
123
+ win32Commands: ['windsurf'],
124
+ },
125
+ { editor: 'cursor', commands: ['cursor'], win32Commands: ['cursor'] },
126
+ { editor: 'zed', commands: ['zed', 'zeditor'], win32Commands: ['zed'] },
83
127
  ];
84
- for (const { editor, command, win32Command } of guiEditors) {
85
- it(`should return the correct command for ${editor} on non-windows`, () => {
128
+ for (const { editor, commands, win32Commands } of guiEditors) {
129
+ // Non-windows tests
130
+ it(`should use first command "${commands[0]}" when it exists on non-windows`, () => {
86
131
  Object.defineProperty(process, 'platform', { value: 'linux' });
132
+ execSync.mockReturnValue(Buffer.from(`/usr/bin/${commands[0]}`));
87
133
  const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
88
134
  expect(diffCommand).toEqual({
89
- command,
135
+ command: commands[0],
90
136
  args: ['--wait', '--diff', 'old.txt', 'new.txt'],
91
137
  });
92
138
  });
93
- it(`should return the correct command for ${editor} on windows`, () => {
139
+ if (commands.length > 1) {
140
+ it(`should use second command "${commands[1]}" when first doesn't exist on non-windows`, () => {
141
+ Object.defineProperty(process, 'platform', { value: 'linux' });
142
+ execSync
143
+ .mockImplementationOnce(() => {
144
+ throw new Error(); // first command not found
145
+ })
146
+ .mockReturnValueOnce(Buffer.from(`/usr/bin/${commands[1]}`)); // second command found
147
+ const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
148
+ expect(diffCommand).toEqual({
149
+ command: commands[1],
150
+ args: ['--wait', '--diff', 'old.txt', 'new.txt'],
151
+ });
152
+ });
153
+ }
154
+ it(`should fall back to last command "${commands[commands.length - 1]}" when none exist on non-windows`, () => {
155
+ Object.defineProperty(process, 'platform', { value: 'linux' });
156
+ execSync.mockImplementation(() => {
157
+ throw new Error(); // all commands not found
158
+ });
159
+ const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
160
+ expect(diffCommand).toEqual({
161
+ command: commands[commands.length - 1],
162
+ args: ['--wait', '--diff', 'old.txt', 'new.txt'],
163
+ });
164
+ });
165
+ // Windows tests
166
+ it(`should use first command "${win32Commands[0]}" when it exists on windows`, () => {
94
167
  Object.defineProperty(process, 'platform', { value: 'win32' });
168
+ execSync.mockReturnValue(Buffer.from(`C:\\Program Files\\...\\${win32Commands[0]}`));
169
+ const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
170
+ expect(diffCommand).toEqual({
171
+ command: win32Commands[0],
172
+ args: ['--wait', '--diff', 'old.txt', 'new.txt'],
173
+ });
174
+ });
175
+ if (win32Commands.length > 1) {
176
+ it(`should use second command "${win32Commands[1]}" when first doesn't exist on windows`, () => {
177
+ Object.defineProperty(process, 'platform', { value: 'win32' });
178
+ execSync
179
+ .mockImplementationOnce(() => {
180
+ throw new Error(); // first command not found
181
+ })
182
+ .mockReturnValueOnce(Buffer.from(`C:\\Program Files\\...\\${win32Commands[1]}`)); // second command found
183
+ const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
184
+ expect(diffCommand).toEqual({
185
+ command: win32Commands[1],
186
+ args: ['--wait', '--diff', 'old.txt', 'new.txt'],
187
+ });
188
+ });
189
+ }
190
+ it(`should fall back to last command "${win32Commands[win32Commands.length - 1]}" when none exist on windows`, () => {
191
+ Object.defineProperty(process, 'platform', { value: 'win32' });
192
+ execSync.mockImplementation(() => {
193
+ throw new Error(); // all commands not found
194
+ });
95
195
  const diffCommand = getDiffCommand('old.txt', 'new.txt', editor);
96
196
  expect(diffCommand).toEqual({
97
- command: win32Command,
197
+ command: win32Commands[win32Commands.length - 1],
98
198
  args: ['--wait', '--diff', 'old.txt', 'new.txt'],
99
199
  });
100
200
  });
@@ -1 +1 @@
1
- {"version":3,"file":"editor.test.js","sourceRoot":"","sources":["../../../src/utils/editor.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor.test.js","sourceRoot":"","sources":["../../../src/utils/editor.test.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,4 @@ import { Content } from '@google/genai';
11
11
  * @param type A string to identify the type of error (e.g., 'startChat', 'generateJson-api').
12
12
  * @param baseMessage The initial message to log to console.error before the report path.
13
13
  */
14
- export declare function reportError(error: Error | unknown, baseMessage: string, context?: Content[] | Record<string, unknown> | unknown[], type?: string): Promise<void>;
14
+ export declare function reportError(error: Error | unknown, baseMessage: string, context?: Content[] | Record<string, unknown> | unknown[], type?: string, reportingDir?: string): Promise<void>;
@@ -13,10 +13,10 @@ import path from 'node:path';
13
13
  * @param type A string to identify the type of error (e.g., 'startChat', 'generateJson-api').
14
14
  * @param baseMessage The initial message to log to console.error before the report path.
15
15
  */
16
- export async function reportError(error, baseMessage, context, type = 'general') {
16
+ export async function reportError(error, baseMessage, context, type = 'general', reportingDir = os.tmpdir()) {
17
17
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
18
18
  const reportFileName = `gemini-client-error-${type}-${timestamp}.json`;
19
- const reportPath = path.join(os.tmpdir(), reportFileName);
19
+ const reportPath = path.join(reportingDir, reportFileName);
20
20
  let errorToReport;
21
21
  if (error instanceof Error) {
22
22
  errorToReport = { message: error.message, stack: error.stack };
@@ -1 +1 @@
1
- {"version":3,"file":"errorReporting.js","sourceRoot":"","sources":["../../../src/utils/errorReporting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errorReporting.js","sourceRoot":"","sources":["../../../src/utils/errorReporting.ts"],"names":[],"mappings":"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"}
@@ -4,26 +4,27 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import { reportError } from './errorReporting.js';
8
7
  import fs from 'node:fs/promises';
9
8
  import os from 'node:os';
10
- // Mock dependencies
11
- vi.mock('node:fs/promises');
12
- vi.mock('node:os');
9
+ import path from 'node:path';
10
+ import { reportError } from './errorReporting.js';
13
11
  describe('reportError', () => {
14
12
  let consoleErrorSpy;
15
- const MOCK_TMP_DIR = '/tmp';
13
+ let testDir;
16
14
  const MOCK_TIMESTAMP = '2025-01-01T00-00-00-000Z';
17
- beforeEach(() => {
15
+ beforeEach(async () => {
16
+ // Create a temporary directory for logs
17
+ testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'gemini-report-test-'));
18
18
  vi.resetAllMocks();
19
19
  consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
20
- os.tmpdir.mockReturnValue(MOCK_TMP_DIR);
21
20
  vi.spyOn(Date.prototype, 'toISOString').mockReturnValue(MOCK_TIMESTAMP);
22
21
  });
23
- afterEach(() => {
22
+ afterEach(async () => {
24
23
  vi.restoreAllMocks();
24
+ // Clean up the temporary directory
25
+ await fs.rm(testDir, { recursive: true, force: true });
25
26
  });
26
- const getExpectedReportPath = (type) => `${MOCK_TMP_DIR}/gemini-client-error-${type}-${MOCK_TIMESTAMP}.json`;
27
+ const getExpectedReportPath = (type) => path.join(testDir, `gemini-client-error-${type}-${MOCK_TIMESTAMP}.json`);
27
28
  it('should generate a report and log the path', async () => {
28
29
  const error = new Error('Test error');
29
30
  error.stack = 'Test stack';
@@ -31,13 +32,15 @@ describe('reportError', () => {
31
32
  const context = { data: 'test context' };
32
33
  const type = 'test-type';
33
34
  const expectedReportPath = getExpectedReportPath(type);
34
- fs.writeFile.mockResolvedValue(undefined);
35
- await reportError(error, baseMessage, context, type);
36
- expect(os.tmpdir).toHaveBeenCalledTimes(1);
37
- expect(fs.writeFile).toHaveBeenCalledWith(expectedReportPath, JSON.stringify({
38
- error: { message: 'Test error', stack: error.stack },
35
+ await reportError(error, baseMessage, context, type, testDir);
36
+ // Verify the file was written
37
+ const reportContent = await fs.readFile(expectedReportPath, 'utf-8');
38
+ const parsedReport = JSON.parse(reportContent);
39
+ expect(parsedReport).toEqual({
40
+ error: { message: 'Test error', stack: 'Test stack' },
39
41
  context,
40
- }, null, 2));
42
+ });
43
+ // Verify the console log
41
44
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Full report available at: ${expectedReportPath}`);
42
45
  });
43
46
  it('should handle errors that are plain objects with a message property', async () => {
@@ -45,11 +48,12 @@ describe('reportError', () => {
45
48
  const baseMessage = 'Another error.';
46
49
  const type = 'general';
47
50
  const expectedReportPath = getExpectedReportPath(type);
48
- fs.writeFile.mockResolvedValue(undefined);
49
- await reportError(error, baseMessage);
50
- expect(fs.writeFile).toHaveBeenCalledWith(expectedReportPath, JSON.stringify({
51
+ await reportError(error, baseMessage, undefined, type, testDir);
52
+ const reportContent = await fs.readFile(expectedReportPath, 'utf-8');
53
+ const parsedReport = JSON.parse(reportContent);
54
+ expect(parsedReport).toEqual({
51
55
  error: { message: 'Test plain object error' },
52
- }, null, 2));
56
+ });
53
57
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Full report available at: ${expectedReportPath}`);
54
58
  });
55
59
  it('should handle string errors', async () => {
@@ -57,24 +61,22 @@ describe('reportError', () => {
57
61
  const baseMessage = 'String error occurred.';
58
62
  const type = 'general';
59
63
  const expectedReportPath = getExpectedReportPath(type);
60
- fs.writeFile.mockResolvedValue(undefined);
61
- await reportError(error, baseMessage);
62
- expect(fs.writeFile).toHaveBeenCalledWith(expectedReportPath, JSON.stringify({
64
+ await reportError(error, baseMessage, undefined, type, testDir);
65
+ const reportContent = await fs.readFile(expectedReportPath, 'utf-8');
66
+ const parsedReport = JSON.parse(reportContent);
67
+ expect(parsedReport).toEqual({
63
68
  error: { message: 'Just a string error' },
64
- }, null, 2));
69
+ });
65
70
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Full report available at: ${expectedReportPath}`);
66
71
  });
67
72
  it('should log fallback message if writing report fails', async () => {
68
73
  const error = new Error('Main error');
69
74
  const baseMessage = 'Failed operation.';
70
- const writeError = new Error('Failed to write file');
71
75
  const context = ['some context'];
72
76
  const type = 'general';
73
- const expectedReportPath = getExpectedReportPath(type);
74
- fs.writeFile.mockRejectedValue(writeError);
75
- await reportError(error, baseMessage, context, type);
76
- expect(fs.writeFile).toHaveBeenCalledWith(expectedReportPath, expect.any(String)); // It still tries to write
77
- expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Additionally, failed to write detailed error report:`, writeError);
77
+ const nonExistentDir = path.join(testDir, 'non-existent-dir');
78
+ await reportError(error, baseMessage, context, type, nonExistentDir);
79
+ expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Additionally, failed to write detailed error report:`, expect.any(Error));
78
80
  expect(consoleErrorSpy).toHaveBeenCalledWith('Original error that triggered report generation:', error);
79
81
  expect(consoleErrorSpy).toHaveBeenCalledWith('Original context:', context);
80
82
  });
@@ -98,13 +100,16 @@ describe('reportError', () => {
98
100
  // Subsequent calls (for minimal report) should succeed
99
101
  return originalJsonStringify(value, replacer, space);
100
102
  });
101
- fs.writeFile.mockResolvedValue(undefined); // Mock for the minimal report write
102
- await reportError(error, baseMessage, context, type);
103
+ await reportError(error, baseMessage, context, type, testDir);
103
104
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Could not stringify report content (likely due to context):`, stringifyError);
104
105
  expect(consoleErrorSpy).toHaveBeenCalledWith('Original error that triggered report generation:', error);
105
106
  expect(consoleErrorSpy).toHaveBeenCalledWith('Original context could not be stringified or included in report.');
106
- // Check that it attempts to write a minimal report
107
- expect(fs.writeFile).toHaveBeenCalledWith(expectedMinimalReportPath, originalJsonStringify({ error: { message: error.message, stack: error.stack } }, null, 2));
107
+ // Check that it writes a minimal report
108
+ const reportContent = await fs.readFile(expectedMinimalReportPath, 'utf-8');
109
+ const parsedReport = JSON.parse(reportContent);
110
+ expect(parsedReport).toEqual({
111
+ error: { message: error.message, stack: error.stack },
112
+ });
108
113
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Partial report (excluding context) available at: ${expectedMinimalReportPath}`);
109
114
  });
110
115
  it('should generate a report without context if context is not provided', async () => {
@@ -113,11 +118,12 @@ describe('reportError', () => {
113
118
  const baseMessage = 'Simple error.';
114
119
  const type = 'general';
115
120
  const expectedReportPath = getExpectedReportPath(type);
116
- fs.writeFile.mockResolvedValue(undefined);
117
- await reportError(error, baseMessage, undefined, type);
118
- expect(fs.writeFile).toHaveBeenCalledWith(expectedReportPath, JSON.stringify({
119
- error: { message: 'Error without context', stack: error.stack },
120
- }, null, 2));
121
+ await reportError(error, baseMessage, undefined, type, testDir);
122
+ const reportContent = await fs.readFile(expectedReportPath, 'utf-8');
123
+ const parsedReport = JSON.parse(reportContent);
124
+ expect(parsedReport).toEqual({
125
+ error: { message: 'Error without context', stack: 'No context stack' },
126
+ });
121
127
  expect(consoleErrorSpy).toHaveBeenCalledWith(`${baseMessage} Full report available at: ${expectedReportPath}`);
122
128
  });
123
129
  });
@@ -1 +1 @@
1
- {"version":3,"file":"errorReporting.test.js","sourceRoot":"","sources":["../../../src/utils/errorReporting.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,QAAQ,CAAC;AAI/E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,oBAAoB;AACpB,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC5B,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEnB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,eAA4B,CAAC;IACjC,MAAM,YAAY,GAAG,MAAM,CAAC;IAC5B,MAAM,cAAc,GAAG,0BAA0B,CAAC;IAElD,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzE,EAAE,CAAC,MAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAClD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7C,GAAG,YAAY,wBAAwB,IAAI,IAAI,cAAc,OAAO,CAAC;IAEvE,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,WAAW,GAAG,oBAAoB,CAAC;QACzC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtD,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAErD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YACpD,OAAO;SACR,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,8BAA8B,kBAAkB,EAAE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,gBAAgB,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtD,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEtC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE;SAC9C,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,8BAA8B,kBAAkB,EAAE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtD,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEtC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;SAC1C,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,8BAA8B,kBAAkB,EAAE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,mBAAmB,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtD,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAErD,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAErD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,kBAAkB,EAClB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC,CAAC,0BAA0B;QAC7B,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,uDAAuD,EACrE,UAAU,CACX,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,kDAAkD,EAClD,KAAK,CACN,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,WAAW,GAAG,+BAA+B,CAAC;QACpD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,iDAAiD;QACnF,MAAM,IAAI,GAAG,aAAa,CAAC;QAC3B,MAAM,cAAc,GAAG,IAAI,SAAS,CAClC,uCAAuC,CACxC,CAAC;QACF,MAAM,yBAAyB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE9D,gEAAgE;QAChE,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;YACxE,SAAS,EAAE,CAAC;YACZ,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,4CAA4C;gBAC5C,MAAM,cAAc,CAAC;YACvB,CAAC;YACD,uDAAuD;YACvD,OAAO,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEF,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,oCAAoC;QAEzF,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAErD,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,8DAA8D,EAC5E,cAAc,CACf,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,kDAAkD,EAClD,KAAK,CACN,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,kEAAkE,CACnE,CAAC;QACF,mDAAmD;QACnD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,yBAAyB,EACzB,qBAAqB,CACnB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EACzD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,qDAAqD,yBAAyB,EAAE,CAC/F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACjD,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC;QACjC,MAAM,WAAW,GAAG,eAAe,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEtD,EAAE,CAAC,SAAkB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAEvD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACvC,kBAAkB,EAClB,IAAI,CAAC,SAAS,CACZ;YACE,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAChE,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,GAAG,WAAW,8BAA8B,kBAAkB,EAAE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"errorReporting.test.js","sourceRoot":"","sources":["../../../src/utils/errorReporting.test.ts"],"names":[],"mappings":"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"}
@@ -21,15 +21,15 @@ export declare function isWithinRoot(pathToCheck: string, rootDirectory: string)
21
21
  /**
22
22
  * Determines if a file is likely binary based on content sampling.
23
23
  * @param filePath Path to the file.
24
- * @returns True if the file appears to be binary.
24
+ * @returns Promise that resolves to true if the file appears to be binary.
25
25
  */
26
- export declare function isBinaryFile(filePath: string): boolean;
26
+ export declare function isBinaryFile(filePath: string): Promise<boolean>;
27
27
  /**
28
28
  * Detects the type of file based on extension and content.
29
29
  * @param filePath Path to the file.
30
- * @returns 'text', 'image', 'pdf', 'audio', 'video', 'binary', or 'svg'.
30
+ * @returns Promise that resolves to 'text', 'image', 'pdf', 'audio', 'video', 'binary' or 'svg'.
31
31
  */
32
- export declare function detectFileType(filePath: string): 'text' | 'image' | 'pdf' | 'audio' | 'video' | 'binary' | 'svg';
32
+ export declare function detectFileType(filePath: string): Promise<'text' | 'image' | 'pdf' | 'audio' | 'video' | 'binary' | 'svg'>;
33
33
  export interface ProcessedFileReadResult {
34
34
  llmContent: PartUnion;
35
35
  returnDisplay: string;
@@ -3,8 +3,8 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import fs from 'fs';
7
- import path from 'path';
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
8
  import mime from 'mime-types';
9
9
  // Constants for text file processing
10
10
  const DEFAULT_MAX_LINES_TEXT_FILE = 2000;
@@ -41,22 +41,23 @@ export function isWithinRoot(pathToCheck, rootDirectory) {
41
41
  /**
42
42
  * Determines if a file is likely binary based on content sampling.
43
43
  * @param filePath Path to the file.
44
- * @returns True if the file appears to be binary.
44
+ * @returns Promise that resolves to true if the file appears to be binary.
45
45
  */
46
- export function isBinaryFile(filePath) {
46
+ export async function isBinaryFile(filePath) {
47
+ let fileHandle;
47
48
  try {
48
- const fd = fs.openSync(filePath, 'r');
49
+ fileHandle = await fs.promises.open(filePath, 'r');
49
50
  // Read up to 4KB or file size, whichever is smaller
50
- const fileSize = fs.fstatSync(fd).size;
51
+ const stats = await fileHandle.stat();
52
+ const fileSize = stats.size;
51
53
  if (fileSize === 0) {
52
54
  // Empty file is not considered binary for content checking
53
- fs.closeSync(fd);
54
55
  return false;
55
56
  }
56
57
  const bufferSize = Math.min(4096, fileSize);
57
58
  const buffer = Buffer.alloc(bufferSize);
58
- const bytesRead = fs.readSync(fd, buffer, 0, buffer.length, 0);
59
- fs.closeSync(fd);
59
+ const result = await fileHandle.read(buffer, 0, buffer.length, 0);
60
+ const bytesRead = result.bytesRead;
60
61
  if (bytesRead === 0)
61
62
  return false;
62
63
  let nonPrintableCount = 0;
@@ -70,18 +71,33 @@ export function isBinaryFile(filePath) {
70
71
  // If >30% non-printable characters, consider it binary
71
72
  return nonPrintableCount / bytesRead > 0.3;
72
73
  }
73
- catch {
74
+ catch (error) {
75
+ // Log error for debugging while maintaining existing behavior
76
+ console.warn(`Failed to check if file is binary: ${filePath}`, error instanceof Error ? error.message : String(error));
74
77
  // If any error occurs (e.g. file not found, permissions),
75
78
  // treat as not binary here; let higher-level functions handle existence/access errors.
76
79
  return false;
77
80
  }
81
+ finally {
82
+ // Safely close the file handle if it was successfully opened
83
+ if (fileHandle) {
84
+ try {
85
+ await fileHandle.close();
86
+ }
87
+ catch (closeError) {
88
+ // Log close errors for debugging while continuing with cleanup
89
+ console.warn(`Failed to close file handle for: ${filePath}`, closeError instanceof Error ? closeError.message : String(closeError));
90
+ // The important thing is that we attempted to clean up
91
+ }
92
+ }
93
+ }
78
94
  }
79
95
  /**
80
96
  * Detects the type of file based on extension and content.
81
97
  * @param filePath Path to the file.
82
- * @returns 'text', 'image', 'pdf', 'audio', 'video', 'binary', or 'svg'.
98
+ * @returns Promise that resolves to 'text', 'image', 'pdf', 'audio', 'video', 'binary' or 'svg'.
83
99
  */
84
- export function detectFileType(filePath) {
100
+ export async function detectFileType(filePath) {
85
101
  const ext = path.extname(filePath).toLowerCase();
86
102
  // The mimetype for "ts" is MPEG transport stream (a video format) but we want
87
103
  // to assume these are typescript files instead.
@@ -140,9 +156,9 @@ export function detectFileType(filePath) {
140
156
  ].includes(ext)) {
141
157
  return 'binary';
142
158
  }
143
- // Fallback to content-based check if mime type wasn't conclusive for image/pdf
159
+ // Fall back to content-based check if mime type wasn't conclusive for image/pdf
144
160
  // and it's not a known binary extension.
145
- if (isBinaryFile(filePath)) {
161
+ if (await isBinaryFile(filePath)) {
146
162
  return 'binary';
147
163
  }
148
164
  return 'text';
@@ -180,7 +196,7 @@ export async function processSingleFileContent(filePath, rootDirectory, offset,
180
196
  throw new Error(`File size exceeds the 20MB limit: ${filePath} (${(fileSizeInBytes /
181
197
  (1024 * 1024)).toFixed(2)}MB)`);
182
198
  }
183
- const fileType = detectFileType(filePath);
199
+ const fileType = await detectFileType(filePath);
184
200
  const relativePathForDisplay = path
185
201
  .relative(rootDirectory, filePath)
186
202
  .replace(/\\/g, '/');