@tuanhung303/opencode-acp 2.2.0 โ†’ 2.2.2

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 (160) hide show
  1. package/README.md +131 -71
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +10 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/commands/budget.d.ts +15 -0
  6. package/dist/lib/commands/budget.d.ts.map +1 -0
  7. package/dist/lib/commands/budget.js +120 -0
  8. package/dist/lib/commands/budget.js.map +1 -0
  9. package/dist/lib/commands/context.d.ts +1 -1
  10. package/dist/lib/commands/context.js +4 -4
  11. package/dist/lib/commands/context.js.map +1 -1
  12. package/dist/lib/commands/help.d.ts.map +1 -1
  13. package/dist/lib/commands/help.js +2 -0
  14. package/dist/lib/commands/help.js.map +1 -1
  15. package/dist/lib/commands/protected.d.ts +17 -0
  16. package/dist/lib/commands/protected.d.ts.map +1 -0
  17. package/dist/lib/commands/protected.js +50 -0
  18. package/dist/lib/commands/protected.js.map +1 -0
  19. package/dist/lib/commands/stats.d.ts +1 -1
  20. package/dist/lib/commands/stats.d.ts.map +1 -1
  21. package/dist/lib/commands/stats.js +24 -4
  22. package/dist/lib/commands/stats.js.map +1 -1
  23. package/dist/lib/commands/sweep.d.ts.map +1 -1
  24. package/dist/lib/commands/sweep.js +5 -2
  25. package/dist/lib/commands/sweep.js.map +1 -1
  26. package/dist/lib/config-schema.d.ts +119 -0
  27. package/dist/lib/config-schema.d.ts.map +1 -0
  28. package/dist/lib/config-schema.js +97 -0
  29. package/dist/lib/config-schema.js.map +1 -0
  30. package/dist/lib/config.d.ts +7 -30
  31. package/dist/lib/config.d.ts.map +1 -1
  32. package/dist/lib/config.js +45 -483
  33. package/dist/lib/config.js.map +1 -1
  34. package/dist/lib/hooks.d.ts +14 -0
  35. package/dist/lib/hooks.d.ts.map +1 -1
  36. package/dist/lib/hooks.js +120 -13
  37. package/dist/lib/hooks.js.map +1 -1
  38. package/dist/lib/logger.d.ts +25 -1
  39. package/dist/lib/logger.d.ts.map +1 -1
  40. package/dist/lib/logger.js +45 -4
  41. package/dist/lib/logger.js.map +1 -1
  42. package/dist/lib/messages/index.d.ts +1 -1
  43. package/dist/lib/messages/index.d.ts.map +1 -1
  44. package/dist/lib/messages/index.js +1 -1
  45. package/dist/lib/messages/index.js.map +1 -1
  46. package/dist/lib/messages/inject.d.ts +6 -1
  47. package/dist/lib/messages/inject.d.ts.map +1 -1
  48. package/dist/lib/messages/inject.js +8 -125
  49. package/dist/lib/messages/inject.js.map +1 -1
  50. package/dist/lib/messages/prune.d.ts +8 -0
  51. package/dist/lib/messages/prune.d.ts.map +1 -1
  52. package/dist/lib/messages/prune.js +89 -2
  53. package/dist/lib/messages/prune.js.map +1 -1
  54. package/dist/lib/messages/utils.d.ts +12 -0
  55. package/dist/lib/messages/utils.d.ts.map +1 -1
  56. package/dist/lib/messages/utils.js +34 -0
  57. package/dist/lib/messages/utils.js.map +1 -1
  58. package/dist/lib/prompts/discard-tool-spec.d.ts +1 -1
  59. package/dist/lib/prompts/discard-tool-spec.d.ts.map +1 -1
  60. package/dist/lib/prompts/discard-tool-spec.js +30 -17
  61. package/dist/lib/prompts/discard-tool-spec.js.map +1 -1
  62. package/dist/lib/prompts/extract-tool-spec.d.ts +1 -1
  63. package/dist/lib/prompts/extract-tool-spec.d.ts.map +1 -1
  64. package/dist/lib/prompts/extract-tool-spec.js +19 -11
  65. package/dist/lib/prompts/extract-tool-spec.js.map +1 -1
  66. package/dist/lib/prompts/index.d.ts.map +1 -1
  67. package/dist/lib/prompts/index.js +2 -7
  68. package/dist/lib/prompts/index.js.map +1 -1
  69. package/dist/lib/prompts/restore-tool-spec.d.ts +2 -0
  70. package/dist/lib/prompts/restore-tool-spec.d.ts.map +1 -0
  71. package/dist/lib/prompts/restore-tool-spec.js +37 -0
  72. package/dist/lib/prompts/restore-tool-spec.js.map +1 -0
  73. package/dist/lib/prompts/system/both.d.ts +1 -1
  74. package/dist/lib/prompts/system/both.d.ts.map +1 -1
  75. package/dist/lib/prompts/system/both.js +20 -16
  76. package/dist/lib/prompts/system/both.js.map +1 -1
  77. package/dist/lib/prompts/system/discard.d.ts +1 -1
  78. package/dist/lib/prompts/system/discard.d.ts.map +1 -1
  79. package/dist/lib/prompts/system/discard.js +19 -16
  80. package/dist/lib/prompts/system/discard.js.map +1 -1
  81. package/dist/lib/prompts/system/extract.d.ts +1 -1
  82. package/dist/lib/prompts/system/extract.d.ts.map +1 -1
  83. package/dist/lib/prompts/system/extract.js +19 -16
  84. package/dist/lib/prompts/system/extract.js.map +1 -1
  85. package/dist/lib/protected-file-patterns.js +1 -1
  86. package/dist/lib/protected-file-patterns.js.map +1 -1
  87. package/dist/lib/safe-execute.d.ts +20 -0
  88. package/dist/lib/safe-execute.d.ts.map +1 -0
  89. package/dist/lib/safe-execute.js +38 -0
  90. package/dist/lib/safe-execute.js.map +1 -0
  91. package/dist/lib/shared-utils.js +1 -1
  92. package/dist/lib/shared-utils.js.map +1 -1
  93. package/dist/lib/state/persistence.d.ts +6 -1
  94. package/dist/lib/state/persistence.d.ts.map +1 -1
  95. package/dist/lib/state/persistence.js +59 -1
  96. package/dist/lib/state/persistence.js.map +1 -1
  97. package/dist/lib/state/state.d.ts.map +1 -1
  98. package/dist/lib/state/state.js +54 -3
  99. package/dist/lib/state/state.js.map +1 -1
  100. package/dist/lib/state/tool-cache.d.ts +2 -0
  101. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  102. package/dist/lib/state/tool-cache.js +34 -12
  103. package/dist/lib/state/tool-cache.js.map +1 -1
  104. package/dist/lib/state/types.d.ts +50 -5
  105. package/dist/lib/state/types.d.ts.map +1 -1
  106. package/dist/lib/strategies/deduplication.d.ts +1 -0
  107. package/dist/lib/strategies/deduplication.d.ts.map +1 -1
  108. package/dist/lib/strategies/deduplication.js +87 -3
  109. package/dist/lib/strategies/deduplication.js.map +1 -1
  110. package/dist/lib/strategies/index.d.ts +1 -5
  111. package/dist/lib/strategies/index.d.ts.map +1 -1
  112. package/dist/lib/strategies/index.js +1 -5
  113. package/dist/lib/strategies/index.js.map +1 -1
  114. package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
  115. package/dist/lib/strategies/purge-errors.js +4 -1
  116. package/dist/lib/strategies/purge-errors.js.map +1 -1
  117. package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
  118. package/dist/lib/strategies/supersede-writes.js +7 -1
  119. package/dist/lib/strategies/supersede-writes.js.map +1 -1
  120. package/dist/lib/strategies/tools.d.ts +1 -0
  121. package/dist/lib/strategies/tools.d.ts.map +1 -1
  122. package/dist/lib/strategies/tools.js +215 -62
  123. package/dist/lib/strategies/tools.js.map +1 -1
  124. package/dist/lib/ui/notification.d.ts +5 -2
  125. package/dist/lib/ui/notification.d.ts.map +1 -1
  126. package/dist/lib/ui/notification.js +10 -6
  127. package/dist/lib/ui/notification.js.map +1 -1
  128. package/dist/lib/ui/utils.d.ts +3 -3
  129. package/dist/lib/ui/utils.d.ts.map +1 -1
  130. package/dist/lib/ui/utils.js +38 -12
  131. package/dist/lib/ui/utils.js.map +1 -1
  132. package/package.json +7 -12
  133. package/dist/lib/prompts/nudge/both.d.ts +0 -2
  134. package/dist/lib/prompts/nudge/both.d.ts.map +0 -1
  135. package/dist/lib/prompts/nudge/both.js +0 -11
  136. package/dist/lib/prompts/nudge/both.js.map +0 -1
  137. package/dist/lib/prompts/nudge/discard.d.ts +0 -2
  138. package/dist/lib/prompts/nudge/discard.d.ts.map +0 -1
  139. package/dist/lib/prompts/nudge/discard.js +0 -10
  140. package/dist/lib/prompts/nudge/discard.js.map +0 -1
  141. package/dist/lib/prompts/nudge/extract.d.ts +0 -2
  142. package/dist/lib/prompts/nudge/extract.d.ts.map +0 -1
  143. package/dist/lib/prompts/nudge/extract.js +0 -10
  144. package/dist/lib/prompts/nudge/extract.js.map +0 -1
  145. package/dist/lib/strategies/head-tail-truncation.d.ts +0 -15
  146. package/dist/lib/strategies/head-tail-truncation.d.ts.map +0 -1
  147. package/dist/lib/strategies/head-tail-truncation.js +0 -144
  148. package/dist/lib/strategies/head-tail-truncation.js.map +0 -1
  149. package/dist/lib/strategies/placeholder-compression.d.ts +0 -5
  150. package/dist/lib/strategies/placeholder-compression.d.ts.map +0 -1
  151. package/dist/lib/strategies/placeholder-compression.js +0 -148
  152. package/dist/lib/strategies/placeholder-compression.js.map +0 -1
  153. package/dist/lib/strategies/prune-thinking.d.ts +0 -15
  154. package/dist/lib/strategies/prune-thinking.d.ts.map +0 -1
  155. package/dist/lib/strategies/prune-thinking.js +0 -79
  156. package/dist/lib/strategies/prune-thinking.js.map +0 -1
  157. package/dist/lib/strategies/read-consolidation.d.ts +0 -21
  158. package/dist/lib/strategies/read-consolidation.d.ts.map +0 -1
  159. package/dist/lib/strategies/read-consolidation.js +0 -155
  160. package/dist/lib/strategies/read-consolidation.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { tool } from "@opencode-ai/plugin";
2
- import { buildToolIdList } from "../messages/utils";
3
2
  import { sendUnifiedNotification } from "../ui/notification";
4
3
  import { formatPruningResultForTool } from "../ui/utils";
5
4
  import { ensureSessionInitialized } from "../state";
@@ -9,103 +8,167 @@ import { calculateTokensSaved, getCurrentParams } from "./utils";
9
8
  import { getFilePathFromParameters, isProtectedFilePath } from "../protected-file-patterns";
10
9
  const DISCARD_TOOL_DESCRIPTION = loadPrompt("discard-tool-spec");
11
10
  const EXTRACT_TOOL_DESCRIPTION = loadPrompt("extract-tool-spec");
12
- // Shared logic for executing prune operations.
13
- async function executePruneOperation(ctx, toolCtx, ids, reason, toolName, distillation) {
11
+ const RESTORE_TOOL_DESCRIPTION = loadPrompt("restore-tool-spec");
12
+ /**
13
+ * Execute a prune operation using call IDs directly.
14
+ * This is the hash-based version that works with resolved call IDs.
15
+ */
16
+ async function executePruneOperationByCallIds(ctx, toolCtx, callIds, hashes, reason, toolName, distillation) {
14
17
  const { client, state, logger, config, workingDirectory } = ctx;
15
18
  const sessionId = toolCtx.sessionID;
16
19
  logger.info(`${toolName} tool invoked`);
17
- logger.info(JSON.stringify(reason ? { ids, reason } : { ids }));
18
- if (!ids || ids.length === 0) {
19
- logger.debug(`${toolName} tool called but ids is empty or undefined`);
20
- throw new Error(`No IDs provided. Check the <prunable-tools> list for available IDs to ${toolName.toLowerCase()}.`);
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#).`);
21
24
  }
22
- const numericToolIds = ids
23
- .map((id) => parseInt(id, 10))
24
- .filter((n) => !isNaN(n));
25
- if (numericToolIds.length === 0) {
26
- logger.debug(`No numeric tool IDs provided for ${toolName}: ` + JSON.stringify(ids));
27
- throw new Error("No numeric IDs provided. Format: ids: [id1, id2, ...]");
28
- }
29
- // Fetch messages to calculate tokens and find current agent
25
+ // Fetch messages to calculate tokens
30
26
  const messagesResponse = await client.session.messages({
31
27
  path: { id: sessionId },
32
28
  });
33
29
  const messages = messagesResponse.data || messagesResponse;
34
30
  await ensureSessionInitialized(ctx.client, state, sessionId, logger, messages);
35
31
  const currentParams = getCurrentParams(state, messages, logger);
36
- const toolIdList = buildToolIdList(state, messages, logger);
37
- // Validate that all numeric IDs are within bounds
38
- if (numericToolIds.some((id) => id < 0 || id >= toolIdList.length)) {
39
- logger.debug("Invalid tool IDs provided: " + numericToolIds.join(", "));
40
- throw new Error("Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.");
41
- }
42
- // Validate that all IDs exist in cache and aren't protected
43
- // (rejects hallucinated IDs and turn-protected tools not shown in <prunable-tools>)
44
- for (const index of numericToolIds) {
45
- const id = toolIdList[index];
46
- const metadata = state.toolParameters.get(id);
32
+ // Validate that all call IDs exist in cache and aren't protected
33
+ for (const callId of callIds) {
34
+ const metadata = state.toolParameters.get(callId);
47
35
  if (!metadata) {
48
- logger.debug("Rejecting prune request - ID not in cache (turn-protected or hallucinated)", { index, id });
49
- throw new Error("Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.");
36
+ const hash = state.callIdToHash.get(callId) || "unknown";
37
+ logger.debug("Rejecting prune request - call ID not in cache", { callId, hash });
38
+ throw new Error(`Invalid hash provided. The tool may have already been discarded.`);
50
39
  }
51
40
  const allProtectedTools = config.tools.settings.protectedTools;
52
41
  if (allProtectedTools.includes(metadata.tool)) {
42
+ const hash = state.callIdToHash.get(callId) || "unknown";
53
43
  logger.debug("Rejecting prune request - protected tool", {
54
- index,
55
- id,
44
+ callId,
45
+ hash,
56
46
  tool: metadata.tool,
57
47
  });
58
- throw new Error("Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.");
48
+ throw new Error(`Cannot discard: '${metadata.tool}' is a protected tool.\n` +
49
+ `Protected tools: ${allProtectedTools.join(", ")}\n` +
50
+ `To modify protection, update 'tools.settings.protectedTools' in your ACP config.`);
59
51
  }
60
52
  const filePath = getFilePathFromParameters(metadata.parameters);
61
53
  if (isProtectedFilePath(filePath, config.protectedFilePatterns)) {
54
+ const hash = state.callIdToHash.get(callId) || "unknown";
62
55
  logger.debug("Rejecting prune request - protected file path", {
63
- index,
64
- id,
56
+ callId,
57
+ hash,
65
58
  tool: metadata.tool,
66
59
  filePath,
67
60
  });
68
- throw new Error("Invalid IDs provided. Only use numeric IDs from the <prunable-tools> list.");
61
+ const protectedPatterns = config.protectedFilePatterns.length > 0
62
+ ? `\nProtected patterns: ${config.protectedFilePatterns.join(", ")}`
63
+ : "";
64
+ throw new Error(`Cannot discard: ${filePath} is a protected file path.${protectedPatterns}\n` +
65
+ `To modify protection, update 'protectedFilePatterns' in your ACP config.`);
69
66
  }
70
67
  }
71
- const pruneToolIds = numericToolIds.map((index) => toolIdList[index]);
72
- state.prune.toolIds.push(...pruneToolIds);
68
+ // Add to prune list
69
+ state.prune.toolIds.push(...callIds);
70
+ // Collect metadata for notification
73
71
  const toolMetadata = new Map();
74
- for (const id of pruneToolIds) {
75
- const toolParameters = state.toolParameters.get(id);
72
+ for (const callId of callIds) {
73
+ const toolParameters = state.toolParameters.get(callId);
76
74
  if (toolParameters) {
77
- toolMetadata.set(id, toolParameters);
75
+ toolMetadata.set(callId, toolParameters);
78
76
  }
79
77
  else {
80
- logger.debug("No metadata found for ID", { id });
78
+ logger.debug("No metadata found for call ID", { callId });
81
79
  }
82
80
  }
83
- state.stats.pruneTokenCounter += calculateTokensSaved(state, messages, pruneToolIds);
84
- await sendUnifiedNotification(client, logger, config, state, sessionId, pruneToolIds, toolMetadata, reason, currentParams, workingDirectory, distillation);
81
+ // Calculate token savings
82
+ const tokensSaved = calculateTokensSaved(state, messages, callIds);
83
+ state.stats.pruneTokenCounter += tokensSaved;
84
+ state.stats.pruneMessageCounter += callIds.length;
85
+ // Track strategy effectiveness
86
+ if (toolName === "Discard") {
87
+ state.stats.strategyStats.manualDiscard.count += callIds.length;
88
+ state.stats.strategyStats.manualDiscard.tokens += tokensSaved;
89
+ }
90
+ else if (toolName === "Extract") {
91
+ state.stats.strategyStats.extraction.count += callIds.length;
92
+ state.stats.strategyStats.extraction.tokens += tokensSaved;
93
+ }
94
+ // Store stats for display
95
+ state.lastDiscardStats = {
96
+ itemCount: callIds.length,
97
+ tokensSaved: state.stats.pruneTokenCounter,
98
+ };
99
+ // Record in discard history
100
+ state.discardHistory.push({
101
+ timestamp: Date.now(),
102
+ hashes,
103
+ tokensSaved,
104
+ reason,
105
+ });
106
+ await sendUnifiedNotification(client, logger, config, state, sessionId, callIds, toolMetadata, reason, currentParams, workingDirectory, distillation);
85
107
  state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
86
108
  state.stats.pruneTokenCounter = 0;
87
- state.nudgeCounter = 0;
109
+ state.stats.totalPruneMessages += state.stats.pruneMessageCounter;
110
+ state.stats.pruneMessageCounter = 0;
88
111
  saveSessionState(state, logger).catch((err) => logger.error("Failed to persist state", { error: err.message }));
89
- return formatPruningResultForTool(pruneToolIds, toolMetadata, workingDirectory);
112
+ return formatPruningResultForTool(callIds, toolMetadata, workingDirectory, true);
90
113
  }
91
114
  export function createDiscardTool(ctx) {
92
115
  return tool({
93
116
  description: DISCARD_TOOL_DESCRIPTION,
94
117
  args: {
95
- ids: tool.schema
118
+ reason: tool.schema
119
+ .string()
120
+ .describe("Why you're discarding: 'noise' | 'completion' | 'superseded' | 'exploration' | 'duplicate'"),
121
+ hashes: tool.schema
96
122
  .array(tool.schema.string())
97
- .describe("First element is the reason ('completion' or 'noise'), followed by numeric IDs as strings to discard"),
123
+ .describe("Hash identifiers from tool outputs (e.g., ['#r_a1b2c#', '#g_d4e5f#'])"),
98
124
  },
99
125
  async execute(args, toolCtx) {
100
- // Parse reason from first element, numeric IDs from the rest
101
- const reason = args.ids?.[0];
102
- const validReasons = ["completion", "noise"];
103
- if (typeof reason !== "string" || !validReasons.includes(reason)) {
104
- ctx.logger.debug("Invalid discard reason provided: " + reason);
105
- throw new Error("No valid reason found. Use 'completion' or 'noise' as the first element.");
126
+ const { state, logger } = ctx;
127
+ // Validate reason
128
+ const validReasons = [
129
+ "completion",
130
+ "noise",
131
+ "superseded",
132
+ "exploration",
133
+ "duplicate",
134
+ ];
135
+ if (!args.reason || !validReasons.includes(args.reason)) {
136
+ logger.debug("Invalid discard reason provided: " + args.reason);
137
+ throw new Error(`Invalid reason '${args.reason}'. Use one of: ${validReasons.join(", ")}`);
138
+ }
139
+ // Validate hashes provided
140
+ if (!args.hashes || args.hashes.length === 0) {
141
+ throw new Error("No hashes provided. Use hash identifiers from tool outputs (e.g., #r_a1b2c#).");
142
+ }
143
+ // Resolve hashes to call IDs
144
+ const callIds = [];
145
+ const validHashes = [];
146
+ const unknownHashes = [];
147
+ for (const hash of args.hashes) {
148
+ const callId = state.hashToCallId.get(hash);
149
+ if (callId) {
150
+ // Skip if already pruned
151
+ if (!state.prune.toolIds.includes(callId)) {
152
+ callIds.push(callId);
153
+ validHashes.push(hash);
154
+ }
155
+ else {
156
+ logger.debug(`Hash ${hash} already pruned, skipping`);
157
+ }
158
+ }
159
+ else {
160
+ unknownHashes.push(hash);
161
+ logger.warn(`Unknown hash: ${hash}`);
162
+ }
106
163
  }
107
- const numericIds = args.ids.slice(1);
108
- return executePruneOperation(ctx, toolCtx, numericIds, reason, "Discard");
164
+ if (unknownHashes.length > 0 && callIds.length === 0) {
165
+ throw new Error(`Unknown hashes: ${unknownHashes.join(", ")}. Use hash identifiers from tool outputs.`);
166
+ }
167
+ if (callIds.length === 0) {
168
+ throw new Error("No valid hashes to discard. Tools may have already been discarded.");
169
+ }
170
+ logger.info(`Discard: ${validHashes.length} hashes resolved to ${callIds.length} call IDs`);
171
+ return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, args.reason, "Discard");
109
172
  },
110
173
  });
111
174
  }
@@ -113,22 +176,112 @@ export function createExtractTool(ctx) {
113
176
  return tool({
114
177
  description: EXTRACT_TOOL_DESCRIPTION,
115
178
  args: {
116
- ids: tool.schema
179
+ hashes: tool.schema
117
180
  .array(tool.schema.string())
118
- .describe("Numeric IDs as strings to extract from the <prunable-tools> list"),
181
+ .describe("Hash identifiers from tool outputs (e.g., ['#r_a1b2c#', '#g_d4e5f#'])"),
119
182
  distillation: tool.schema
120
183
  .array(tool.schema.string())
121
- .describe("REQUIRED. Array of strings, one per ID (positional: distillation[0] is for ids[0], etc.)"),
184
+ .describe("REQUIRED. Array of strings, one per hash (positional: distillation[0] is for hashes[0], etc.)"),
185
+ preserve: tool.schema
186
+ .boolean()
187
+ .optional()
188
+ .describe("Set to true to keep original tool output after extraction. Default: false"),
122
189
  },
123
190
  async execute(args, toolCtx) {
191
+ const { state, logger } = ctx;
124
192
  if (!args.distillation || args.distillation.length === 0) {
125
- ctx.logger.debug("Extract tool called without distillation: " + JSON.stringify(args));
126
- throw new Error("Missing distillation. You must provide a distillation string for each ID.");
193
+ logger.debug("Extract tool called without distillation: " + JSON.stringify(args));
194
+ throw new Error("Missing distillation. You must provide a distillation string for each hash.");
195
+ }
196
+ if (!args.hashes || args.hashes.length === 0) {
197
+ throw new Error("No hashes provided. Use hash identifiers from tool outputs (e.g., #r_a1b2c#).");
198
+ }
199
+ // Resolve hashes to call IDs
200
+ const callIds = [];
201
+ const validHashes = [];
202
+ for (const hash of args.hashes) {
203
+ const callId = state.hashToCallId.get(hash);
204
+ if (callId && !state.prune.toolIds.includes(callId)) {
205
+ callIds.push(callId);
206
+ validHashes.push(hash);
207
+ }
208
+ else {
209
+ logger.warn(`Unknown or already pruned hash: ${hash}`);
210
+ }
211
+ }
212
+ if (callIds.length === 0) {
213
+ throw new Error("No valid hashes to extract. Tools may have already been discarded.");
127
214
  }
128
215
  // Log the distillation for debugging/analysis
129
- ctx.logger.info("Distillation data received:");
130
- ctx.logger.info(JSON.stringify(args.distillation, null, 2));
131
- return executePruneOperation(ctx, toolCtx, args.ids, "extraction", "Extract", args.distillation);
216
+ logger.info("Distillation data received:");
217
+ logger.info(JSON.stringify(args.distillation, null, 2));
218
+ // If preserve is true, don't prune - just return success with distillation
219
+ 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")}`;
222
+ }
223
+ return executePruneOperationByCallIds(ctx, toolCtx, callIds, validHashes, "extraction", "Extract", args.distillation);
224
+ },
225
+ });
226
+ }
227
+ export function createRestoreTool(ctx) {
228
+ return tool({
229
+ description: RESTORE_TOOL_DESCRIPTION,
230
+ args: {
231
+ hashes: tool.schema
232
+ .array(tool.schema.string())
233
+ .describe("Hash identifiers of pruned tools to restore (e.g., ['#r_a1b2c#', '#g_d4e5f#'])"),
234
+ },
235
+ async execute(args, toolCtx) {
236
+ const { state, logger } = ctx;
237
+ const sessionId = toolCtx.sessionID;
238
+ 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#).");
240
+ }
241
+ // Resolve hashes to call IDs and restore
242
+ const restored = [];
243
+ const notFound = [];
244
+ const notPruned = [];
245
+ for (const hash of args.hashes) {
246
+ const callId = state.hashToCallId.get(hash);
247
+ if (!callId) {
248
+ notFound.push(hash);
249
+ continue;
250
+ }
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);
255
+ continue;
256
+ }
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})`);
261
+ }
262
+ // Build result message
263
+ const lines = [];
264
+ if (restored.length > 0) {
265
+ lines.push(`Restored ${restored.length} tool(s):`);
266
+ for (const hash of restored) {
267
+ lines.push(` โœ“ ${hash}`);
268
+ }
269
+ }
270
+ if (notFound.length > 0) {
271
+ lines.push(`\nNot found (unknown hash):`);
272
+ for (const hash of notFound) {
273
+ lines.push(` โœ— ${hash}`);
274
+ }
275
+ }
276
+ if (notPruned.length > 0) {
277
+ lines.push(`\nNot pruned (already active):`);
278
+ for (const hash of notPruned) {
279
+ lines.push(` โ—‹ ${hash}`);
280
+ }
281
+ }
282
+ // Save state
283
+ saveSessionState(state, logger).catch((err) => logger.error("Failed to persist state", { error: err.message }));
284
+ return lines.join("\n");
132
285
  },
133
286
  });
134
287
  }
@@ -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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"}
@@ -2,8 +2,11 @@ import type { Logger } from "../logger";
2
2
  import type { SessionState } from "../state";
3
3
  import { ToolParameterEntry } from "../state";
4
4
  import { PluginConfig } from "../config";
5
- export type PruneReason = "completion" | "noise" | "extraction";
5
+ export type PruneReason = "completion" | "noise" | "superseded" | "exploration" | "duplicate" | "extraction";
6
6
  export declare const PRUNE_REASON_LABELS: Record<PruneReason, string>;
7
- export declare function sendUnifiedNotification(client: any, logger: Logger, config: PluginConfig, state: SessionState, sessionId: string, pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, reason: PruneReason | undefined, params: any, workingDirectory: string, distillation?: string[]): Promise<boolean>;
7
+ export interface NotifyOptions {
8
+ simplified?: boolean;
9
+ }
10
+ export declare function sendUnifiedNotification(client: any, logger: Logger, config: PluginConfig, state: SessionState, sessionId: string, pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, reason: PruneReason | undefined, params: any, workingDirectory: string, distillation?: string[], options?: NotifyOptions): Promise<boolean>;
8
11
  export declare function sendIgnoredMessage(client: any, sessionID: string, text: string, params: any, logger: Logger): Promise<void>;
9
12
  //# sourceMappingURL=notification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAQ5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,CAAA;AAC/D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI3D,CAAA;AA+CD,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,GAAG,EACX,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiCf"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAQ5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,WAAW,GACjB,YAAY,GACZ,OAAO,GACP,YAAY,GACZ,aAAa,GACb,WAAW,GACX,YAAY,CAAA;AAClB,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAO3D,CAAA;AA+DD,MAAM,WAAW,aAAa;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,MAAM,EAAE,GAAG,EACX,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,GAAG,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -2,31 +2,34 @@ import { countDistillationTokens, formatExtracted, formatPrunedItemsList, format
2
2
  export const PRUNE_REASON_LABELS = {
3
3
  completion: "Task Complete",
4
4
  noise: "Noise Removal",
5
+ superseded: "Superseded",
6
+ exploration: "Dead-end Exploration",
7
+ duplicate: "Duplicate Content",
5
8
  extraction: "Extraction",
6
9
  };
7
10
  function buildMinimalMessage(state, reason, distillation, showDistillation) {
8
11
  const extractedTokens = countDistillationTokens(distillation);
9
12
  const extractedSuffix = extractedTokens > 0 ? ` (extracted ${formatTokenCount(extractedTokens)})` : "";
10
13
  const reasonSuffix = reason && extractedTokens === 0 ? ` โ€” ${PRUNE_REASON_LABELS[reason]}` : "";
11
- let message = formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter) +
14
+ let message = formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter, state.stats.totalPruneMessages, state.stats.pruneMessageCounter) +
12
15
  reasonSuffix +
13
16
  extractedSuffix;
14
17
  return message + formatExtracted(showDistillation ? distillation : undefined);
15
18
  }
16
- function buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory, distillation, showDistillation) {
17
- let message = formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter);
19
+ function buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory, distillation, showDistillation, simplified = false) {
20
+ let message = formatStatsHeader(state.stats.totalPruneTokens, state.stats.pruneTokenCounter, state.stats.totalPruneMessages, state.stats.pruneMessageCounter);
18
21
  if (pruneToolIds.length > 0) {
19
22
  const pruneTokenCounterStr = `~${formatTokenCount(state.stats.pruneTokenCounter)}`;
20
23
  const extractedTokens = countDistillationTokens(distillation);
21
24
  const extractedSuffix = extractedTokens > 0 ? `, extracted ${formatTokenCount(extractedTokens)}` : "";
22
25
  const reasonLabel = reason && extractedTokens === 0 ? ` โ€” ${PRUNE_REASON_LABELS[reason]}` : "";
23
26
  message += `\n\nโ–ฃ Pruning (${pruneTokenCounterStr}${extractedSuffix})${reasonLabel}`;
24
- const itemLines = formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory);
27
+ const itemLines = formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory, simplified);
25
28
  message += "\n" + itemLines.join("\n");
26
29
  }
27
30
  return (message + formatExtracted(showDistillation ? distillation : undefined)).trim();
28
31
  }
29
- export async function sendUnifiedNotification(client, logger, config, state, sessionId, pruneToolIds, toolMetadata, reason, params, workingDirectory, distillation) {
32
+ export async function sendUnifiedNotification(client, logger, config, state, sessionId, pruneToolIds, toolMetadata, reason, params, workingDirectory, distillation, options) {
30
33
  const hasPruned = pruneToolIds.length > 0;
31
34
  if (!hasPruned) {
32
35
  return false;
@@ -35,9 +38,10 @@ export async function sendUnifiedNotification(client, logger, config, state, ses
35
38
  return false;
36
39
  }
37
40
  const showDistillation = config.tools.extract.showDistillation;
41
+ const simplified = options?.simplified ?? false;
38
42
  const message = config.pruneNotification === "minimal"
39
43
  ? buildMinimalMessage(state, reason, distillation, showDistillation)
40
- : buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory, distillation, showDistillation);
44
+ : buildDetailedMessage(state, reason, pruneToolIds, toolMetadata, workingDirectory, distillation, showDistillation, simplified);
41
45
  await sendIgnoredMessage(client, sessionId, message, params, logger);
42
46
  return true;
43
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../lib/ui/notification.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { ToolParameterEntry } from "../state";
2
2
  export declare function countDistillationTokens(distillation?: string[]): number;
3
3
  export declare function formatExtracted(distillation?: string[]): string;
4
- export declare function formatStatsHeader(totalTokensSaved: number, pruneTokenCounter: number): string;
4
+ export declare function formatStatsHeader(totalTokensSaved: number, pruneTokenCounter: number, totalMessagesPruned: number, messagesPruned: number): string;
5
5
  export declare function formatTokenCount(tokens: number): string;
6
6
  export declare function truncate(str: string, maxLen?: number): string;
7
7
  export declare function shortenPath(input: string, workingDirectory?: string): string;
8
- export declare function formatPrunedItemsList(pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string[];
9
- export declare function formatPruningResultForTool(prunedIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string): string;
8
+ export declare function formatPrunedItemsList(pruneToolIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string, simplified?: boolean): string[];
9
+ export declare function formatPruningResultForTool(prunedIds: string[], toolMetadata: Map<string, ToolParameterEntry>, workingDirectory?: string, simplified?: boolean): string;
10
10
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/ui/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAI7C,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAGvE;AAED,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAS/D;AAED,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAeD,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,EAAE,CA0BV;AAED,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAWR"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/ui/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAI7C,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAGvE;AAED,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAS/D;AAED,wBAAgB,iBAAiB,CAC7B,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,GACvB,MAAM,CAgBR;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAeD,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,EACzB,UAAU,GAAE,OAAe,GAC5B,MAAM,EAAE,CAwCV;AAED,wBAAgB,0BAA0B,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7C,gBAAgB,CAAC,EAAE,MAAM,EACzB,UAAU,GAAE,OAAe,GAC5B,MAAM,CAWR"}
@@ -15,15 +15,26 @@ export function formatExtracted(distillation) {
15
15
  }
16
16
  return result;
17
17
  }
18
- export function formatStatsHeader(totalTokensSaved, pruneTokenCounter) {
19
- const totalTokensSavedStr = `~${formatTokenCount(totalTokensSaved + pruneTokenCounter)}`;
20
- return [`โ–ฃ DCP | ${totalTokensSavedStr} saved total`].join("\n");
18
+ export function formatStatsHeader(totalTokensSaved, pruneTokenCounter, totalMessagesPruned, messagesPruned) {
19
+ const totalMessages = totalMessagesPruned + messagesPruned;
20
+ const totalTokens = totalTokensSaved + pruneTokenCounter;
21
+ const totalTokensStr = `~${formatTokenCount(totalTokens)}`;
22
+ // Show addition indicator for current operation
23
+ const additionParts = [];
24
+ if (messagesPruned > 0) {
25
+ additionParts.push(`+${messagesPruned} ๐Ÿ’ฌ`);
26
+ }
27
+ if (pruneTokenCounter > 0) {
28
+ additionParts.push(`+${formatTokenCount(pruneTokenCounter)} ๐Ÿช™`);
29
+ }
30
+ const additionSuffix = additionParts.length > 0 ? ` (${additionParts.join(", ")})` : "";
31
+ return `acp - ${totalMessages} ๐Ÿ’ฌ ยท ${totalTokensStr} ๐Ÿช™${additionSuffix}`;
21
32
  }
22
33
  export function formatTokenCount(tokens) {
23
34
  if (tokens >= 1000) {
24
- return `${(tokens / 1000).toFixed(1)}K`.replace(".0K", "K") + " tokens";
35
+ return `${(tokens / 1000).toFixed(1)}K`.replace(".0K", "K");
25
36
  }
26
- return tokens.toString() + " tokens";
37
+ return tokens.toString();
27
38
  }
28
39
  export function truncate(str, maxLen = 60) {
29
40
  if (str.length <= maxLen)
@@ -32,7 +43,7 @@ export function truncate(str, maxLen = 60) {
32
43
  }
33
44
  export function shortenPath(input, workingDirectory) {
34
45
  const inPathMatch = input.match(/^(.+) in (.+)$/);
35
- if (inPathMatch) {
46
+ if (inPathMatch?.[1] && inPathMatch[2]) {
36
47
  const prefix = inPathMatch[1];
37
48
  const pathPart = inPathMatch[2];
38
49
  const shortenedPath = shortenSinglePath(pathPart, workingDirectory);
@@ -51,7 +62,7 @@ function shortenSinglePath(path, workingDirectory) {
51
62
  }
52
63
  return path;
53
64
  }
54
- export function formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory) {
65
+ export function formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirectory, simplified = false) {
55
66
  const lines = [];
56
67
  for (const id of pruneToolIds) {
57
68
  const metadata = toolMetadata.get(id);
@@ -60,27 +71,42 @@ export function formatPrunedItemsList(pruneToolIds, toolMetadata, workingDirecto
60
71
  if (paramKey) {
61
72
  // Use 60 char limit to match notification style
62
73
  const displayKey = truncate(shortenPath(paramKey, workingDirectory), 60);
63
- lines.push(`โ†’ ${metadata.tool}: ${displayKey}`);
74
+ if (simplified) {
75
+ lines.push(displayKey);
76
+ }
77
+ else {
78
+ lines.push(`โ†’ ${metadata.tool}: ${displayKey}`);
79
+ }
64
80
  }
65
81
  else {
66
- lines.push(`โ†’ ${metadata.tool}`);
82
+ if (simplified) {
83
+ lines.push(metadata.tool);
84
+ }
85
+ else {
86
+ lines.push(`โ†’ ${metadata.tool}`);
87
+ }
67
88
  }
68
89
  }
69
90
  }
70
91
  const knownCount = pruneToolIds.filter((id) => toolMetadata.has(id)).length;
71
92
  const unknownCount = pruneToolIds.length - knownCount;
72
93
  if (unknownCount > 0) {
73
- lines.push(`โ†’ (${unknownCount} tool${unknownCount > 1 ? "s" : ""} with unknown metadata)`);
94
+ if (simplified) {
95
+ lines.push(`(${unknownCount} tool${unknownCount > 1 ? "s" : ""} with unknown metadata)`);
96
+ }
97
+ else {
98
+ lines.push(`โ†’ (${unknownCount} tool${unknownCount > 1 ? "s" : ""} with unknown metadata)`);
99
+ }
74
100
  }
75
101
  return lines;
76
102
  }
77
- export function formatPruningResultForTool(prunedIds, toolMetadata, workingDirectory) {
103
+ export function formatPruningResultForTool(prunedIds, toolMetadata, workingDirectory, simplified = false) {
78
104
  const lines = [];
79
105
  lines.push(`Context pruning complete. Pruned ${prunedIds.length} tool outputs.`);
80
106
  lines.push("");
81
107
  if (prunedIds.length > 0) {
82
108
  lines.push(`Semantically pruned (${prunedIds.length}):`);
83
- lines.push(...formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory));
109
+ lines.push(...formatPrunedItemsList(prunedIds, toolMetadata, workingDirectory, simplified));
84
110
  }
85
111
  return lines.join("\n").trim();
86
112
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/ui/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/ui/utils.ts"],"names":[],"mappings":"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"}