@pentoshi/clai 4.11.4 → 4.11.7
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/agent/compaction-executor.js +12 -0
- package/dist/agent/compaction-executor.js.map +1 -1
- package/dist/agent/context-manager.js +3 -7
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/message-slim.d.ts +2 -0
- package/dist/agent/message-slim.js +63 -3
- package/dist/agent/message-slim.js.map +1 -1
- package/dist/agent/request-accounting.js +1 -1
- package/dist/agent/request-accounting.js.map +1 -1
- package/dist/agent/runner.js +60 -29
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tool-call-parser.js +2 -1
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/agent/tool-history-projection.d.ts +7 -0
- package/dist/agent/tool-history-projection.js +455 -0
- package/dist/agent/tool-history-projection.js.map +1 -0
- package/dist/agent/tool-history.d.ts +7 -10
- package/dist/agent/tool-history.js +155 -151
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.js +14 -7
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.js +3 -2
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +2 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +2 -2
- package/dist/tools/registry.js +6 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tui-v2/bootstrap/resize-repaint.js +7 -1
- package/dist/tui-v2/bootstrap/resize-repaint.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +6 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/ui-core/bootstrap/theme-mode-cache.d.ts +3 -0
- package/dist/ui-core/bootstrap/theme-mode-cache.js +45 -0
- package/dist/ui-core/bootstrap/theme-mode-cache.js.map +1 -0
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createReasoningArtifact, legacyReasoningBlockFromArtifacts, rebindReasoningArtifactsToToolCalls, reasoningArtifactsForMessage, reasoningArtifactsForPersistence, } from "../llm/reasoning-artifacts.js";
|
|
3
|
+
import { containsElidedStubText, findElidedStubArg, measureToolCallsChars, stripSupersededElidedArgs, } from "./message-slim.js";
|
|
4
|
+
export const MAX_RETAINED_COMPLETED_TOOL_ARGUMENT_CHARS = 256 * 1024;
|
|
5
|
+
export const PROTOCOL_PLACEHOLDER_MARKER = "[context-note]";
|
|
6
|
+
const CANONICAL_TOOL_FENCE_PATTERN = /```tool\s*\n?([\s\S]*?)```/gi;
|
|
7
|
+
const STRICT_CANONICAL_TOOL_FENCE_PATTERN = /```tool[ \t]*\r?\n([\s\S]*?)```/gi;
|
|
8
|
+
const MAX_RECEIPT_VALUE_CHARS = 96;
|
|
9
|
+
function rawArgumentsContainElidedStub(rawArguments) {
|
|
10
|
+
if (containsElidedStubText(rawArguments))
|
|
11
|
+
return true;
|
|
12
|
+
try {
|
|
13
|
+
return Boolean(findElidedStubArg(JSON.parse(rawArguments)));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function boundedReceiptValue(value) {
|
|
20
|
+
if (value.length <= MAX_RECEIPT_VALUE_CHARS) {
|
|
21
|
+
const serialized = JSON.stringify(value);
|
|
22
|
+
if (serialized.length <= MAX_RECEIPT_VALUE_CHARS)
|
|
23
|
+
return serialized;
|
|
24
|
+
}
|
|
25
|
+
const hash = createHash("sha256").update(value).digest("hex").slice(0, 12);
|
|
26
|
+
return JSON.stringify(`«${value.length} chars sha256=${hash}»`);
|
|
27
|
+
}
|
|
28
|
+
function legacyToolName(name) {
|
|
29
|
+
return /^[a-z0-9_.:-]{1,96}$/i.test(name)
|
|
30
|
+
? name
|
|
31
|
+
: `tool=${boundedReceiptValue(name)}`;
|
|
32
|
+
}
|
|
33
|
+
function legacyToolTarget(call) {
|
|
34
|
+
const path = call.args && typeof call.args.path === "string" ? call.args.path : "";
|
|
35
|
+
if (path)
|
|
36
|
+
return ` path=${boundedReceiptValue(path)}`;
|
|
37
|
+
const sourceFiles = Array.isArray(call.args?.files)
|
|
38
|
+
? call.args.files.slice(0, 8)
|
|
39
|
+
: [];
|
|
40
|
+
const files = sourceFiles.flatMap((file) => file && typeof file === "object" && typeof file.path === "string"
|
|
41
|
+
? [boundedReceiptValue(file.path)]
|
|
42
|
+
: []);
|
|
43
|
+
return files.length > 0 ? ` paths=[${files.join(",")}]` : "";
|
|
44
|
+
}
|
|
45
|
+
function resultStatus(result) {
|
|
46
|
+
if (!result || result.content.includes(PROTOCOL_PLACEHOLDER_MARKER)) {
|
|
47
|
+
return "recorded";
|
|
48
|
+
}
|
|
49
|
+
return result.ok === false ? "failed" : "completed";
|
|
50
|
+
}
|
|
51
|
+
function legacyToolReceipt(call, result) {
|
|
52
|
+
const rejectedPlaceholder = result?.content.includes("elided history placeholder") === true;
|
|
53
|
+
const status = rejectedPlaceholder ? "rejected before execution" : resultStatus(result);
|
|
54
|
+
const detail = rejectedPlaceholder
|
|
55
|
+
? "No tool operation ran for this rejected call. Generate new literal content only if work remains."
|
|
56
|
+
: "The prior result body was removed with the legacy payload.";
|
|
57
|
+
return (`${PROTOCOL_PLACEHOLDER_MARKER} Earlier ${legacyToolName(call.name)}${legacyToolTarget(call)} ${status}. ` +
|
|
58
|
+
`Its payload was removed from legacy history and must not be replayed. ${detail}`);
|
|
59
|
+
}
|
|
60
|
+
function settledToolReceipt(calls, resultById, argumentChars) {
|
|
61
|
+
const listed = calls
|
|
62
|
+
.slice(0, 8)
|
|
63
|
+
.map((call) => `${legacyToolName(call.name)}${legacyToolTarget(call)}=${resultStatus(resultById.get(call.id))}`)
|
|
64
|
+
.join(", ");
|
|
65
|
+
const overflow = calls.length > 8 ? `, +${calls.length - 8} more` : "";
|
|
66
|
+
let serialized = "";
|
|
67
|
+
try {
|
|
68
|
+
serialized = JSON.stringify(calls.map((call) => ({ name: call.name, args: call.args })));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
serialized = calls.map((call) => call.name).join("\n");
|
|
72
|
+
}
|
|
73
|
+
const hash = createHash("sha256").update(serialized).digest("hex").slice(0, 16);
|
|
74
|
+
return (`${PROTOCOL_PLACEHOLDER_MARKER} Earlier settled tool interaction was compacted after execution to bound context: ` +
|
|
75
|
+
`${listed}${overflow}. argument_chars=${argumentChars} sha256=${hash}. ` +
|
|
76
|
+
"Re-run only if current work still requires it.");
|
|
77
|
+
}
|
|
78
|
+
function retainReasoningArtifactsForCalls(message, retainedCalls) {
|
|
79
|
+
const sourceCalls = message.toolCalls ?? [];
|
|
80
|
+
const artifacts = reasoningArtifactsForMessage(message);
|
|
81
|
+
if (artifacts.length === 0)
|
|
82
|
+
return undefined;
|
|
83
|
+
const retained = artifacts.flatMap((artifact) => {
|
|
84
|
+
const callId = artifact.position.toolCallId;
|
|
85
|
+
const callIndex = artifact.position.toolCallIndex;
|
|
86
|
+
if (!callId && callIndex === undefined)
|
|
87
|
+
return [artifact];
|
|
88
|
+
const sourceCall = (callId ? sourceCalls.find((call) => call.id === callId) : undefined) ??
|
|
89
|
+
(callIndex !== undefined ? sourceCalls[callIndex] : undefined);
|
|
90
|
+
if (!sourceCall)
|
|
91
|
+
return [];
|
|
92
|
+
const retainedIndex = retainedCalls.findIndex((call) => call === sourceCall || (sourceCall.id && call.id === sourceCall.id));
|
|
93
|
+
if (retainedIndex < 0)
|
|
94
|
+
return [];
|
|
95
|
+
const retainedCall = retainedCalls[retainedIndex];
|
|
96
|
+
return [
|
|
97
|
+
createReasoningArtifact({
|
|
98
|
+
kind: artifact.kind,
|
|
99
|
+
raw: artifact.raw,
|
|
100
|
+
...(artifact.displaySummary !== undefined
|
|
101
|
+
? { displaySummary: artifact.displaySummary }
|
|
102
|
+
: {}),
|
|
103
|
+
provenance: artifact.provenance,
|
|
104
|
+
replay: artifact.replay,
|
|
105
|
+
position: {
|
|
106
|
+
...artifact.position,
|
|
107
|
+
toolCallId: retainedCall.id,
|
|
108
|
+
toolCallIndex: retainedIndex,
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
];
|
|
112
|
+
});
|
|
113
|
+
return retained.length > 0 ? retained : undefined;
|
|
114
|
+
}
|
|
115
|
+
function assistantWithRetainedCalls(message, retainedCalls, notes) {
|
|
116
|
+
const retainedArtifacts = retainReasoningArtifactsForCalls(message, retainedCalls);
|
|
117
|
+
const reboundArtifacts = rebindReasoningArtifactsToToolCalls({
|
|
118
|
+
artifacts: retainedArtifacts,
|
|
119
|
+
toolCalls: retainedCalls,
|
|
120
|
+
});
|
|
121
|
+
const persistedArtifacts = reasoningArtifactsForPersistence({
|
|
122
|
+
artifacts: reboundArtifacts,
|
|
123
|
+
hasToolCalls: retainedCalls.length > 0,
|
|
124
|
+
});
|
|
125
|
+
const durableReasoningBlock = persistedArtifacts
|
|
126
|
+
? legacyReasoningBlockFromArtifacts(persistedArtifacts)
|
|
127
|
+
: undefined;
|
|
128
|
+
const { toolCalls: _toolCalls, reasoningBlock: _reasoningBlock, reasoningArtifacts: _reasoningArtifacts, ...base } = message;
|
|
129
|
+
const content = [message.content.trim(), ...notes]
|
|
130
|
+
.filter(Boolean)
|
|
131
|
+
.join("\n\n");
|
|
132
|
+
return {
|
|
133
|
+
...base,
|
|
134
|
+
content,
|
|
135
|
+
...(retainedCalls.length > 0 ? { toolCalls: retainedCalls } : {}),
|
|
136
|
+
...(durableReasoningBlock ? { reasoningBlock: durableReasoningBlock } : {}),
|
|
137
|
+
...(persistedArtifacts ? { reasoningArtifacts: persistedArtifacts } : {}),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function normalizeTextToolHistory(message) {
|
|
141
|
+
if (message.role !== "assistant" || !message.content) {
|
|
142
|
+
return { message, collapseResults: false, changed: false };
|
|
143
|
+
}
|
|
144
|
+
let changed = false;
|
|
145
|
+
let hasStandalonePlaceholder = false;
|
|
146
|
+
const rewritten = message.content.replace(CANONICAL_TOOL_FENCE_PATTERN, (block, raw) => {
|
|
147
|
+
let parsed;
|
|
148
|
+
try {
|
|
149
|
+
parsed = JSON.parse(raw.trim());
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return block;
|
|
153
|
+
}
|
|
154
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
155
|
+
return block;
|
|
156
|
+
}
|
|
157
|
+
const source = parsed;
|
|
158
|
+
if (!source.args || typeof source.args !== "object" || Array.isArray(source.args)) {
|
|
159
|
+
return block;
|
|
160
|
+
}
|
|
161
|
+
const args = source.args;
|
|
162
|
+
const normalized = stripSupersededElidedArgs(args);
|
|
163
|
+
if (findElidedStubArg(normalized)) {
|
|
164
|
+
hasStandalonePlaceholder = true;
|
|
165
|
+
return "";
|
|
166
|
+
}
|
|
167
|
+
if (normalized === args)
|
|
168
|
+
return block;
|
|
169
|
+
changed = true;
|
|
170
|
+
return `\`\`\`tool\n${JSON.stringify({ ...source, args: normalized })}\n\`\`\``;
|
|
171
|
+
});
|
|
172
|
+
if (hasStandalonePlaceholder) {
|
|
173
|
+
const prose = message.content.replace(CANONICAL_TOOL_FENCE_PATTERN, "").trim();
|
|
174
|
+
const safeProse = containsElidedStubText(prose) ? "" : prose;
|
|
175
|
+
const content = [
|
|
176
|
+
safeProse,
|
|
177
|
+
`${PROTOCOL_PLACEHOLDER_MARKER} Earlier text tool calls containing a legacy elided payload were removed and must not be replayed.`,
|
|
178
|
+
]
|
|
179
|
+
.filter(Boolean)
|
|
180
|
+
.join("\n\n");
|
|
181
|
+
return {
|
|
182
|
+
message: { ...message, content },
|
|
183
|
+
collapseResults: true,
|
|
184
|
+
changed: true,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (containsElidedStubText(rewritten)) {
|
|
188
|
+
return {
|
|
189
|
+
message: {
|
|
190
|
+
...message,
|
|
191
|
+
content: `${PROTOCOL_PLACEHOLDER_MARKER} Earlier assistant content containing a legacy elided payload was removed and must not be replayed.`,
|
|
192
|
+
},
|
|
193
|
+
collapseResults: true,
|
|
194
|
+
changed: true,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
message: changed ? { ...message, content: rewritten } : message,
|
|
199
|
+
collapseResults: false,
|
|
200
|
+
changed,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export function normalizeToolHistoryEntries(messages) {
|
|
204
|
+
const out = [];
|
|
205
|
+
let repairs = 0;
|
|
206
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
207
|
+
const message = messages[index];
|
|
208
|
+
if (message.role === "assistant" && message.toolCalls?.length) {
|
|
209
|
+
let changed = false;
|
|
210
|
+
const toolCalls = message.toolCalls.map((call) => {
|
|
211
|
+
const args = stripSupersededElidedArgs(call.args ?? {});
|
|
212
|
+
const rawContainsElidedStub = typeof call.rawArguments === "string" &&
|
|
213
|
+
rawArgumentsContainElidedStub(call.rawArguments);
|
|
214
|
+
if (args === call.args && !rawContainsElidedStub)
|
|
215
|
+
return call;
|
|
216
|
+
changed = true;
|
|
217
|
+
repairs += 1;
|
|
218
|
+
if (args._parseError === true)
|
|
219
|
+
return { ...call, args };
|
|
220
|
+
const { rawArguments: _rawArguments, ...durable } = call;
|
|
221
|
+
if (!call.rawArguments)
|
|
222
|
+
return { ...durable, args };
|
|
223
|
+
try {
|
|
224
|
+
return { ...durable, args, rawArguments: JSON.stringify(args) };
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return { ...durable, args };
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
let content = message.content;
|
|
231
|
+
if (containsElidedStubText(content)) {
|
|
232
|
+
content = `${PROTOCOL_PLACEHOLDER_MARKER} Earlier assistant prose containing a legacy elided payload was removed and must not be replayed.`;
|
|
233
|
+
changed = true;
|
|
234
|
+
repairs += 1;
|
|
235
|
+
}
|
|
236
|
+
out.push(changed ? { ...message, content, toolCalls } : message);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const normalized = normalizeTextToolHistory(message);
|
|
240
|
+
out.push(normalized.message);
|
|
241
|
+
if (normalized.changed)
|
|
242
|
+
repairs += 1;
|
|
243
|
+
if (normalized.collapseResults) {
|
|
244
|
+
while (messages[index + 1]?.role === "tool") {
|
|
245
|
+
index += 1;
|
|
246
|
+
repairs += 1;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (repairs > 0) {
|
|
251
|
+
messages.length = 0;
|
|
252
|
+
messages.push(...out);
|
|
253
|
+
}
|
|
254
|
+
return repairs;
|
|
255
|
+
}
|
|
256
|
+
export function collapseElidedToolHistory(messages) {
|
|
257
|
+
const out = [];
|
|
258
|
+
let repairs = 0;
|
|
259
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
260
|
+
const message = messages[index];
|
|
261
|
+
if (message.role !== "assistant" || !message.toolCalls?.length) {
|
|
262
|
+
out.push(message);
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
const elided = message.toolCalls.filter((call) => Boolean(findElidedStubArg(call.args)) ||
|
|
266
|
+
(call.args._parseError === true &&
|
|
267
|
+
typeof call.rawArguments === "string" &&
|
|
268
|
+
rawArgumentsContainElidedStub(call.rawArguments)));
|
|
269
|
+
if (elided.length === 0) {
|
|
270
|
+
out.push(message);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
let resultEnd = index + 1;
|
|
274
|
+
while (messages[resultEnd]?.role === "tool")
|
|
275
|
+
resultEnd += 1;
|
|
276
|
+
const resultById = new Map();
|
|
277
|
+
for (let resultIndex = index + 1; resultIndex < resultEnd; resultIndex += 1) {
|
|
278
|
+
const result = messages[resultIndex];
|
|
279
|
+
if (result.toolCallId)
|
|
280
|
+
resultById.set(result.toolCallId, result);
|
|
281
|
+
}
|
|
282
|
+
const removedIds = new Set(elided.map((call) => call.id));
|
|
283
|
+
const retainedCalls = message.toolCalls.filter((call) => !removedIds.has(call.id));
|
|
284
|
+
out.push(assistantWithRetainedCalls(message, retainedCalls, elided.map((call) => legacyToolReceipt(call, resultById.get(call.id)))));
|
|
285
|
+
let removedResults = 0;
|
|
286
|
+
for (let resultIndex = index + 1; resultIndex < resultEnd; resultIndex += 1) {
|
|
287
|
+
const result = messages[resultIndex];
|
|
288
|
+
if (!result.toolCallId || !removedIds.has(result.toolCallId)) {
|
|
289
|
+
out.push(result);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
removedResults += 1;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
repairs += elided.length + removedResults;
|
|
296
|
+
index = resultEnd - 1;
|
|
297
|
+
}
|
|
298
|
+
if (repairs > 0) {
|
|
299
|
+
messages.length = 0;
|
|
300
|
+
messages.push(...out);
|
|
301
|
+
}
|
|
302
|
+
return repairs;
|
|
303
|
+
}
|
|
304
|
+
function canonicalTextToolFences(content) {
|
|
305
|
+
const fences = [];
|
|
306
|
+
for (const match of content.matchAll(STRICT_CANONICAL_TOOL_FENCE_PATTERN)) {
|
|
307
|
+
const raw = match[1];
|
|
308
|
+
if (raw === undefined || match.index === undefined)
|
|
309
|
+
continue;
|
|
310
|
+
let parsed;
|
|
311
|
+
try {
|
|
312
|
+
parsed = JSON.parse(raw.trim());
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
318
|
+
continue;
|
|
319
|
+
const source = parsed;
|
|
320
|
+
if (typeof source.name !== "string" || !source.name.trim())
|
|
321
|
+
continue;
|
|
322
|
+
if (!source.args || typeof source.args !== "object" || Array.isArray(source.args)) {
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
fences.push({
|
|
326
|
+
start: match.index,
|
|
327
|
+
end: match.index + match[0].length,
|
|
328
|
+
call: {
|
|
329
|
+
id: `text-${fences.length}`,
|
|
330
|
+
name: source.name,
|
|
331
|
+
args: source.args,
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
return fences;
|
|
336
|
+
}
|
|
337
|
+
export function parseCanonicalTextToolCalls(content) {
|
|
338
|
+
return canonicalTextToolFences(content).map((fence) => fence.call);
|
|
339
|
+
}
|
|
340
|
+
function removeCanonicalTextToolFences(content, fences) {
|
|
341
|
+
let cursor = 0;
|
|
342
|
+
let retained = "";
|
|
343
|
+
for (const fence of fences) {
|
|
344
|
+
retained += content.slice(cursor, fence.start);
|
|
345
|
+
cursor = fence.end;
|
|
346
|
+
}
|
|
347
|
+
return `${retained}${content.slice(cursor)}`.trim();
|
|
348
|
+
}
|
|
349
|
+
function completedToolGroups(messages) {
|
|
350
|
+
const groups = [];
|
|
351
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
352
|
+
const message = messages[index];
|
|
353
|
+
if (message.role !== "assistant")
|
|
354
|
+
continue;
|
|
355
|
+
if (message.toolCalls?.length) {
|
|
356
|
+
let end = index + 1;
|
|
357
|
+
const resultById = new Map();
|
|
358
|
+
while (messages[end]?.role === "tool") {
|
|
359
|
+
const result = messages[end];
|
|
360
|
+
if (result.toolCallId)
|
|
361
|
+
resultById.set(result.toolCallId, result);
|
|
362
|
+
end += 1;
|
|
363
|
+
}
|
|
364
|
+
if (message.toolCalls.every((call) => {
|
|
365
|
+
const result = resultById.get(call.id);
|
|
366
|
+
return (Boolean(call.id) &&
|
|
367
|
+
Boolean(result) &&
|
|
368
|
+
!result.content.includes(PROTOCOL_PLACEHOLDER_MARKER));
|
|
369
|
+
})) {
|
|
370
|
+
groups.push({
|
|
371
|
+
kind: "native",
|
|
372
|
+
start: index,
|
|
373
|
+
end,
|
|
374
|
+
message,
|
|
375
|
+
calls: message.toolCalls,
|
|
376
|
+
resultById,
|
|
377
|
+
argumentChars: measureToolCallsChars(message.toolCalls),
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
index = end - 1;
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
const fences = canonicalTextToolFences(message.content);
|
|
384
|
+
if (fences.length === 0)
|
|
385
|
+
continue;
|
|
386
|
+
let end = index + 1;
|
|
387
|
+
const resultById = new Map();
|
|
388
|
+
while (messages[end]?.role === "tool" && !messages[end].toolCallId) {
|
|
389
|
+
const call = fences[end - index - 1]?.call;
|
|
390
|
+
if (call)
|
|
391
|
+
resultById.set(call.id, messages[end]);
|
|
392
|
+
end += 1;
|
|
393
|
+
}
|
|
394
|
+
if (end - index - 1 !== fences.length ||
|
|
395
|
+
[...resultById.values()].some((result) => result.content.includes(PROTOCOL_PLACEHOLDER_MARKER))) {
|
|
396
|
+
index = end - 1;
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const calls = fences.map((fence) => fence.call);
|
|
400
|
+
groups.push({
|
|
401
|
+
kind: "text",
|
|
402
|
+
start: index,
|
|
403
|
+
end,
|
|
404
|
+
message,
|
|
405
|
+
calls,
|
|
406
|
+
fences,
|
|
407
|
+
resultById,
|
|
408
|
+
argumentChars: measureToolCallsChars(calls),
|
|
409
|
+
});
|
|
410
|
+
index = end - 1;
|
|
411
|
+
}
|
|
412
|
+
return groups;
|
|
413
|
+
}
|
|
414
|
+
export function collapseOversizedToolHistory(messages) {
|
|
415
|
+
const groups = completedToolGroups(messages);
|
|
416
|
+
const collapseStarts = new Set();
|
|
417
|
+
let retainedChars = 0;
|
|
418
|
+
for (let index = groups.length - 1; index >= 0; index -= 1) {
|
|
419
|
+
const group = groups[index];
|
|
420
|
+
if (group.argumentChars > MAX_RETAINED_COMPLETED_TOOL_ARGUMENT_CHARS ||
|
|
421
|
+
retainedChars + group.argumentChars > MAX_RETAINED_COMPLETED_TOOL_ARGUMENT_CHARS) {
|
|
422
|
+
collapseStarts.add(group.start);
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
retainedChars += group.argumentChars;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (collapseStarts.size === 0)
|
|
429
|
+
return 0;
|
|
430
|
+
const byStart = new Map(groups.map((group) => [group.start, group]));
|
|
431
|
+
const out = [];
|
|
432
|
+
let repairs = 0;
|
|
433
|
+
for (let index = 0; index < messages.length; index += 1) {
|
|
434
|
+
const group = byStart.get(index);
|
|
435
|
+
if (!group || !collapseStarts.has(index)) {
|
|
436
|
+
out.push(messages[index]);
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
const message = group.kind === "text" && group.fences
|
|
440
|
+
? {
|
|
441
|
+
...group.message,
|
|
442
|
+
content: removeCanonicalTextToolFences(group.message.content, group.fences),
|
|
443
|
+
}
|
|
444
|
+
: group.message;
|
|
445
|
+
out.push(assistantWithRetainedCalls(message, [], [
|
|
446
|
+
settledToolReceipt(group.calls, group.resultById, group.argumentChars),
|
|
447
|
+
]));
|
|
448
|
+
repairs += group.end - group.start;
|
|
449
|
+
index = group.end - 1;
|
|
450
|
+
}
|
|
451
|
+
messages.length = 0;
|
|
452
|
+
messages.push(...out);
|
|
453
|
+
return repairs;
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=tool-history-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-history-projection.js","sourceRoot":"","sources":["../../src/agent/tool-history-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,0CAA0C,GAAG,GAAG,GAAG,IAAI,CAAC;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC;AAE5D,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;AACpE,MAAM,mCAAmC,GAAG,mCAAmC,CAAC;AAChF,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,SAAS,6BAA6B,CAAC,YAAoB;IACzD,IAAI,sBAAsB,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,KAAK,CAAC,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,UAAU,CAAC,MAAM,IAAI,uBAAuB;YAAE,OAAO,UAAU,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,iBAAiB,IAAI,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,IAAI;QAAE,OAAO,SAAS,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;QACjD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAQ,IAA2B,CAAC,IAAI,KAAK,QAAQ;QACvF,CAAC,CAAC,CAAC,mBAAmB,CAAE,IAAyB,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,EAAE,CACP,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAoB,EACpB,MAA+B;IAE/B,MAAM,mBAAmB,GAAG,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAC,KAAK,IAAI,CAAC;IAC5F,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,mBAAmB;QAChC,CAAC,CAAC,kGAAkG;QACpG,CAAC,CAAC,4DAA4D,CAAC;IACjE,OAAO,CACL,GAAG,2BAA2B,YAAY,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI;QAC1G,yEAAyE,MAAM,EAAE,CAClF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAgC,EAChC,UAA4C,EAC5C,aAAqB;IAErB,MAAM,MAAM,GAAG,KAAK;SACjB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SAC/G,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,SAAS,CACzB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,CACL,GAAG,2BAA2B,oFAAoF;QAClH,GAAG,MAAM,GAAG,QAAQ,oBAAoB,aAAa,WAAW,IAAI,IAAI;QACxE,gDAAgD,CACjD,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CACvC,OAAoB,EACpB,aAAwC;IAExC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,UAAU,GACd,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAC9E,CAAC;QACF,IAAI,aAAa,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAE,CAAC;QACnD,OAAO;YACL,uBAAuB,CAAC;gBACtB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE;oBAC7C,CAAC,CAAC,EAAE,CAAC;gBACP,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE;oBACR,GAAG,QAAQ,CAAC,QAAQ;oBACpB,UAAU,EAAE,YAAY,CAAC,EAAE;oBAC3B,aAAa,EAAE,aAAa;iBAC7B;aACF,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,SAAS,0BAA0B,CACjC,OAAoB,EACpB,aAA+B,EAC/B,KAAwB;IAExB,MAAM,iBAAiB,GAAG,gCAAgC,CACxD,OAAO,EACP,aAAa,CACd,CAAC;IACF,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;QAC3D,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;QAC1D,SAAS,EAAE,gBAAgB;QAC3B,YAAY,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,qBAAqB,GAAG,kBAAkB;QAC9C,CAAC,CAAC,iCAAiC,CAAC,kBAAkB,CAAC;QACvD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EACJ,SAAS,EAAE,UAAU,EACrB,cAAc,EAAE,eAAe,EAC/B,kBAAkB,EAAE,mBAAmB,EACvC,GAAG,IAAI,EACR,GAAG,OAAO,CAAC;IACZ,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC;SAC/C,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO;QACL,GAAG,IAAI;QACP,OAAO;QACP,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAoB;IAKpD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,wBAAwB,GAAG,KAAK,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CACvC,4BAA4B,EAC5B,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;QAC7B,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAA+B,CAAC;QACpD,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,wBAAwB,GAAG,IAAI,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,UAAU,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,eAAe,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC;IAClF,CAAC,CACF,CAAC;IACF,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,MAAM,OAAO,GAAG;YACd,SAAS;YACT,GAAG,2BAA2B,oGAAoG;SACnI;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,CAAC,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;YAChC,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,OAAO,EAAE,GAAG,2BAA2B,qGAAqG;aAC7I;YACD,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO;QAC/D,eAAe,EAAE,KAAK;QACtB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAuB;IACjE,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC9D,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/C,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACxD,MAAM,qBAAqB,GACzB,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;oBACrC,6BAA6B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB;oBAAE,OAAO,IAAI,CAAC;gBAC9D,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;oBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;gBACxD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,YAAY;oBAAE,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC;oBACH,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClE,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC9B,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,OAAO,GAAG,GAAG,2BAA2B,mGAAmG,CAAC;gBAC5I,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,UAAU,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5C,KAAK,IAAI,CAAC,CAAC;gBACX,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAuB;IAC/D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CACrC,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI;gBAC7B,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;gBACrC,6BAA6B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CACtD,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,OAAO,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,KAAK,MAAM;YAAE,SAAS,IAAI,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,KAAK,IAAI,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAE,CAAC;YACtC,IAAI,MAAM,CAAC,UAAU;gBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACnC,CAAC;QACF,GAAG,CAAC,IAAI,CACN,0BAA0B,CACxB,OAAO,EACP,aAAa,EACb,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACvE,CACF,CAAC;QACF,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,IAAI,WAAW,GAAG,KAAK,GAAG,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,WAAW,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,cAAc,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;QAC1C,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,SAAS;QAC7D,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAS;QAC7E,MAAM,MAAM,GAAG,MAAiC,CAAC;QACjD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QACrE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClF,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAClC,IAAI,EAAE;gBACJ,EAAE,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAA+B;aAC7C;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CACpC,OAAe,EACf,MAAyC;IAEzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC;AAaD,SAAS,mBAAmB,CAAC,QAAgC;IAC3D,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QAC3C,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;YAClD,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAE,CAAC;gBAC9B,IAAI,MAAM,CAAC,UAAU;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBACjE,GAAG,IAAI,CAAC,CAAC;YACX,CAAC;YACD,IACE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,OAAO,CACL,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChB,OAAO,CAAC,MAAM,CAAC;oBACf,CAAC,MAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CACvD,CAAC;YACJ,CAAC,CAAC,EACF,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,KAAK;oBACZ,GAAG;oBACH,OAAO;oBACP,KAAK,EAAE,OAAO,CAAC,SAAS;oBACxB,UAAU;oBACV,aAAa,EAAE,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAClC,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,CAAC,UAAU,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;YAC3C,IAAI,IAAI;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAE,CAAC,CAAC;YAClD,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,IACE,GAAG,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM;YACjC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CACvC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CACrD,EACD,CAAC;YACD,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,GAAG;YACH,OAAO;YACP,KAAK;YACL,MAAM;YACN,UAAU;YACV,aAAa,EAAE,qBAAqB,CAAC,KAAK,CAAC;SAC5C,CAAC,CAAC;QACH,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,QAAuB;IAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QAC7B,IACE,KAAK,CAAC,aAAa,GAAG,0CAA0C;YAChE,aAAa,GAAG,KAAK,CAAC,aAAa,GAAG,0CAA0C,EAChF,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GACX,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM;YACnC,CAAC,CAAC;gBACE,GAAG,KAAK,CAAC,OAAO;gBAChB,OAAO,EAAE,6BAA6B,CACpC,KAAK,CAAC,OAAO,CAAC,OAAO,EACrB,KAAK,CAAC,MAAM,CACb;aACF;YACH,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACpB,GAAG,CAAC,IAAI,CACN,0BAA0B,CAAC,OAAO,EAAE,EAAE,EAAE;YACtC,kBAAkB,CAChB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,aAAa,CACpB;SACF,CAAC,CACH,CAAC;QACF,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QACnC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ChatMessage, NativeToolCall, ReasoningArtifact, ReasoningBlock } from "../types.js";
|
|
2
|
+
import { MAX_RETAINED_COMPLETED_TOOL_ARGUMENT_CHARS, PROTOCOL_PLACEHOLDER_MARKER } from "./tool-history-projection.js";
|
|
3
|
+
export { MAX_RETAINED_COMPLETED_TOOL_ARGUMENT_CHARS, PROTOCOL_PLACEHOLDER_MARKER, };
|
|
2
4
|
/** All non-empty native tool-call ids already reserved by a transcript. */
|
|
3
5
|
export declare function toolCallIdsInHistory(messages: readonly ChatMessage[]): Set<string>;
|
|
4
6
|
/**
|
|
@@ -8,10 +10,6 @@ export declare function toolCallIdsInHistory(messages: readonly ChatMessage[]):
|
|
|
8
10
|
* wide uniqueness.
|
|
9
11
|
*/
|
|
10
12
|
export declare function ensureUniqueToolCallIds(calls: readonly NativeToolCall[], reservedIds?: ReadonlySet<string>): NativeToolCall[];
|
|
11
|
-
/**
|
|
12
|
-
* History copy of toolCalls: slim large write payloads so RAM and API
|
|
13
|
-
* re-sends do not retain full file bodies (tools already ran from live args).
|
|
14
|
-
*/
|
|
15
13
|
export declare function slimNativeToolCallsForHistory(toolCalls: readonly NativeToolCall[]): NativeToolCall[];
|
|
16
14
|
/** Append assistant turn that requested tools (must precede tool results). */
|
|
17
15
|
export declare function appendAssistantWithTools(messages: ChatMessage[], text: string, toolCalls: NativeToolCall[],
|
|
@@ -52,12 +50,6 @@ export declare function expandKeepStartForToolPairs(messages: ChatMessage[], kee
|
|
|
52
50
|
*/
|
|
53
51
|
export declare function validateToolProtocol(messages: readonly ChatMessage[]): string[];
|
|
54
52
|
export declare function assertValidToolProtocol(messages: readonly ChatMessage[]): void;
|
|
55
|
-
/**
|
|
56
|
-
* Marker prefix for history-repair tool bodies. Detected by
|
|
57
|
-
* {@link isProtocolPlaceholderOutput} so governors do not treat these as live work.
|
|
58
|
-
* Keep stable; change wording below freely.
|
|
59
|
-
*/
|
|
60
|
-
export declare const PROTOCOL_PLACEHOLDER_MARKER = "[context-note]";
|
|
61
53
|
/**
|
|
62
54
|
* Neutral pairing placeholder when a tool result is missing from history.
|
|
63
55
|
*
|
|
@@ -79,3 +71,8 @@ export declare function formatProtocolPlaceholder(name: string, id: string): str
|
|
|
79
71
|
* Mutates `messages` in place when repairs are needed. Returns repair count.
|
|
80
72
|
*/
|
|
81
73
|
export declare function repairToolProtocol(messages: ChatMessage[]): number;
|
|
74
|
+
export declare function projectToolHistory(messages: readonly ChatMessage[]): {
|
|
75
|
+
messages: ChatMessage[];
|
|
76
|
+
changed: boolean;
|
|
77
|
+
repairs: number;
|
|
78
|
+
};
|