@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
@@ -0,0 +1,314 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { MAX_STORED_TOOL_OUTPUT_BYTES } from '../utils/constants.js';
8
+ import { truncateToolOutput, truncateFunctionResponsePart, } from '../utils/tool-utils.js';
9
+ import { calculateHistoryByteSize, collapseOlderFunctionResponses, COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES, ChatCompressionService, } from '../context/chatCompressionService.js';
10
+ import { CompressionStatus } from '../core/turn.js';
11
+ import { makeFakeConfig } from '../test-utils/config.js';
12
+ import { tokenLimit } from '../core/tokenLimits.js';
13
+ vi.mock('../core/tokenLimits.js', () => ({
14
+ tokenLimit: vi.fn().mockReturnValue(1_000_000),
15
+ }));
16
+ describe('GH-28537 / b/561554750 Memory Leak Regression Tests', () => {
17
+ describe('Tool Output Truncation Cap', () => {
18
+ it('truncates tool outputs exceeding MAX_STORED_TOOL_OUTPUT_BYTES (64 KB)', () => {
19
+ const largeOutput = 'x'.repeat(100 * 1024); // 100 KB
20
+ const truncated = truncateToolOutput(largeOutput, MAX_STORED_TOOL_OUTPUT_BYTES);
21
+ expect(Buffer.byteLength(truncated, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
22
+ expect(truncated).toContain('[Tool output truncated to conserve memory]');
23
+ });
24
+ it('preserves tool outputs within MAX_STORED_TOOL_OUTPUT_BYTES', () => {
25
+ const smallOutput = 'hello world';
26
+ const result = truncateToolOutput(smallOutput, MAX_STORED_TOOL_OUTPUT_BYTES);
27
+ expect(result).toBe(smallOutput);
28
+ });
29
+ it('truncates function response parts with large string or object outputs', () => {
30
+ const largeOutput = 'A'.repeat(80 * 1024);
31
+ const part = {
32
+ functionResponse: {
33
+ name: 'shell',
34
+ response: {
35
+ output: largeOutput,
36
+ },
37
+ },
38
+ };
39
+ const truncatedPart = truncateFunctionResponsePart(part, MAX_STORED_TOOL_OUTPUT_BYTES);
40
+ const response = truncatedPart.functionResponse?.response;
41
+ expect(response).toBeDefined();
42
+ expect(response.output).toContain('[Tool output truncated to conserve memory]');
43
+ expect(Buffer.byteLength(response.output, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
44
+ });
45
+ });
46
+ describe('History Collapsing Across Long-Running Turns', () => {
47
+ it('collapses older functionResponse payloads from completed previous turns while preserving recent protected turns', () => {
48
+ const largeToolOutput = 'data '.repeat(2000); // ~10 KB
49
+ // Simulate 5 turns of tool calls and responses
50
+ const history = [
51
+ // Turn 1
52
+ { role: 'user', parts: [{ text: 'Turn 1 user request' }] },
53
+ {
54
+ role: 'model',
55
+ parts: [
56
+ { functionCall: { name: 'shell', args: { command: 'test 1' } } },
57
+ ],
58
+ },
59
+ {
60
+ role: 'user',
61
+ parts: [
62
+ {
63
+ functionResponse: {
64
+ name: 'shell',
65
+ response: { output: largeToolOutput },
66
+ },
67
+ },
68
+ ],
69
+ },
70
+ { role: 'model', parts: [{ text: 'Turn 1 response' }] },
71
+ // Turn 2
72
+ { role: 'user', parts: [{ text: 'Turn 2 user request' }] },
73
+ {
74
+ role: 'model',
75
+ parts: [
76
+ { functionCall: { name: 'shell', args: { command: 'test 2' } } },
77
+ ],
78
+ },
79
+ {
80
+ role: 'user',
81
+ parts: [
82
+ {
83
+ functionResponse: {
84
+ name: 'shell',
85
+ response: { output: largeToolOutput },
86
+ },
87
+ },
88
+ ],
89
+ },
90
+ { role: 'model', parts: [{ text: 'Turn 2 response' }] },
91
+ // Turn 3
92
+ { role: 'user', parts: [{ text: 'Turn 3 user request' }] },
93
+ {
94
+ role: 'model',
95
+ parts: [
96
+ { functionCall: { name: 'shell', args: { command: 'test 3' } } },
97
+ ],
98
+ },
99
+ {
100
+ role: 'user',
101
+ parts: [
102
+ {
103
+ functionResponse: {
104
+ name: 'shell',
105
+ response: { output: largeToolOutput },
106
+ },
107
+ },
108
+ ],
109
+ },
110
+ { role: 'model', parts: [{ text: 'Turn 3 response' }] },
111
+ // Turn 4
112
+ { role: 'user', parts: [{ text: 'Turn 4 user request' }] },
113
+ {
114
+ role: 'model',
115
+ parts: [
116
+ { functionCall: { name: 'shell', args: { command: 'test 4' } } },
117
+ ],
118
+ },
119
+ {
120
+ role: 'user',
121
+ parts: [
122
+ {
123
+ functionResponse: {
124
+ name: 'shell',
125
+ response: { output: largeToolOutput },
126
+ },
127
+ },
128
+ ],
129
+ },
130
+ { role: 'model', parts: [{ text: 'Turn 4 response' }] },
131
+ // Turn 5
132
+ { role: 'user', parts: [{ text: 'Turn 5 user request' }] },
133
+ {
134
+ role: 'model',
135
+ parts: [
136
+ { functionCall: { name: 'shell', args: { command: 'test 5' } } },
137
+ ],
138
+ },
139
+ {
140
+ role: 'user',
141
+ parts: [
142
+ {
143
+ functionResponse: {
144
+ name: 'shell',
145
+ response: { output: largeToolOutput },
146
+ },
147
+ },
148
+ ],
149
+ },
150
+ ];
151
+ const collapsed = collapseOlderFunctionResponses(history, COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES);
152
+ // Turn 1 tool response (index 2) should be collapsed
153
+ const turn1Part = collapsed[2].parts[0].functionResponse?.response;
154
+ expect(turn1Part.output).toContain('[Tool output collapsed from previous turn:');
155
+ expect(Buffer.byteLength(turn1Part.output, 'utf8')).toBeLessThanOrEqual(COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES + 256);
156
+ // Turn 2 tool response (index 6) should be collapsed
157
+ const turn2Part = collapsed[6].parts[0].functionResponse?.response;
158
+ expect(turn2Part.output).toContain('[Tool output collapsed from previous turn:');
159
+ // Turn 3, 4, 5 tool responses (the 3 most recent) must be PRESERVED intact
160
+ const turn3Part = collapsed[10].parts[0].functionResponse?.response;
161
+ expect(turn3Part.output).toBe(largeToolOutput);
162
+ const turn4Part = collapsed[14].parts[0].functionResponse?.response;
163
+ expect(turn4Part.output).toBe(largeToolOutput);
164
+ const turn5Part = collapsed[18].parts[0].functionResponse?.response;
165
+ expect(turn5Part.output).toBe(largeToolOutput);
166
+ });
167
+ it('keeps history byte growth bounded across 50 simulated tool turns', () => {
168
+ let currentHistory = [];
169
+ const toolOutputChunk = 'x'.repeat(60 * 1024); // 60 KB output per turn
170
+ for (let turn = 1; turn <= 50; turn++) {
171
+ // Model tool call turn
172
+ currentHistory.push({
173
+ role: 'model',
174
+ parts: [
175
+ {
176
+ functionCall: {
177
+ name: 'shell',
178
+ args: { command: `run-test-${turn}` },
179
+ },
180
+ },
181
+ ],
182
+ });
183
+ // User tool response turn (capped at 64 KB initially)
184
+ const cappedPart = truncateFunctionResponsePart({
185
+ functionResponse: {
186
+ name: 'shell',
187
+ response: { output: toolOutputChunk },
188
+ },
189
+ });
190
+ currentHistory.push({
191
+ role: 'user',
192
+ parts: [cappedPart],
193
+ });
194
+ // Model text response turn
195
+ currentHistory.push({
196
+ role: 'model',
197
+ parts: [{ text: `Turn ${turn} completed.` }],
198
+ });
199
+ // Apply older turn collapsing as done during local executor turns
200
+ currentHistory = collapseOlderFunctionResponses(currentHistory);
201
+ }
202
+ const totalByteSize = calculateHistoryByteSize(currentHistory);
203
+ // 50 turns with 60 KB uncollapsed would be 3,000 KB (3 MB).
204
+ // With older turn collapsing to 2 KB, 47 turns * 2 KB + 3 turns * 60 KB ≈ 274 KB.
205
+ // Assert that total size remains well bounded under 350 KB!
206
+ expect(totalByteSize).toBeLessThan(350 * 1024);
207
+ // The latest tool response must still be intact
208
+ const toolTurns = currentHistory.filter((c) => c.role === 'user' &&
209
+ c.parts?.some((p) => p.functionResponse?.name === 'shell'));
210
+ const latestToolTurn = toolTurns[toolTurns.length - 1];
211
+ const latestPart = latestToolTurn.parts[0].functionResponse
212
+ ?.response;
213
+ expect(latestPart.output).toBe(toolOutputChunk);
214
+ // Earlier tool turns beyond the 3 protected recent turns must be collapsed
215
+ for (let i = 0; i < toolTurns.length - 3; i++) {
216
+ const oldPart = toolTurns[i].parts[0].functionResponse?.response;
217
+ expect(oldPart.output).toContain('[Tool output collapsed from previous turn:');
218
+ }
219
+ // The recent 3 protected tool turns must remain intact
220
+ for (let i = toolTurns.length - 3; i < toolTurns.length; i++) {
221
+ const recentPart = toolTurns[i].parts[0].functionResponse
222
+ ?.response;
223
+ expect(recentPart.output).toBe(toolOutputChunk);
224
+ }
225
+ });
226
+ });
227
+ describe('High-Token Context Retention on Large Context Models', () => {
228
+ let compressionService;
229
+ let mockChat;
230
+ beforeEach(() => {
231
+ compressionService = new ChatCompressionService();
232
+ mockChat = {
233
+ getHistory: vi.fn(),
234
+ getLastPromptTokenCount: vi.fn().mockReturnValue(100),
235
+ };
236
+ });
237
+ it('does not prematurely trigger compression for 60,000 to 200,000 tokens on 1M+ models when threshold is not reached', async () => {
238
+ // 2,000,000 token limit with 0.5 threshold = 1,000,000 tokens needed to trigger compression.
239
+ // A conversation of 150,000 tokens should return NOOP and not discard history.
240
+ const history = [
241
+ { role: 'user', parts: [{ text: 'some prompt' }] },
242
+ { role: 'model', parts: [{ text: 'some response' }] },
243
+ ];
244
+ vi.mocked(mockChat.getHistory).mockReturnValue(history);
245
+ vi.mocked(mockChat.getLastPromptTokenCount).mockReturnValue(150_000);
246
+ vi.mocked(tokenLimit).mockReturnValue(2_000_000);
247
+ const mockConfig = makeFakeConfig();
248
+ mockConfig.getCompressionThreshold = vi.fn().mockResolvedValue(0.5);
249
+ const result = await compressionService.compress(mockChat, 'high-token-context-test', false, 'gemini-2.5-pro', mockConfig, false);
250
+ // Must NOT have compressed: status must be NOOP
251
+ expect(result.info.compressionStatus).toBe(CompressionStatus.NOOP);
252
+ expect(result.newHistory).toBeNull();
253
+ });
254
+ it('does not trigger compression for 50,000 tokens on a 1M context model when threshold is 0.5', async () => {
255
+ const history = [
256
+ { role: 'user', parts: [{ text: 'some prompt' }] },
257
+ { role: 'model', parts: [{ text: 'some response' }] },
258
+ ];
259
+ vi.mocked(mockChat.getHistory).mockReturnValue(history);
260
+ vi.mocked(mockChat.getLastPromptTokenCount).mockReturnValue(50_000);
261
+ vi.mocked(tokenLimit).mockReturnValue(1_000_000);
262
+ const mockConfig = makeFakeConfig();
263
+ mockConfig.getCompressionThreshold = vi.fn().mockResolvedValue(0.5);
264
+ const result = await compressionService.compress(mockChat, '50k-token-test', false, 'gemini-2.5-flash', mockConfig, false);
265
+ expect(result.info.compressionStatus).toBe(CompressionStatus.NOOP);
266
+ expect(result.newHistory).toBeNull();
267
+ });
268
+ it('returns NOOP when both tokens and bytes are below watermarks and model threshold', async () => {
269
+ const history = [
270
+ { role: 'user', parts: [{ text: 'small text' }] },
271
+ { role: 'model', parts: [{ text: 'small response' }] },
272
+ ];
273
+ vi.mocked(mockChat.getHistory).mockReturnValue(history);
274
+ vi.mocked(mockChat.getLastPromptTokenCount).mockReturnValue(500);
275
+ vi.mocked(tokenLimit).mockReturnValue(1_000_000);
276
+ const mockConfig = makeFakeConfig();
277
+ mockConfig.getCompressionThreshold = vi.fn().mockResolvedValue(0.5);
278
+ const result = await compressionService.compress(mockChat, 'noop-test', false, 'gemini-2.5-pro', mockConfig, false);
279
+ expect(result.info.compressionStatus).toBe(CompressionStatus.NOOP);
280
+ expect(result.newHistory).toBeNull();
281
+ });
282
+ });
283
+ describe('Turn ID Stability', () => {
284
+ it('preserves existing turn IDs when updating history', () => {
285
+ const turn1Id = 'turn-uuid-1';
286
+ const turn2Id = 'turn-uuid-2';
287
+ const originalTurns = [
288
+ { id: turn1Id, content: { role: 'user', parts: [{ text: 'hello' }] } },
289
+ { id: turn2Id, content: { role: 'model', parts: [{ text: 'world' }] } },
290
+ ];
291
+ // Simulate what LocalAgentExecutor does: preserving existing turn IDs
292
+ const newContents = [
293
+ { role: 'user', parts: [{ text: 'hello' }] },
294
+ { role: 'model', parts: [{ text: 'world' }] },
295
+ ];
296
+ const mappedTurns = newContents.map((c, idx) => ({
297
+ id: originalTurns[idx]?.id ?? 'fallback-uuid',
298
+ content: c,
299
+ }));
300
+ expect(mappedTurns[0].id).toBe(turn1Id);
301
+ expect(mappedTurns[1].id).toBe(turn2Id);
302
+ });
303
+ });
304
+ describe('Tool Output Disk Fallback', () => {
305
+ it('includes disk file path in truncation notice when output exceeds cap', () => {
306
+ const largeOutput = 'x'.repeat(100 * 1024);
307
+ const savedPath = '/tmp/project/tools/tool-output-123.txt';
308
+ const truncated = truncateToolOutput(largeOutput, MAX_STORED_TOOL_OUTPUT_BYTES, savedPath);
309
+ expect(truncated).toContain(`[Tool output truncated to conserve memory. For full output see: ${savedPath}]`);
310
+ expect(Buffer.byteLength(truncated, 'utf8')).toBeLessThanOrEqual(MAX_STORED_TOOL_OUTPUT_BYTES);
311
+ });
312
+ });
313
+ });
314
+ //# sourceMappingURL=memory-leak-regression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-leak-regression.test.js","sourceRoot":"","sources":["../../../src/agents/memory-leak-regression.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,32 @@ import type { Content } from '@google/genai';
7
7
  import type { Config } from '../config/config.js';
8
8
  import type { GeminiChat } from '../core/geminiChat.js';
9
9
  import { type ChatCompressionInfo } from '../core/turn.js';
10
+ /**
11
+ * Default threshold for compression token count as a fraction of the model's
12
+ * token limit. If the chat history exceeds this threshold, it will be compressed.
13
+ */
14
+ export declare const DEFAULT_COMPRESSION_TOKEN_THRESHOLD = 0.5;
15
+ /**
16
+ * Number of recent tool response turns that must be preserved at full fidelity.
17
+ */
18
+ export declare const RECENT_TURNS_PROTECTED = 3;
19
+ /**
20
+ * Tools that retrieve file content, documentation, or search results whose outputs
21
+ * are essential for multi-step reasoning and must be exempted from collapsing into snippets.
22
+ */
23
+ export declare const RETRIEVAL_TOOL_NAMES_EXEMPT_FROM_COLLAPSE: ReadonlySet<string>;
24
+ export declare function isExemptRetrievalTool(toolName?: string, exemptTools?: ReadonlySet<string>): boolean;
25
+ export declare const COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES = 2048;
26
+ /**
27
+ * Computes the total byte size of text and payload content across all turns in history.
28
+ */
29
+ export declare function calculateHistoryByteSize(history: readonly Content[]): number;
30
+ /**
31
+ * Collapses detailed logs in older functionResponse payloads from completed previous turns.
32
+ * The most recent N tool response turns (default 3) and retrieval tools (read_file, etc.)
33
+ * are preserved intact for immediate context fidelity and multi-step reasoning.
34
+ */
35
+ export declare function collapseOlderFunctionResponses(history: Content[], maxBytesPerOldResponse?: number, segmenter?: Intl.Segmenter, protectedTurns?: number, exemptTools?: ReadonlySet<string>): Content[];
10
36
  /**
11
37
  * Returns the index of the oldest item to keep when compressing. May return
12
38
  * contents.length which indicates that everything should be compressed.
@@ -19,7 +19,187 @@ import { PreCompressTrigger } from '../hooks/types.js';
19
19
  * Default threshold for compression token count as a fraction of the model's
20
20
  * token limit. If the chat history exceeds this threshold, it will be compressed.
21
21
  */
22
- const DEFAULT_COMPRESSION_TOKEN_THRESHOLD = 0.5;
22
+ export const DEFAULT_COMPRESSION_TOKEN_THRESHOLD = 0.5;
23
+ /**
24
+ * Number of recent tool response turns that must be preserved at full fidelity.
25
+ */
26
+ export const RECENT_TURNS_PROTECTED = 3;
27
+ /**
28
+ * Tools that retrieve file content, documentation, or search results whose outputs
29
+ * are essential for multi-step reasoning and must be exempted from collapsing into snippets.
30
+ */
31
+ export const RETRIEVAL_TOOL_NAMES_EXEMPT_FROM_COLLAPSE = new Set([
32
+ 'read_file',
33
+ 'read_many_files',
34
+ 'get_internal_docs',
35
+ 'read_mcp_resource',
36
+ 'grep',
37
+ 'rip_grep',
38
+ 'glob',
39
+ 'search_file_content',
40
+ 'find_files',
41
+ ]);
42
+ export function isExemptRetrievalTool(toolName, exemptTools = RETRIEVAL_TOOL_NAMES_EXEMPT_FROM_COLLAPSE) {
43
+ if (!toolName) {
44
+ return false;
45
+ }
46
+ const normalized = toolName.toLowerCase();
47
+ if (exemptTools.has(normalized)) {
48
+ return true;
49
+ }
50
+ return (normalized.endsWith('read_file') ||
51
+ normalized.endsWith('read_files') ||
52
+ normalized.endsWith('read_many_files') ||
53
+ normalized.endsWith('read_resource'));
54
+ }
55
+ export const COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES = 2048; // 2 KB
56
+ /**
57
+ * Computes the total byte size of text and payload content across all turns in history.
58
+ */
59
+ export function calculateHistoryByteSize(history) {
60
+ let bytes = 0;
61
+ for (const turn of history) {
62
+ if (turn.parts) {
63
+ for (const part of turn.parts) {
64
+ if (part.text) {
65
+ bytes += Buffer.byteLength(part.text, 'utf8');
66
+ }
67
+ if (part.functionResponse?.response) {
68
+ const resp = part.functionResponse.response;
69
+ if (typeof resp === 'string') {
70
+ bytes += Buffer.byteLength(resp, 'utf8');
71
+ }
72
+ else if (typeof resp === 'object' && resp !== null) {
73
+ try {
74
+ bytes += Buffer.byteLength(JSON.stringify(resp), 'utf8');
75
+ }
76
+ catch {
77
+ // ignore JSON errors
78
+ }
79
+ }
80
+ }
81
+ if (part.inlineData?.data) {
82
+ bytes += Buffer.byteLength(part.inlineData.data, 'utf8');
83
+ }
84
+ }
85
+ }
86
+ }
87
+ return bytes;
88
+ }
89
+ const defaultGraphemeSegmenter = new Intl.Segmenter(undefined, {
90
+ granularity: 'grapheme',
91
+ });
92
+ /**
93
+ * Collapses detailed logs in older functionResponse payloads from completed previous turns.
94
+ * The most recent N tool response turns (default 3) and retrieval tools (read_file, etc.)
95
+ * are preserved intact for immediate context fidelity and multi-step reasoning.
96
+ */
97
+ export function collapseOlderFunctionResponses(history, maxBytesPerOldResponse = COLLAPSED_FUNCTION_RESPONSE_MAX_BYTES, segmenter = defaultGraphemeSegmenter, protectedTurns = RECENT_TURNS_PROTECTED, exemptTools = RETRIEVAL_TOOL_NAMES_EXEMPT_FROM_COLLAPSE) {
98
+ // Find all indices of user messages that contain functionResponse
99
+ const toolIndices = [];
100
+ for (let i = 0; i < history.length; i++) {
101
+ if (history[i].role === 'user' &&
102
+ history[i].parts?.some((p) => !!p.functionResponse)) {
103
+ toolIndices.push(i);
104
+ }
105
+ }
106
+ if (toolIndices.length <= protectedTurns) {
107
+ return history;
108
+ }
109
+ // The last N tool indices represent recent tool turns that must be protected.
110
+ // Only prior tool indices are older completed turns eligible for collapsing.
111
+ const cutoffToolIndex = toolIndices[toolIndices.length - protectedTurns];
112
+ const collapseString = (str) => {
113
+ const totalBytes = Buffer.byteLength(str, 'utf8');
114
+ if (totalBytes <= maxBytesPerOldResponse) {
115
+ return str;
116
+ }
117
+ const previewBytes = maxBytesPerOldResponse;
118
+ let preview = '';
119
+ let currentBytes = 0;
120
+ for (const { segment } of segmenter.segment(str)) {
121
+ const segmentBytes = Buffer.byteLength(segment, 'utf8');
122
+ if (currentBytes + segmentBytes > previewBytes) {
123
+ break;
124
+ }
125
+ preview += segment;
126
+ currentBytes += segmentBytes;
127
+ }
128
+ const omittedBytes = totalBytes - currentBytes;
129
+ return `${preview}\n... [Tool output collapsed from previous turn: ${omittedBytes} bytes omitted to conserve memory] ...`;
130
+ };
131
+ const collapseValue = (val) => {
132
+ if (typeof val === 'string') {
133
+ return collapseString(val);
134
+ }
135
+ if (Array.isArray(val)) {
136
+ let arrayModified = false;
137
+ const newVal = val.map((item) => {
138
+ const collapsed = collapseValue(item);
139
+ if (collapsed !== item) {
140
+ arrayModified = true;
141
+ }
142
+ return collapsed;
143
+ });
144
+ return arrayModified ? newVal : val;
145
+ }
146
+ if (typeof val === 'object' && val !== null) {
147
+ const proto = Object.getPrototypeOf(val);
148
+ if (proto !== Object.prototype && proto !== null) {
149
+ return val;
150
+ }
151
+ let objModified = false;
152
+ const copy = {};
153
+ for (const [k, v] of Object.entries(val)) {
154
+ const collapsed = collapseValue(v);
155
+ if (collapsed !== v) {
156
+ objModified = true;
157
+ }
158
+ copy[k] = collapsed;
159
+ }
160
+ return objModified ? copy : val;
161
+ }
162
+ return val;
163
+ };
164
+ let modified = false;
165
+ const newHistory = history.map((content, idx) => {
166
+ // Only process older tool response turns before the protected recent window
167
+ if (idx >= cutoffToolIndex || content.role !== 'user' || !content.parts) {
168
+ return content;
169
+ }
170
+ let partsModified = false;
171
+ const newParts = content.parts.map((part) => {
172
+ if (!part.functionResponse?.response) {
173
+ return part;
174
+ }
175
+ // Exempt retrieval and file reading tools from collapsing
176
+ if (isExemptRetrievalTool(part.functionResponse.name, exemptTools)) {
177
+ return part;
178
+ }
179
+ const resp = part.functionResponse.response;
180
+ const newResp = collapseValue(resp);
181
+ if (newResp !== resp) {
182
+ partsModified = true;
183
+ return {
184
+ ...part,
185
+ functionResponse: {
186
+ // eslint-disable-next-line @typescript-eslint/no-misused-spread
187
+ ...part.functionResponse,
188
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
189
+ response: newResp,
190
+ },
191
+ };
192
+ }
193
+ return part;
194
+ });
195
+ if (partsModified) {
196
+ modified = true;
197
+ return { ...content, parts: newParts };
198
+ }
199
+ return content;
200
+ });
201
+ return modified ? newHistory : history;
202
+ }
23
203
  /**
24
204
  * The fraction of the latest chat history to keep. A value of 0.3
25
205
  * means that only the last 30% of the chat history will be kept after compression.
@@ -202,12 +382,16 @@ export class ChatCompressionService {
202
382
  // This fires for both manual and auto compression attempts
203
383
  const trigger = force ? PreCompressTrigger.Manual : PreCompressTrigger.Auto;
204
384
  await config.getHookSystem()?.firePreCompressEvent(trigger);
205
- const originalTokenCount = chat.getLastPromptTokenCount();
385
+ const lastPromptTokenCount = chat.getLastPromptTokenCount();
386
+ const originalTokenCount = lastPromptTokenCount > 0
387
+ ? lastPromptTokenCount
388
+ : estimateTokenCountSync(curatedHistory.flatMap((c) => c.parts || []));
206
389
  // Don't compress if not forced and we are under the limit.
207
390
  if (!force) {
208
391
  const threshold = (await config.getCompressionThreshold()) ??
209
392
  DEFAULT_COMPRESSION_TOKEN_THRESHOLD;
210
- if (originalTokenCount < threshold * tokenLimit(model)) {
393
+ const isOverModelThreshold = originalTokenCount >= threshold * tokenLimit(model);
394
+ if (!isOverModelThreshold) {
211
395
  return {
212
396
  newHistory: null,
213
397
  info: {
@@ -358,6 +542,9 @@ export class ChatCompressionService {
358
542
  };
359
543
  }
360
544
  else {
545
+ // Explicitly dereference old history slices so V8 GC can immediately reclaim memory
546
+ historyToCompressTruncated.length = 0;
547
+ originalHistoryToCompress.length = 0;
361
548
  return {
362
549
  newHistory: extraHistory,
363
550
  info: {
@@ -1 +1 @@
1
- {"version":3,"file":"chatCompressionService.js","sourceRoot":"","sources":["../../../src/context/chatCompressionService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatCompressionService.js","sourceRoot":"","sources":["../../../src/context/chatCompressionService.ts"],"names":[],"mappings":"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"}