@tuanhung303/opencode-acp 2.2.2 → 2.4.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.
Files changed (55) hide show
  1. package/dist/lib/commands/stats.d.ts.map +1 -1
  2. package/dist/lib/commands/stats.js +2 -0
  3. package/dist/lib/commands/stats.js.map +1 -1
  4. package/dist/lib/config.d.ts +26 -0
  5. package/dist/lib/config.d.ts.map +1 -1
  6. package/dist/lib/config.js +40 -0
  7. package/dist/lib/config.js.map +1 -1
  8. package/dist/lib/hooks.d.ts.map +1 -1
  9. package/dist/lib/hooks.js +12 -4
  10. package/dist/lib/hooks.js.map +1 -1
  11. package/dist/lib/messages/index.d.ts +1 -1
  12. package/dist/lib/messages/index.d.ts.map +1 -1
  13. package/dist/lib/messages/index.js +1 -1
  14. package/dist/lib/messages/index.js.map +1 -1
  15. package/dist/lib/messages/prune.d.ts +8 -0
  16. package/dist/lib/messages/prune.d.ts.map +1 -1
  17. package/dist/lib/messages/prune.js +112 -0
  18. package/dist/lib/messages/prune.js.map +1 -1
  19. package/dist/lib/state/persistence.d.ts +2 -0
  20. package/dist/lib/state/persistence.d.ts.map +1 -1
  21. package/dist/lib/state/persistence.js +4 -1
  22. package/dist/lib/state/persistence.js.map +1 -1
  23. package/dist/lib/state/state.d.ts.map +1 -1
  24. package/dist/lib/state/state.js +20 -0
  25. package/dist/lib/state/state.js.map +1 -1
  26. package/dist/lib/state/types.d.ts +19 -0
  27. package/dist/lib/state/types.d.ts.map +1 -1
  28. package/dist/lib/strategies/index.d.ts +2 -0
  29. package/dist/lib/strategies/index.d.ts.map +1 -1
  30. package/dist/lib/strategies/index.js +2 -0
  31. package/dist/lib/strategies/index.js.map +1 -1
  32. package/dist/lib/strategies/thinking-compression.d.ts +16 -0
  33. package/dist/lib/strategies/thinking-compression.d.ts.map +1 -0
  34. package/dist/lib/strategies/thinking-compression.js +187 -0
  35. package/dist/lib/strategies/thinking-compression.js.map +1 -0
  36. package/dist/lib/strategies/tools.d.ts.map +1 -1
  37. package/dist/lib/strategies/tools.js +94 -53
  38. package/dist/lib/strategies/tools.js.map +1 -1
  39. package/dist/lib/strategies/truncation.d.ts +17 -0
  40. package/dist/lib/strategies/truncation.d.ts.map +1 -0
  41. package/dist/lib/strategies/truncation.js +159 -0
  42. package/dist/lib/strategies/truncation.js.map +1 -0
  43. package/dist/lib/strategies/utils.d.ts +1 -1
  44. package/dist/lib/strategies/utils.d.ts.map +1 -1
  45. package/dist/lib/strategies/utils.js +34 -20
  46. package/dist/lib/strategies/utils.js.map +1 -1
  47. package/dist/lib/ui/notification.d.ts +1 -1
  48. package/dist/lib/ui/notification.d.ts.map +1 -1
  49. package/dist/lib/ui/notification.js +12 -7
  50. package/dist/lib/ui/notification.js.map +1 -1
  51. package/dist/lib/ui/utils.d.ts +1 -1
  52. package/dist/lib/ui/utils.d.ts.map +1 -1
  53. package/dist/lib/ui/utils.js +16 -2
  54. package/dist/lib/ui/utils.js.map +1 -1
  55. 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 list
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
- state.stats.pruneMessageCounter += callIds.length;
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 += callIds.length;
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 += callIds.length;
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: callIds.length,
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);
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., ['#r_a1b2c#', '#g_d4e5f#'])"),
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 (e.g., #r_a1b2c#).");
143
+ throw new Error("No hashes provided. Use hash identifiers from tool outputs or assistant messages.");
142
144
  }
143
- // Resolve hashes to call IDs
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
- else {
160
- unknownHashes.push(hash);
161
- logger.warn(`Unknown hash: ${hash}`);
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 && callIds.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 (callIds.length === 0) {
168
- throw new Error("No valid hashes to discard. Tools may have already been discarded.");
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} call IDs`);
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., ['#r_a1b2c#', '#g_d4e5f#'])"),
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 (e.g., #r_a1b2c#).");
211
+ throw new Error("No hashes provided. Use hash identifiers from tool outputs or assistant messages.");
198
212
  }
199
- // Resolve hashes to call IDs
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 && !state.prune.toolIds.includes(callId)) {
205
- callIds.push(callId);
206
- validHashes.push(hash);
220
+ if (callId) {
221
+ if (!state.prune.toolIds.includes(callId)) {
222
+ callIds.push(callId);
223
+ validHashes.push(hash);
224
+ }
225
+ continue;
207
226
  }
208
- else {
209
- logger.warn(`Unknown or already pruned hash: ${hash}`);
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 (callIds.length === 0) {
213
- throw new Error("No valid hashes to extract. Tools may have already been discarded.");
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 ${callIds.length} tools`);
221
- return `Extracted knowledge from ${callIds.length} tool(s). Original outputs preserved.\n\nDistilled knowledge:\n${args.distillation.map((d, i) => `${i + 1}. ${d}`).join("\n")}`;
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 of pruned tools to restore (e.g., ['#r_a1b2c#', '#g_d4e5f#'])"),
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 tool outputs (e.g., #r_a1b2c#).");
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 (!callId) {
248
- notFound.push(hash);
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
- // Check if it's in the prune list
252
- const pruneIndex = state.prune.toolIds.indexOf(callId);
253
- if (pruneIndex === -1) {
254
- notPruned.push(hash);
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
- // Remove from prune list (restore)
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} tool(s):`);
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;AAevD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAC7B,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IA6FF,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,159 @@
1
+ import { countTokens } from "./utils";
2
+ import { isMessageCompacted } from "../shared-utils";
3
+ /**
4
+ * Head-Tail Truncation Strategy
5
+ *
6
+ * Truncates large tool outputs (especially file reads) by keeping the head
7
+ * and tail portions, with a summary marker in the middle. This preserves
8
+ * the most useful context (imports/exports at top, recent code at bottom)
9
+ * while reducing token usage.
10
+ */
11
+ const TRUNCATION_MARKER = "\n\n[... middle content truncated to save context ...]\n\n";
12
+ /**
13
+ * Truncates large tool outputs in-place, keeping head and tail portions.
14
+ * Only affects tools that have already been processed (not in current turn).
15
+ */
16
+ export const truncateLargeOutputs = (state, logger, config, messages) => {
17
+ if (!config.strategies.truncation?.enabled) {
18
+ return;
19
+ }
20
+ const maxTokens = config.strategies.truncation.maxTokens ?? 2000;
21
+ const headRatio = config.strategies.truncation.headRatio ?? 0.4;
22
+ const tailRatio = config.strategies.truncation.tailRatio ?? 0.4;
23
+ const minTurnsOld = config.strategies.truncation.minTurnsOld ?? 2;
24
+ const targetTools = config.strategies.truncation.targetTools ?? ["read", "grep", "glob", "bash"];
25
+ let totalTokensSaved = 0;
26
+ let truncatedCount = 0;
27
+ for (const msg of messages) {
28
+ if (isMessageCompacted(state, msg)) {
29
+ continue;
30
+ }
31
+ const parts = Array.isArray(msg.parts) ? msg.parts : [];
32
+ for (const part of parts) {
33
+ if (part.type !== "tool" || !part.callID) {
34
+ continue;
35
+ }
36
+ // Skip if already pruned
37
+ if (state.prune.toolIds.includes(part.callID)) {
38
+ continue;
39
+ }
40
+ // Only truncate specific tools
41
+ if (!targetTools.includes(part.tool)) {
42
+ continue;
43
+ }
44
+ // Only truncate completed tools
45
+ if (part.state.status !== "completed") {
46
+ continue;
47
+ }
48
+ // Skip if output is missing or already truncated
49
+ const output = part.state.output;
50
+ if (!output || typeof output !== "string") {
51
+ continue;
52
+ }
53
+ if (output.includes("[... middle content truncated")) {
54
+ continue;
55
+ }
56
+ // Check tool age (only truncate older outputs)
57
+ const toolMeta = state.toolParameters.get(part.callID);
58
+ if (toolMeta) {
59
+ const toolAge = state.currentTurn - toolMeta.turn;
60
+ if (toolAge < minTurnsOld) {
61
+ continue;
62
+ }
63
+ }
64
+ // Check if output exceeds threshold
65
+ const tokenCount = countTokens(output);
66
+ if (tokenCount <= maxTokens) {
67
+ continue;
68
+ }
69
+ // Calculate truncation points
70
+ const truncated = truncateContent(output, maxTokens, headRatio, tailRatio);
71
+ if (truncated === output) {
72
+ continue;
73
+ }
74
+ // Apply truncation
75
+ const newTokenCount = countTokens(truncated);
76
+ const tokensSaved = tokenCount - newTokenCount;
77
+ part.state.output = truncated;
78
+ totalTokensSaved += tokensSaved;
79
+ truncatedCount++;
80
+ logger.debug(`Truncated ${part.tool} output`, {
81
+ callId: part.callID,
82
+ originalTokens: tokenCount,
83
+ newTokens: newTokenCount,
84
+ tokensSaved,
85
+ });
86
+ }
87
+ }
88
+ if (truncatedCount > 0) {
89
+ state.stats.strategyStats.truncation.count += truncatedCount;
90
+ state.stats.strategyStats.truncation.tokens += totalTokensSaved;
91
+ logger.info(`Truncated ${truncatedCount} large outputs, saved ~${totalTokensSaved} tokens`);
92
+ }
93
+ };
94
+ /**
95
+ * Truncates content by keeping head and tail portions.
96
+ * Preserves line boundaries for readability.
97
+ */
98
+ function truncateContent(content, maxTokens, headRatio, tailRatio) {
99
+ const lines = content.split("\n");
100
+ // If content is small enough, return as-is
101
+ if (lines.length <= 20) {
102
+ return content;
103
+ }
104
+ // Calculate target sizes
105
+ const targetTokens = maxTokens - countTokens(TRUNCATION_MARKER);
106
+ const headTokens = Math.floor(targetTokens * headRatio);
107
+ const tailTokens = Math.floor(targetTokens * tailRatio);
108
+ // Build head section
109
+ const headLines = [];
110
+ let headTokenCount = 0;
111
+ for (const line of lines) {
112
+ const lineTokens = countTokens(line + "\n");
113
+ if (headTokenCount + lineTokens > headTokens) {
114
+ break;
115
+ }
116
+ headLines.push(line);
117
+ headTokenCount += lineTokens;
118
+ }
119
+ // Build tail section (from end)
120
+ const tailLines = [];
121
+ let tailTokenCount = 0;
122
+ for (let i = lines.length - 1; i >= 0; i--) {
123
+ const line = lines[i];
124
+ const lineTokens = countTokens(line + "\n");
125
+ if (tailTokenCount + lineTokens > tailTokens) {
126
+ break;
127
+ }
128
+ tailLines.unshift(line);
129
+ tailTokenCount += lineTokens;
130
+ }
131
+ // Ensure we don't overlap
132
+ const headEndIndex = headLines.length;
133
+ const tailStartIndex = lines.length - tailLines.length;
134
+ if (headEndIndex >= tailStartIndex) {
135
+ // Content is not large enough to truncate meaningfully
136
+ return content;
137
+ }
138
+ // Calculate lines removed for the marker
139
+ const linesRemoved = tailStartIndex - headEndIndex;
140
+ const marker = `\n\n[... ${linesRemoved} lines truncated to save context ...]\n\n`;
141
+ return headLines.join("\n") + marker + tailLines.join("\n");
142
+ }
143
+ /**
144
+ * Estimates if a tool output would benefit from truncation.
145
+ * Used for preview/stats without modifying content.
146
+ */
147
+ export function estimateTruncationSavings(output, maxTokens = 2000) {
148
+ if (!output || typeof output !== "string") {
149
+ return { wouldTruncate: false, estimatedSavings: 0 };
150
+ }
151
+ const tokenCount = countTokens(output);
152
+ if (tokenCount <= maxTokens) {
153
+ return { wouldTruncate: false, estimatedSavings: 0 };
154
+ }
155
+ // Estimate savings (roughly 20% of original after truncation)
156
+ const estimatedSavings = Math.floor(tokenCount * 0.6);
157
+ return { wouldTruncate: true, estimatedSavings };
158
+ }
159
+ //# 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,KACvB,MAyCF,CAAA"}
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
- for (const part of parts) {
43
- if (part.type !== "tool" || !pruneToolIds.includes(part.callID)) {
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.tool === "question") {
47
- const questions = part.state.input?.questions;
48
- if (questions !== undefined) {
49
- const content = typeof questions === "string" ? questions : JSON.stringify(questions);
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
- else if (part.state.status === "error") {
61
- const content = typeof part.state.error === "string"
62
- ? part.state.error
63
- : JSON.stringify(part.state.error);
64
- contents.push(content);
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/strategies/utils.ts"],"names":[],"mappings":"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"}