@google/gemini-cli-core 0.3.2 → 0.4.0-preview

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 (221) hide show
  1. package/dist/google-gemini-cli-core-0.3.1.tgz +0 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/code_assist/codeAssist.d.ts +2 -0
  6. package/dist/src/code_assist/codeAssist.js +12 -0
  7. package/dist/src/code_assist/codeAssist.js.map +1 -1
  8. package/dist/src/code_assist/converter.d.ts +2 -1
  9. package/dist/src/code_assist/converter.js +1 -1
  10. package/dist/src/code_assist/converter.js.map +1 -1
  11. package/dist/src/code_assist/oauth2.js +64 -27
  12. package/dist/src/code_assist/oauth2.js.map +1 -1
  13. package/dist/src/code_assist/oauth2.test.js +252 -0
  14. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  15. package/dist/src/config/config.d.ts +12 -7
  16. package/dist/src/config/config.js +47 -27
  17. package/dist/src/config/config.js.map +1 -1
  18. package/dist/src/config/config.test.js +65 -41
  19. package/dist/src/config/config.test.js.map +1 -1
  20. package/dist/src/config/models.d.ts +1 -0
  21. package/dist/src/config/models.js +2 -0
  22. package/dist/src/config/models.js.map +1 -1
  23. package/dist/src/core/client.d.ts +6 -2
  24. package/dist/src/core/client.js +22 -11
  25. package/dist/src/core/client.js.map +1 -1
  26. package/dist/src/core/client.test.js +62 -7
  27. package/dist/src/core/client.test.js.map +1 -1
  28. package/dist/src/core/contentGenerator.d.ts +2 -2
  29. package/dist/src/core/coreToolScheduler.test.js +18 -0
  30. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  31. package/dist/src/core/geminiChat.d.ts +30 -1
  32. package/dist/src/core/geminiChat.js +145 -5
  33. package/dist/src/core/geminiChat.js.map +1 -1
  34. package/dist/src/core/geminiChat.test.js +273 -5
  35. package/dist/src/core/geminiChat.test.js.map +1 -1
  36. package/dist/src/core/loggingContentGenerator.js +9 -9
  37. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  38. package/dist/src/core/nonInteractiveToolExecutor.test.js +2 -0
  39. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  40. package/dist/src/core/subagent.js +5 -6
  41. package/dist/src/core/subagent.js.map +1 -1
  42. package/dist/src/core/subagent.test.js +20 -9
  43. package/dist/src/core/subagent.test.js.map +1 -1
  44. package/dist/src/core/turn.d.ts +18 -4
  45. package/dist/src/core/turn.js +43 -9
  46. package/dist/src/core/turn.js.map +1 -1
  47. package/dist/src/core/turn.test.js +329 -89
  48. package/dist/src/core/turn.test.js.map +1 -1
  49. package/dist/src/generated/git-commit.d.ts +2 -2
  50. package/dist/src/generated/git-commit.js +2 -2
  51. package/dist/src/generated/git-commit.js.map +1 -1
  52. package/dist/src/ide/ide-client.d.ts +7 -2
  53. package/dist/src/ide/ide-client.js +33 -13
  54. package/dist/src/ide/ide-client.js.map +1 -1
  55. package/dist/src/ide/ideContext.d.ts +12 -0
  56. package/dist/src/ide/ideContext.js +1 -0
  57. package/dist/src/ide/ideContext.js.map +1 -1
  58. package/dist/src/ide/process-utils.d.ts +1 -0
  59. package/dist/src/ide/process-utils.js +31 -36
  60. package/dist/src/ide/process-utils.js.map +1 -1
  61. package/dist/src/index.d.ts +2 -0
  62. package/dist/src/index.js +3 -0
  63. package/dist/src/index.js.map +1 -1
  64. package/dist/src/mcp/oauth-provider.d.ts +12 -12
  65. package/dist/src/mcp/oauth-provider.js +32 -31
  66. package/dist/src/mcp/oauth-provider.js.map +1 -1
  67. package/dist/src/mcp/oauth-provider.test.js +74 -35
  68. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  69. package/dist/src/mcp/oauth-token-storage.d.ts +8 -8
  70. package/dist/src/mcp/oauth-token-storage.js +8 -8
  71. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  72. package/dist/src/mcp/oauth-token-storage.test.js +23 -21
  73. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  74. package/dist/src/mcp/token-storage/base-token-storage.d.ts +1 -1
  75. package/dist/src/mcp/token-storage/base-token-storage.js +1 -1
  76. package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -1
  77. package/dist/src/mcp/token-storage/base-token-storage.test.js +1 -1
  78. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
  79. package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
  80. package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
  81. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
  82. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
  83. package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
  84. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
  85. package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
  86. package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
  87. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
  88. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
  89. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
  90. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
  91. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
  92. package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
  93. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
  94. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
  95. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
  96. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
  97. package/dist/src/mcp/token-storage/types.d.ts +4 -0
  98. package/dist/src/mcp/token-storage/types.js +5 -1
  99. package/dist/src/mcp/token-storage/types.js.map +1 -1
  100. package/dist/src/services/chatRecordingService.d.ts +5 -12
  101. package/dist/src/services/chatRecordingService.js +25 -16
  102. package/dist/src/services/chatRecordingService.js.map +1 -1
  103. package/dist/src/services/chatRecordingService.test.js +54 -17
  104. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  105. package/dist/src/services/shellExecutionService.js +5 -5
  106. package/dist/src/services/shellExecutionService.js.map +1 -1
  107. package/dist/src/services/shellExecutionService.test.js +1 -1
  108. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +12 -18
  110. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  111. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +27 -0
  112. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  113. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
  114. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +4 -0
  115. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  116. package/dist/src/telemetry/constants.d.ts +1 -0
  117. package/dist/src/telemetry/constants.js +1 -0
  118. package/dist/src/telemetry/constants.js.map +1 -1
  119. package/dist/src/telemetry/loggers.js +27 -2
  120. package/dist/src/telemetry/loggers.js.map +1 -1
  121. package/dist/src/telemetry/loggers.test.js +39 -3
  122. package/dist/src/telemetry/loggers.test.js.map +1 -1
  123. package/dist/src/telemetry/metrics.d.ts +1 -2
  124. package/dist/src/telemetry/metrics.js +1 -7
  125. package/dist/src/telemetry/metrics.js.map +1 -1
  126. package/dist/src/telemetry/metrics.test.js +5 -25
  127. package/dist/src/telemetry/metrics.test.js.map +1 -1
  128. package/dist/src/telemetry/types.d.ts +1 -3
  129. package/dist/src/telemetry/types.js +3 -5
  130. package/dist/src/telemetry/types.js.map +1 -1
  131. package/dist/src/telemetry/uiTelemetry.js +4 -4
  132. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  133. package/dist/src/telemetry/uiTelemetry.test.js +4 -4
  134. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  135. package/dist/src/test-utils/index.d.ts +6 -0
  136. package/dist/src/test-utils/index.js +7 -0
  137. package/dist/src/test-utils/index.js.map +1 -0
  138. package/dist/src/test-utils/mock-tool.d.ts +41 -0
  139. package/dist/src/test-utils/mock-tool.js +51 -0
  140. package/dist/src/test-utils/mock-tool.js.map +1 -0
  141. package/dist/src/tools/diffOptions.js +21 -13
  142. package/dist/src/tools/diffOptions.js.map +1 -1
  143. package/dist/src/tools/diffOptions.test.js +58 -22
  144. package/dist/src/tools/diffOptions.test.js.map +1 -1
  145. package/dist/src/tools/edit.d.ts +2 -2
  146. package/dist/src/tools/edit.js +30 -40
  147. package/dist/src/tools/edit.js.map +1 -1
  148. package/dist/src/tools/edit.test.js +50 -9
  149. package/dist/src/tools/edit.test.js.map +1 -1
  150. package/dist/src/tools/mcp-client-manager.d.ts +5 -3
  151. package/dist/src/tools/mcp-client-manager.js +30 -5
  152. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  153. package/dist/src/tools/mcp-client-manager.test.js +20 -1
  154. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  155. package/dist/src/tools/mcp-client.d.ts +5 -5
  156. package/dist/src/tools/mcp-client.js +40 -35
  157. package/dist/src/tools/mcp-client.js.map +1 -1
  158. package/dist/src/tools/mcp-client.test.js +3 -3
  159. package/dist/src/tools/mcp-client.test.js.map +1 -1
  160. package/dist/src/tools/mcp-tool.d.ts +3 -2
  161. package/dist/src/tools/mcp-tool.js +9 -9
  162. package/dist/src/tools/mcp-tool.js.map +1 -1
  163. package/dist/src/tools/mcp-tool.test.js +28 -7
  164. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  165. package/dist/src/tools/memoryTool.js +5 -33
  166. package/dist/src/tools/memoryTool.js.map +1 -1
  167. package/dist/src/tools/read-file.js +1 -1
  168. package/dist/src/tools/read-file.js.map +1 -1
  169. package/dist/src/tools/read-many-files.js +1 -1
  170. package/dist/src/tools/read-many-files.js.map +1 -1
  171. package/dist/src/tools/read-many-files.test.js +4 -4
  172. package/dist/src/tools/read-many-files.test.js.map +1 -1
  173. package/dist/src/tools/shell.js +6 -3
  174. package/dist/src/tools/shell.js.map +1 -1
  175. package/dist/src/tools/shell.test.js +3 -3
  176. package/dist/src/tools/shell.test.js.map +1 -1
  177. package/dist/src/tools/smart-edit.d.ts +73 -0
  178. package/dist/src/tools/smart-edit.js +607 -0
  179. package/dist/src/tools/smart-edit.js.map +1 -0
  180. package/dist/src/tools/smart-edit.test.d.ts +6 -0
  181. package/dist/src/tools/smart-edit.test.js +405 -0
  182. package/dist/src/tools/smart-edit.test.js.map +1 -0
  183. package/dist/src/tools/tool-registry.d.ts +2 -1
  184. package/dist/src/tools/tool-registry.js +5 -5
  185. package/dist/src/tools/tool-registry.js.map +1 -1
  186. package/dist/src/tools/tools.d.ts +6 -2
  187. package/dist/src/tools/tools.js.map +1 -1
  188. package/dist/src/tools/web-fetch.js +4 -3
  189. package/dist/src/tools/web-fetch.js.map +1 -1
  190. package/dist/src/tools/web-search.d.ts +1 -1
  191. package/dist/src/tools/web-search.js +3 -1
  192. package/dist/src/tools/web-search.js.map +1 -1
  193. package/dist/src/tools/write-file.js +11 -15
  194. package/dist/src/tools/write-file.js.map +1 -1
  195. package/dist/src/tools/write-file.test.js +5 -9
  196. package/dist/src/tools/write-file.test.js.map +1 -1
  197. package/dist/src/utils/fileUtils.d.ts +19 -3
  198. package/dist/src/utils/fileUtils.js +144 -32
  199. package/dist/src/utils/fileUtils.js.map +1 -1
  200. package/dist/src/utils/fileUtils.test.js +314 -21
  201. package/dist/src/utils/fileUtils.test.js.map +1 -1
  202. package/dist/src/utils/gitIgnoreParser.d.ts +1 -0
  203. package/dist/src/utils/gitIgnoreParser.js +101 -10
  204. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  205. package/dist/src/utils/gitIgnoreParser.test.js +66 -0
  206. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  207. package/dist/src/utils/ide-trust.d.ts +10 -0
  208. package/dist/src/utils/ide-trust.js +14 -0
  209. package/dist/src/utils/ide-trust.js.map +1 -0
  210. package/dist/src/utils/llm-edit-fixer.d.ts +25 -0
  211. package/dist/src/utils/llm-edit-fixer.js +112 -0
  212. package/dist/src/utils/llm-edit-fixer.js.map +1 -0
  213. package/dist/src/utils/memoryDiscovery.d.ts +5 -4
  214. package/dist/src/utils/memoryDiscovery.js +10 -9
  215. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  216. package/dist/src/utils/memoryDiscovery.test.js +38 -19
  217. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  218. package/dist/src/utils/nextSpeakerChecker.test.js +33 -0
  219. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  220. package/dist/tsconfig.tsbuildinfo +1 -1
  221. package/package.json +3 -2
@@ -5,7 +5,8 @@
5
5
  */
6
6
  import fs from 'node:fs';
7
7
  import path from 'node:path';
8
- import mime from 'mime-types';
8
+ // eslint-disable-next-line import/no-internal-modules
9
+ import mime from 'mime/lite';
9
10
  import { ToolErrorType } from '../tools/tool-error.js';
10
11
  import { BINARY_EXTENSIONS } from './ignorePatterns.js';
11
12
  // Constants for text file processing
@@ -13,13 +14,128 @@ const DEFAULT_MAX_LINES_TEXT_FILE = 2000;
13
14
  const MAX_LINE_LENGTH_TEXT_FILE = 2000;
14
15
  // Default values for encoding and separator format
15
16
  export const DEFAULT_ENCODING = 'utf-8';
17
+ /**
18
+ * Detect a Unicode BOM (Byte Order Mark) if present.
19
+ * Reads up to the first 4 bytes and returns encoding + BOM length, else null.
20
+ */
21
+ export function detectBOM(buf) {
22
+ if (buf.length >= 4) {
23
+ // UTF-32 LE: FF FE 00 00
24
+ if (buf[0] === 0xff &&
25
+ buf[1] === 0xfe &&
26
+ buf[2] === 0x00 &&
27
+ buf[3] === 0x00) {
28
+ return { encoding: 'utf32le', bomLength: 4 };
29
+ }
30
+ // UTF-32 BE: 00 00 FE FF
31
+ if (buf[0] === 0x00 &&
32
+ buf[1] === 0x00 &&
33
+ buf[2] === 0xfe &&
34
+ buf[3] === 0xff) {
35
+ return { encoding: 'utf32be', bomLength: 4 };
36
+ }
37
+ }
38
+ if (buf.length >= 3) {
39
+ // UTF-8: EF BB BF
40
+ if (buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf) {
41
+ return { encoding: 'utf8', bomLength: 3 };
42
+ }
43
+ }
44
+ if (buf.length >= 2) {
45
+ // UTF-16 LE: FF FE (but not UTF-32 LE already matched above)
46
+ if (buf[0] === 0xff &&
47
+ buf[1] === 0xfe &&
48
+ (buf.length < 4 || buf[2] !== 0x00 || buf[3] !== 0x00)) {
49
+ return { encoding: 'utf16le', bomLength: 2 };
50
+ }
51
+ // UTF-16 BE: FE FF
52
+ if (buf[0] === 0xfe && buf[1] === 0xff) {
53
+ return { encoding: 'utf16be', bomLength: 2 };
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ /**
59
+ * Convert a UTF-16 BE buffer to a JS string by swapping to LE then using Node's decoder.
60
+ * (Node has 'utf16le' but not 'utf16be'.)
61
+ */
62
+ function decodeUTF16BE(buf) {
63
+ if (buf.length === 0)
64
+ return '';
65
+ const swapped = Buffer.from(buf); // swap16 mutates in place, so copy
66
+ swapped.swap16();
67
+ return swapped.toString('utf16le');
68
+ }
69
+ /**
70
+ * Decode a UTF-32 buffer (LE or BE) into a JS string.
71
+ * Invalid code points are replaced with U+FFFD, partial trailing bytes are ignored.
72
+ */
73
+ function decodeUTF32(buf, littleEndian) {
74
+ if (buf.length < 4)
75
+ return '';
76
+ const usable = buf.length - (buf.length % 4);
77
+ let out = '';
78
+ for (let i = 0; i < usable; i += 4) {
79
+ const cp = littleEndian
80
+ ? (buf[i] |
81
+ (buf[i + 1] << 8) |
82
+ (buf[i + 2] << 16) |
83
+ (buf[i + 3] << 24)) >>>
84
+ 0
85
+ : (buf[i + 3] |
86
+ (buf[i + 2] << 8) |
87
+ (buf[i + 1] << 16) |
88
+ (buf[i] << 24)) >>>
89
+ 0;
90
+ // Valid planes: 0x0000..0x10FFFF excluding surrogates
91
+ if (cp <= 0x10ffff && !(cp >= 0xd800 && cp <= 0xdfff)) {
92
+ out += String.fromCodePoint(cp);
93
+ }
94
+ else {
95
+ out += '\uFFFD';
96
+ }
97
+ }
98
+ return out;
99
+ }
100
+ /**
101
+ * Read a file as text, honoring BOM encodings (UTF‑8/16/32) and stripping the BOM.
102
+ * Falls back to utf8 when no BOM is present.
103
+ */
104
+ export async function readFileWithEncoding(filePath) {
105
+ // Read the file once; detect BOM and decode from the single buffer.
106
+ const full = await fs.promises.readFile(filePath);
107
+ if (full.length === 0)
108
+ return '';
109
+ const bom = detectBOM(full);
110
+ if (!bom) {
111
+ // No BOM → treat as UTF‑8
112
+ return full.toString('utf8');
113
+ }
114
+ // Strip BOM and decode per encoding
115
+ const content = full.subarray(bom.bomLength);
116
+ switch (bom.encoding) {
117
+ case 'utf8':
118
+ return content.toString('utf8');
119
+ case 'utf16le':
120
+ return content.toString('utf16le');
121
+ case 'utf16be':
122
+ return decodeUTF16BE(content);
123
+ case 'utf32le':
124
+ return decodeUTF32(content, true);
125
+ case 'utf32be':
126
+ return decodeUTF32(content, false);
127
+ default:
128
+ // Defensive fallback; should be unreachable
129
+ return content.toString('utf8');
130
+ }
131
+ }
16
132
  /**
17
133
  * Looks up the specific MIME type for a file path.
18
134
  * @param filePath Path to the file.
19
135
  * @returns The specific MIME type string (e.g., 'text/python', 'application/javascript') or undefined if not found or ambiguous.
20
136
  */
21
137
  export function getSpecificMimeType(filePath) {
22
- const lookedUpMime = mime.lookup(filePath);
138
+ const lookedUpMime = mime.getType(filePath);
23
139
  return typeof lookedUpMime === 'string' ? lookedUpMime : undefined;
24
140
  }
25
141
  /**
@@ -41,32 +157,33 @@ export function isWithinRoot(pathToCheck, rootDirectory) {
41
157
  normalizedPathToCheck.startsWith(rootWithSeparator));
42
158
  }
43
159
  /**
44
- * Determines if a file is likely binary based on content sampling.
45
- * @param filePath Path to the file.
46
- * @returns Promise that resolves to true if the file appears to be binary.
160
+ * Heuristic: determine if a file is likely binary.
161
+ * Now BOM-aware: if a Unicode BOM is detected, we treat it as text.
162
+ * For non-BOM files, retain the existing null-byte and non-printable ratio checks.
47
163
  */
48
164
  export async function isBinaryFile(filePath) {
49
- let fileHandle;
165
+ let fh = null;
50
166
  try {
51
- fileHandle = await fs.promises.open(filePath, 'r');
52
- // Read up to 4KB or file size, whichever is smaller
53
- const stats = await fileHandle.stat();
167
+ fh = await fs.promises.open(filePath, 'r');
168
+ const stats = await fh.stat();
54
169
  const fileSize = stats.size;
55
- if (fileSize === 0) {
56
- // Empty file is not considered binary for content checking
57
- return false;
58
- }
59
- const bufferSize = Math.min(4096, fileSize);
60
- const buffer = Buffer.alloc(bufferSize);
61
- const result = await fileHandle.read(buffer, 0, buffer.length, 0);
62
- const bytesRead = result.bytesRead;
170
+ if (fileSize === 0)
171
+ return false; // empty is not binary
172
+ // Sample up to 4KB from the head (previous behavior)
173
+ const sampleSize = Math.min(4096, fileSize);
174
+ const buf = Buffer.alloc(sampleSize);
175
+ const { bytesRead } = await fh.read(buf, 0, sampleSize, 0);
63
176
  if (bytesRead === 0)
64
177
  return false;
178
+ // BOM → text (avoid false positives for UTF‑16/32 with nulls)
179
+ const bom = detectBOM(buf.subarray(0, Math.min(4, bytesRead)));
180
+ if (bom)
181
+ return false;
65
182
  let nonPrintableCount = 0;
66
183
  for (let i = 0; i < bytesRead; i++) {
67
- if (buffer[i] === 0)
68
- return true; // Null byte is a strong indicator
69
- if (buffer[i] < 9 || (buffer[i] > 13 && buffer[i] < 32)) {
184
+ if (buf[i] === 0)
185
+ return true; // strong indicator of binary when no BOM
186
+ if (buf[i] < 9 || (buf[i] > 13 && buf[i] < 32)) {
70
187
  nonPrintableCount++;
71
188
  }
72
189
  }
@@ -74,22 +191,16 @@ export async function isBinaryFile(filePath) {
74
191
  return nonPrintableCount / bytesRead > 0.3;
75
192
  }
76
193
  catch (error) {
77
- // Log error for debugging while maintaining existing behavior
78
194
  console.warn(`Failed to check if file is binary: ${filePath}`, error instanceof Error ? error.message : String(error));
79
- // If any error occurs (e.g. file not found, permissions),
80
- // treat as not binary here; let higher-level functions handle existence/access errors.
81
195
  return false;
82
196
  }
83
197
  finally {
84
- // Safely close the file handle if it was successfully opened
85
- if (fileHandle) {
198
+ if (fh) {
86
199
  try {
87
- await fileHandle.close();
200
+ await fh.close();
88
201
  }
89
202
  catch (closeError) {
90
- // Log close errors for debugging while continuing with cleanup
91
203
  console.warn(`Failed to close file handle for: ${filePath}`, closeError instanceof Error ? closeError.message : String(closeError));
92
- // The important thing is that we attempted to clean up
93
204
  }
94
205
  }
95
206
  }
@@ -110,7 +221,7 @@ export async function detectFileType(filePath) {
110
221
  if (ext === '.svg') {
111
222
  return 'svg';
112
223
  }
113
- const lookedUpMimeType = mime.lookup(filePath); // Returns false if not found, or the mime type string
224
+ const lookedUpMimeType = mime.getType(filePath); // Returns null if not found, or the mime type string
114
225
  if (lookedUpMimeType) {
115
226
  if (lookedUpMimeType.startsWith('image/')) {
116
227
  return 'image';
@@ -193,14 +304,15 @@ export async function processSingleFileContent(filePath, rootDirectory, fileSyst
193
304
  returnDisplay: `Skipped large SVG file (>1MB): ${relativePathForDisplay}`,
194
305
  };
195
306
  }
196
- const content = await fileSystemService.readTextFile(filePath);
307
+ const content = await readFileWithEncoding(filePath);
197
308
  return {
198
309
  llmContent: content,
199
310
  returnDisplay: `Read SVG as text: ${relativePathForDisplay}`,
200
311
  };
201
312
  }
202
313
  case 'text': {
203
- const content = await fileSystemService.readTextFile(filePath);
314
+ // Use BOM-aware reader to avoid leaving a BOM character in content and to support UTF-16/32 transparently
315
+ const content = await readFileWithEncoding(filePath);
204
316
  const lines = content.split('\n');
205
317
  const originalLineCount = lines.length;
206
318
  const startLine = offset || 0;
@@ -250,7 +362,7 @@ export async function processSingleFileContent(filePath, rootDirectory, fileSyst
250
362
  llmContent: {
251
363
  inlineData: {
252
364
  data: base64Data,
253
- mimeType: mime.lookup(filePath) || 'application/octet-stream',
365
+ mimeType: mime.getType(filePath) || 'application/octet-stream',
254
366
  },
255
367
  },
256
368
  returnDisplay: `Read ${fileType} file: ${relativePathForDisplay}`,
@@ -1 +1 @@
1
- {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"}