@tarquinen/opencode-dcp 1.3.1-beta1 → 1.3.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -85
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.d.ts +4 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +32 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/commands/context.d.ts.map +1 -1
- package/dist/lib/commands/context.js +40 -26
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/stats.d.ts.map +1 -1
- package/dist/lib/commands/stats.js +13 -8
- package/dist/lib/commands/stats.js.map +1 -1
- package/dist/lib/commands/sweep.d.ts.map +1 -1
- package/dist/lib/commands/sweep.js +4 -3
- package/dist/lib/commands/sweep.js.map +1 -1
- package/dist/lib/config.d.ts +10 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +75 -31
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +13 -19
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/messages/inject.d.ts +7 -0
- package/dist/lib/messages/inject.d.ts.map +1 -1
- package/dist/lib/messages/inject.js +86 -58
- package/dist/lib/messages/inject.js.map +1 -1
- package/dist/lib/messages/prune.d.ts.map +1 -1
- package/dist/lib/messages/prune.js +81 -5
- package/dist/lib/messages/prune.js.map +1 -1
- package/dist/lib/messages/utils.d.ts +10 -4
- package/dist/lib/messages/utils.d.ts.map +1 -1
- package/dist/lib/messages/utils.js +24 -50
- package/dist/lib/messages/utils.js.map +1 -1
- package/dist/lib/prompts/compress-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/compress-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/compress-tool-spec.js +58 -0
- package/dist/lib/prompts/compress-tool-spec.js.map +1 -0
- package/dist/lib/prompts/distill-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/distill-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/{extract-tool-spec.js → distill-tool-spec.js} +14 -14
- package/dist/lib/prompts/distill-tool-spec.js.map +1 -0
- package/dist/lib/prompts/index.d.ts +7 -0
- package/dist/lib/prompts/index.d.ts.map +1 -1
- package/dist/lib/prompts/index.js +28 -18
- package/dist/lib/prompts/index.js.map +1 -1
- package/dist/lib/prompts/prune-tool-spec.d.ts +2 -0
- package/dist/lib/prompts/prune-tool-spec.d.ts.map +1 -0
- package/dist/lib/prompts/prune-tool-spec.js +40 -0
- package/dist/lib/prompts/prune-tool-spec.js.map +1 -0
- package/dist/lib/shared-utils.d.ts +1 -1
- package/dist/lib/shared-utils.d.ts.map +1 -1
- package/dist/lib/shared-utils.js +10 -3
- package/dist/lib/shared-utils.js.map +1 -1
- package/dist/lib/state/persistence.d.ts +9 -2
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +24 -1
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts +0 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +13 -32
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +8 -7
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +7 -1
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +4 -0
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/dist/lib/state/utils.js +33 -0
- package/dist/lib/state/utils.js.map +1 -1
- package/dist/lib/strategies/deduplication.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +4 -3
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/index.d.ts +1 -1
- package/dist/lib/strategies/index.d.ts.map +1 -1
- package/dist/lib/strategies/index.js +1 -1
- package/dist/lib/strategies/index.js.map +1 -1
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
- package/dist/lib/strategies/purge-errors.js +4 -3
- package/dist/lib/strategies/purge-errors.js.map +1 -1
- package/dist/lib/strategies/supersede-writes.js +5 -4
- package/dist/lib/strategies/supersede-writes.js.map +1 -1
- package/dist/lib/strategies/utils.d.ts +1 -0
- package/dist/lib/strategies/utils.d.ts.map +1 -1
- package/dist/lib/strategies/utils.js +13 -4
- package/dist/lib/strategies/utils.js.map +1 -1
- package/dist/lib/tools/compress.d.ts +4 -0
- package/dist/lib/tools/compress.d.ts.map +1 -0
- package/dist/lib/tools/compress.js +102 -0
- package/dist/lib/tools/compress.js.map +1 -0
- package/dist/lib/tools/distill.d.ts +4 -0
- package/dist/lib/tools/distill.d.ts.map +1 -0
- package/dist/lib/tools/distill.js +41 -0
- package/dist/lib/tools/distill.js.map +1 -0
- package/dist/lib/tools/index.d.ts +5 -0
- package/dist/lib/tools/index.d.ts.map +1 -0
- package/dist/lib/tools/index.js +4 -0
- package/dist/lib/tools/index.js.map +1 -0
- package/dist/lib/tools/prune-shared.d.ts +6 -0
- package/dist/lib/tools/prune-shared.d.ts.map +1 -0
- package/dist/lib/tools/prune-shared.js +109 -0
- package/dist/lib/tools/prune-shared.js.map +1 -0
- package/dist/lib/tools/prune.d.ts +4 -0
- package/dist/lib/tools/prune.d.ts.map +1 -0
- package/dist/lib/tools/prune.js +28 -0
- package/dist/lib/tools/prune.js.map +1 -0
- package/dist/lib/{strategies/tools.d.ts → tools/types.d.ts} +1 -4
- package/dist/lib/tools/types.d.ts.map +1 -0
- package/dist/lib/tools/types.js +2 -0
- package/dist/lib/tools/types.js.map +1 -0
- package/dist/lib/tools/utils.d.ts +26 -0
- package/dist/lib/tools/utils.d.ts.map +1 -0
- package/dist/lib/tools/utils.js +121 -0
- package/dist/lib/tools/utils.js.map +1 -0
- package/dist/lib/ui/notification.d.ts +1 -0
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +95 -4
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/ui/utils.d.ts +1 -0
- package/dist/lib/ui/utils.d.ts.map +1 -1
- package/dist/lib/ui/utils.js +16 -0
- package/dist/lib/ui/utils.js.map +1 -1
- package/package.json +12 -9
- package/dist/lib/prompts/discard-tool-spec.d.ts +0 -2
- package/dist/lib/prompts/discard-tool-spec.d.ts.map +0 -1
- package/dist/lib/prompts/discard-tool-spec.js +0 -41
- package/dist/lib/prompts/discard-tool-spec.js.map +0 -1
- package/dist/lib/prompts/extract-tool-spec.d.ts +0 -2
- package/dist/lib/prompts/extract-tool-spec.d.ts.map +0 -1
- package/dist/lib/prompts/extract-tool-spec.js.map +0 -1
- package/dist/lib/prompts/nudge/both.d.ts +0 -2
- package/dist/lib/prompts/nudge/both.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/both.js +0 -11
- package/dist/lib/prompts/nudge/both.js.map +0 -1
- package/dist/lib/prompts/nudge/discard.d.ts +0 -2
- package/dist/lib/prompts/nudge/discard.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/discard.js +0 -10
- package/dist/lib/prompts/nudge/discard.js.map +0 -1
- package/dist/lib/prompts/nudge/extract.d.ts +0 -2
- package/dist/lib/prompts/nudge/extract.d.ts.map +0 -1
- package/dist/lib/prompts/nudge/extract.js +0 -10
- package/dist/lib/prompts/nudge/extract.js.map +0 -1
- package/dist/lib/prompts/system/both.d.ts +0 -2
- package/dist/lib/prompts/system/both.d.ts.map +0 -1
- package/dist/lib/prompts/system/both.js +0 -61
- package/dist/lib/prompts/system/both.js.map +0 -1
- package/dist/lib/prompts/system/discard.d.ts +0 -2
- package/dist/lib/prompts/system/discard.d.ts.map +0 -1
- package/dist/lib/prompts/system/discard.js +0 -52
- package/dist/lib/prompts/system/discard.js.map +0 -1
- package/dist/lib/prompts/system/extract.d.ts +0 -2
- package/dist/lib/prompts/system/extract.d.ts.map +0 -1
- package/dist/lib/prompts/system/extract.js +0 -52
- package/dist/lib/prompts/system/extract.js.map +0 -1
- package/dist/lib/strategies/tools.d.ts.map +0 -1
- package/dist/lib/strategies/tools.js +0 -135
- package/dist/lib/strategies/tools.js.map +0 -1
|
@@ -1,47 +1,66 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { extractParameterKey, buildToolIdList,
|
|
1
|
+
import { renderNudge } from "../prompts";
|
|
2
|
+
import { extractParameterKey, buildToolIdList, createSyntheticUserMessage, createSyntheticToolPart, isIgnoredUserMessage, } from "./utils";
|
|
3
3
|
import { getFilePathFromParameters, isProtectedFilePath } from "../protected-file-patterns";
|
|
4
|
-
import { getLastUserMessage } from "../shared-utils";
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const extractEnabled = config.tools.extract.enabled;
|
|
8
|
-
if (discardEnabled && extractEnabled) {
|
|
9
|
-
return loadPrompt(`nudge/nudge-both`);
|
|
10
|
-
}
|
|
11
|
-
else if (discardEnabled) {
|
|
12
|
-
return loadPrompt(`nudge/nudge-discard`);
|
|
13
|
-
}
|
|
14
|
-
else if (extractEnabled) {
|
|
15
|
-
return loadPrompt(`nudge/nudge-extract`);
|
|
16
|
-
}
|
|
17
|
-
return "";
|
|
18
|
-
};
|
|
19
|
-
const wrapPrunableTools = (content) => `<prunable-tools>
|
|
20
|
-
The following tools have been invoked and are available for pruning. This list does not mandate immediate action. Consider your current goals and the resources you need before discarding valuable tool inputs or outputs. Consolidate your prunes for efficiency; it is rarely worth pruning a single tiny tool output. Keep the context free of noise.
|
|
4
|
+
import { getLastUserMessage, isMessageCompacted } from "../shared-utils";
|
|
5
|
+
export const wrapPrunableTools = (content) => `<prunable-tools>
|
|
6
|
+
The following tools have been invoked and are available for pruning. This list does not mandate immediate action. Consider your current goals and the resources you need before pruning valuable tool inputs or outputs. Consolidate your prunes for efficiency; it is rarely worth pruning a single tiny tool output. Keep the context free of noise.
|
|
21
7
|
${content}
|
|
22
8
|
</prunable-tools>`;
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
export const wrapCompressContext = (messageCount) => `<compress-context>
|
|
10
|
+
Compress available. Conversation: ${messageCount} messages.
|
|
11
|
+
Compress collapses completed task sequences or exploration phases into summaries.
|
|
12
|
+
Uses text boundaries [startString, endString, topic, summary].
|
|
13
|
+
</compress-context>`;
|
|
14
|
+
export const wrapCooldownMessage = (flags) => {
|
|
15
|
+
const enabledTools = [];
|
|
16
|
+
if (flags.prune)
|
|
17
|
+
enabledTools.push("prune");
|
|
18
|
+
if (flags.distill)
|
|
19
|
+
enabledTools.push("distill");
|
|
20
|
+
if (flags.compress)
|
|
21
|
+
enabledTools.push("compress");
|
|
26
22
|
let toolName;
|
|
27
|
-
if (
|
|
28
|
-
toolName = "
|
|
23
|
+
if (enabledTools.length === 0) {
|
|
24
|
+
toolName = "pruning tools";
|
|
29
25
|
}
|
|
30
|
-
else if (
|
|
31
|
-
toolName =
|
|
26
|
+
else if (enabledTools.length === 1) {
|
|
27
|
+
toolName = `${enabledTools[0]} tool`;
|
|
32
28
|
}
|
|
33
29
|
else {
|
|
34
|
-
|
|
30
|
+
const last = enabledTools.pop();
|
|
31
|
+
toolName = `${enabledTools.join(", ")} or ${last} tools`;
|
|
35
32
|
}
|
|
36
|
-
return `<
|
|
37
|
-
Context management was just performed. Do
|
|
38
|
-
</
|
|
33
|
+
return `<context-info>
|
|
34
|
+
Context management was just performed. Do NOT use the ${toolName} again. A fresh list will be available after your next tool use.
|
|
35
|
+
</context-info>`;
|
|
36
|
+
};
|
|
37
|
+
const getNudgeString = (config) => {
|
|
38
|
+
const flags = {
|
|
39
|
+
prune: config.tools.prune.enabled,
|
|
40
|
+
distill: config.tools.distill.enabled,
|
|
41
|
+
compress: config.tools.compress.enabled,
|
|
42
|
+
};
|
|
43
|
+
if (!flags.prune && !flags.distill && !flags.compress) {
|
|
44
|
+
return "";
|
|
45
|
+
}
|
|
46
|
+
return renderNudge(flags);
|
|
47
|
+
};
|
|
48
|
+
const getCooldownMessage = (config) => {
|
|
49
|
+
return wrapCooldownMessage({
|
|
50
|
+
prune: config.tools.prune.enabled,
|
|
51
|
+
distill: config.tools.distill.enabled,
|
|
52
|
+
compress: config.tools.compress.enabled,
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const buildCompressContext = (state, messages) => {
|
|
56
|
+
const messageCount = messages.filter((msg) => !isMessageCompacted(state, msg)).length;
|
|
57
|
+
return wrapCompressContext(messageCount);
|
|
39
58
|
};
|
|
40
59
|
const buildPrunableToolsList = (state, config, logger, messages) => {
|
|
41
60
|
const lines = [];
|
|
42
61
|
const toolIdList = buildToolIdList(state, messages, logger);
|
|
43
62
|
state.toolParameters.forEach((toolParameterEntry, toolCallId) => {
|
|
44
|
-
if (state.prune.toolIds.
|
|
63
|
+
if (state.prune.toolIds.has(toolCallId)) {
|
|
45
64
|
return;
|
|
46
65
|
}
|
|
47
66
|
const allProtectedTools = config.tools.settings.protectedTools;
|
|
@@ -73,55 +92,64 @@ const buildPrunableToolsList = (state, config, logger, messages) => {
|
|
|
73
92
|
return wrapPrunableTools(lines.join("\n"));
|
|
74
93
|
};
|
|
75
94
|
export const insertPruneToolContext = (state, config, logger, messages) => {
|
|
76
|
-
|
|
95
|
+
const pruneEnabled = config.tools.prune.enabled;
|
|
96
|
+
const distillEnabled = config.tools.distill.enabled;
|
|
97
|
+
const compressEnabled = config.tools.compress.enabled;
|
|
98
|
+
if (!pruneEnabled && !distillEnabled && !compressEnabled) {
|
|
77
99
|
return;
|
|
78
100
|
}
|
|
79
|
-
|
|
101
|
+
const pruneOrDistillEnabled = pruneEnabled || distillEnabled;
|
|
102
|
+
const contentParts = [];
|
|
80
103
|
if (state.lastToolPrune) {
|
|
81
104
|
logger.debug("Last tool was prune - injecting cooldown message");
|
|
82
|
-
|
|
105
|
+
contentParts.push(getCooldownMessage(config));
|
|
83
106
|
}
|
|
84
107
|
else {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
108
|
+
if (pruneOrDistillEnabled) {
|
|
109
|
+
const prunableToolsList = buildPrunableToolsList(state, config, logger, messages);
|
|
110
|
+
if (prunableToolsList) {
|
|
111
|
+
// logger.debug("prunable-tools: \n" + prunableToolsList)
|
|
112
|
+
contentParts.push(prunableToolsList);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (compressEnabled) {
|
|
116
|
+
const compressContext = buildCompressContext(state, messages);
|
|
117
|
+
// logger.debug("compress-context: \n" + compressContext)
|
|
118
|
+
contentParts.push(compressContext);
|
|
88
119
|
}
|
|
89
|
-
|
|
90
|
-
let nudgeString = "";
|
|
120
|
+
// Add nudge if threshold reached
|
|
91
121
|
if (config.tools.settings.nudgeEnabled &&
|
|
92
122
|
state.nudgeCounter >= config.tools.settings.nudgeFrequency) {
|
|
93
123
|
logger.info("Inserting prune nudge message");
|
|
94
|
-
|
|
124
|
+
contentParts.push(getNudgeString(config));
|
|
95
125
|
}
|
|
96
|
-
prunableToolsContent = prunableToolsList + nudgeString;
|
|
97
126
|
}
|
|
127
|
+
if (contentParts.length === 0) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const combinedContent = contentParts.join("\n");
|
|
98
131
|
const lastUserMessage = getLastUserMessage(messages);
|
|
99
132
|
if (!lastUserMessage) {
|
|
100
133
|
return;
|
|
101
134
|
}
|
|
102
135
|
const userInfo = lastUserMessage.info;
|
|
103
136
|
const variant = state.variant ?? userInfo.variant;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
137
|
+
const lastNonIgnoredMessage = messages.findLast((msg) => !(msg.info.role === "user" && isIgnoredUserMessage(msg)));
|
|
138
|
+
// It's not safe to inject assistant role messages following a user message as models such
|
|
139
|
+
// as Claude expect the assistant "turn" to start with reasoning parts. Reasoning parts in many
|
|
140
|
+
// cases also cannot be faked as they may be encrypted by the model.
|
|
141
|
+
// Gemini only accepts synth reasoning text if it is "skip_thought_signature_validator"
|
|
112
142
|
if (!lastNonIgnoredMessage || lastNonIgnoredMessage.info.role === "user") {
|
|
113
|
-
messages.push(createSyntheticUserMessage(lastUserMessage,
|
|
143
|
+
messages.push(createSyntheticUserMessage(lastUserMessage, combinedContent, variant));
|
|
114
144
|
}
|
|
115
145
|
else {
|
|
116
|
-
|
|
146
|
+
// Append tool part to existing assistant message. This approach works universally across
|
|
147
|
+
// models including DeepSeek and Kimi which don't output reasoning parts following an
|
|
148
|
+
// assistant injection containing text parts. Tool parts appended to the last assistant
|
|
149
|
+
// message are the safest way to inject context without disrupting model behavior.
|
|
117
150
|
const modelID = userInfo.model?.modelID || "";
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
lastNonIgnoredMessage.parts.push(toolPart);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
messages.push(createSyntheticAssistantMessage(lastUserMessage, prunableToolsContent, variant));
|
|
124
|
-
}
|
|
151
|
+
const toolPart = createSyntheticToolPart(lastNonIgnoredMessage, combinedContent, modelID);
|
|
152
|
+
lastNonIgnoredMessage.parts.push(toolPart);
|
|
125
153
|
}
|
|
126
154
|
};
|
|
127
155
|
//# sourceMappingURL=inject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../lib/messages/inject.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../lib/messages/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAU7C,eAAO,MAAM,KAAK,GACd,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,QAAQ,YAAY,EACpB,UAAU,SAAS,EAAE,KACtB,IAMF,CAAA"}
|
|
@@ -1,12 +1,49 @@
|
|
|
1
|
-
import { isMessageCompacted } from "../shared-utils";
|
|
1
|
+
import { isMessageCompacted, getLastUserMessage } from "../shared-utils";
|
|
2
|
+
import { createSyntheticUserMessage, COMPRESS_SUMMARY_PREFIX } from "./utils";
|
|
2
3
|
const PRUNED_TOOL_OUTPUT_REPLACEMENT = "[Output removed to save context - information superseded or no longer needed]";
|
|
3
4
|
const PRUNED_TOOL_ERROR_INPUT_REPLACEMENT = "[input removed due to failed tool call]";
|
|
4
5
|
const PRUNED_QUESTION_INPUT_REPLACEMENT = "[questions removed - see output for user's answers]";
|
|
5
6
|
export const prune = (state, logger, config, messages) => {
|
|
7
|
+
filterCompressedRanges(state, logger, messages);
|
|
8
|
+
pruneFullTool(state, logger, messages);
|
|
6
9
|
pruneToolOutputs(state, logger, messages);
|
|
7
10
|
pruneToolInputs(state, logger, messages);
|
|
8
11
|
pruneToolErrors(state, logger, messages);
|
|
9
12
|
};
|
|
13
|
+
const pruneFullTool = (state, logger, messages) => {
|
|
14
|
+
const messagesToRemove = [];
|
|
15
|
+
for (const msg of messages) {
|
|
16
|
+
if (isMessageCompacted(state, msg)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const parts = Array.isArray(msg.parts) ? msg.parts : [];
|
|
20
|
+
const partsToRemove = [];
|
|
21
|
+
for (const part of parts) {
|
|
22
|
+
if (part.type !== "tool") {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (!state.prune.toolIds.has(part.callID)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (part.tool !== "edit" && part.tool !== "write") {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
partsToRemove.push(part.callID);
|
|
32
|
+
}
|
|
33
|
+
if (partsToRemove.length === 0) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
msg.parts = parts.filter((part) => part.type !== "tool" || !partsToRemove.includes(part.callID));
|
|
37
|
+
if (msg.parts.length === 0) {
|
|
38
|
+
messagesToRemove.push(msg.info.id);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (messagesToRemove.length > 0) {
|
|
42
|
+
const result = messages.filter((msg) => !messagesToRemove.includes(msg.info.id));
|
|
43
|
+
messages.length = 0;
|
|
44
|
+
messages.push(...result);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
10
47
|
const pruneToolOutputs = (state, logger, messages) => {
|
|
11
48
|
for (const msg of messages) {
|
|
12
49
|
if (isMessageCompacted(state, msg)) {
|
|
@@ -17,13 +54,13 @@ const pruneToolOutputs = (state, logger, messages) => {
|
|
|
17
54
|
if (part.type !== "tool") {
|
|
18
55
|
continue;
|
|
19
56
|
}
|
|
20
|
-
if (!state.prune.toolIds.
|
|
57
|
+
if (!state.prune.toolIds.has(part.callID)) {
|
|
21
58
|
continue;
|
|
22
59
|
}
|
|
23
60
|
if (part.state.status !== "completed") {
|
|
24
61
|
continue;
|
|
25
62
|
}
|
|
26
|
-
if (part.tool === "question") {
|
|
63
|
+
if (part.tool === "question" || part.tool === "edit" || part.tool === "write") {
|
|
27
64
|
continue;
|
|
28
65
|
}
|
|
29
66
|
part.state.output = PRUNED_TOOL_OUTPUT_REPLACEMENT;
|
|
@@ -40,7 +77,7 @@ const pruneToolInputs = (state, logger, messages) => {
|
|
|
40
77
|
if (part.type !== "tool") {
|
|
41
78
|
continue;
|
|
42
79
|
}
|
|
43
|
-
if (!state.prune.toolIds.
|
|
80
|
+
if (!state.prune.toolIds.has(part.callID)) {
|
|
44
81
|
continue;
|
|
45
82
|
}
|
|
46
83
|
if (part.state.status !== "completed") {
|
|
@@ -65,7 +102,7 @@ const pruneToolErrors = (state, logger, messages) => {
|
|
|
65
102
|
if (part.type !== "tool") {
|
|
66
103
|
continue;
|
|
67
104
|
}
|
|
68
|
-
if (!state.prune.toolIds.
|
|
105
|
+
if (!state.prune.toolIds.has(part.callID)) {
|
|
69
106
|
continue;
|
|
70
107
|
}
|
|
71
108
|
if (part.state.status !== "error") {
|
|
@@ -83,4 +120,43 @@ const pruneToolErrors = (state, logger, messages) => {
|
|
|
83
120
|
}
|
|
84
121
|
}
|
|
85
122
|
};
|
|
123
|
+
const filterCompressedRanges = (state, logger, messages) => {
|
|
124
|
+
if (!state.prune.messageIds?.size) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const result = [];
|
|
128
|
+
for (const msg of messages) {
|
|
129
|
+
const msgId = msg.info.id;
|
|
130
|
+
// Check if there's a summary to inject at this anchor point
|
|
131
|
+
const summary = state.compressSummaries?.find((s) => s.anchorMessageId === msgId);
|
|
132
|
+
if (summary) {
|
|
133
|
+
// Find user message for variant and as base for synthetic message
|
|
134
|
+
const msgIndex = messages.indexOf(msg);
|
|
135
|
+
const userMessage = getLastUserMessage(messages, msgIndex);
|
|
136
|
+
if (userMessage) {
|
|
137
|
+
const userInfo = userMessage.info;
|
|
138
|
+
const summaryContent = COMPRESS_SUMMARY_PREFIX + summary.summary;
|
|
139
|
+
result.push(createSyntheticUserMessage(userMessage, summaryContent, userInfo.variant));
|
|
140
|
+
logger.info("Injected compress summary", {
|
|
141
|
+
anchorMessageId: msgId,
|
|
142
|
+
summaryLength: summary.summary.length,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
logger.warn("No user message found for compress summary", {
|
|
147
|
+
anchorMessageId: msgId,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Skip messages that are in the prune list
|
|
152
|
+
if (state.prune.messageIds.has(msgId)) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// Normal message, include it
|
|
156
|
+
result.push(msg);
|
|
157
|
+
}
|
|
158
|
+
// Replace messages array contents
|
|
159
|
+
messages.length = 0;
|
|
160
|
+
messages.push(...result);
|
|
161
|
+
};
|
|
86
162
|
//# sourceMappingURL=prune.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Logger } from "../logger";
|
|
2
2
|
import type { SessionState, WithParts } from "../state";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const COMPRESS_SUMMARY_PREFIX = "[Compressed conversation block]\n\n";
|
|
4
4
|
export declare const createSyntheticUserMessage: (baseMessage: WithParts, content: string, variant?: string) => WithParts;
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const createSyntheticToolPart: (baseMessage: WithParts, content: string) => {
|
|
5
|
+
export declare const createSyntheticToolPart: (baseMessage: WithParts, content: string, modelID: string) => {
|
|
7
6
|
id: string;
|
|
8
7
|
sessionID: string;
|
|
9
8
|
messageID: string;
|
|
@@ -15,7 +14,13 @@ export declare const createSyntheticToolPart: (baseMessage: WithParts, content:
|
|
|
15
14
|
input: {};
|
|
16
15
|
output: string;
|
|
17
16
|
title: string;
|
|
18
|
-
metadata: {
|
|
17
|
+
metadata: {
|
|
18
|
+
google: {
|
|
19
|
+
thoughtSignature: string;
|
|
20
|
+
};
|
|
21
|
+
} | {
|
|
22
|
+
google?: undefined;
|
|
23
|
+
};
|
|
19
24
|
time: {
|
|
20
25
|
start: number;
|
|
21
26
|
end: number;
|
|
@@ -28,4 +33,5 @@ export declare const createSyntheticToolPart: (baseMessage: WithParts, content:
|
|
|
28
33
|
export declare const extractParameterKey: (tool: string, parameters: any) => string;
|
|
29
34
|
export declare function buildToolIdList(state: SessionState, messages: WithParts[], logger: Logger): string[];
|
|
30
35
|
export declare const isIgnoredUserMessage: (message: WithParts) => boolean;
|
|
36
|
+
export declare const findMessageIndex: (messages: WithParts[], messageId: string) => number;
|
|
31
37
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/messages/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/messages/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGvD,eAAO,MAAM,uBAAuB,wCAAwC,CAAA;AAS5E,eAAO,MAAM,0BAA0B,GACnC,aAAa,SAAS,EACtB,SAAS,MAAM,EACf,UAAU,MAAM,KACjB,SA0BF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAChC,aAAa,SAAS,EACtB,SAAS,MAAM,EACf,SAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;CA6BlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,YAAY,GAAG,KAAG,MAkHnE,CAAA;AAED,wBAAgB,eAAe,CAC3B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,EAAE,EACrB,MAAM,EAAE,MAAM,GACf,MAAM,EAAE,CAgBV;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,SAAS,KAAG,OAazD,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,SAAS,EAAE,EAAE,WAAW,MAAM,KAAG,MAE3E,CAAA"}
|
|
@@ -1,88 +1,59 @@
|
|
|
1
|
+
import { ulid } from "ulid";
|
|
1
2
|
import { isMessageCompacted } from "../shared-utils";
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
export const isDeepSeekOrKimi = (providerID, modelID) => {
|
|
6
|
-
const lowerProviderID = providerID.toLowerCase();
|
|
3
|
+
export const COMPRESS_SUMMARY_PREFIX = "[Compressed conversation block]\n\n";
|
|
4
|
+
const generateUniqueId = (prefix) => `${prefix}_${ulid()}`;
|
|
5
|
+
const isGeminiModel = (modelID) => {
|
|
7
6
|
const lowerModelID = modelID.toLowerCase();
|
|
8
|
-
return
|
|
9
|
-
lowerProviderID.includes("kimi") ||
|
|
10
|
-
lowerModelID.includes("deepseek") ||
|
|
11
|
-
lowerModelID.includes("kimi"));
|
|
7
|
+
return lowerModelID.includes("gemini");
|
|
12
8
|
};
|
|
13
9
|
export const createSyntheticUserMessage = (baseMessage, content, variant) => {
|
|
14
10
|
const userInfo = baseMessage.info;
|
|
15
11
|
const now = Date.now();
|
|
12
|
+
const messageId = generateUniqueId("msg");
|
|
13
|
+
const partId = generateUniqueId("prt");
|
|
16
14
|
return {
|
|
17
15
|
info: {
|
|
18
|
-
id:
|
|
16
|
+
id: messageId,
|
|
19
17
|
sessionID: userInfo.sessionID,
|
|
20
18
|
role: "user",
|
|
21
|
-
agent: userInfo.agent
|
|
19
|
+
agent: userInfo.agent,
|
|
22
20
|
model: userInfo.model,
|
|
23
21
|
time: { created: now },
|
|
24
22
|
...(variant !== undefined && { variant }),
|
|
25
23
|
},
|
|
26
24
|
parts: [
|
|
27
25
|
{
|
|
28
|
-
id:
|
|
26
|
+
id: partId,
|
|
29
27
|
sessionID: userInfo.sessionID,
|
|
30
|
-
messageID:
|
|
28
|
+
messageID: messageId,
|
|
31
29
|
type: "text",
|
|
32
30
|
text: content,
|
|
33
31
|
},
|
|
34
32
|
],
|
|
35
33
|
};
|
|
36
34
|
};
|
|
37
|
-
export const
|
|
35
|
+
export const createSyntheticToolPart = (baseMessage, content, modelID) => {
|
|
38
36
|
const userInfo = baseMessage.info;
|
|
39
37
|
const now = Date.now();
|
|
38
|
+
const partId = generateUniqueId("prt");
|
|
39
|
+
const callId = generateUniqueId("call");
|
|
40
|
+
// Gemini requires thoughtSignature bypass to accept synthetic tool parts
|
|
41
|
+
const toolPartMetadata = isGeminiModel(modelID)
|
|
42
|
+
? { google: { thoughtSignature: "skip_thought_signature_validator" } }
|
|
43
|
+
: {};
|
|
40
44
|
return {
|
|
41
|
-
|
|
42
|
-
id: SYNTHETIC_MESSAGE_ID,
|
|
43
|
-
sessionID: userInfo.sessionID,
|
|
44
|
-
role: "assistant",
|
|
45
|
-
agent: userInfo.agent || "code",
|
|
46
|
-
parentID: userInfo.id,
|
|
47
|
-
modelID: userInfo.model.modelID,
|
|
48
|
-
providerID: userInfo.model.providerID,
|
|
49
|
-
mode: "default",
|
|
50
|
-
path: {
|
|
51
|
-
cwd: "/",
|
|
52
|
-
root: "/",
|
|
53
|
-
},
|
|
54
|
-
time: { created: now, completed: now },
|
|
55
|
-
cost: 0,
|
|
56
|
-
tokens: { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } },
|
|
57
|
-
...(variant !== undefined && { variant }),
|
|
58
|
-
},
|
|
59
|
-
parts: [
|
|
60
|
-
{
|
|
61
|
-
id: SYNTHETIC_PART_ID,
|
|
62
|
-
sessionID: userInfo.sessionID,
|
|
63
|
-
messageID: SYNTHETIC_MESSAGE_ID,
|
|
64
|
-
type: "text",
|
|
65
|
-
text: content,
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
export const createSyntheticToolPart = (baseMessage, content) => {
|
|
71
|
-
const userInfo = baseMessage.info;
|
|
72
|
-
const now = Date.now();
|
|
73
|
-
return {
|
|
74
|
-
id: SYNTHETIC_PART_ID,
|
|
45
|
+
id: partId,
|
|
75
46
|
sessionID: userInfo.sessionID,
|
|
76
47
|
messageID: baseMessage.info.id,
|
|
77
48
|
type: "tool",
|
|
78
|
-
callID:
|
|
49
|
+
callID: callId,
|
|
79
50
|
tool: "context_info",
|
|
80
51
|
state: {
|
|
81
52
|
status: "completed",
|
|
82
53
|
input: {},
|
|
83
54
|
output: content,
|
|
84
55
|
title: "Context Info",
|
|
85
|
-
metadata:
|
|
56
|
+
metadata: toolPartMetadata,
|
|
86
57
|
time: { start: now, end: now },
|
|
87
58
|
},
|
|
88
59
|
};
|
|
@@ -225,4 +196,7 @@ export const isIgnoredUserMessage = (message) => {
|
|
|
225
196
|
}
|
|
226
197
|
return true;
|
|
227
198
|
};
|
|
199
|
+
export const findMessageIndex = (messages, messageId) => {
|
|
200
|
+
return messages.findIndex((msg) => msg.info.id === messageId);
|
|
201
|
+
};
|
|
228
202
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/messages/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/messages/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const COMPRESS_TOOL_SPEC = "Collapses a contiguous range of conversation into a single summary.\n\n## When to Use This Tool\n\nUse `compress` when you want to condense an entire sequence of work into a brief summary:\n\n- **Phase Completion:** You completed a phase (research, tool calls, implementation) and want to collapse the entire sequence into a summary.\n- **Exploration Done:** You explored multiple files or ran multiple commands and only need a summary of what you learned.\n- **Failed Attempts:** You tried several unsuccessful approaches and want to condense them into a brief note.\n- **Verbose Output:** A section of conversation has grown large but can be summarized without losing critical details.\n\n## When NOT to Use This Tool\n\n- **If you need specific details:** If you'll need exact code, file contents, or error messages from the range, keep them.\n- **For individual tool outputs:** Use `prune` or `distill` for single tool outputs. Compress targets conversation ranges.\n- **If it's recent content:** You may still need recent work for the current phase.\n\n## How It Works\n\n1. `startString` \u2014 A unique text string that marks the start of the range to compress\n2. `endString` \u2014 A unique text string that marks the end of the range to compress\n3. `topic` \u2014 A short label (3-5 words) describing the compressed content\n4. `summary` \u2014 The replacement text that will be inserted\n\nEverything between startString and endString (inclusive) is removed and replaced with your summary.\n\n**Important:** The compress will FAIL if `startString` or `endString` is not found in the conversation. The compress will also FAIL if either string is found multiple times. Provide a larger string with more surrounding context to uniquely identify the intended match.\n\n## Best Practices\n- **Choose unique strings:** Pick text that appears only once in the conversation.\n- **Write concise topics:** Examples: \"Auth System Exploration\", \"Token Logic Refactor\"\n- **Write comprehensive summaries:** Include key information like file names, function signatures, and important findings.\n- **Timing:** Best used after finishing a work phase, not during active exploration.\n\n## Format\n\n- `input`: Array with four elements: [startString, endString, topic, summary]\n\n## Example\n\n<example_compress>\nConversation: [Asked about auth] -> [Read 5 files] -> [Analyzed patterns] -> [Found \"JWT tokens with 24h expiry\"]\n\n[Uses compress with:\n input: [\n \"Asked about authentication\",\n \"JWT tokens with 24h expiry\",\n \"Auth System Exploration\",\n \"Auth: JWT 24h expiry, bcrypt passwords, refresh rotation. Files: auth.ts, tokens.ts, middleware/auth.ts\"\n ]\n]\n</example_compress>\n\n<example_keep>\nAssistant: [Just finished reading auth.ts]\nI've read the auth file and now need to make edits based on it. I'm keeping this in context rather than compressing.\n</example_keep>";
|
|
2
|
+
//# sourceMappingURL=compress-tool-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress-tool-spec.d.ts","sourceRoot":"","sources":["../../../lib/prompts/compress-tool-spec.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,o2FAwDf,CAAA"}
|