@google/gemini-cli-core 0.62.0-nightly.20260925.gbedef96ef → 0.62.0
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.
- package/dist/docs/changelogs/index.md +0 -16
- package/dist/docs/changelogs/latest.md +55 -34
- package/dist/docs/changelogs/preview.md +3 -7
- package/dist/src/agents/local-executor.js +6 -44
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +6 -10
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/context/chatCompressionService.d.ts +0 -26
- package/dist/src/context/chatCompressionService.js +3 -190
- package/dist/src/context/chatCompressionService.js.map +1 -1
- package/dist/src/context/chatCompressionService.test.js +1 -350
- package/dist/src/context/chatCompressionService.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +3 -67
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/scheduler/tool-executor.test.js +0 -143
- package/dist/src/scheduler/tool-executor.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +3 -37
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/utils/constants.d.ts +0 -5
- package/dist/src/utils/constants.js +0 -5
- package/dist/src/utils/constants.js.map +1 -1
- package/dist/src/utils/gitUtils.js +0 -1
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/tool-utils.d.ts +0 -16
- package/dist/src/utils/tool-utils.js +0 -113
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +1 -150
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.62.0-nightly.20260918.g9450ade79.tgz +0 -0
- package/dist/src/agents/memory-leak-regression.test.d.ts +0 -6
- package/dist/src/agents/memory-leak-regression.test.js +0 -314
- package/dist/src/agents/memory-leak-regression.test.js.map +0 -1
|
@@ -19,187 +19,7 @@ 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
|
-
|
|
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
|
-
}
|
|
22
|
+
const DEFAULT_COMPRESSION_TOKEN_THRESHOLD = 0.5;
|
|
203
23
|
/**
|
|
204
24
|
* The fraction of the latest chat history to keep. A value of 0.3
|
|
205
25
|
* means that only the last 30% of the chat history will be kept after compression.
|
|
@@ -382,16 +202,12 @@ export class ChatCompressionService {
|
|
|
382
202
|
// This fires for both manual and auto compression attempts
|
|
383
203
|
const trigger = force ? PreCompressTrigger.Manual : PreCompressTrigger.Auto;
|
|
384
204
|
await config.getHookSystem()?.firePreCompressEvent(trigger);
|
|
385
|
-
const
|
|
386
|
-
const originalTokenCount = lastPromptTokenCount > 0
|
|
387
|
-
? lastPromptTokenCount
|
|
388
|
-
: estimateTokenCountSync(curatedHistory.flatMap((c) => c.parts || []));
|
|
205
|
+
const originalTokenCount = chat.getLastPromptTokenCount();
|
|
389
206
|
// Don't compress if not forced and we are under the limit.
|
|
390
207
|
if (!force) {
|
|
391
208
|
const threshold = (await config.getCompressionThreshold()) ??
|
|
392
209
|
DEFAULT_COMPRESSION_TOKEN_THRESHOLD;
|
|
393
|
-
|
|
394
|
-
if (!isOverModelThreshold) {
|
|
210
|
+
if (originalTokenCount < threshold * tokenLimit(model)) {
|
|
395
211
|
return {
|
|
396
212
|
newHistory: null,
|
|
397
213
|
info: {
|
|
@@ -542,9 +358,6 @@ export class ChatCompressionService {
|
|
|
542
358
|
};
|
|
543
359
|
}
|
|
544
360
|
else {
|
|
545
|
-
// Explicitly dereference old history slices so V8 GC can immediately reclaim memory
|
|
546
|
-
historyToCompressTruncated.length = 0;
|
|
547
|
-
originalHistoryToCompress.length = 0;
|
|
548
361
|
return {
|
|
549
362
|
newHistory: extraHistory,
|
|
550
363
|
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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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
-
import { ChatCompressionService, findCompressSplitPoint, modelStringToModelConfigAlias,
|
|
7
|
+
import { ChatCompressionService, findCompressSplitPoint, modelStringToModelConfigAlias, } from './chatCompressionService.js';
|
|
8
8
|
import { CompressionStatus } from '../core/turn.js';
|
|
9
9
|
import * as fileUtils from '../utils/fileUtils.js';
|
|
10
10
|
import { getInitialChatHistory } from '../utils/environmentContext.js';
|
|
@@ -158,7 +158,6 @@ describe('ChatCompressionService', () => {
|
|
|
158
158
|
getApprovedPlanPath: vi.fn().mockReturnValue('/path/to/plan.md'),
|
|
159
159
|
};
|
|
160
160
|
vi.mocked(getInitialChatHistory).mockImplementation(async (_config, extraHistory) => (extraHistory ? [...extraHistory] : []));
|
|
161
|
-
vi.mocked(tokenLimit).mockReturnValue(1_000_000);
|
|
162
161
|
});
|
|
163
162
|
afterEach(() => {
|
|
164
163
|
vi.restoreAllMocks();
|
|
@@ -615,353 +614,5 @@ describe('ChatCompressionService', () => {
|
|
|
615
614
|
expect(summarizerGrepResponse?.response?.['output']).toContain('Output too large.');
|
|
616
615
|
});
|
|
617
616
|
});
|
|
618
|
-
describe('collapseOlderFunctionResponses', () => {
|
|
619
|
-
const createRecentToolTurns = (count = RECENT_TURNS_PROTECTED) => {
|
|
620
|
-
const turns = [];
|
|
621
|
-
for (let i = 1; i <= count; i++) {
|
|
622
|
-
turns.push({
|
|
623
|
-
role: 'model',
|
|
624
|
-
parts: [{ text: `Intermediate model response ${i}` }],
|
|
625
|
-
}, {
|
|
626
|
-
role: 'user',
|
|
627
|
-
parts: [
|
|
628
|
-
{
|
|
629
|
-
functionResponse: {
|
|
630
|
-
name: 'shell',
|
|
631
|
-
response: { output: `Recent tool response ${i}` },
|
|
632
|
-
},
|
|
633
|
-
},
|
|
634
|
-
],
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
return turns;
|
|
638
|
-
};
|
|
639
|
-
it('truncates older responses on valid grapheme boundaries with multi-byte characters and emojis', () => {
|
|
640
|
-
// 🔥 is a 4-byte emoji (\uD83D\uDD25)
|
|
641
|
-
// Romanian diacritics: ă (2 bytes), î (2 bytes), ș (2 bytes), ț (2 bytes), â (2 bytes)
|
|
642
|
-
const diacritics = 'ăîșțâ';
|
|
643
|
-
const emojis = '🔥'.repeat(300);
|
|
644
|
-
const multiBytePayload = `${diacritics} ${emojis} `.repeat(10); // > 12 KB
|
|
645
|
-
const history = [
|
|
646
|
-
{
|
|
647
|
-
role: 'user',
|
|
648
|
-
parts: [
|
|
649
|
-
{
|
|
650
|
-
functionResponse: {
|
|
651
|
-
name: 'shell',
|
|
652
|
-
response: { output: multiBytePayload },
|
|
653
|
-
},
|
|
654
|
-
},
|
|
655
|
-
],
|
|
656
|
-
},
|
|
657
|
-
...createRecentToolTurns(3),
|
|
658
|
-
];
|
|
659
|
-
const collapsedHistory = collapseOlderFunctionResponses(history);
|
|
660
|
-
const oldResponse = collapsedHistory[0].parts?.[0]?.functionResponse
|
|
661
|
-
?.response;
|
|
662
|
-
expect(oldResponse).toBeDefined();
|
|
663
|
-
expect(oldResponse.output).toContain('[Tool output collapsed from previous turn:');
|
|
664
|
-
// Extract the preview portion before the collapse indicator
|
|
665
|
-
const preview = oldResponse.output.split('\n... [Tool output collapsed')[0];
|
|
666
|
-
// Assert preview does not contain replacement character (\uFFFD)
|
|
667
|
-
expect(preview.includes('\uFFFD')).toBe(false);
|
|
668
|
-
// Assert preview contains no corrupt/unpaired surrogate halves (\uD800–\uDFFF)
|
|
669
|
-
const hasLoneSurrogates = /(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(preview);
|
|
670
|
-
expect(hasLoneSurrogates).toBe(false);
|
|
671
|
-
// Assert preview is valid UTF-8 roundtrip
|
|
672
|
-
expect(Buffer.from(preview, 'utf8').toString('utf8')).toBe(preview);
|
|
673
|
-
// Assert latest tool turn is preserved untouched
|
|
674
|
-
const latestResponse = collapsedHistory[collapsedHistory.length - 1]
|
|
675
|
-
.parts?.[0]?.functionResponse?.response;
|
|
676
|
-
expect(latestResponse.output).toBe('Recent tool response 3');
|
|
677
|
-
});
|
|
678
|
-
it('supports custom segmenter and functions identically with reused default segmenter', () => {
|
|
679
|
-
const customSegmenter = new Intl.Segmenter(undefined, {
|
|
680
|
-
granularity: 'grapheme',
|
|
681
|
-
});
|
|
682
|
-
const history = [
|
|
683
|
-
{
|
|
684
|
-
role: 'user',
|
|
685
|
-
parts: [
|
|
686
|
-
{
|
|
687
|
-
functionResponse: {
|
|
688
|
-
name: 'shell',
|
|
689
|
-
response: { output: 'ABC '.repeat(2000) },
|
|
690
|
-
},
|
|
691
|
-
},
|
|
692
|
-
],
|
|
693
|
-
},
|
|
694
|
-
...createRecentToolTurns(3),
|
|
695
|
-
];
|
|
696
|
-
const resWithCustom = collapseOlderFunctionResponses(history, 2048, customSegmenter);
|
|
697
|
-
const resWithDefault = collapseOlderFunctionResponses(history, 2048);
|
|
698
|
-
expect(resWithCustom[0].parts?.[0]?.functionResponse?.response).toEqual(resWithDefault[0].parts?.[0]?.functionResponse?.response);
|
|
699
|
-
});
|
|
700
|
-
it('preserves primitive string response type when collapsing older responses', () => {
|
|
701
|
-
const longString = 'output line '.repeat(1000);
|
|
702
|
-
const history = [
|
|
703
|
-
{
|
|
704
|
-
role: 'user',
|
|
705
|
-
parts: [
|
|
706
|
-
{
|
|
707
|
-
functionResponse: {
|
|
708
|
-
name: 'rawTool',
|
|
709
|
-
response: longString,
|
|
710
|
-
},
|
|
711
|
-
},
|
|
712
|
-
],
|
|
713
|
-
},
|
|
714
|
-
...createRecentToolTurns(3),
|
|
715
|
-
];
|
|
716
|
-
const collapsed = collapseOlderFunctionResponses(history, 512);
|
|
717
|
-
const resp = collapsed[0].parts?.[0]?.functionResponse?.response;
|
|
718
|
-
expect(typeof resp).toBe('string');
|
|
719
|
-
expect(resp.includes('[Tool output collapsed from previous turn:')).toBe(true);
|
|
720
|
-
});
|
|
721
|
-
it('recursively collapses custom keys (stdout, stderr, logs, nested objects) in older responses while leaving latest turn intact', () => {
|
|
722
|
-
const largeStdout = 'stdout line\n'.repeat(500);
|
|
723
|
-
const largeStderr = 'stderr error\n'.repeat(500);
|
|
724
|
-
const largeLog = 'log trace\n'.repeat(500);
|
|
725
|
-
const largeNested = 'nested deep detail\n'.repeat(500);
|
|
726
|
-
const history = [
|
|
727
|
-
{
|
|
728
|
-
role: 'user',
|
|
729
|
-
parts: [
|
|
730
|
-
{
|
|
731
|
-
functionResponse: {
|
|
732
|
-
name: 'customTool',
|
|
733
|
-
response: {
|
|
734
|
-
stdout: largeStdout,
|
|
735
|
-
stderr: largeStderr,
|
|
736
|
-
exitCode: 1,
|
|
737
|
-
logs: [largeLog, 'small log'],
|
|
738
|
-
meta: {
|
|
739
|
-
details: {
|
|
740
|
-
deepMessage: largeNested,
|
|
741
|
-
timestamp: 123456789,
|
|
742
|
-
},
|
|
743
|
-
},
|
|
744
|
-
},
|
|
745
|
-
},
|
|
746
|
-
},
|
|
747
|
-
],
|
|
748
|
-
},
|
|
749
|
-
{ role: 'model', parts: [{ text: 'acknowledged' }] },
|
|
750
|
-
{
|
|
751
|
-
role: 'user',
|
|
752
|
-
parts: [
|
|
753
|
-
{
|
|
754
|
-
functionResponse: {
|
|
755
|
-
name: 'customTool',
|
|
756
|
-
response: { output: 'recent 1' },
|
|
757
|
-
},
|
|
758
|
-
},
|
|
759
|
-
],
|
|
760
|
-
},
|
|
761
|
-
{ role: 'model', parts: [{ text: 'acknowledged 2' }] },
|
|
762
|
-
{
|
|
763
|
-
role: 'user',
|
|
764
|
-
parts: [
|
|
765
|
-
{
|
|
766
|
-
functionResponse: {
|
|
767
|
-
name: 'customTool',
|
|
768
|
-
response: { output: 'recent 2' },
|
|
769
|
-
},
|
|
770
|
-
},
|
|
771
|
-
],
|
|
772
|
-
},
|
|
773
|
-
{ role: 'model', parts: [{ text: 'acknowledged 3' }] },
|
|
774
|
-
{
|
|
775
|
-
role: 'user',
|
|
776
|
-
parts: [
|
|
777
|
-
{
|
|
778
|
-
functionResponse: {
|
|
779
|
-
name: 'customTool',
|
|
780
|
-
response: {
|
|
781
|
-
stdout: largeStdout,
|
|
782
|
-
meta: { deepMessage: largeNested },
|
|
783
|
-
},
|
|
784
|
-
},
|
|
785
|
-
},
|
|
786
|
-
],
|
|
787
|
-
},
|
|
788
|
-
];
|
|
789
|
-
const collapsed = collapseOlderFunctionResponses(history, 512);
|
|
790
|
-
// Verify older turn (index 0) was collapsed recursively
|
|
791
|
-
const oldResp = collapsed[0].parts?.[0]?.functionResponse?.response;
|
|
792
|
-
expect(oldResp).toBeDefined();
|
|
793
|
-
expect(oldResp.stdout).toContain('[Tool output collapsed from previous turn:');
|
|
794
|
-
expect(oldResp.stderr).toContain('[Tool output collapsed from previous turn:');
|
|
795
|
-
expect(oldResp.logs[0]).toContain('[Tool output collapsed from previous turn:');
|
|
796
|
-
expect(oldResp.logs[1]).toBe('small log');
|
|
797
|
-
expect(oldResp.exitCode).toBe(1);
|
|
798
|
-
expect(oldResp.meta.details.deepMessage).toContain('[Tool output collapsed from previous turn:');
|
|
799
|
-
expect(oldResp.meta.details.timestamp).toBe(123456789);
|
|
800
|
-
// Verify latest turn (index 6) was preserved intact
|
|
801
|
-
const latestResp = collapsed[6].parts?.[0]?.functionResponse
|
|
802
|
-
?.response;
|
|
803
|
-
expect(latestResp.stdout).toBe(largeStdout);
|
|
804
|
-
expect(latestResp.meta.deepMessage).toBe(largeNested);
|
|
805
|
-
});
|
|
806
|
-
it('preserves object references when no properties in older responses exceed maxBytesPerOldResponse', () => {
|
|
807
|
-
const history = [
|
|
808
|
-
{
|
|
809
|
-
role: 'user',
|
|
810
|
-
parts: [
|
|
811
|
-
{
|
|
812
|
-
functionResponse: {
|
|
813
|
-
name: 'customTool',
|
|
814
|
-
response: {
|
|
815
|
-
stdout: 'short',
|
|
816
|
-
meta: { message: 'also short' },
|
|
817
|
-
},
|
|
818
|
-
},
|
|
819
|
-
},
|
|
820
|
-
],
|
|
821
|
-
},
|
|
822
|
-
...createRecentToolTurns(3),
|
|
823
|
-
];
|
|
824
|
-
const collapsed = collapseOlderFunctionResponses(history, 2048);
|
|
825
|
-
expect(collapsed).toBe(history);
|
|
826
|
-
expect(collapsed[0]).toBe(history[0]);
|
|
827
|
-
});
|
|
828
|
-
it('preserves all tool responses intact when total tool turns <= RECENT_TURNS_PROTECTED (3)', () => {
|
|
829
|
-
const largePayload = 'lots of tool output data '.repeat(200); // ~5 KB
|
|
830
|
-
// 3 tool turns
|
|
831
|
-
const history = [
|
|
832
|
-
{
|
|
833
|
-
role: 'user',
|
|
834
|
-
parts: [
|
|
835
|
-
{
|
|
836
|
-
functionResponse: {
|
|
837
|
-
name: 'shell',
|
|
838
|
-
response: { output: largePayload },
|
|
839
|
-
},
|
|
840
|
-
},
|
|
841
|
-
],
|
|
842
|
-
},
|
|
843
|
-
{ role: 'model', parts: [{ text: 'step 1 done' }] },
|
|
844
|
-
{
|
|
845
|
-
role: 'user',
|
|
846
|
-
parts: [
|
|
847
|
-
{
|
|
848
|
-
functionResponse: {
|
|
849
|
-
name: 'shell',
|
|
850
|
-
response: { output: largePayload },
|
|
851
|
-
},
|
|
852
|
-
},
|
|
853
|
-
],
|
|
854
|
-
},
|
|
855
|
-
{ role: 'model', parts: [{ text: 'step 2 done' }] },
|
|
856
|
-
{
|
|
857
|
-
role: 'user',
|
|
858
|
-
parts: [
|
|
859
|
-
{
|
|
860
|
-
functionResponse: {
|
|
861
|
-
name: 'shell',
|
|
862
|
-
response: { output: largePayload },
|
|
863
|
-
},
|
|
864
|
-
},
|
|
865
|
-
],
|
|
866
|
-
},
|
|
867
|
-
];
|
|
868
|
-
const result = collapseOlderFunctionResponses(history);
|
|
869
|
-
// All 3 turns should remain completely unmodified
|
|
870
|
-
expect(result).toBe(history);
|
|
871
|
-
expect(result[0].parts[0].functionResponse.response
|
|
872
|
-
.output).toBe(largePayload);
|
|
873
|
-
expect(result[2].parts[0].functionResponse.response
|
|
874
|
-
.output).toBe(largePayload);
|
|
875
|
-
expect(result[4].parts[0].functionResponse.response
|
|
876
|
-
.output).toBe(largePayload);
|
|
877
|
-
});
|
|
878
|
-
it('exempts retrieval tools (read_file, read_many_files, grep, glob) from collapsing even in older turns', () => {
|
|
879
|
-
const largeFileContent = 'const x = 1;\n'.repeat(500); // ~6.5 KB
|
|
880
|
-
const history = [
|
|
881
|
-
{
|
|
882
|
-
role: 'user',
|
|
883
|
-
parts: [
|
|
884
|
-
{
|
|
885
|
-
functionResponse: {
|
|
886
|
-
name: 'read_file',
|
|
887
|
-
response: { content: largeFileContent },
|
|
888
|
-
},
|
|
889
|
-
},
|
|
890
|
-
],
|
|
891
|
-
},
|
|
892
|
-
{ role: 'model', parts: [{ text: 'read file A' }] },
|
|
893
|
-
{
|
|
894
|
-
role: 'user',
|
|
895
|
-
parts: [
|
|
896
|
-
{
|
|
897
|
-
functionResponse: {
|
|
898
|
-
name: 'grep',
|
|
899
|
-
response: { output: largeFileContent },
|
|
900
|
-
},
|
|
901
|
-
},
|
|
902
|
-
],
|
|
903
|
-
},
|
|
904
|
-
...createRecentToolTurns(3),
|
|
905
|
-
];
|
|
906
|
-
const collapsed = collapseOlderFunctionResponses(history);
|
|
907
|
-
// read_file and grep in older turns are exempt from collapse
|
|
908
|
-
const readFileResp = collapsed[0].parts[0].functionResponse
|
|
909
|
-
?.response;
|
|
910
|
-
expect(readFileResp.content).toBe(largeFileContent);
|
|
911
|
-
const grepResp = collapsed[2].parts[0].functionResponse?.response;
|
|
912
|
-
expect(grepResp.output).toBe(largeFileContent);
|
|
913
|
-
});
|
|
914
|
-
it('preserves multi-turn context retention across file reading workflows', () => {
|
|
915
|
-
// Turn 1: read_file('fileA.ts') 15 KB
|
|
916
|
-
const fileA = 'export const A = "value";\n'.repeat(600); // ~15 KB
|
|
917
|
-
// Turn 2: read_file('fileB.ts') 15 KB
|
|
918
|
-
const fileB = 'export const B = "value";\n'.repeat(600); // ~15 KB
|
|
919
|
-
const history = [
|
|
920
|
-
{
|
|
921
|
-
role: 'user',
|
|
922
|
-
parts: [
|
|
923
|
-
{
|
|
924
|
-
functionResponse: {
|
|
925
|
-
name: 'read_file',
|
|
926
|
-
response: { content: fileA },
|
|
927
|
-
},
|
|
928
|
-
},
|
|
929
|
-
],
|
|
930
|
-
},
|
|
931
|
-
{ role: 'model', parts: [{ text: 'Inspected fileA.ts' }] },
|
|
932
|
-
{
|
|
933
|
-
role: 'user',
|
|
934
|
-
parts: [
|
|
935
|
-
{
|
|
936
|
-
functionResponse: {
|
|
937
|
-
name: 'read_file',
|
|
938
|
-
response: { content: fileB },
|
|
939
|
-
},
|
|
940
|
-
},
|
|
941
|
-
],
|
|
942
|
-
},
|
|
943
|
-
{ role: 'model', parts: [{ text: 'Inspected fileB.ts' }] },
|
|
944
|
-
{
|
|
945
|
-
role: 'user',
|
|
946
|
-
parts: [
|
|
947
|
-
{
|
|
948
|
-
functionResponse: {
|
|
949
|
-
name: 'shell',
|
|
950
|
-
response: { output: 'build succeeded' },
|
|
951
|
-
},
|
|
952
|
-
},
|
|
953
|
-
],
|
|
954
|
-
},
|
|
955
|
-
];
|
|
956
|
-
// Even when collapsed is called, both read_file turns are retained at full fidelity
|
|
957
|
-
const collapsed = collapseOlderFunctionResponses(history);
|
|
958
|
-
const turn1Content = collapsed[0].parts[0].functionResponse.response.content;
|
|
959
|
-
const turn2Content = collapsed[2].parts[0].functionResponse.response.content;
|
|
960
|
-
expect(turn1Content).toBe(fileA);
|
|
961
|
-
expect(turn2Content).toBe(fileB);
|
|
962
|
-
expect(turn1Content).not.toContain('[Tool output collapsed');
|
|
963
|
-
expect(turn2Content).not.toContain('[Tool output collapsed');
|
|
964
|
-
});
|
|
965
|
-
});
|
|
966
617
|
});
|
|
967
618
|
//# sourceMappingURL=chatCompressionService.test.js.map
|