@tuanhung303/opencode-acp 2.2.3 → 2.4.1
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/lib/commands/stats.d.ts.map +1 -1
- package/dist/lib/commands/stats.js +2 -0
- package/dist/lib/commands/stats.js.map +1 -1
- package/dist/lib/config-schema.d.ts +88 -0
- package/dist/lib/config-schema.d.ts.map +1 -1
- package/dist/lib/config-schema.js +36 -0
- package/dist/lib/config-schema.js.map +1 -1
- package/dist/lib/config.d.ts +52 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +89 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +101 -17
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/messages/index.d.ts +1 -1
- package/dist/lib/messages/index.d.ts.map +1 -1
- package/dist/lib/messages/index.js +1 -1
- package/dist/lib/messages/index.js.map +1 -1
- package/dist/lib/messages/prune.d.ts +8 -0
- package/dist/lib/messages/prune.d.ts.map +1 -1
- package/dist/lib/messages/prune.js +112 -0
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/prompts/system/both.d.ts +1 -1
- package/dist/lib/prompts/system/both.d.ts.map +1 -1
- package/dist/lib/prompts/system/both.js +40 -42
- package/dist/lib/prompts/system/both.js.map +1 -1
- package/dist/lib/prompts/system/discard.d.ts +1 -1
- package/dist/lib/prompts/system/discard.d.ts.map +1 -1
- package/dist/lib/prompts/system/discard.js +33 -30
- package/dist/lib/prompts/system/discard.js.map +1 -1
- package/dist/lib/prompts/system/extract.d.ts +1 -1
- package/dist/lib/prompts/system/extract.d.ts.map +1 -1
- package/dist/lib/prompts/system/extract.js +27 -29
- package/dist/lib/prompts/system/extract.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +2 -0
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +4 -1
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +22 -0
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/types.d.ts +121 -13
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +43 -0
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/dist/lib/state/utils.js +138 -0
- package/dist/lib/state/utils.js.map +1 -1
- package/dist/lib/strategies/deduplication.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +19 -3
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/error-chain-collapse.d.ts +9 -0
- package/dist/lib/strategies/error-chain-collapse.d.ts.map +1 -0
- package/dist/lib/strategies/error-chain-collapse.js +118 -0
- package/dist/lib/strategies/error-chain-collapse.js.map +1 -0
- package/dist/lib/strategies/image-pruning.d.ts +16 -0
- package/dist/lib/strategies/image-pruning.d.ts.map +1 -0
- package/dist/lib/strategies/image-pruning.js +251 -0
- package/dist/lib/strategies/image-pruning.js.map +1 -0
- package/dist/lib/strategies/index.d.ts +5 -0
- package/dist/lib/strategies/index.d.ts.map +1 -1
- package/dist/lib/strategies/index.js +5 -0
- package/dist/lib/strategies/index.js.map +1 -1
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
- package/dist/lib/strategies/purge-errors.js +15 -3
- package/dist/lib/strategies/purge-errors.js.map +1 -1
- package/dist/lib/strategies/stale-read-pruning.d.ts +16 -0
- package/dist/lib/strategies/stale-read-pruning.d.ts.map +1 -0
- package/dist/lib/strategies/stale-read-pruning.js +132 -0
- package/dist/lib/strategies/stale-read-pruning.js.map +1 -0
- package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
- package/dist/lib/strategies/supersede-writes.js +15 -3
- package/dist/lib/strategies/supersede-writes.js.map +1 -1
- package/dist/lib/strategies/thinking-compression.d.ts +16 -0
- package/dist/lib/strategies/thinking-compression.d.ts.map +1 -0
- package/dist/lib/strategies/thinking-compression.js +194 -0
- package/dist/lib/strategies/thinking-compression.js.map +1 -0
- package/dist/lib/strategies/tools.d.ts.map +1 -1
- package/dist/lib/strategies/tools.js +94 -53
- package/dist/lib/strategies/tools.js.map +1 -1
- package/dist/lib/strategies/truncation.d.ts +17 -0
- package/dist/lib/strategies/truncation.d.ts.map +1 -0
- package/dist/lib/strategies/truncation.js +172 -0
- package/dist/lib/strategies/truncation.js.map +1 -0
- package/dist/lib/strategies/utils.d.ts +1 -1
- package/dist/lib/strategies/utils.d.ts.map +1 -1
- package/dist/lib/strategies/utils.js +34 -20
- package/dist/lib/strategies/utils.js.map +1 -1
- package/dist/lib/ui/notification.d.ts +1 -1
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +12 -7
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/ui/utils.d.ts +1 -1
- package/dist/lib/ui/utils.d.ts.map +1 -1
- package/dist/lib/ui/utils.js +16 -2
- package/dist/lib/ui/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,16 +11,16 @@ const EXTRACT_TOOL_DESCRIPTION = loadPrompt("extract-tool-spec");
|
|
|
11
11
|
const RESTORE_TOOL_DESCRIPTION = loadPrompt("restore-tool-spec");
|
|
12
12
|
/**
|
|
13
13
|
* Execute a prune operation using call IDs directly.
|
|
14
|
-
* This is the hash-based version that works with resolved call IDs.
|
|
14
|
+
* This is the hash-based version that works with resolved call IDs and message part IDs.
|
|
15
15
|
*/
|
|
16
|
-
async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, reason, toolName, distillation) {
|
|
16
|
+
async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, reason, toolName, distillation, messagePartIds = []) {
|
|
17
17
|
const { client, state, logger, config, workingDirectory } = ctx;
|
|
18
18
|
const sessionId = toolCtx.sessionID;
|
|
19
19
|
logger.info(`${toolName} tool invoked`);
|
|
20
|
-
logger.info(JSON.stringify({ hashes, reason }));
|
|
21
|
-
if (!callIds || callIds.length === 0) {
|
|
22
|
-
logger.debug(`${toolName} tool called but no valid call IDs resolved`);
|
|
23
|
-
throw new Error(`No valid hashes provided. Use hashes from tool outputs (e.g., #r_a1b2c#).`);
|
|
20
|
+
logger.info(JSON.stringify({ hashes, reason, messagePartIds }));
|
|
21
|
+
if ((!callIds || callIds.length === 0) && (!messagePartIds || messagePartIds.length === 0)) {
|
|
22
|
+
logger.debug(`${toolName} tool called but no valid call IDs or message part IDs resolved`);
|
|
23
|
+
throw new Error(`No valid hashes provided. Use hashes from tool outputs (e.g., #r_a1b2c#) or assistant messages (e.g., #a_xxxxx#).`);
|
|
24
24
|
}
|
|
25
25
|
// Fetch messages to calculate tokens
|
|
26
26
|
const messagesResponse = await client.session.messages({
|
|
@@ -65,8 +65,9 @@ async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, rea
|
|
|
65
65
|
`To modify protection, update 'protectedFilePatterns' in your ACP config.`);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
// Add to prune
|
|
68
|
+
// Add to prune lists
|
|
69
69
|
state.prune.toolIds.push(...callIds);
|
|
70
|
+
state.prune.messagePartIds.push(...messagePartIds);
|
|
70
71
|
// Collect metadata for notification
|
|
71
72
|
const toolMetadata = new Map();
|
|
72
73
|
for (const callId of callIds) {
|
|
@@ -79,21 +80,22 @@ async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, rea
|
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
// Calculate token savings
|
|
82
|
-
const tokensSaved = calculateTokensSaved(state, messages, callIds);
|
|
83
|
+
const tokensSaved = calculateTokensSaved(state, messages, callIds, messagePartIds);
|
|
83
84
|
state.stats.pruneTokenCounter += tokensSaved;
|
|
84
|
-
|
|
85
|
+
const totalItems = callIds.length + messagePartIds.length;
|
|
86
|
+
state.stats.pruneMessageCounter += totalItems;
|
|
85
87
|
// Track strategy effectiveness
|
|
86
88
|
if (toolName === "Discard") {
|
|
87
|
-
state.stats.strategyStats.manualDiscard.count +=
|
|
89
|
+
state.stats.strategyStats.manualDiscard.count += totalItems;
|
|
88
90
|
state.stats.strategyStats.manualDiscard.tokens += tokensSaved;
|
|
89
91
|
}
|
|
90
92
|
else if (toolName === "Extract") {
|
|
91
|
-
state.stats.strategyStats.extraction.count +=
|
|
93
|
+
state.stats.strategyStats.extraction.count += totalItems;
|
|
92
94
|
state.stats.strategyStats.extraction.tokens += tokensSaved;
|
|
93
95
|
}
|
|
94
96
|
// Store stats for display
|
|
95
97
|
state.lastDiscardStats = {
|
|
96
|
-
itemCount:
|
|
98
|
+
itemCount: totalItems,
|
|
97
99
|
tokensSaved: state.stats.pruneTokenCounter,
|
|
98
100
|
};
|
|
99
101
|
// Record in discard history
|
|
@@ -103,13 +105,13 @@ async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, rea
|
|
|
103
105
|
tokensSaved,
|
|
104
106
|
reason,
|
|
105
107
|
});
|
|
106
|
-
await sendUnifiedNotification(client, logger, config, state, sessionId, callIds, toolMetadata, reason, currentParams, workingDirectory, distillation, { simplified: true });
|
|
108
|
+
await sendUnifiedNotification(client, logger, config, state, sessionId, callIds, toolMetadata, reason, currentParams, workingDirectory, distillation, { simplified: true }, messagePartIds);
|
|
107
109
|
state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
|
|
108
110
|
state.stats.pruneTokenCounter = 0;
|
|
109
111
|
state.stats.totalPruneMessages += state.stats.pruneMessageCounter;
|
|
110
112
|
state.stats.pruneMessageCounter = 0;
|
|
111
113
|
saveSessionState(state, logger).catch((err) => logger.error("Failed to persist state", { error: err.message }));
|
|
112
|
-
return formatPruningResultForTool(callIds, toolMetadata, workingDirectory, true);
|
|
114
|
+
return formatPruningResultForTool(callIds, toolMetadata, workingDirectory, true, messagePartIds.length);
|
|
113
115
|
}
|
|
114
116
|
export function createDiscardTool(ctx) {
|
|
115
117
|
return tool({
|
|
@@ -120,7 +122,7 @@ export function createDiscardTool(ctx) {
|
|
|
120
122
|
.describe("Why you're discarding: 'noise' | 'completion' | 'superseded' | 'exploration' | 'duplicate'"),
|
|
121
123
|
hashes: tool.schema
|
|
122
124
|
.array(tool.schema.string())
|
|
123
|
-
.describe("Hash identifiers from tool outputs (e.g.,
|
|
125
|
+
.describe("Hash identifiers from tool outputs (e.g., #r_a1b2c#) or assistant messages (e.g., #a_xxxxx#)"),
|
|
124
126
|
},
|
|
125
127
|
async execute(args, toolCtx) {
|
|
126
128
|
const { state, logger } = ctx;
|
|
@@ -138,16 +140,17 @@ export function createDiscardTool(ctx) {
|
|
|
138
140
|
}
|
|
139
141
|
// Validate hashes provided
|
|
140
142
|
if (!args.hashes || args.hashes.length === 0) {
|
|
141
|
-
throw new Error("No hashes provided. Use hash identifiers from tool outputs
|
|
143
|
+
throw new Error("No hashes provided. Use hash identifiers from tool outputs or assistant messages.");
|
|
142
144
|
}
|
|
143
|
-
// Resolve hashes
|
|
145
|
+
// Resolve hashes
|
|
144
146
|
const callIds = [];
|
|
147
|
+
const messagePartIds = [];
|
|
145
148
|
const validHashes = [];
|
|
146
149
|
const unknownHashes = [];
|
|
147
150
|
for (const hash of args.hashes) {
|
|
151
|
+
// Check if it's a tool hash
|
|
148
152
|
const callId = state.hashToCallId.get(hash);
|
|
149
153
|
if (callId) {
|
|
150
|
-
// Skip if already pruned
|
|
151
154
|
if (!state.prune.toolIds.includes(callId)) {
|
|
152
155
|
callIds.push(callId);
|
|
153
156
|
validHashes.push(hash);
|
|
@@ -155,20 +158,31 @@ export function createDiscardTool(ctx) {
|
|
|
155
158
|
else {
|
|
156
159
|
logger.debug(`Hash ${hash} already pruned, skipping`);
|
|
157
160
|
}
|
|
161
|
+
continue;
|
|
158
162
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
163
|
+
// Check if it's an assistant message part hash
|
|
164
|
+
const messagePartId = state.hashToMessagePart.get(hash);
|
|
165
|
+
if (messagePartId) {
|
|
166
|
+
if (!state.prune.messagePartIds.includes(messagePartId)) {
|
|
167
|
+
messagePartIds.push(messagePartId);
|
|
168
|
+
validHashes.push(hash);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
logger.debug(`Hash ${hash} already pruned, skipping`);
|
|
172
|
+
}
|
|
173
|
+
continue;
|
|
162
174
|
}
|
|
175
|
+
unknownHashes.push(hash);
|
|
176
|
+
logger.warn(`Unknown hash: ${hash}`);
|
|
163
177
|
}
|
|
164
|
-
if (unknownHashes.length > 0 &&
|
|
165
|
-
throw new Error(`Unknown hashes: ${unknownHashes.join(", ")}. Use hash identifiers from tool outputs.`);
|
|
178
|
+
if (unknownHashes.length > 0 && validHashes.length === 0) {
|
|
179
|
+
throw new Error(`Unknown hashes: ${unknownHashes.join(", ")}. Use hash identifiers from tool outputs or assistant messages.`);
|
|
166
180
|
}
|
|
167
|
-
if (
|
|
168
|
-
throw new Error("No valid hashes to discard.
|
|
181
|
+
if (validHashes.length === 0) {
|
|
182
|
+
throw new Error("No valid hashes to discard. Content may have already been discarded.");
|
|
169
183
|
}
|
|
170
|
-
logger.info(`Discard: ${validHashes.length} hashes resolved to ${callIds.length}
|
|
171
|
-
return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, args.reason, "Discard");
|
|
184
|
+
logger.info(`Discard: ${validHashes.length} hashes resolved to ${callIds.length} tool(s) and ${messagePartIds.length} message part(s)`);
|
|
185
|
+
return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, args.reason, "Discard", undefined, messagePartIds);
|
|
172
186
|
},
|
|
173
187
|
});
|
|
174
188
|
}
|
|
@@ -178,7 +192,7 @@ export function createExtractTool(ctx) {
|
|
|
178
192
|
args: {
|
|
179
193
|
hashes: tool.schema
|
|
180
194
|
.array(tool.schema.string())
|
|
181
|
-
.describe("Hash identifiers from tool outputs (e.g.,
|
|
195
|
+
.describe("Hash identifiers from tool outputs (e.g., #r_a1b2c#) or assistant messages (e.g., #a_xxxxx#)"),
|
|
182
196
|
distillation: tool.schema
|
|
183
197
|
.array(tool.schema.string())
|
|
184
198
|
.describe("REQUIRED. Array of strings, one per hash (positional: distillation[0] is for hashes[0], etc.)"),
|
|
@@ -194,33 +208,46 @@ export function createExtractTool(ctx) {
|
|
|
194
208
|
throw new Error("Missing distillation. You must provide a distillation string for each hash.");
|
|
195
209
|
}
|
|
196
210
|
if (!args.hashes || args.hashes.length === 0) {
|
|
197
|
-
throw new Error("No hashes provided. Use hash identifiers from tool outputs
|
|
211
|
+
throw new Error("No hashes provided. Use hash identifiers from tool outputs or assistant messages.");
|
|
198
212
|
}
|
|
199
|
-
// Resolve hashes
|
|
213
|
+
// Resolve hashes
|
|
200
214
|
const callIds = [];
|
|
215
|
+
const messagePartIds = [];
|
|
201
216
|
const validHashes = [];
|
|
202
217
|
for (const hash of args.hashes) {
|
|
218
|
+
// Tool hash
|
|
203
219
|
const callId = state.hashToCallId.get(hash);
|
|
204
|
-
if (callId
|
|
205
|
-
|
|
206
|
-
|
|
220
|
+
if (callId) {
|
|
221
|
+
if (!state.prune.toolIds.includes(callId)) {
|
|
222
|
+
callIds.push(callId);
|
|
223
|
+
validHashes.push(hash);
|
|
224
|
+
}
|
|
225
|
+
continue;
|
|
207
226
|
}
|
|
208
|
-
|
|
209
|
-
|
|
227
|
+
// Assistant message part hash
|
|
228
|
+
const messagePartId = state.hashToMessagePart.get(hash);
|
|
229
|
+
if (messagePartId) {
|
|
230
|
+
if (!state.prune.messagePartIds.includes(messagePartId)) {
|
|
231
|
+
messagePartIds.push(messagePartId);
|
|
232
|
+
validHashes.push(hash);
|
|
233
|
+
}
|
|
234
|
+
continue;
|
|
210
235
|
}
|
|
236
|
+
logger.warn(`Unknown or already pruned hash: ${hash}`);
|
|
211
237
|
}
|
|
212
|
-
if (
|
|
213
|
-
throw new Error("No valid hashes to extract.
|
|
238
|
+
if (validHashes.length === 0) {
|
|
239
|
+
throw new Error("No valid hashes to extract. Content may have already been discarded.");
|
|
214
240
|
}
|
|
215
241
|
// Log the distillation for debugging/analysis
|
|
216
242
|
logger.info("Distillation data received:");
|
|
217
243
|
logger.info(JSON.stringify(args.distillation, null, 2));
|
|
244
|
+
const totalItems = callIds.length + messagePartIds.length;
|
|
218
245
|
// If preserve is true, don't prune - just return success with distillation
|
|
219
246
|
if (args.preserve) {
|
|
220
|
-
logger.info(`Extract with preserve=true - not pruning ${
|
|
221
|
-
return `Extracted knowledge from ${
|
|
247
|
+
logger.info(`Extract with preserve=true - not pruning ${totalItems} items`);
|
|
248
|
+
return `Extracted knowledge from ${totalItems} item(s). Original content preserved.\n\nDistilled knowledge:\n${args.distillation.map((d, i) => `${i + 1}. ${d}`).join("\n")}`;
|
|
222
249
|
}
|
|
223
|
-
return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, "extraction", "Extract", args.distillation);
|
|
250
|
+
return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, "extraction", "Extract", args.distillation, messagePartIds);
|
|
224
251
|
},
|
|
225
252
|
});
|
|
226
253
|
}
|
|
@@ -230,39 +257,53 @@ export function createRestoreTool(ctx) {
|
|
|
230
257
|
args: {
|
|
231
258
|
hashes: tool.schema
|
|
232
259
|
.array(tool.schema.string())
|
|
233
|
-
.describe("Hash identifiers
|
|
260
|
+
.describe("Hash identifiers from pruned content (e.g., #r_a1b2c# or #a_xxxxx#)"),
|
|
234
261
|
},
|
|
235
262
|
async execute(args, toolCtx) {
|
|
236
263
|
const { state, logger } = ctx;
|
|
237
264
|
const sessionId = toolCtx.sessionID;
|
|
238
265
|
if (!args.hashes || args.hashes.length === 0) {
|
|
239
|
-
throw new Error("No hashes provided. Use hash identifiers from pruned
|
|
266
|
+
throw new Error("No hashes provided. Use hash identifiers from pruned content.");
|
|
240
267
|
}
|
|
241
268
|
// Resolve hashes to call IDs and restore
|
|
242
269
|
const restored = [];
|
|
243
270
|
const notFound = [];
|
|
244
271
|
const notPruned = [];
|
|
245
272
|
for (const hash of args.hashes) {
|
|
273
|
+
// Tool hash
|
|
246
274
|
const callId = state.hashToCallId.get(hash);
|
|
247
|
-
if (
|
|
248
|
-
|
|
275
|
+
if (callId) {
|
|
276
|
+
const pruneIndex = state.prune.toolIds.indexOf(callId);
|
|
277
|
+
if (pruneIndex !== -1) {
|
|
278
|
+
state.prune.toolIds.splice(pruneIndex, 1);
|
|
279
|
+
restored.push(hash);
|
|
280
|
+
logger.info(`Restored tool with hash ${hash} (callId: ${callId})`);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
notPruned.push(hash);
|
|
284
|
+
}
|
|
249
285
|
continue;
|
|
250
286
|
}
|
|
251
|
-
//
|
|
252
|
-
const
|
|
253
|
-
if (
|
|
254
|
-
|
|
287
|
+
// Assistant message part hash
|
|
288
|
+
const messagePartId = state.hashToMessagePart.get(hash);
|
|
289
|
+
if (messagePartId) {
|
|
290
|
+
const pruneIndex = state.prune.messagePartIds.indexOf(messagePartId);
|
|
291
|
+
if (pruneIndex !== -1) {
|
|
292
|
+
state.prune.messagePartIds.splice(pruneIndex, 1);
|
|
293
|
+
restored.push(hash);
|
|
294
|
+
logger.info(`Restored message part with hash ${hash} (partId: ${messagePartId})`);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
notPruned.push(hash);
|
|
298
|
+
}
|
|
255
299
|
continue;
|
|
256
300
|
}
|
|
257
|
-
|
|
258
|
-
state.prune.toolIds.splice(pruneIndex, 1);
|
|
259
|
-
restored.push(hash);
|
|
260
|
-
logger.info(`Restored tool with hash ${hash} (callId: ${callId})`);
|
|
301
|
+
notFound.push(hash);
|
|
261
302
|
}
|
|
262
303
|
// Build result message
|
|
263
304
|
const lines = [];
|
|
264
305
|
if (restored.length > 0) {
|
|
265
|
-
lines.push(`Restored ${restored.length}
|
|
306
|
+
lines.push(`Restored ${restored.length} item(s):`);
|
|
266
307
|
for (const hash of restored) {
|
|
267
308
|
lines.push(` ✓ ${hash}`);
|
|
268
309
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../lib/strategies/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../lib/strategies/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PluginConfig } from "../config";
|
|
2
|
+
import { Logger } from "../logger";
|
|
3
|
+
import type { SessionState, WithParts } from "../state";
|
|
4
|
+
/**
|
|
5
|
+
* Truncates large tool outputs in-place, keeping head and tail portions.
|
|
6
|
+
* Only affects tools that have already been processed (not in current turn).
|
|
7
|
+
*/
|
|
8
|
+
export declare const truncateLargeOutputs: (state: SessionState, logger: Logger, config: PluginConfig, messages: WithParts[]) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Estimates if a tool output would benefit from truncation.
|
|
11
|
+
* Used for preview/stats without modifying content.
|
|
12
|
+
*/
|
|
13
|
+
export declare function estimateTruncationSavings(output: string, maxTokens?: number): {
|
|
14
|
+
wouldTruncate: boolean;
|
|
15
|
+
estimatedSavings: number;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=truncation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation.d.ts","sourceRoot":"","sources":["../../../lib/strategies/truncation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAgBvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IA8GF,CAAA;AAiED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAa,GACzB;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAatD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { countTokens } from "./utils";
|
|
2
|
+
import { isMessageCompacted } from "../shared-utils";
|
|
3
|
+
import { getPruneSets, recordStrategyTime } from "../state/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Head-Tail Truncation Strategy
|
|
6
|
+
*
|
|
7
|
+
* Truncates large tool outputs (especially file reads) by keeping the head
|
|
8
|
+
* and tail portions, with a summary marker in the middle. This preserves
|
|
9
|
+
* the most useful context (imports/exports at top, recent code at bottom)
|
|
10
|
+
* while reducing token usage.
|
|
11
|
+
*/
|
|
12
|
+
const TRUNCATION_MARKER = "\n\n[... middle content truncated to save context ...]\n\n";
|
|
13
|
+
/**
|
|
14
|
+
* Truncates large tool outputs in-place, keeping head and tail portions.
|
|
15
|
+
* Only affects tools that have already been processed (not in current turn).
|
|
16
|
+
*/
|
|
17
|
+
export const truncateLargeOutputs = (state, logger, config, messages) => {
|
|
18
|
+
const startTime = performance.now();
|
|
19
|
+
if (!config.strategies.truncation?.enabled) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Early exit: if no messages, nothing to truncate
|
|
23
|
+
if (messages.length === 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const maxTokens = config.strategies.truncation.maxTokens ?? 2000;
|
|
27
|
+
const headRatio = config.strategies.truncation.headRatio ?? 0.4;
|
|
28
|
+
const tailRatio = config.strategies.truncation.tailRatio ?? 0.4;
|
|
29
|
+
const minTurnsOld = config.strategies.truncation.minTurnsOld ?? 2;
|
|
30
|
+
const targetTools = config.strategies.truncation.targetTools ?? ["read", "grep", "glob", "bash"];
|
|
31
|
+
// Create a Set for O(1) lookup of target tools
|
|
32
|
+
const targetToolsSet = new Set(targetTools);
|
|
33
|
+
let totalTokensSaved = 0;
|
|
34
|
+
let truncatedCount = 0;
|
|
35
|
+
// Get pruned tool IDs using O(1) Set lookup
|
|
36
|
+
const prunedToolIds = getPruneSets(state).toolIds;
|
|
37
|
+
for (const msg of messages) {
|
|
38
|
+
if (isMessageCompacted(state, msg)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
42
|
+
for (const part of parts) {
|
|
43
|
+
if (part.type !== "tool" || !part.callID) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Skip if already pruned using O(1) Set lookup
|
|
47
|
+
if (prunedToolIds.has(part.callID)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Only truncate specific tools using O(1) Set lookup
|
|
51
|
+
if (!targetToolsSet.has(part.tool)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Only truncate completed tools
|
|
55
|
+
if (part.state.status !== "completed") {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Skip if output is missing or already truncated
|
|
59
|
+
const output = part.state.output;
|
|
60
|
+
if (!output || typeof output !== "string") {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (output.includes("[... middle content truncated")) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// Check tool age (only truncate older outputs)
|
|
67
|
+
const toolMeta = state.toolParameters.get(part.callID);
|
|
68
|
+
if (toolMeta) {
|
|
69
|
+
const toolAge = state.currentTurn - toolMeta.turn;
|
|
70
|
+
if (toolAge < minTurnsOld) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Check if output exceeds threshold
|
|
75
|
+
const tokenCount = countTokens(output);
|
|
76
|
+
if (tokenCount <= maxTokens) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Calculate truncation points
|
|
80
|
+
const truncated = truncateContent(output, maxTokens, headRatio, tailRatio);
|
|
81
|
+
if (truncated === output) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Apply truncation
|
|
85
|
+
const newTokenCount = countTokens(truncated);
|
|
86
|
+
const tokensSaved = tokenCount - newTokenCount;
|
|
87
|
+
part.state.output = truncated;
|
|
88
|
+
totalTokensSaved += tokensSaved;
|
|
89
|
+
truncatedCount++;
|
|
90
|
+
logger.debug(`Truncated ${part.tool} output`, {
|
|
91
|
+
callId: part.callID,
|
|
92
|
+
originalTokens: tokenCount,
|
|
93
|
+
newTokens: newTokenCount,
|
|
94
|
+
tokensSaved,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (truncatedCount > 0) {
|
|
99
|
+
state.stats.strategyStats.truncation.count += truncatedCount;
|
|
100
|
+
state.stats.strategyStats.truncation.tokens += totalTokensSaved;
|
|
101
|
+
logger.info(`Truncated ${truncatedCount} large outputs, saved ~${totalTokensSaved} tokens`);
|
|
102
|
+
}
|
|
103
|
+
// Record performance metrics
|
|
104
|
+
const duration = performance.now() - startTime;
|
|
105
|
+
recordStrategyTime(state, "truncation", duration);
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Truncates content by keeping head and tail portions.
|
|
109
|
+
* Preserves line boundaries for readability.
|
|
110
|
+
*/
|
|
111
|
+
function truncateContent(content, maxTokens, headRatio, tailRatio) {
|
|
112
|
+
const lines = content.split("\n");
|
|
113
|
+
// If content is small enough, return as-is
|
|
114
|
+
if (lines.length <= 20) {
|
|
115
|
+
return content;
|
|
116
|
+
}
|
|
117
|
+
// Calculate target sizes
|
|
118
|
+
const targetTokens = maxTokens - countTokens(TRUNCATION_MARKER);
|
|
119
|
+
const headTokens = Math.floor(targetTokens * headRatio);
|
|
120
|
+
const tailTokens = Math.floor(targetTokens * tailRatio);
|
|
121
|
+
// Build head section
|
|
122
|
+
const headLines = [];
|
|
123
|
+
let headTokenCount = 0;
|
|
124
|
+
for (const line of lines) {
|
|
125
|
+
const lineTokens = countTokens(line + "\n");
|
|
126
|
+
if (headTokenCount + lineTokens > headTokens) {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
headLines.push(line);
|
|
130
|
+
headTokenCount += lineTokens;
|
|
131
|
+
}
|
|
132
|
+
// Build tail section (from end)
|
|
133
|
+
const tailLines = [];
|
|
134
|
+
let tailTokenCount = 0;
|
|
135
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
136
|
+
const line = lines[i];
|
|
137
|
+
const lineTokens = countTokens(line + "\n");
|
|
138
|
+
if (tailTokenCount + lineTokens > tailTokens) {
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
tailLines.unshift(line);
|
|
142
|
+
tailTokenCount += lineTokens;
|
|
143
|
+
}
|
|
144
|
+
// Ensure we don't overlap
|
|
145
|
+
const headEndIndex = headLines.length;
|
|
146
|
+
const tailStartIndex = lines.length - tailLines.length;
|
|
147
|
+
if (headEndIndex >= tailStartIndex) {
|
|
148
|
+
// Content is not large enough to truncate meaningfully
|
|
149
|
+
return content;
|
|
150
|
+
}
|
|
151
|
+
// Calculate lines removed for the marker
|
|
152
|
+
const linesRemoved = tailStartIndex - headEndIndex;
|
|
153
|
+
const marker = `\n\n[... ${linesRemoved} lines truncated to save context ...]\n\n`;
|
|
154
|
+
return headLines.join("\n") + marker + tailLines.join("\n");
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Estimates if a tool output would benefit from truncation.
|
|
158
|
+
* Used for preview/stats without modifying content.
|
|
159
|
+
*/
|
|
160
|
+
export function estimateTruncationSavings(output, maxTokens = 2000) {
|
|
161
|
+
if (!output || typeof output !== "string") {
|
|
162
|
+
return { wouldTruncate: false, estimatedSavings: 0 };
|
|
163
|
+
}
|
|
164
|
+
const tokenCount = countTokens(output);
|
|
165
|
+
if (tokenCount <= maxTokens) {
|
|
166
|
+
return { wouldTruncate: false, estimatedSavings: 0 };
|
|
167
|
+
}
|
|
168
|
+
// Estimate savings (roughly 20% of original after truncation)
|
|
169
|
+
const estimatedSavings = Math.floor(tokenCount * 0.6);
|
|
170
|
+
return { wouldTruncate: true, estimatedSavings };
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=truncation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation.js","sourceRoot":"","sources":["../../../lib/strategies/truncation.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,5 @@ export declare function getCurrentParams(state: SessionState, messages: WithPart
|
|
|
7
7
|
variant: string | undefined;
|
|
8
8
|
};
|
|
9
9
|
export declare function countTokens(text: string): number;
|
|
10
|
-
export declare const calculateTokensSaved: (state: SessionState, messages: WithParts[], pruneToolIds: string[]) => number;
|
|
10
|
+
export declare const calculateTokensSaved: (state: SessionState, messages: WithParts[], pruneToolIds: string[], pruneMessagePartIds?: string[]) => number;
|
|
11
11
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf;IACC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,CAkBA;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAMD,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,UAAU,SAAS,EAAE,EACrB,cAAc,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf;IACC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B,CAkBA;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAMD,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,UAAU,SAAS,EAAE,EACrB,cAAc,MAAM,EAAE,EACtB,sBAAqB,MAAM,EAAO,KACnC,MA0DF,CAAA"}
|
|
@@ -31,7 +31,7 @@ export function countTokens(text) {
|
|
|
31
31
|
function estimateTokensBatch(texts) {
|
|
32
32
|
return texts.map(countTokens);
|
|
33
33
|
}
|
|
34
|
-
export const calculateTokensSaved = (state, messages, pruneToolIds) => {
|
|
34
|
+
export const calculateTokensSaved = (state, messages, pruneToolIds, pruneMessagePartIds = []) => {
|
|
35
35
|
try {
|
|
36
36
|
const contents = [];
|
|
37
37
|
for (const msg of messages) {
|
|
@@ -39,29 +39,43 @@ export const calculateTokensSaved = (state, messages, pruneToolIds) => {
|
|
|
39
39
|
continue;
|
|
40
40
|
}
|
|
41
41
|
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
const messageId = msg.info.id;
|
|
43
|
+
for (let partIndex = 0; partIndex < parts.length; partIndex++) {
|
|
44
|
+
const part = parts[partIndex];
|
|
45
|
+
if (!part)
|
|
44
46
|
continue;
|
|
45
|
-
|
|
46
|
-
if (part.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
// Check tool parts
|
|
48
|
+
if (part.type === "tool" && pruneToolIds.includes(part.callID)) {
|
|
49
|
+
if (part.tool === "question") {
|
|
50
|
+
const questions = part.state.input?.questions;
|
|
51
|
+
if (questions !== undefined) {
|
|
52
|
+
const content = typeof questions === "string"
|
|
53
|
+
? questions
|
|
54
|
+
: JSON.stringify(questions);
|
|
55
|
+
contents.push(content);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (part.state.status === "completed") {
|
|
59
|
+
const content = typeof part.state.output === "string"
|
|
60
|
+
? part.state.output
|
|
61
|
+
: JSON.stringify(part.state.output);
|
|
62
|
+
contents.push(content);
|
|
63
|
+
}
|
|
64
|
+
else if (part.state.status === "error") {
|
|
65
|
+
const content = typeof part.state.error === "string"
|
|
66
|
+
? part.state.error
|
|
67
|
+
: JSON.stringify(part.state.error);
|
|
50
68
|
contents.push(content);
|
|
51
69
|
}
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
if (part.state.status === "completed") {
|
|
55
|
-
const content = typeof part.state.output === "string"
|
|
56
|
-
? part.state.output
|
|
57
|
-
: JSON.stringify(part.state.output);
|
|
58
|
-
contents.push(content);
|
|
59
70
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
// Check assistant message parts
|
|
72
|
+
const partId = `${messageId}:${partIndex}`;
|
|
73
|
+
if (msg.info.role === "assistant" &&
|
|
74
|
+
part.type === "text" &&
|
|
75
|
+
pruneMessagePartIds.includes(partId)) {
|
|
76
|
+
if (part.text) {
|
|
77
|
+
contents.push(part.text);
|
|
78
|
+
}
|
|
65
79
|
}
|
|
66
80
|
}
|
|
67
81
|
}
|