@tarquinen/opencode-dcp 0.4.17 → 1.0.0-beta.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 (163) hide show
  1. package/README.md +58 -30
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +19 -59
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/config.d.ts +30 -13
  6. package/dist/lib/config.d.ts.map +1 -1
  7. package/dist/lib/config.js +339 -121
  8. package/dist/lib/config.js.map +1 -1
  9. package/dist/lib/hooks.d.ts +5 -13
  10. package/dist/lib/hooks.d.ts.map +1 -1
  11. package/dist/lib/hooks.js +26 -125
  12. package/dist/lib/hooks.js.map +1 -1
  13. package/dist/lib/logger.d.ts +5 -9
  14. package/dist/lib/logger.d.ts.map +1 -1
  15. package/dist/lib/logger.js +30 -160
  16. package/dist/lib/logger.js.map +1 -1
  17. package/dist/lib/messages/index.d.ts +2 -0
  18. package/dist/lib/messages/index.d.ts.map +1 -0
  19. package/dist/lib/messages/index.js +2 -0
  20. package/dist/lib/messages/index.js.map +1 -0
  21. package/dist/lib/messages/prune.d.ts +6 -0
  22. package/dist/lib/messages/prune.d.ts.map +1 -0
  23. package/dist/lib/messages/prune.js +85 -0
  24. package/dist/lib/messages/prune.js.map +1 -0
  25. package/dist/lib/messages/utils.d.ts +10 -0
  26. package/dist/lib/messages/utils.d.ts.map +1 -0
  27. package/dist/lib/messages/utils.js +103 -0
  28. package/dist/lib/messages/utils.js.map +1 -0
  29. package/dist/lib/model-selector.js +3 -3
  30. package/dist/lib/model-selector.js.map +1 -1
  31. package/dist/lib/{core/prompt.d.ts → prompt.d.ts} +1 -1
  32. package/dist/lib/prompt.d.ts.map +1 -0
  33. package/dist/lib/{core/prompt.js → prompt.js} +2 -6
  34. package/dist/lib/prompt.js.map +1 -0
  35. package/dist/lib/prompts/pruning.txt +1 -1
  36. package/dist/lib/prompts/tool.txt +3 -3
  37. package/dist/lib/state/index.d.ts +3 -27
  38. package/dist/lib/state/index.d.ts.map +1 -1
  39. package/dist/lib/state/index.js +3 -40
  40. package/dist/lib/state/index.js.map +1 -1
  41. package/dist/lib/state/persistence.d.ts +4 -4
  42. package/dist/lib/state/persistence.d.ts.map +1 -1
  43. package/dist/lib/state/persistence.js +24 -20
  44. package/dist/lib/state/persistence.js.map +1 -1
  45. package/dist/lib/state/state.d.ts +7 -0
  46. package/dist/lib/state/state.d.ts.map +1 -0
  47. package/dist/lib/state/state.js +76 -0
  48. package/dist/lib/state/state.js.map +1 -0
  49. package/dist/lib/state/tool-cache.d.ts +4 -6
  50. package/dist/lib/state/tool-cache.d.ts.map +1 -1
  51. package/dist/lib/state/tool-cache.js +20 -46
  52. package/dist/lib/state/tool-cache.js.map +1 -1
  53. package/dist/lib/state/types.d.ts +30 -0
  54. package/dist/lib/state/types.d.ts.map +1 -0
  55. package/dist/lib/state/types.js +2 -0
  56. package/dist/lib/state/types.js.map +1 -0
  57. package/dist/lib/strategies/deduplication.d.ts +10 -0
  58. package/dist/lib/strategies/deduplication.d.ts.map +1 -0
  59. package/dist/lib/strategies/deduplication.js +89 -0
  60. package/dist/lib/strategies/deduplication.js.map +1 -0
  61. package/dist/lib/strategies/index.d.ts +4 -0
  62. package/dist/lib/strategies/index.d.ts.map +1 -0
  63. package/dist/lib/strategies/index.js +4 -0
  64. package/dist/lib/strategies/index.js.map +1 -0
  65. package/dist/lib/strategies/on-idle.d.ts +14 -0
  66. package/dist/lib/strategies/on-idle.d.ts.map +1 -0
  67. package/dist/lib/strategies/on-idle.js +216 -0
  68. package/dist/lib/strategies/on-idle.js.map +1 -0
  69. package/dist/lib/strategies/prune-tool.d.ts +17 -0
  70. package/dist/lib/strategies/prune-tool.d.ts.map +1 -0
  71. package/dist/lib/strategies/prune-tool.js +70 -0
  72. package/dist/lib/strategies/prune-tool.js.map +1 -0
  73. package/dist/lib/ui/display-utils.d.ts +3 -12
  74. package/dist/lib/ui/display-utils.d.ts.map +1 -1
  75. package/dist/lib/ui/display-utils.js +12 -79
  76. package/dist/lib/ui/display-utils.js.map +1 -1
  77. package/dist/lib/ui/notification.d.ts +7 -23
  78. package/dist/lib/ui/notification.d.ts.map +1 -1
  79. package/dist/lib/ui/notification.js +38 -47
  80. package/dist/lib/ui/notification.js.map +1 -1
  81. package/dist/lib/utils.d.ts +9 -0
  82. package/dist/lib/utils.d.ts.map +1 -0
  83. package/dist/lib/utils.js +61 -0
  84. package/dist/lib/utils.js.map +1 -0
  85. package/package.json +1 -1
  86. package/dist/lib/core/janitor.d.ts +0 -38
  87. package/dist/lib/core/janitor.d.ts.map +0 -1
  88. package/dist/lib/core/janitor.js +0 -294
  89. package/dist/lib/core/janitor.js.map +0 -1
  90. package/dist/lib/core/prompt.d.ts.map +0 -1
  91. package/dist/lib/core/prompt.js.map +0 -1
  92. package/dist/lib/core/strategies/deduplication.d.ts +0 -7
  93. package/dist/lib/core/strategies/deduplication.d.ts.map +0 -1
  94. package/dist/lib/core/strategies/deduplication.js +0 -76
  95. package/dist/lib/core/strategies/deduplication.js.map +0 -1
  96. package/dist/lib/core/strategies/index.d.ts +0 -51
  97. package/dist/lib/core/strategies/index.d.ts.map +0 -1
  98. package/dist/lib/core/strategies/index.js +0 -48
  99. package/dist/lib/core/strategies/index.js.map +0 -1
  100. package/dist/lib/fetch-wrapper/formats/anthropic.d.ts +0 -8
  101. package/dist/lib/fetch-wrapper/formats/anthropic.d.ts.map +0 -1
  102. package/dist/lib/fetch-wrapper/formats/anthropic.js +0 -96
  103. package/dist/lib/fetch-wrapper/formats/anthropic.js.map +0 -1
  104. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +0 -8
  105. package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +0 -1
  106. package/dist/lib/fetch-wrapper/formats/bedrock.js +0 -97
  107. package/dist/lib/fetch-wrapper/formats/bedrock.js.map +0 -1
  108. package/dist/lib/fetch-wrapper/formats/gemini.d.ts +0 -8
  109. package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +0 -1
  110. package/dist/lib/fetch-wrapper/formats/gemini.js +0 -134
  111. package/dist/lib/fetch-wrapper/formats/gemini.js.map +0 -1
  112. package/dist/lib/fetch-wrapper/formats/index.d.ts +0 -6
  113. package/dist/lib/fetch-wrapper/formats/index.d.ts.map +0 -1
  114. package/dist/lib/fetch-wrapper/formats/index.js +0 -6
  115. package/dist/lib/fetch-wrapper/formats/index.js.map +0 -1
  116. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +0 -3
  117. package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +0 -1
  118. package/dist/lib/fetch-wrapper/formats/openai-chat.js +0 -100
  119. package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +0 -1
  120. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +0 -3
  121. package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +0 -1
  122. package/dist/lib/fetch-wrapper/formats/openai-responses.js +0 -63
  123. package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +0 -1
  124. package/dist/lib/fetch-wrapper/gc-tracker.d.ts +0 -4
  125. package/dist/lib/fetch-wrapper/gc-tracker.d.ts.map +0 -1
  126. package/dist/lib/fetch-wrapper/gc-tracker.js +0 -61
  127. package/dist/lib/fetch-wrapper/gc-tracker.js.map +0 -1
  128. package/dist/lib/fetch-wrapper/handler.d.ts +0 -3
  129. package/dist/lib/fetch-wrapper/handler.d.ts.map +0 -1
  130. package/dist/lib/fetch-wrapper/handler.js +0 -118
  131. package/dist/lib/fetch-wrapper/handler.js.map +0 -1
  132. package/dist/lib/fetch-wrapper/index.d.ts +0 -18
  133. package/dist/lib/fetch-wrapper/index.d.ts.map +0 -1
  134. package/dist/lib/fetch-wrapper/index.js +0 -107
  135. package/dist/lib/fetch-wrapper/index.js.map +0 -1
  136. package/dist/lib/fetch-wrapper/prunable-list.d.ts +0 -8
  137. package/dist/lib/fetch-wrapper/prunable-list.d.ts.map +0 -1
  138. package/dist/lib/fetch-wrapper/prunable-list.js +0 -38
  139. package/dist/lib/fetch-wrapper/prunable-list.js.map +0 -1
  140. package/dist/lib/fetch-wrapper/tool-tracker.d.ts +0 -9
  141. package/dist/lib/fetch-wrapper/tool-tracker.d.ts.map +0 -1
  142. package/dist/lib/fetch-wrapper/tool-tracker.js +0 -12
  143. package/dist/lib/fetch-wrapper/tool-tracker.js.map +0 -1
  144. package/dist/lib/fetch-wrapper/types.d.ts +0 -62
  145. package/dist/lib/fetch-wrapper/types.d.ts.map +0 -1
  146. package/dist/lib/fetch-wrapper/types.js +0 -7
  147. package/dist/lib/fetch-wrapper/types.js.map +0 -1
  148. package/dist/lib/pruning-tool.d.ts +0 -20
  149. package/dist/lib/pruning-tool.d.ts.map +0 -1
  150. package/dist/lib/pruning-tool.js +0 -160
  151. package/dist/lib/pruning-tool.js.map +0 -1
  152. package/dist/lib/state/id-mapping.d.ts +0 -25
  153. package/dist/lib/state/id-mapping.d.ts.map +0 -1
  154. package/dist/lib/state/id-mapping.js +0 -51
  155. package/dist/lib/state/id-mapping.js.map +0 -1
  156. package/dist/lib/tokenizer.d.ts +0 -3
  157. package/dist/lib/tokenizer.d.ts.map +0 -1
  158. package/dist/lib/tokenizer.js +0 -16
  159. package/dist/lib/tokenizer.js.map +0 -1
  160. package/dist/lib/version-checker.d.ts +0 -9
  161. package/dist/lib/version-checker.d.ts.map +0 -1
  162. package/dist/lib/version-checker.js +0 -77
  163. package/dist/lib/version-checker.js.map +0 -1
@@ -1,294 +0,0 @@
1
- import { z } from "zod";
2
- import { findCurrentAgent } from "../hooks";
3
- import { buildAnalysisPrompt } from "./prompt";
4
- import { selectModel, extractModelFromSession } from "../model-selector";
5
- import { estimateTokensBatch, formatTokenCount } from "../tokenizer";
6
- import { saveSessionState } from "../state/persistence";
7
- import { ensureSessionRestored } from "../state";
8
- import { sendUnifiedNotification } from "../ui/notification";
9
- // ============================================================================
10
- // Context factory
11
- // ============================================================================
12
- export function createJanitorContext(client, state, logger, config) {
13
- return {
14
- client,
15
- state,
16
- logger,
17
- config,
18
- notificationCtx: {
19
- client,
20
- logger,
21
- config: {
22
- pruningSummary: config.pruningSummary,
23
- workingDirectory: config.workingDirectory
24
- }
25
- }
26
- };
27
- }
28
- // ============================================================================
29
- // Public API
30
- // ============================================================================
31
- /**
32
- * Run pruning on idle trigger.
33
- * Note: onTool pruning is now handled directly by pruning-tool.ts
34
- */
35
- export async function runOnIdle(ctx, sessionID, strategies) {
36
- return runWithStrategies(ctx, sessionID, strategies, { trigger: 'idle' });
37
- }
38
- // ============================================================================
39
- // Core pruning logic (for onIdle only)
40
- // ============================================================================
41
- async function runWithStrategies(ctx, sessionID, strategies, options) {
42
- const { client, state, logger, config } = ctx;
43
- try {
44
- if (strategies.length === 0) {
45
- return null;
46
- }
47
- // Ensure persisted state is restored before processing
48
- await ensureSessionRestored(state, sessionID, logger);
49
- const [sessionInfoResponse, messagesResponse] = await Promise.all([
50
- client.session.get({ path: { id: sessionID } }),
51
- client.session.messages({ path: { id: sessionID }, query: { limit: 500 } })
52
- ]);
53
- const sessionInfo = sessionInfoResponse.data;
54
- const messages = messagesResponse.data || messagesResponse;
55
- if (!messages || messages.length < 3) {
56
- return null;
57
- }
58
- const currentAgent = findCurrentAgent(messages);
59
- const { toolCallIds, toolOutputs, toolMetadata } = parseMessages(messages, state.toolParameters);
60
- const alreadyPrunedIds = state.prunedIds.get(sessionID) ?? [];
61
- // Normalized set for filtering to avoid re-processing already pruned tools with different casing
62
- const alreadyPrunedLower = new Set(alreadyPrunedIds.map(id => id.toLowerCase()));
63
- const unprunedToolCallIds = toolCallIds.filter(id => !alreadyPrunedLower.has(id));
64
- const gcPending = state.gcPending.get(sessionID) ?? null;
65
- if (unprunedToolCallIds.length === 0 && !gcPending) {
66
- return null;
67
- }
68
- const candidateCount = unprunedToolCallIds.filter(id => {
69
- const metadata = toolMetadata.get(id);
70
- return !metadata || !config.protectedTools.includes(metadata.tool);
71
- }).length;
72
- // PHASE 1: LLM ANALYSIS
73
- let llmPrunedIds = [];
74
- if (strategies.includes('ai-analysis') && unprunedToolCallIds.length > 0) {
75
- llmPrunedIds = await runLlmAnalysis(ctx, sessionID, sessionInfo, messages, unprunedToolCallIds, alreadyPrunedIds, toolMetadata, options);
76
- }
77
- const finalNewlyPrunedIds = llmPrunedIds.filter(id => !alreadyPrunedLower.has(id.toLowerCase()));
78
- if (finalNewlyPrunedIds.length === 0 && !gcPending) {
79
- return null;
80
- }
81
- // Calculate stats & send notification
82
- const tokensSaved = await calculateTokensSaved(finalNewlyPrunedIds, toolOutputs);
83
- const currentStats = state.stats.get(sessionID) ?? {
84
- totalToolsPruned: 0,
85
- totalTokensSaved: 0,
86
- totalGCTokens: 0,
87
- totalGCTools: 0
88
- };
89
- const sessionStats = {
90
- totalToolsPruned: currentStats.totalToolsPruned + finalNewlyPrunedIds.length,
91
- totalTokensSaved: currentStats.totalTokensSaved + tokensSaved,
92
- totalGCTokens: currentStats.totalGCTokens + (gcPending?.tokensCollected ?? 0),
93
- totalGCTools: currentStats.totalGCTools + (gcPending?.toolsDeduped ?? 0)
94
- };
95
- state.stats.set(sessionID, sessionStats);
96
- const notificationSent = await sendUnifiedNotification(ctx.notificationCtx, sessionID, {
97
- aiPrunedCount: llmPrunedIds.length,
98
- aiTokensSaved: tokensSaved,
99
- aiPrunedIds: llmPrunedIds,
100
- toolMetadata,
101
- gcPending,
102
- sessionStats
103
- }, currentAgent);
104
- if (gcPending) {
105
- state.gcPending.delete(sessionID);
106
- }
107
- if (finalNewlyPrunedIds.length === 0) {
108
- if (notificationSent) {
109
- logger.info("janitor", `GC-only notification: ~${formatTokenCount(gcPending?.tokensCollected ?? 0)} tokens from ${gcPending?.toolsDeduped ?? 0} deduped tools`, {
110
- trigger: options.trigger
111
- });
112
- }
113
- return null;
114
- }
115
- // State update (only if something was pruned)
116
- const allPrunedIds = [...new Set([...alreadyPrunedIds, ...llmPrunedIds])];
117
- state.prunedIds.set(sessionID, allPrunedIds);
118
- const sessionName = sessionInfo?.title;
119
- saveSessionState(sessionID, new Set(allPrunedIds), sessionStats, logger, sessionName).catch(err => {
120
- logger.error("janitor", "Failed to persist state", { error: err.message });
121
- });
122
- const prunedCount = finalNewlyPrunedIds.length;
123
- const keptCount = candidateCount - prunedCount;
124
- const logMeta = { trigger: options.trigger };
125
- if (options.reason) {
126
- logMeta.reason = options.reason;
127
- }
128
- if (gcPending) {
129
- logMeta.gcTokens = gcPending.tokensCollected;
130
- logMeta.gcTools = gcPending.toolsDeduped;
131
- }
132
- logger.info("janitor", `Pruned ${prunedCount}/${candidateCount} tools, ${keptCount} kept (~${formatTokenCount(tokensSaved)} tokens)`, logMeta);
133
- return {
134
- prunedCount: finalNewlyPrunedIds.length,
135
- tokensSaved,
136
- llmPrunedIds,
137
- toolMetadata,
138
- sessionStats
139
- };
140
- }
141
- catch (error) {
142
- ctx.logger.error("janitor", "Analysis failed", {
143
- error: error.message,
144
- trigger: options.trigger
145
- });
146
- return null;
147
- }
148
- }
149
- // ============================================================================
150
- // LLM Analysis
151
- // ============================================================================
152
- async function runLlmAnalysis(ctx, sessionID, sessionInfo, messages, unprunedToolCallIds, alreadyPrunedIds, toolMetadata, options) {
153
- const { client, state, logger, config } = ctx;
154
- const protectedToolCallIds = [];
155
- const prunableToolCallIds = unprunedToolCallIds.filter(id => {
156
- const metadata = toolMetadata.get(id);
157
- if (metadata && config.protectedTools.includes(metadata.tool)) {
158
- protectedToolCallIds.push(id);
159
- return false;
160
- }
161
- return true;
162
- });
163
- if (prunableToolCallIds.length === 0) {
164
- return [];
165
- }
166
- const cachedModelInfo = state.model.get(sessionID);
167
- const sessionModelInfo = extractModelFromSession(sessionInfo, logger);
168
- const currentModelInfo = cachedModelInfo || sessionModelInfo;
169
- const modelSelection = await selectModel(currentModelInfo, logger, config.model, config.workingDirectory);
170
- logger.info("janitor", `Model: ${modelSelection.modelInfo.providerID}/${modelSelection.modelInfo.modelID}`, {
171
- source: modelSelection.source
172
- });
173
- if (modelSelection.failedModel && config.showModelErrorToasts) {
174
- const skipAi = modelSelection.source === 'fallback' && config.strictModelSelection;
175
- try {
176
- await client.tui.showToast({
177
- body: {
178
- title: skipAi ? "DCP: AI analysis skipped" : "DCP: Model fallback",
179
- message: skipAi
180
- ? `${modelSelection.failedModel.providerID}/${modelSelection.failedModel.modelID} failed\nAI analysis skipped (strictModelSelection enabled)`
181
- : `${modelSelection.failedModel.providerID}/${modelSelection.failedModel.modelID} failed\nUsing ${modelSelection.modelInfo.providerID}/${modelSelection.modelInfo.modelID}`,
182
- variant: "info",
183
- duration: 5000
184
- }
185
- });
186
- }
187
- catch (toastError) {
188
- // Ignore toast errors
189
- }
190
- }
191
- if (modelSelection.source === 'fallback' && config.strictModelSelection) {
192
- logger.info("janitor", "Skipping AI analysis (fallback model, strictModelSelection enabled)");
193
- return [];
194
- }
195
- const { generateObject } = await import('ai');
196
- const sanitizedMessages = replacePrunedToolOutputs(messages, alreadyPrunedIds);
197
- const analysisPrompt = buildAnalysisPrompt(prunableToolCallIds, sanitizedMessages, alreadyPrunedIds, protectedToolCallIds, options.reason);
198
- await logger.saveWrappedContext("janitor-shadow", [{ role: "user", content: analysisPrompt }], {
199
- sessionID,
200
- modelProvider: modelSelection.modelInfo.providerID,
201
- modelID: modelSelection.modelInfo.modelID,
202
- candidateToolCount: prunableToolCallIds.length,
203
- alreadyPrunedCount: alreadyPrunedIds.length,
204
- protectedToolCount: protectedToolCallIds.length,
205
- trigger: options.trigger,
206
- reason: options.reason
207
- });
208
- const result = await generateObject({
209
- model: modelSelection.model,
210
- schema: z.object({
211
- pruned_tool_call_ids: z.array(z.string()),
212
- reasoning: z.string(),
213
- }),
214
- prompt: analysisPrompt
215
- });
216
- const rawLlmPrunedIds = result.object.pruned_tool_call_ids;
217
- const llmPrunedIds = rawLlmPrunedIds.filter(id => prunableToolCallIds.includes(id.toLowerCase()));
218
- if (llmPrunedIds.length > 0) {
219
- const reasoning = result.object.reasoning.replace(/\n+/g, ' ').replace(/\s+/g, ' ').trim();
220
- logger.info("janitor", `LLM reasoning: ${reasoning.substring(0, 200)}${reasoning.length > 200 ? '...' : ''}`);
221
- }
222
- return llmPrunedIds;
223
- }
224
- function replacePrunedToolOutputs(messages, prunedIds) {
225
- if (prunedIds.length === 0)
226
- return messages;
227
- const prunedIdsSet = new Set(prunedIds.map(id => id.toLowerCase()));
228
- return messages.map(msg => {
229
- if (!msg.parts)
230
- return msg;
231
- return {
232
- ...msg,
233
- parts: msg.parts.map((part) => {
234
- if (part.type === 'tool' &&
235
- part.callID &&
236
- prunedIdsSet.has(part.callID.toLowerCase()) &&
237
- part.state?.output) {
238
- return {
239
- ...part,
240
- state: {
241
- ...part.state,
242
- output: '[Output removed to save context - information superseded or no longer needed]'
243
- }
244
- };
245
- }
246
- return part;
247
- })
248
- };
249
- });
250
- }
251
- export function parseMessages(messages, toolParametersCache) {
252
- const toolCallIds = [];
253
- const toolOutputs = new Map();
254
- const toolMetadata = new Map();
255
- for (const msg of messages) {
256
- if (msg.parts) {
257
- for (const part of msg.parts) {
258
- if (part.type === "tool" && part.callID) {
259
- const normalizedId = part.callID.toLowerCase();
260
- toolCallIds.push(normalizedId);
261
- const cachedData = toolParametersCache.get(part.callID) || toolParametersCache.get(normalizedId);
262
- const parameters = cachedData?.parameters ?? part.state?.input ?? part.parameters;
263
- toolMetadata.set(normalizedId, {
264
- tool: part.tool,
265
- parameters: parameters
266
- });
267
- if (part.state?.status === "completed" && part.state.output) {
268
- toolOutputs.set(normalizedId, part.state.output);
269
- }
270
- }
271
- }
272
- }
273
- }
274
- return { toolCallIds, toolOutputs, toolMetadata };
275
- }
276
- // ============================================================================
277
- // Helpers
278
- // ============================================================================
279
- async function calculateTokensSaved(prunedIds, toolOutputs) {
280
- const outputsToTokenize = [];
281
- for (const prunedId of prunedIds) {
282
- const normalizedId = prunedId.toLowerCase();
283
- const output = toolOutputs.get(normalizedId);
284
- if (output) {
285
- outputsToTokenize.push(output);
286
- }
287
- }
288
- if (outputsToTokenize.length > 0) {
289
- const tokenCounts = await estimateTokensBatch(outputsToTokenize);
290
- return tokenCounts.reduce((sum, count) => sum + count, 0);
291
- }
292
- return 0;
293
- }
294
- //# sourceMappingURL=janitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"janitor.js","sourceRoot":"","sources":["../../../lib/core/janitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EACH,uBAAuB,EAE1B,MAAM,oBAAoB,CAAA;AA0B3B,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB,CAChC,MAAW,EACX,KAAkB,EAClB,MAAc,EACd,MAAqB;IAErB,OAAO;QACH,MAAM;QACN,KAAK;QACL,MAAM;QACN,MAAM;QACN,eAAe,EAAE;YACb,MAAM;YACN,MAAM;YACN,MAAM,EAAE;gBACJ,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC5C;SACJ;KACJ,CAAA;AACL,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,GAAmB,EACnB,SAAiB,EACjB,UAA6B;IAE7B,OAAO,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,KAAK,UAAU,iBAAiB,CAC5B,GAAmB,EACnB,SAAiB,EACjB,UAA6B,EAC7B,OAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IAE7C,IAAI,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAA;QACf,CAAC;QAED,uDAAuD;QACvD,MAAM,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAErD,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;SAC9E,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAA;QAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,IAAI,gBAAgB,CAAA;QAE1D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;QAEhG,MAAM,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QAC7D,iGAAiG;QACjG,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAChF,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;QAExD,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrC,OAAO,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACtE,CAAC,CAAC,CAAC,MAAM,CAAA;QAET,wBAAwB;QACxB,IAAI,YAAY,GAAa,EAAE,CAAA;QAE/B,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,YAAY,GAAG,MAAM,cAAc,CAC/B,GAAG,EACH,SAAS,EACT,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,OAAO,CACV,CAAA;QACL,CAAC;QAED,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAEhG,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO,IAAI,CAAA;QACf,CAAC;QAED,sCAAsC;QACtC,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAEhF,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;YAC/C,gBAAgB,EAAE,CAAC;YACnB,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,CAAC;SAClB,CAAA;QAED,MAAM,YAAY,GAAiB;YAC/B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,MAAM;YAC5E,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,GAAG,WAAW;YAC7D,aAAa,EAAE,YAAY,CAAC,aAAa,GAAG,CAAC,SAAS,EAAE,eAAe,IAAI,CAAC,CAAC;YAC7E,YAAY,EAAE,YAAY,CAAC,YAAY,GAAG,CAAC,SAAS,EAAE,YAAY,IAAI,CAAC,CAAC;SAC3E,CAAA;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAExC,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAClD,GAAG,CAAC,eAAe,EACnB,SAAS,EACT;YACI,aAAa,EAAE,YAAY,CAAC,MAAM;YAClC,aAAa,EAAE,WAAW;YAC1B,WAAW,EAAE,YAAY;YACzB,YAAY;YACZ,SAAS;YACT,YAAY;SACf,EACD,YAAY,CACf,CAAA;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACrC,CAAC;QAED,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,gBAAgB,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,gBAAgB,CAAC,SAAS,EAAE,eAAe,IAAI,CAAC,CAAC,gBAAgB,SAAS,EAAE,YAAY,IAAI,CAAC,gBAAgB,EAAE;oBAC5J,OAAO,EAAE,OAAO,CAAC,OAAO;iBAC3B,CAAC,CAAA;YACN,CAAC;YACD,OAAO,IAAI,CAAA;QACf,CAAC;QAED,8CAA8C;QAC9C,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QACzE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAE5C,MAAM,WAAW,GAAG,WAAW,EAAE,KAAK,CAAA;QACtC,gBAAgB,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC9F,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,yBAAyB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC9E,CAAC,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAA;QAC9C,MAAM,SAAS,GAAG,cAAc,GAAG,WAAW,CAAA;QAE9C,MAAM,OAAO,GAAwB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QACjE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QACnC,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAA;YAC5C,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CAAA;QAC5C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,WAAW,IAAI,cAAc,WAAW,SAAS,WAAW,gBAAgB,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAE9I,OAAO;YACH,WAAW,EAAE,mBAAmB,CAAC,MAAM;YACvC,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,YAAY;SACf,CAAA;IAEL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,EAAE;YAC3C,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,KAAK,UAAU,cAAc,CACzB,GAAmB,EACnB,SAAiB,EACjB,WAAgB,EAChB,QAAe,EACf,mBAA6B,EAC7B,gBAA0B,EAC1B,YAAuC,EACvC,OAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IAE7C,MAAM,oBAAoB,GAAa,EAAE,CAAA;IACzC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QACxD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5D,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC7B,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,OAAO,IAAI,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAA;IACb,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAClD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACrE,MAAM,gBAAgB,GAAG,eAAe,IAAI,gBAAgB,CAAA;IAE5D,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEzG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,cAAc,CAAC,SAAS,CAAC,UAAU,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE;QACxG,MAAM,EAAE,cAAc,CAAC,MAAM;KAChC,CAAC,CAAA;IAEF,IAAI,cAAc,CAAC,WAAW,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,oBAAoB,CAAA;QAClF,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;gBACvB,IAAI,EAAE;oBACF,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,qBAAqB;oBAClE,OAAO,EAAE,MAAM;wBACX,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,UAAU,IAAI,cAAc,CAAC,WAAW,CAAC,OAAO,6DAA6D;wBAC7I,CAAC,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,UAAU,IAAI,cAAc,CAAC,WAAW,CAAC,OAAO,kBAAkB,cAAc,CAAC,SAAS,CAAC,UAAU,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,EAAE;oBAC/K,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;iBACjB;aACJ,CAAC,CAAA;QACN,CAAC;QAAC,OAAO,UAAe,EAAE,CAAC;YACvB,sBAAsB;QAC1B,CAAC;IACL,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,qEAAqE,CAAC,CAAA;QAC7F,OAAO,EAAE,CAAA;IACb,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IAE7C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IAE9E,MAAM,cAAc,GAAG,mBAAmB,CACtC,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,OAAO,CAAC,MAAM,CACjB,CAAA;IAED,MAAM,MAAM,CAAC,kBAAkB,CAC3B,gBAAgB,EAChB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAC3C;QACI,SAAS;QACT,aAAa,EAAE,cAAc,CAAC,SAAS,CAAC,UAAU;QAClD,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,OAAO;QACzC,kBAAkB,EAAE,mBAAmB,CAAC,MAAM;QAC9C,kBAAkB,EAAE,gBAAgB,CAAC,MAAM;QAC3C,kBAAkB,EAAE,oBAAoB,CAAC,MAAM;QAC/C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CACJ,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAChC,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC;QACF,MAAM,EAAE,cAAc;KACzB,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAA;IAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC7C,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CACjD,CAAA;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1F,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjH,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAe,EAAE,SAAmB;IAClE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAE3C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAEnE,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACtB,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO,GAAG,CAAA;QAE1B,OAAO;YACH,GAAG,GAAG;YACN,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;oBACpB,IAAI,CAAC,MAAM;oBACX,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC3C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;oBACrB,OAAO;wBACH,GAAG,IAAI;wBACP,KAAK,EAAE;4BACH,GAAG,IAAI,CAAC,KAAK;4BACb,MAAM,EAAE,+EAA+E;yBAC1F;qBACJ,CAAA;gBACL,CAAC;gBACD,OAAO,IAAI,CAAA;YACf,CAAC,CAAC;SACL,CAAA;IACL,CAAC,CAAC,CAAA;AACN,CAAC;AAYD,MAAM,UAAU,aAAa,CACzB,QAAe,EACf,mBAAqC;IAErC,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8C,CAAA;IAE1E,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;oBAC9C,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;oBAE9B,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;oBAChG,MAAM,UAAU,GAAG,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAA;oBAEjF,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE;wBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,UAAU,EAAE,UAAU;qBACzB,CAAC,CAAA;oBAEF,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;wBAC1D,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;oBACpD,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AACrD,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,KAAK,UAAU,oBAAoB,CAAC,SAAmB,EAAE,WAAgC;IACrF,MAAM,iBAAiB,GAAa,EAAE,CAAA;IAEtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC5C,IAAI,MAAM,EAAE,CAAC;YACT,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,CAAC;IACL,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,iBAAiB,CAAC,CAAA;QAChE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,CAAA;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../lib/core/prompt.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAS9E;AA4GD,wBAAgB,mBAAmB,CAC/B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,QAAQ,EAAE,GAAG,EAAE,EACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAC/B,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,CAaR"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../lib/core/prompt.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { PruningStrategy } from "./index";
2
- /**
3
- * Deduplication strategy - prunes older tool calls that have identical
4
- * tool name and parameters, keeping only the most recent occurrence.
5
- */
6
- export declare const deduplicationStrategy: PruningStrategy;
7
- //# sourceMappingURL=deduplication.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplication.d.ts","sourceRoot":"","sources":["../../../../lib/core/strategies/deduplication.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAiDnC,CAAA"}
@@ -1,76 +0,0 @@
1
- import { extractParameterKey } from "../../ui/display-utils";
2
- /**
3
- * Deduplication strategy - prunes older tool calls that have identical
4
- * tool name and parameters, keeping only the most recent occurrence.
5
- */
6
- export const deduplicationStrategy = {
7
- name: "deduplication",
8
- detect(toolMetadata, unprunedIds, protectedTools) {
9
- const signatureMap = new Map();
10
- const deduplicatableIds = unprunedIds.filter(id => {
11
- const metadata = toolMetadata.get(id);
12
- const protectedToolsLower = protectedTools.map(t => t.toLowerCase());
13
- return !metadata || !protectedToolsLower.includes(metadata.tool.toLowerCase());
14
- });
15
- for (const id of deduplicatableIds) {
16
- const metadata = toolMetadata.get(id);
17
- if (!metadata)
18
- continue;
19
- const signature = createToolSignature(metadata.tool, metadata.parameters);
20
- if (!signatureMap.has(signature)) {
21
- signatureMap.set(signature, []);
22
- }
23
- signatureMap.get(signature).push(id);
24
- }
25
- const prunedIds = [];
26
- const details = new Map();
27
- for (const [signature, ids] of signatureMap.entries()) {
28
- if (ids.length > 1) {
29
- const metadata = toolMetadata.get(ids[0]);
30
- const idsToRemove = ids.slice(0, -1); // All except last
31
- prunedIds.push(...idsToRemove);
32
- details.set(signature, {
33
- toolName: metadata.tool,
34
- parameterKey: extractParameterKey(metadata),
35
- reason: `duplicate (${ids.length} occurrences, kept most recent)`,
36
- duplicateCount: ids.length,
37
- prunedIds: idsToRemove,
38
- keptId: ids[ids.length - 1]
39
- });
40
- }
41
- }
42
- return { prunedIds, details };
43
- }
44
- };
45
- function createToolSignature(tool, parameters) {
46
- if (!parameters)
47
- return tool;
48
- const normalized = normalizeParameters(parameters);
49
- const sorted = sortObjectKeys(normalized);
50
- return `${tool}::${JSON.stringify(sorted)}`;
51
- }
52
- function normalizeParameters(params) {
53
- if (typeof params !== 'object' || params === null)
54
- return params;
55
- if (Array.isArray(params))
56
- return params;
57
- const normalized = {};
58
- for (const [key, value] of Object.entries(params)) {
59
- if (value !== undefined && value !== null) {
60
- normalized[key] = value;
61
- }
62
- }
63
- return normalized;
64
- }
65
- function sortObjectKeys(obj) {
66
- if (typeof obj !== 'object' || obj === null)
67
- return obj;
68
- if (Array.isArray(obj))
69
- return obj.map(sortObjectKeys);
70
- const sorted = {};
71
- for (const key of Object.keys(obj).sort()) {
72
- sorted[key] = sortObjectKeys(obj[key]);
73
- }
74
- return sorted;
75
- }
76
- //# sourceMappingURL=deduplication.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplication.js","sourceRoot":"","sources":["../../../../lib/core/strategies/deduplication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAG5D;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IAClD,IAAI,EAAE,eAAe;IAErB,MAAM,CACF,YAAuC,EACvC,WAAqB,EACrB,cAAwB;QAExB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAA;QAEhD,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrC,MAAM,mBAAmB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;YACpE,OAAO,CAAC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QAClF,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACrC,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YAEvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;YACzE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YACnC,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QAEzB,KAAK,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAA;gBAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAE,kBAAkB;gBACxD,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;gBAE9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;oBACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC;oBAC3C,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,iCAAiC;oBACjE,cAAc,EAAE,GAAG,CAAC,MAAM;oBAC1B,SAAS,EAAE,WAAW;oBACtB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC9B,CAAC,CAAA;YACN,CAAC;QACL,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACjC,CAAC;CACJ,CAAA;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,UAAgB;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAE5B,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IACzC,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAW;IACpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IAChE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAExC,MAAM,UAAU,GAAQ,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QAC3B,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAA;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ;IAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAEtD,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Strategy runner - executes all enabled pruning strategies and collects results.
3
- */
4
- import type { ToolMetadata } from "../../fetch-wrapper/types";
5
- export type { ToolMetadata };
6
- /**
7
- * Common interface for rule-based pruning strategies.
8
- * Each strategy analyzes tool metadata and returns IDs that should be pruned.
9
- */
10
- export interface StrategyResult {
11
- /** Tool call IDs that should be pruned */
12
- prunedIds: string[];
13
- /** Optional details about what was pruned and why */
14
- details?: Map<string, StrategyDetail>;
15
- }
16
- export interface StrategyDetail {
17
- toolName: string;
18
- parameterKey: string;
19
- reason: string;
20
- /** Additional info specific to the strategy */
21
- [key: string]: any;
22
- }
23
- export interface PruningStrategy {
24
- /** Unique identifier for this strategy */
25
- name: string;
26
- /**
27
- * Analyze tool metadata and determine which tool calls should be pruned.
28
- *
29
- * @param toolMetadata - Map of tool call ID to metadata (tool name + parameters)
30
- * @param unprunedIds - Tool call IDs that haven't been pruned yet (chronological order)
31
- * @param protectedTools - Tool names that should never be pruned
32
- * @returns IDs to prune and optional details
33
- */
34
- detect(toolMetadata: Map<string, ToolMetadata>, unprunedIds: string[], protectedTools: string[]): StrategyResult;
35
- }
36
- export interface RunStrategiesResult {
37
- /** All tool IDs that should be pruned (deduplicated) */
38
- prunedIds: string[];
39
- /** Results keyed by strategy name */
40
- byStrategy: Map<string, StrategyResult>;
41
- }
42
- /**
43
- * Run all enabled strategies and collect pruned IDs.
44
- *
45
- * @param toolMetadata - Map of tool call ID to metadata
46
- * @param unprunedIds - Tool call IDs not yet pruned (chronological order)
47
- * @param protectedTools - Tool names that should never be pruned
48
- * @param enabledStrategies - Strategy names to run (defaults to all)
49
- */
50
- export declare function runStrategies(toolMetadata: Map<string, ToolMetadata>, unprunedIds: string[], protectedTools: string[], enabledStrategies?: string[]): RunStrategiesResult;
51
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/core/strategies/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC3B,0CAA0C;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IAEZ;;;;;;;OAOG;IACH,MAAM,CACF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,WAAW,EAAE,MAAM,EAAE,EACrB,cAAc,EAAE,MAAM,EAAE,GACzB,cAAc,CAAA;CACpB;AAWD,MAAM,WAAW,mBAAmB;IAChC,wDAAwD;IACxD,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,qCAAqC;IACrC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,WAAW,EAAE,MAAM,EAAE,EACrB,cAAc,EAAE,MAAM,EAAE,EACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC7B,mBAAmB,CAiCrB"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Strategy runner - executes all enabled pruning strategies and collects results.
3
- */
4
- import { deduplicationStrategy } from "./deduplication";
5
- /** All available strategies */
6
- const ALL_STRATEGIES = [
7
- deduplicationStrategy,
8
- // Future strategies will be added here:
9
- // errorPruningStrategy,
10
- // writeReadStrategy,
11
- // partialReadStrategy,
12
- ];
13
- /**
14
- * Run all enabled strategies and collect pruned IDs.
15
- *
16
- * @param toolMetadata - Map of tool call ID to metadata
17
- * @param unprunedIds - Tool call IDs not yet pruned (chronological order)
18
- * @param protectedTools - Tool names that should never be pruned
19
- * @param enabledStrategies - Strategy names to run (defaults to all)
20
- */
21
- export function runStrategies(toolMetadata, unprunedIds, protectedTools, enabledStrategies) {
22
- const byStrategy = new Map();
23
- const allPrunedIds = new Set();
24
- // Filter to enabled strategies (or all if not specified)
25
- const strategies = enabledStrategies
26
- ? ALL_STRATEGIES.filter(s => enabledStrategies.includes(s.name))
27
- : ALL_STRATEGIES;
28
- // Track which IDs are still available for each strategy
29
- let remainingIds = unprunedIds;
30
- for (const strategy of strategies) {
31
- const result = strategy.detect(toolMetadata, remainingIds, protectedTools);
32
- if (result.prunedIds.length > 0) {
33
- byStrategy.set(strategy.name, result);
34
- // Add to overall pruned set
35
- for (const id of result.prunedIds) {
36
- allPrunedIds.add(id);
37
- }
38
- // Remove pruned IDs from remaining for next strategy
39
- const prunedSet = new Set(result.prunedIds.map(id => id.toLowerCase()));
40
- remainingIds = remainingIds.filter(id => !prunedSet.has(id.toLowerCase()));
41
- }
42
- }
43
- return {
44
- prunedIds: Array.from(allPrunedIds),
45
- byStrategy
46
- };
47
- }
48
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/core/strategies/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AA4CvD,+BAA+B;AAC/B,MAAM,cAAc,GAAsB;IACtC,qBAAqB;IACrB,wCAAwC;IACxC,wBAAwB;IACxB,qBAAqB;IACrB,uBAAuB;CAC1B,CAAA;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CACzB,YAAuC,EACvC,WAAqB,EACrB,cAAwB,EACxB,iBAA4B;IAE5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAA;IACpD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IAEtC,yDAAyD;IACzD,MAAM,UAAU,GAAG,iBAAiB;QAChC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,cAAc,CAAA;IAEpB,wDAAwD;IACxD,IAAI,YAAY,GAAG,WAAW,CAAA;IAE9B,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;QAE1E,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAErC,4BAA4B;YAC5B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAChC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACxB,CAAC;YAED,qDAAqD;YACrD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;YACvE,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC9E,CAAC;IACL,CAAC;IAED,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC,UAAU;KACb,CAAA;AACL,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { FormatDescriptor } from "../types";
2
- /**
3
- * Anthropic Messages API format with top-level `system` array.
4
- * Tool calls: `tool_use` blocks in assistant content with `id`
5
- * Tool results: `tool_result` blocks in user content with `tool_use_id`
6
- */
7
- export declare const anthropicFormat: FormatDescriptor;
8
- //# sourceMappingURL=anthropic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../lib/fetch-wrapper/formats/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,UAAU,CAAA;AAG5D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,gBAsG7B,CAAA"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Anthropic Messages API format with top-level `system` array.
3
- * Tool calls: `tool_use` blocks in assistant content with `id`
4
- * Tool results: `tool_result` blocks in user content with `tool_use_id`
5
- */
6
- export const anthropicFormat = {
7
- name: 'anthropic',
8
- detect(body) {
9
- return (body.system !== undefined &&
10
- Array.isArray(body.messages));
11
- },
12
- getDataArray(body) {
13
- return body.messages;
14
- },
15
- injectSystemMessage(body, injection) {
16
- if (!injection)
17
- return false;
18
- if (typeof body.system === 'string') {
19
- body.system = [{ type: 'text', text: body.system }];
20
- }
21
- else if (!Array.isArray(body.system)) {
22
- body.system = [];
23
- }
24
- body.system.push({ type: 'text', text: injection });
25
- return true;
26
- },
27
- appendUserMessage(body, injection) {
28
- if (!injection || !body.messages)
29
- return false;
30
- body.messages.push({ role: 'user', content: [{ type: 'text', text: injection }] });
31
- return true;
32
- },
33
- extractToolOutputs(data, state) {
34
- const outputs = [];
35
- for (const m of data) {
36
- if (m.role === 'user' && Array.isArray(m.content)) {
37
- for (const block of m.content) {
38
- if (block.type === 'tool_result' && block.tool_use_id) {
39
- const toolUseId = block.tool_use_id.toLowerCase();
40
- const metadata = state.toolParameters.get(toolUseId);
41
- outputs.push({
42
- id: toolUseId,
43
- toolName: metadata?.tool
44
- });
45
- }
46
- }
47
- }
48
- }
49
- return outputs;
50
- },
51
- replaceToolOutput(data, toolId, prunedMessage, _state) {
52
- const toolIdLower = toolId.toLowerCase();
53
- let replaced = false;
54
- for (let i = 0; i < data.length; i++) {
55
- const m = data[i];
56
- if (m.role === 'user' && Array.isArray(m.content)) {
57
- let messageModified = false;
58
- const newContent = m.content.map((block) => {
59
- if (block.type === 'tool_result' && block.tool_use_id?.toLowerCase() === toolIdLower) {
60
- messageModified = true;
61
- return {
62
- ...block,
63
- content: prunedMessage
64
- };
65
- }
66
- return block;
67
- });
68
- if (messageModified) {
69
- data[i] = { ...m, content: newContent };
70
- replaced = true;
71
- }
72
- }
73
- }
74
- return replaced;
75
- },
76
- hasToolOutputs(data) {
77
- for (const m of data) {
78
- if (m.role === 'user' && Array.isArray(m.content)) {
79
- for (const block of m.content) {
80
- if (block.type === 'tool_result')
81
- return true;
82
- }
83
- }
84
- }
85
- return false;
86
- },
87
- getLogMetadata(data, replacedCount, inputUrl) {
88
- return {
89
- url: inputUrl,
90
- replacedCount,
91
- totalMessages: data.length,
92
- format: 'anthropic'
93
- };
94
- }
95
- };
96
- //# sourceMappingURL=anthropic.js.map