@google/gemini-cli-core 0.62.0-preview.0 → 0.63.0-nightly.20260926.g2fe7c2d3f

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 (98) hide show
  1. package/dist/docs/changelogs/index.md +16 -0
  2. package/dist/docs/changelogs/latest.md +34 -55
  3. package/dist/docs/changelogs/preview.md +65 -29
  4. package/dist/google-gemini-cli-core-0.63.0-nightly.20260923.gf50ba8608.tgz +0 -0
  5. package/dist/src/agents/local-executor.js +44 -6
  6. package/dist/src/agents/local-executor.js.map +1 -1
  7. package/dist/src/agents/local-executor.test.js +10 -6
  8. package/dist/src/agents/local-executor.test.js.map +1 -1
  9. package/dist/src/agents/memory-leak-regression.test.d.ts +6 -0
  10. package/dist/src/agents/memory-leak-regression.test.js +314 -0
  11. package/dist/src/agents/memory-leak-regression.test.js.map +1 -0
  12. package/dist/src/context/chatCompressionService.d.ts +26 -0
  13. package/dist/src/context/chatCompressionService.js +190 -3
  14. package/dist/src/context/chatCompressionService.js.map +1 -1
  15. package/dist/src/context/chatCompressionService.test.js +350 -1
  16. package/dist/src/context/chatCompressionService.test.js.map +1 -1
  17. package/dist/src/core/client.js +13 -0
  18. package/dist/src/core/client.js.map +1 -1
  19. package/dist/src/generated/git-commit.d.ts +2 -2
  20. package/dist/src/generated/git-commit.js +2 -2
  21. package/dist/src/generated/git-commit.js.map +1 -1
  22. package/dist/src/policy/policy-engine.js +10 -3
  23. package/dist/src/policy/policy-engine.js.map +1 -1
  24. package/dist/src/policy/policy-engine.test.js +63 -1
  25. package/dist/src/policy/policy-engine.test.js.map +1 -1
  26. package/dist/src/safety/built-in.js +12 -1
  27. package/dist/src/safety/built-in.js.map +1 -1
  28. package/dist/src/safety/built-in.test.js +53 -0
  29. package/dist/src/safety/built-in.test.js.map +1 -1
  30. package/dist/src/scheduler/scheduler.js +20 -1
  31. package/dist/src/scheduler/scheduler.js.map +1 -1
  32. package/dist/src/scheduler/scheduler.test.js +74 -0
  33. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  34. package/dist/src/scheduler/tool-executor.js +67 -3
  35. package/dist/src/scheduler/tool-executor.js.map +1 -1
  36. package/dist/src/scheduler/tool-executor.test.js +143 -0
  37. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  38. package/dist/src/services/chatRecordingService.js +6 -1
  39. package/dist/src/services/chatRecordingService.js.map +1 -1
  40. package/dist/src/services/chatRecordingService.test.js +36 -0
  41. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  42. package/dist/src/services/shellExecutionService.d.ts +7 -1
  43. package/dist/src/services/shellExecutionService.js +76 -8
  44. package/dist/src/services/shellExecutionService.js.map +1 -1
  45. package/dist/src/services/shellExecutionService.test.js +35 -4
  46. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  47. package/dist/src/tools/list-mcp-resources.js +2 -1
  48. package/dist/src/tools/list-mcp-resources.js.map +1 -1
  49. package/dist/src/tools/list-mcp-resources.test.js +2 -0
  50. package/dist/src/tools/list-mcp-resources.test.js.map +1 -1
  51. package/dist/src/tools/read-file.js +14 -6
  52. package/dist/src/tools/read-file.js.map +1 -1
  53. package/dist/src/tools/read-file.test.js +26 -0
  54. package/dist/src/tools/read-file.test.js.map +1 -1
  55. package/dist/src/tools/read-mcp-resource.js +4 -1
  56. package/dist/src/tools/read-mcp-resource.js.map +1 -1
  57. package/dist/src/tools/read-mcp-resource.test.js +21 -2
  58. package/dist/src/tools/read-mcp-resource.test.js.map +1 -1
  59. package/dist/src/tools/shell.d.ts +1 -0
  60. package/dist/src/tools/shell.js +29 -21
  61. package/dist/src/tools/shell.js.map +1 -1
  62. package/dist/src/tools/shell.test.js +59 -3
  63. package/dist/src/tools/shell.test.js.map +1 -1
  64. package/dist/src/tools/shellBackgroundTools.integration.test.js +49 -0
  65. package/dist/src/tools/shellBackgroundTools.integration.test.js.map +1 -1
  66. package/dist/src/tools/web-search.js +2 -1
  67. package/dist/src/tools/web-search.js.map +1 -1
  68. package/dist/src/tools/web-search.test.js +8 -4
  69. package/dist/src/tools/web-search.test.js.map +1 -1
  70. package/dist/src/utils/constants.d.ts +5 -0
  71. package/dist/src/utils/constants.js +5 -0
  72. package/dist/src/utils/constants.js.map +1 -1
  73. package/dist/src/utils/fileUtils.d.ts +8 -1
  74. package/dist/src/utils/fileUtils.js +63 -7
  75. package/dist/src/utils/fileUtils.js.map +1 -1
  76. package/dist/src/utils/fileUtils.test.js +119 -1
  77. package/dist/src/utils/fileUtils.test.js.map +1 -1
  78. package/dist/src/utils/gitUtils.js +2 -3
  79. package/dist/src/utils/gitUtils.js.map +1 -1
  80. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  81. package/dist/src/utils/gitUtils.test.js +194 -0
  82. package/dist/src/utils/gitUtils.test.js.map +1 -0
  83. package/dist/src/utils/paths.js +10 -2
  84. package/dist/src/utils/paths.js.map +1 -1
  85. package/dist/src/utils/paths.test.js +14 -0
  86. package/dist/src/utils/paths.test.js.map +1 -1
  87. package/dist/src/utils/security.d.ts +1 -0
  88. package/dist/src/utils/security.js +5 -3
  89. package/dist/src/utils/security.js.map +1 -1
  90. package/dist/src/utils/security.test.js +33 -3
  91. package/dist/src/utils/security.test.js.map +1 -1
  92. package/dist/src/utils/tool-utils.d.ts +16 -0
  93. package/dist/src/utils/tool-utils.js +113 -0
  94. package/dist/src/utils/tool-utils.js.map +1 -1
  95. package/dist/src/utils/tool-utils.test.js +150 -1
  96. package/dist/src/utils/tool-utils.test.js.map +1 -1
  97. package/dist/tsconfig.tsbuildinfo +1 -1
  98. package/package.json +1 -1
@@ -4,7 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { expect, describe, it } from 'vitest';
7
- import { doesToolInvocationMatch, getToolSuggestion } from './tool-utils.js';
7
+ import { doesToolInvocationMatch, getToolSuggestion, truncateToolOutput, truncateFunctionResponsePart, } from './tool-utils.js';
8
+ import { MAX_STORED_TOOL_OUTPUT_BYTES } from './constants.js';
8
9
  import { ReadFileTool } from '../index.js';
9
10
  import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
10
11
  describe('getToolSuggestion', () => {
@@ -85,4 +86,152 @@ describe('doesToolInvocationMatch', () => {
85
86
  });
86
87
  });
87
88
  });
89
+ describe('truncateToolOutput', () => {
90
+ it('preserves text when within maxBytes limit', () => {
91
+ const input = 'short text';
92
+ expect(truncateToolOutput(input, 100)).toBe(input);
93
+ });
94
+ it('truncates ASCII text exceeding maxBytes and appends indicator', () => {
95
+ const input = 'a'.repeat(200);
96
+ const maxBytes = 100;
97
+ const result = truncateToolOutput(input, maxBytes);
98
+ expect(Buffer.byteLength(result, 'utf8')).toBeLessThanOrEqual(maxBytes);
99
+ expect(result).toContain('\n... [Tool output truncated to conserve memory]');
100
+ });
101
+ it('handles multi-byte graphemes cleanly without breaking clusters or creating replacement characters', () => {
102
+ // 👩‍👩‍👦‍👦 consists of 4 people emojis connected with Zero Width Joiner (\u200D), totaling 25 UTF-8 bytes.
103
+ const familyEmoji = '👩‍👩‍👦‍👦';
104
+ const accented = 'caffè';
105
+ const suffix = '\n... [Tool output truncated to conserve memory]';
106
+ const suffixBytes = Buffer.byteLength(suffix, 'utf8');
107
+ // Case 1: Not enough space for the full 25-byte emoji
108
+ // Available space for text is 10 bytes (< 25 bytes), input is 135 bytes
109
+ const inputLong = familyEmoji + ' extra text'.repeat(10);
110
+ const tightMaxBytes = suffixBytes + 10;
111
+ const resultTight = truncateToolOutput(inputLong, tightMaxBytes);
112
+ expect(resultTight).toBe(suffix);
113
+ expect(resultTight.includes('\uFFFD')).toBe(false);
114
+ expect(Buffer.byteLength(resultTight, 'utf8')).toBeLessThanOrEqual(tightMaxBytes);
115
+ // Case 2: Enough space for the emoji, but not enough for following text
116
+ const emojiBytes = Buffer.byteLength(familyEmoji, 'utf8');
117
+ const exactMaxBytes = suffixBytes + emojiBytes;
118
+ const resultExact = truncateToolOutput(inputLong, exactMaxBytes);
119
+ expect(resultExact).toBe(familyEmoji + suffix);
120
+ expect(resultExact.includes('\uFFFD')).toBe(false);
121
+ expect(Buffer.byteLength(resultExact, 'utf8')).toBeLessThanOrEqual(exactMaxBytes);
122
+ // Case 3: Large text with mixed emojis and accented characters
123
+ const largeMixed = `${familyEmoji} ${accented} `.repeat(2000);
124
+ const resultLarge = truncateToolOutput(largeMixed, MAX_STORED_TOOL_OUTPUT_BYTES);
125
+ expect(Buffer.byteLength(resultLarge, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
126
+ expect(resultLarge).toContain(suffix);
127
+ expect(resultLarge.includes('\uFFFD')).toBe(false);
128
+ expect(Buffer.from(resultLarge, 'utf8').toString('utf8')).toBe(resultLarge);
129
+ });
130
+ });
131
+ describe('truncateFunctionResponsePart', () => {
132
+ it('recursively deep-truncates nested objects and arrays while leaving small values untouched', () => {
133
+ const largeA = 'A'.repeat(100_000);
134
+ const largeB = 'B'.repeat(100_000);
135
+ const largeC = 'C'.repeat(100_000);
136
+ const suffix = '\n... [Tool output truncated to conserve memory]';
137
+ const part = {
138
+ functionResponse: {
139
+ name: 'complexTool',
140
+ response: {
141
+ details: { logs: largeA, status: 'ok', count: 42 },
142
+ items: [largeB, 'small item', true],
143
+ deep: { a: [{ b: { c: largeC, flag: false } }] },
144
+ },
145
+ },
146
+ };
147
+ const truncatedPart = truncateFunctionResponsePart(part, MAX_STORED_TOOL_OUTPUT_BYTES);
148
+ const res = truncatedPart.functionResponse?.response;
149
+ expect(res).toBeDefined();
150
+ // Nested object check: logs is truncated, status and count are untouched
151
+ const details = res['details'];
152
+ expect(typeof details.logs).toBe('string');
153
+ expect(details.logs.endsWith(suffix)).toBe(true);
154
+ expect(Buffer.byteLength(details.logs, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
155
+ expect(details.status).toBe('ok');
156
+ expect(details.count).toBe(42);
157
+ // Nested array check: large string item is truncated, small item and boolean untouched
158
+ const items = res['items'];
159
+ const firstItem = items[0];
160
+ expect(typeof firstItem).toBe('string');
161
+ expect(firstItem.endsWith(suffix)).toBe(true);
162
+ expect(Buffer.byteLength(firstItem, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
163
+ expect(items[1]).toBe('small item');
164
+ expect(items[2]).toBe(true);
165
+ // Deeply nested check: deep.a[0].b.c is truncated, flag is untouched
166
+ const deep = res['deep'];
167
+ const nestedC = deep.a[0].b.c;
168
+ expect(typeof nestedC).toBe('string');
169
+ expect(nestedC.endsWith(suffix)).toBe(true);
170
+ expect(Buffer.byteLength(nestedC, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
171
+ expect(deep.a[0].b.flag).toBe(false);
172
+ });
173
+ it('returns original part reference when no nested truncation was needed', () => {
174
+ const part = {
175
+ functionResponse: {
176
+ name: 'smallTool',
177
+ response: {
178
+ details: { logs: 'short' },
179
+ items: ['item1', 123],
180
+ },
181
+ },
182
+ };
183
+ const result = truncateFunctionResponsePart(part, MAX_STORED_TOOL_OUTPUT_BYTES);
184
+ expect(result).toBe(part);
185
+ });
186
+ it('leaves Buffer, Uint8Array, and non-plain object payloads intact without converting to dictionary objects', () => {
187
+ const bufferPayload = Buffer.from('raw binary content \x00\x01\x02');
188
+ const uint8Payload = new Uint8Array([10, 20, 30, 40]);
189
+ const datePayload = new Date(1700000000000);
190
+ const regexPayload = /test-pattern/gi;
191
+ const part = {
192
+ functionResponse: {
193
+ name: 'binaryTool',
194
+ response: {
195
+ buf: bufferPayload,
196
+ uint8: uint8Payload,
197
+ createdAt: datePayload,
198
+ pattern: regexPayload,
199
+ nested: {
200
+ subBuf: bufferPayload,
201
+ largeString: 'A'.repeat(100_000),
202
+ },
203
+ },
204
+ },
205
+ };
206
+ const result = truncateFunctionResponsePart(part, MAX_STORED_TOOL_OUTPUT_BYTES);
207
+ const res = result.functionResponse?.response;
208
+ expect(res).toBeDefined();
209
+ // Verify instances are preserved and not turned into plain objects {}
210
+ expect(Buffer.isBuffer(res.buf)).toBe(true);
211
+ expect(Buffer.compare(res.buf, bufferPayload)).toBe(0);
212
+ expect(res.uint8 instanceof Uint8Array).toBe(true);
213
+ expect(Array.from(res.uint8)).toEqual([10, 20, 30, 40]);
214
+ expect(res.createdAt instanceof Date).toBe(true);
215
+ expect(res.createdAt.getTime()).toBe(1700000000000);
216
+ expect(res.pattern instanceof RegExp).toBe(true);
217
+ expect(res.pattern.source).toBe('test-pattern');
218
+ expect(Buffer.isBuffer(res.nested.subBuf)).toBe(true);
219
+ expect(res.nested.largeString.endsWith('\n... [Tool output truncated to conserve memory]')).toBe(true);
220
+ });
221
+ it('preserves primitive string response type when truncating', () => {
222
+ const largeStr = 'S'.repeat(100_000);
223
+ const part = {
224
+ functionResponse: {
225
+ name: 'stringTool',
226
+ response: largeStr,
227
+ },
228
+ };
229
+ const truncated = truncateFunctionResponsePart(part, MAX_STORED_TOOL_OUTPUT_BYTES);
230
+ const res = truncated.functionResponse?.response;
231
+ expect(typeof res).toBe('string');
232
+ const strRes = res;
233
+ expect(strRes.endsWith('\n... [Tool output truncated to conserve memory]')).toBe(true);
234
+ expect(Buffer.byteLength(strRes, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
235
+ });
236
+ });
88
237
  //# sourceMappingURL=tool-utils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-utils.test.js","sourceRoot":"","sources":["../../../src/utils/tool-utils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-utils.test.js","sourceRoot":"","sources":["../../../src/utils/tool-utils.test.ts"],"names":[],"mappings":"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"}