@tarquinen/opencode-dcp 0.4.17 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -59
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +30 -13
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +339 -121
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +5 -13
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +26 -125
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/logger.d.ts +5 -9
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +30 -160
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/messages/index.d.ts +2 -0
- package/dist/lib/messages/index.d.ts.map +1 -0
- package/dist/lib/messages/index.js +2 -0
- package/dist/lib/messages/index.js.map +1 -0
- package/dist/lib/messages/prune.d.ts +6 -0
- package/dist/lib/messages/prune.d.ts.map +1 -0
- package/dist/lib/messages/prune.js +85 -0
- package/dist/lib/messages/prune.js.map +1 -0
- package/dist/lib/messages/utils.d.ts +10 -0
- package/dist/lib/messages/utils.d.ts.map +1 -0
- package/dist/lib/messages/utils.js +103 -0
- package/dist/lib/messages/utils.js.map +1 -0
- package/dist/lib/model-selector.js +3 -3
- package/dist/lib/model-selector.js.map +1 -1
- package/dist/lib/{core/prompt.d.ts → prompt.d.ts} +1 -1
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/{core/prompt.js → prompt.js} +2 -6
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/prompts/pruning.txt +1 -1
- package/dist/lib/prompts/tool.txt +3 -3
- package/dist/lib/state/index.d.ts +3 -27
- package/dist/lib/state/index.d.ts.map +1 -1
- package/dist/lib/state/index.js +3 -40
- package/dist/lib/state/index.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +4 -4
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +24 -20
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts +7 -0
- package/dist/lib/state/state.d.ts.map +1 -0
- package/dist/lib/state/state.js +76 -0
- package/dist/lib/state/state.js.map +1 -0
- package/dist/lib/state/tool-cache.d.ts +4 -6
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +14 -46
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +30 -0
- package/dist/lib/state/types.d.ts.map +1 -0
- package/dist/lib/state/types.js +2 -0
- package/dist/lib/state/types.js.map +1 -0
- package/dist/lib/strategies/deduplication.d.ts +10 -0
- package/dist/lib/strategies/deduplication.d.ts.map +1 -0
- package/dist/lib/strategies/deduplication.js +89 -0
- package/dist/lib/strategies/deduplication.js.map +1 -0
- package/dist/lib/strategies/index.d.ts +4 -0
- package/dist/lib/strategies/index.d.ts.map +1 -0
- package/dist/lib/strategies/index.js +4 -0
- package/dist/lib/strategies/index.js.map +1 -0
- package/dist/lib/strategies/on-idle.d.ts +14 -0
- package/dist/lib/strategies/on-idle.d.ts.map +1 -0
- package/dist/lib/strategies/on-idle.js +216 -0
- package/dist/lib/strategies/on-idle.js.map +1 -0
- package/dist/lib/strategies/prune-tool.d.ts +17 -0
- package/dist/lib/strategies/prune-tool.d.ts.map +1 -0
- package/dist/lib/strategies/prune-tool.js +70 -0
- package/dist/lib/strategies/prune-tool.js.map +1 -0
- package/dist/lib/ui/display-utils.d.ts +3 -12
- package/dist/lib/ui/display-utils.d.ts.map +1 -1
- package/dist/lib/ui/display-utils.js +12 -79
- package/dist/lib/ui/display-utils.js.map +1 -1
- package/dist/lib/ui/notification.d.ts +7 -23
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +38 -47
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/utils.d.ts +9 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +61 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +1 -1
- package/dist/lib/core/janitor.d.ts +0 -38
- package/dist/lib/core/janitor.d.ts.map +0 -1
- package/dist/lib/core/janitor.js +0 -294
- package/dist/lib/core/janitor.js.map +0 -1
- package/dist/lib/core/prompt.d.ts.map +0 -1
- package/dist/lib/core/prompt.js.map +0 -1
- package/dist/lib/core/strategies/deduplication.d.ts +0 -7
- package/dist/lib/core/strategies/deduplication.d.ts.map +0 -1
- package/dist/lib/core/strategies/deduplication.js +0 -76
- package/dist/lib/core/strategies/deduplication.js.map +0 -1
- package/dist/lib/core/strategies/index.d.ts +0 -51
- package/dist/lib/core/strategies/index.d.ts.map +0 -1
- package/dist/lib/core/strategies/index.js +0 -48
- package/dist/lib/core/strategies/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/anthropic.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/anthropic.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/anthropic.js +0 -96
- package/dist/lib/fetch-wrapper/formats/anthropic.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/bedrock.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/bedrock.js +0 -97
- package/dist/lib/fetch-wrapper/formats/bedrock.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts +0 -8
- package/dist/lib/fetch-wrapper/formats/gemini.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/gemini.js +0 -134
- package/dist/lib/fetch-wrapper/formats/gemini.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/index.d.ts +0 -6
- package/dist/lib/fetch-wrapper/formats/index.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/index.js +0 -6
- package/dist/lib/fetch-wrapper/formats/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts +0 -3
- package/dist/lib/fetch-wrapper/formats/openai-chat.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-chat.js +0 -100
- package/dist/lib/fetch-wrapper/formats/openai-chat.js.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts +0 -3
- package/dist/lib/fetch-wrapper/formats/openai-responses.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/formats/openai-responses.js +0 -63
- package/dist/lib/fetch-wrapper/formats/openai-responses.js.map +0 -1
- package/dist/lib/fetch-wrapper/gc-tracker.d.ts +0 -4
- package/dist/lib/fetch-wrapper/gc-tracker.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/gc-tracker.js +0 -61
- package/dist/lib/fetch-wrapper/gc-tracker.js.map +0 -1
- package/dist/lib/fetch-wrapper/handler.d.ts +0 -3
- package/dist/lib/fetch-wrapper/handler.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/handler.js +0 -118
- package/dist/lib/fetch-wrapper/handler.js.map +0 -1
- package/dist/lib/fetch-wrapper/index.d.ts +0 -18
- package/dist/lib/fetch-wrapper/index.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/index.js +0 -107
- package/dist/lib/fetch-wrapper/index.js.map +0 -1
- package/dist/lib/fetch-wrapper/prunable-list.d.ts +0 -8
- package/dist/lib/fetch-wrapper/prunable-list.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/prunable-list.js +0 -38
- package/dist/lib/fetch-wrapper/prunable-list.js.map +0 -1
- package/dist/lib/fetch-wrapper/tool-tracker.d.ts +0 -9
- package/dist/lib/fetch-wrapper/tool-tracker.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/tool-tracker.js +0 -12
- package/dist/lib/fetch-wrapper/tool-tracker.js.map +0 -1
- package/dist/lib/fetch-wrapper/types.d.ts +0 -62
- package/dist/lib/fetch-wrapper/types.d.ts.map +0 -1
- package/dist/lib/fetch-wrapper/types.js +0 -7
- package/dist/lib/fetch-wrapper/types.js.map +0 -1
- package/dist/lib/pruning-tool.d.ts +0 -20
- package/dist/lib/pruning-tool.d.ts.map +0 -1
- package/dist/lib/pruning-tool.js +0 -160
- package/dist/lib/pruning-tool.js.map +0 -1
- package/dist/lib/state/id-mapping.d.ts +0 -25
- package/dist/lib/state/id-mapping.d.ts.map +0 -1
- package/dist/lib/state/id-mapping.js +0 -51
- package/dist/lib/state/id-mapping.js.map +0 -1
- package/dist/lib/tokenizer.d.ts +0 -3
- package/dist/lib/tokenizer.d.ts.map +0 -1
- package/dist/lib/tokenizer.js +0 -16
- package/dist/lib/tokenizer.js.map +0 -1
- package/dist/lib/version-checker.d.ts +0 -9
- package/dist/lib/version-checker.d.ts.map +0 -1
- package/dist/lib/version-checker.js +0 -77
- package/dist/lib/version-checker.js.map +0 -1
package/dist/lib/core/janitor.js
DELETED
|
@@ -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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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
|