@tarquinen/opencode-dcp 3.1.9 → 3.1.10

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 (147) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +2 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7832 -76
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/config.d.ts +1 -0
  7. package/dist/lib/config.d.ts.map +1 -1
  8. package/dist/lib/hooks.d.ts +2 -10
  9. package/dist/lib/hooks.d.ts.map +1 -1
  10. package/dist/lib/messages/index.d.ts +1 -0
  11. package/dist/lib/messages/index.d.ts.map +1 -1
  12. package/dist/lib/messages/inject/utils.d.ts +7 -0
  13. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  14. package/dist/lib/messages/utils.d.ts +1 -1
  15. package/dist/lib/messages/utils.d.ts.map +1 -1
  16. package/dist/lib/state/state.d.ts.map +1 -1
  17. package/dist/lib/state/types.d.ts +0 -1
  18. package/dist/lib/state/types.d.ts.map +1 -1
  19. package/dist/lib/update.d.ts +22 -0
  20. package/dist/lib/update.d.ts.map +1 -0
  21. package/package.json +6 -5
  22. package/dist/lib/auth.js +0 -32
  23. package/dist/lib/auth.js.map +0 -1
  24. package/dist/lib/commands/compression-targets.js +0 -98
  25. package/dist/lib/commands/compression-targets.js.map +0 -1
  26. package/dist/lib/commands/context.js +0 -239
  27. package/dist/lib/commands/context.js.map +0 -1
  28. package/dist/lib/commands/decompress.js +0 -174
  29. package/dist/lib/commands/decompress.js.map +0 -1
  30. package/dist/lib/commands/help.js +0 -52
  31. package/dist/lib/commands/help.js.map +0 -1
  32. package/dist/lib/commands/index.js +0 -8
  33. package/dist/lib/commands/index.js.map +0 -1
  34. package/dist/lib/commands/manual.js +0 -75
  35. package/dist/lib/commands/manual.js.map +0 -1
  36. package/dist/lib/commands/recompress.js +0 -140
  37. package/dist/lib/commands/recompress.js.map +0 -1
  38. package/dist/lib/commands/stats.js +0 -97
  39. package/dist/lib/commands/stats.js.map +0 -1
  40. package/dist/lib/commands/sweep.js +0 -195
  41. package/dist/lib/commands/sweep.js.map +0 -1
  42. package/dist/lib/compress/index.js +0 -3
  43. package/dist/lib/compress/index.js.map +0 -1
  44. package/dist/lib/compress/message-utils.js +0 -179
  45. package/dist/lib/compress/message-utils.js.map +0 -1
  46. package/dist/lib/compress/message.js +0 -82
  47. package/dist/lib/compress/message.js.map +0 -1
  48. package/dist/lib/compress/pipeline.js +0 -41
  49. package/dist/lib/compress/pipeline.js.map +0 -1
  50. package/dist/lib/compress/protected-content.js +0 -106
  51. package/dist/lib/compress/protected-content.js.map +0 -1
  52. package/dist/lib/compress/range-utils.js +0 -199
  53. package/dist/lib/compress/range-utils.js.map +0 -1
  54. package/dist/lib/compress/range.js +0 -90
  55. package/dist/lib/compress/range.js.map +0 -1
  56. package/dist/lib/compress/search.js +0 -204
  57. package/dist/lib/compress/search.js.map +0 -1
  58. package/dist/lib/compress/state.js +0 -213
  59. package/dist/lib/compress/state.js.map +0 -1
  60. package/dist/lib/compress/timing.js +0 -42
  61. package/dist/lib/compress/timing.js.map +0 -1
  62. package/dist/lib/compress/types.js +0 -2
  63. package/dist/lib/compress/types.js.map +0 -1
  64. package/dist/lib/compress-permission.js +0 -10
  65. package/dist/lib/compress-permission.js.map +0 -1
  66. package/dist/lib/config.js +0 -760
  67. package/dist/lib/config.js.map +0 -1
  68. package/dist/lib/hooks.js +0 -245
  69. package/dist/lib/hooks.js.map +0 -1
  70. package/dist/lib/host-permissions.js +0 -58
  71. package/dist/lib/host-permissions.js.map +0 -1
  72. package/dist/lib/logger.js +0 -204
  73. package/dist/lib/logger.js.map +0 -1
  74. package/dist/lib/message-ids.js +0 -128
  75. package/dist/lib/message-ids.js.map +0 -1
  76. package/dist/lib/messages/index.js +0 -9
  77. package/dist/lib/messages/index.js.map +0 -1
  78. package/dist/lib/messages/inject/inject.js +0 -128
  79. package/dist/lib/messages/inject/inject.js.map +0 -1
  80. package/dist/lib/messages/inject/subagent-results.js +0 -58
  81. package/dist/lib/messages/inject/subagent-results.js.map +0 -1
  82. package/dist/lib/messages/inject/utils.js +0 -211
  83. package/dist/lib/messages/inject/utils.js.map +0 -1
  84. package/dist/lib/messages/priority.js +0 -65
  85. package/dist/lib/messages/priority.js.map +0 -1
  86. package/dist/lib/messages/prune.js +0 -180
  87. package/dist/lib/messages/prune.js.map +0 -1
  88. package/dist/lib/messages/query.js +0 -52
  89. package/dist/lib/messages/query.js.map +0 -1
  90. package/dist/lib/messages/reasoning-strip.js +0 -33
  91. package/dist/lib/messages/reasoning-strip.js.map +0 -1
  92. package/dist/lib/messages/shape.js +0 -39
  93. package/dist/lib/messages/shape.js.map +0 -1
  94. package/dist/lib/messages/sync.js +0 -93
  95. package/dist/lib/messages/sync.js.map +0 -1
  96. package/dist/lib/messages/utils.js +0 -146
  97. package/dist/lib/messages/utils.js.map +0 -1
  98. package/dist/lib/prompts/compress-message.js +0 -44
  99. package/dist/lib/prompts/compress-message.js.map +0 -1
  100. package/dist/lib/prompts/compress-range.js +0 -61
  101. package/dist/lib/prompts/compress-range.js.map +0 -1
  102. package/dist/lib/prompts/context-limit-nudge.js +0 -19
  103. package/dist/lib/prompts/context-limit-nudge.js.map +0 -1
  104. package/dist/lib/prompts/extensions/nudge.js +0 -35
  105. package/dist/lib/prompts/extensions/nudge.js.map +0 -1
  106. package/dist/lib/prompts/extensions/system.js +0 -30
  107. package/dist/lib/prompts/extensions/system.js.map +0 -1
  108. package/dist/lib/prompts/extensions/tool.js +0 -34
  109. package/dist/lib/prompts/extensions/tool.js.map +0 -1
  110. package/dist/lib/prompts/index.js +0 -18
  111. package/dist/lib/prompts/index.js.map +0 -1
  112. package/dist/lib/prompts/iteration-nudge.js +0 -7
  113. package/dist/lib/prompts/iteration-nudge.js.map +0 -1
  114. package/dist/lib/prompts/store.js +0 -358
  115. package/dist/lib/prompts/store.js.map +0 -1
  116. package/dist/lib/prompts/system.js +0 -34
  117. package/dist/lib/prompts/system.js.map +0 -1
  118. package/dist/lib/prompts/turn-nudge.js +0 -11
  119. package/dist/lib/prompts/turn-nudge.js.map +0 -1
  120. package/dist/lib/protected-patterns.js +0 -107
  121. package/dist/lib/protected-patterns.js.map +0 -1
  122. package/dist/lib/state/index.js +0 -5
  123. package/dist/lib/state/index.js.map +0 -1
  124. package/dist/lib/state/persistence.js +0 -172
  125. package/dist/lib/state/persistence.js.map +0 -1
  126. package/dist/lib/state/state.js +0 -143
  127. package/dist/lib/state/state.js.map +0 -1
  128. package/dist/lib/state/tool-cache.js +0 -69
  129. package/dist/lib/state/tool-cache.js.map +0 -1
  130. package/dist/lib/state/types.js +0 -2
  131. package/dist/lib/state/types.js.map +0 -1
  132. package/dist/lib/state/utils.js +0 -265
  133. package/dist/lib/state/utils.js.map +0 -1
  134. package/dist/lib/strategies/deduplication.js +0 -100
  135. package/dist/lib/strategies/deduplication.js.map +0 -1
  136. package/dist/lib/strategies/index.js +0 -3
  137. package/dist/lib/strategies/index.js.map +0 -1
  138. package/dist/lib/strategies/purge-errors.js +0 -62
  139. package/dist/lib/strategies/purge-errors.js.map +0 -1
  140. package/dist/lib/subagents/subagent-results.js +0 -52
  141. package/dist/lib/subagents/subagent-results.js.map +0 -1
  142. package/dist/lib/token-utils.js +0 -133
  143. package/dist/lib/token-utils.js.map +0 -1
  144. package/dist/lib/ui/notification.js +0 -243
  145. package/dist/lib/ui/notification.js.map +0 -1
  146. package/dist/lib/ui/utils.js +0 -256
  147. package/dist/lib/ui/utils.js.map +0 -1
@@ -1,265 +0,0 @@
1
- import { isIgnoredUserMessage, messageHasCompress } from "../messages/query";
2
- import { isMessageWithInfo } from "../messages/shape";
3
- import { countTokens } from "../token-utils";
4
- export const isMessageCompacted = (state, msg) => {
5
- if (!isMessageWithInfo(msg)) {
6
- return false;
7
- }
8
- if (msg.info.time.created < state.lastCompaction) {
9
- return true;
10
- }
11
- const pruneEntry = state.prune.messages.byMessageId.get(msg.info.id);
12
- if (pruneEntry && pruneEntry.activeBlockIds.length > 0) {
13
- return true;
14
- }
15
- return false;
16
- };
17
- export function serializePruneMessagesState(messagesState) {
18
- return {
19
- byMessageId: Object.fromEntries(messagesState.byMessageId),
20
- blocksById: Object.fromEntries(Array.from(messagesState.blocksById.entries()).map(([blockId, block]) => [
21
- String(blockId),
22
- block,
23
- ])),
24
- activeBlockIds: Array.from(messagesState.activeBlockIds),
25
- activeByAnchorMessageId: Object.fromEntries(messagesState.activeByAnchorMessageId),
26
- nextBlockId: messagesState.nextBlockId,
27
- nextRunId: messagesState.nextRunId,
28
- };
29
- }
30
- export async function isSubAgentSession(client, sessionID) {
31
- try {
32
- const result = await client.session.get({ path: { id: sessionID } });
33
- return !!result.data?.parentID;
34
- }
35
- catch (error) {
36
- return false;
37
- }
38
- }
39
- export function findLastCompactionTimestamp(messages) {
40
- for (let i = messages.length - 1; i >= 0; i--) {
41
- const msg = messages[i];
42
- if (!isMessageWithInfo(msg)) {
43
- continue;
44
- }
45
- if (msg.info.role === "assistant" && msg.info.summary === true) {
46
- return msg.info.time.created;
47
- }
48
- }
49
- return 0;
50
- }
51
- export function countTurns(state, messages) {
52
- let turnCount = 0;
53
- for (const msg of messages) {
54
- if (!isMessageWithInfo(msg)) {
55
- continue;
56
- }
57
- if (isMessageCompacted(state, msg)) {
58
- continue;
59
- }
60
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
61
- for (const part of parts) {
62
- if (part.type === "step-start") {
63
- turnCount++;
64
- }
65
- }
66
- }
67
- return turnCount;
68
- }
69
- export function loadPruneMap(obj) {
70
- if (!obj || typeof obj !== "object") {
71
- return new Map();
72
- }
73
- const entries = Object.entries(obj).filter((entry) => typeof entry[0] === "string" && typeof entry[1] === "number");
74
- return new Map(entries);
75
- }
76
- export function createPruneMessagesState() {
77
- return {
78
- byMessageId: new Map(),
79
- blocksById: new Map(),
80
- activeBlockIds: new Set(),
81
- activeByAnchorMessageId: new Map(),
82
- nextBlockId: 1,
83
- nextRunId: 1,
84
- };
85
- }
86
- export function loadPruneMessagesState(persisted) {
87
- const state = createPruneMessagesState();
88
- if (!persisted || typeof persisted !== "object") {
89
- return state;
90
- }
91
- if (typeof persisted.nextBlockId === "number" && Number.isInteger(persisted.nextBlockId)) {
92
- state.nextBlockId = Math.max(1, persisted.nextBlockId);
93
- }
94
- if (typeof persisted.nextRunId === "number" && Number.isInteger(persisted.nextRunId)) {
95
- state.nextRunId = Math.max(1, persisted.nextRunId);
96
- }
97
- if (persisted.byMessageId && typeof persisted.byMessageId === "object") {
98
- for (const [messageId, entry] of Object.entries(persisted.byMessageId)) {
99
- if (!entry || typeof entry !== "object") {
100
- continue;
101
- }
102
- const tokenCount = typeof entry.tokenCount === "number" ? entry.tokenCount : 0;
103
- const allBlockIds = Array.isArray(entry.allBlockIds)
104
- ? [
105
- ...new Set(entry.allBlockIds.filter((id) => Number.isInteger(id) && id > 0)),
106
- ]
107
- : [];
108
- const activeBlockIds = Array.isArray(entry.activeBlockIds)
109
- ? [
110
- ...new Set(entry.activeBlockIds.filter((id) => Number.isInteger(id) && id > 0)),
111
- ]
112
- : [];
113
- state.byMessageId.set(messageId, {
114
- tokenCount,
115
- allBlockIds,
116
- activeBlockIds,
117
- });
118
- }
119
- }
120
- if (persisted.blocksById && typeof persisted.blocksById === "object") {
121
- for (const [blockIdStr, block] of Object.entries(persisted.blocksById)) {
122
- const blockId = Number.parseInt(blockIdStr, 10);
123
- if (!Number.isInteger(blockId) || blockId < 1 || !block || typeof block !== "object") {
124
- continue;
125
- }
126
- const toNumberArray = (value) => Array.isArray(value)
127
- ? [
128
- ...new Set(value.filter((item) => Number.isInteger(item) && item > 0)),
129
- ]
130
- : [];
131
- const toStringArray = (value) => Array.isArray(value)
132
- ? [...new Set(value.filter((item) => typeof item === "string"))]
133
- : [];
134
- state.blocksById.set(blockId, {
135
- blockId,
136
- runId: typeof block.runId === "number" &&
137
- Number.isInteger(block.runId) &&
138
- block.runId > 0
139
- ? block.runId
140
- : blockId,
141
- active: block.active === true,
142
- deactivatedByUser: block.deactivatedByUser === true,
143
- compressedTokens: typeof block.compressedTokens === "number" &&
144
- Number.isFinite(block.compressedTokens)
145
- ? Math.max(0, block.compressedTokens)
146
- : 0,
147
- summaryTokens: typeof block.summaryTokens === "number" && Number.isFinite(block.summaryTokens)
148
- ? Math.max(0, block.summaryTokens)
149
- : typeof block.summary === "string"
150
- ? countTokens(block.summary)
151
- : 0,
152
- durationMs: typeof block.durationMs === "number" && Number.isFinite(block.durationMs)
153
- ? Math.max(0, block.durationMs)
154
- : 0,
155
- mode: block.mode === "range" || block.mode === "message" ? block.mode : undefined,
156
- topic: typeof block.topic === "string" ? block.topic : "",
157
- batchTopic: typeof block.batchTopic === "string"
158
- ? block.batchTopic
159
- : typeof block.topic === "string"
160
- ? block.topic
161
- : "",
162
- startId: typeof block.startId === "string" ? block.startId : "",
163
- endId: typeof block.endId === "string" ? block.endId : "",
164
- anchorMessageId: typeof block.anchorMessageId === "string" ? block.anchorMessageId : "",
165
- compressMessageId: typeof block.compressMessageId === "string" ? block.compressMessageId : "",
166
- compressCallId: typeof block.compressCallId === "string" ? block.compressCallId : undefined,
167
- includedBlockIds: toNumberArray(block.includedBlockIds),
168
- consumedBlockIds: toNumberArray(block.consumedBlockIds),
169
- parentBlockIds: toNumberArray(block.parentBlockIds),
170
- directMessageIds: toStringArray(block.directMessageIds),
171
- directToolIds: toStringArray(block.directToolIds),
172
- effectiveMessageIds: toStringArray(block.effectiveMessageIds),
173
- effectiveToolIds: toStringArray(block.effectiveToolIds),
174
- createdAt: typeof block.createdAt === "number" ? block.createdAt : 0,
175
- deactivatedAt: typeof block.deactivatedAt === "number" ? block.deactivatedAt : undefined,
176
- deactivatedByBlockId: typeof block.deactivatedByBlockId === "number" &&
177
- Number.isInteger(block.deactivatedByBlockId)
178
- ? block.deactivatedByBlockId
179
- : undefined,
180
- summary: typeof block.summary === "string" ? block.summary : "",
181
- });
182
- }
183
- }
184
- if (Array.isArray(persisted.activeBlockIds)) {
185
- for (const blockId of persisted.activeBlockIds) {
186
- if (!Number.isInteger(blockId) || blockId < 1) {
187
- continue;
188
- }
189
- state.activeBlockIds.add(blockId);
190
- }
191
- }
192
- if (persisted.activeByAnchorMessageId &&
193
- typeof persisted.activeByAnchorMessageId === "object") {
194
- for (const [anchorMessageId, blockId] of Object.entries(persisted.activeByAnchorMessageId)) {
195
- if (typeof blockId !== "number" || !Number.isInteger(blockId) || blockId < 1) {
196
- continue;
197
- }
198
- state.activeByAnchorMessageId.set(anchorMessageId, blockId);
199
- }
200
- }
201
- for (const [blockId, block] of state.blocksById) {
202
- if (block.active) {
203
- state.activeBlockIds.add(blockId);
204
- if (block.anchorMessageId) {
205
- state.activeByAnchorMessageId.set(block.anchorMessageId, blockId);
206
- }
207
- }
208
- if (blockId >= state.nextBlockId) {
209
- state.nextBlockId = blockId + 1;
210
- }
211
- if (block.runId >= state.nextRunId) {
212
- state.nextRunId = block.runId + 1;
213
- }
214
- }
215
- return state;
216
- }
217
- export function collectTurnNudgeAnchors(messages) {
218
- const anchors = new Set();
219
- let pendingUserMessageId = null;
220
- for (let i = messages.length - 1; i >= 0; i--) {
221
- const message = messages[i];
222
- if (messageHasCompress(message)) {
223
- break;
224
- }
225
- if (message.info.role === "user") {
226
- if (!isIgnoredUserMessage(message)) {
227
- pendingUserMessageId = message.info.id;
228
- }
229
- continue;
230
- }
231
- if (message.info.role === "assistant" && pendingUserMessageId) {
232
- anchors.add(message.info.id);
233
- anchors.add(pendingUserMessageId);
234
- pendingUserMessageId = null;
235
- }
236
- }
237
- return anchors;
238
- }
239
- export function getActiveSummaryTokenUsage(state) {
240
- let total = 0;
241
- for (const blockId of state.prune.messages.activeBlockIds) {
242
- const block = state.prune.messages.blocksById.get(blockId);
243
- if (!block || !block.active) {
244
- continue;
245
- }
246
- total += block.summaryTokens;
247
- }
248
- return total;
249
- }
250
- export function resetOnCompaction(state) {
251
- state.toolParameters.clear();
252
- state.prune.tools = new Map();
253
- state.prune.messages = createPruneMessagesState();
254
- state.messageIds = {
255
- byRawId: new Map(),
256
- byRef: new Map(),
257
- nextRef: 1,
258
- };
259
- state.nudges = {
260
- contextLimitAnchors: new Set(),
261
- turnNudgeAnchors: new Set(),
262
- iterationNudgeAnchors: new Set(),
263
- };
264
- }
265
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/state/utils.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import { getFilePathsFromParameters, isFilePathProtected, isToolNameProtected, } from "../protected-patterns";
2
- import { getTotalToolTokens } from "../token-utils";
3
- /**
4
- * Deduplication strategy - prunes older tool calls that have identical
5
- * tool name and parameters, keeping only the most recent occurrence.
6
- * Modifies the session state in place to add pruned tool call IDs.
7
- */
8
- export const deduplicate = (state, logger, config, messages) => {
9
- if (state.manualMode && !config.manualMode.automaticStrategies) {
10
- return;
11
- }
12
- if (!config.strategies.deduplication.enabled) {
13
- return;
14
- }
15
- const allToolIds = state.toolIdList;
16
- if (allToolIds.length === 0) {
17
- return;
18
- }
19
- // Filter out IDs already pruned
20
- const unprunedIds = allToolIds.filter((id) => !state.prune.tools.has(id));
21
- if (unprunedIds.length === 0) {
22
- return;
23
- }
24
- const protectedTools = config.strategies.deduplication.protectedTools;
25
- // Group by signature (tool name + normalized parameters)
26
- const signatureMap = new Map();
27
- for (const id of unprunedIds) {
28
- const metadata = state.toolParameters.get(id);
29
- if (!metadata) {
30
- // logger.warn(`Missing metadata for tool call ID: ${id}`)
31
- continue;
32
- }
33
- // Skip protected tools
34
- if (isToolNameProtected(metadata.tool, protectedTools)) {
35
- continue;
36
- }
37
- const filePaths = getFilePathsFromParameters(metadata.tool, metadata.parameters);
38
- if (isFilePathProtected(filePaths, config.protectedFilePatterns)) {
39
- continue;
40
- }
41
- const signature = createToolSignature(metadata.tool, metadata.parameters);
42
- if (!signatureMap.has(signature)) {
43
- signatureMap.set(signature, []);
44
- }
45
- const ids = signatureMap.get(signature);
46
- if (ids) {
47
- ids.push(id);
48
- }
49
- }
50
- // Find duplicates - keep only the most recent (last) in each group
51
- const newPruneIds = [];
52
- for (const [, ids] of signatureMap.entries()) {
53
- if (ids.length > 1) {
54
- // All except last (most recent) should be pruned
55
- const idsToRemove = ids.slice(0, -1);
56
- newPruneIds.push(...idsToRemove);
57
- }
58
- }
59
- state.stats.totalPruneTokens += getTotalToolTokens(state, newPruneIds);
60
- if (newPruneIds.length > 0) {
61
- for (const id of newPruneIds) {
62
- const entry = state.toolParameters.get(id);
63
- state.prune.tools.set(id, entry?.tokenCount ?? 0);
64
- }
65
- logger.debug(`Marked ${newPruneIds.length} duplicate tool calls for pruning`);
66
- }
67
- };
68
- function createToolSignature(tool, parameters) {
69
- if (!parameters) {
70
- return tool;
71
- }
72
- const normalized = normalizeParameters(parameters);
73
- const sorted = sortObjectKeys(normalized);
74
- return `${tool}::${JSON.stringify(sorted)}`;
75
- }
76
- function normalizeParameters(params) {
77
- if (typeof params !== "object" || params === null)
78
- return params;
79
- if (Array.isArray(params))
80
- return params;
81
- const normalized = {};
82
- for (const [key, value] of Object.entries(params)) {
83
- if (value !== undefined && value !== null) {
84
- normalized[key] = value;
85
- }
86
- }
87
- return normalized;
88
- }
89
- function sortObjectKeys(obj) {
90
- if (typeof obj !== "object" || obj === null)
91
- return obj;
92
- if (Array.isArray(obj))
93
- return obj.map(sortObjectKeys);
94
- const sorted = {};
95
- for (const key of Object.keys(obj).sort()) {
96
- sorted[key] = sortObjectKeys(obj[key]);
97
- }
98
- return sorted;
99
- }
100
- //# sourceMappingURL=deduplication.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplication.js","sourceRoot":"","sources":["../../../lib/strategies/deduplication.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACvB,KAAmB,EACnB,MAAc,EACd,MAAoB,EACpB,QAAqB,EACjB,EAAE;IACN,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAC7D,OAAM;IACV,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3C,OAAM;IACV,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAM;IACV,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAEzE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAM;IACV,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAA;IAErE,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAA;IAEhD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,0DAA0D;YAC1D,SAAQ;QACZ,CAAC;QAED,uBAAuB;QACvB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YACrD,SAAQ;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QAChF,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC/D,SAAQ;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QACzE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,iDAAiD;YACjD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACpC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;QACpC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAEtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC1C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,UAAU,WAAW,CAAC,MAAM,mCAAmC,CAAC,CAAA;IACjF,CAAC;AACL,CAAC,CAAA;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,UAAgB;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACf,CAAC;IACD,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,3 +0,0 @@
1
- export { deduplicate } from "./deduplication";
2
- export { purgeErrors } from "./purge-errors";
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/strategies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,62 +0,0 @@
1
- import { getFilePathsFromParameters, isFilePathProtected, isToolNameProtected, } from "../protected-patterns";
2
- import { getTotalToolTokens } from "../token-utils";
3
- /**
4
- * Purge Errors strategy - prunes tool inputs for tools that errored
5
- * after they are older than a configurable number of turns.
6
- * The error message is preserved, but the (potentially large) inputs
7
- * are removed to save context.
8
- *
9
- * Modifies the session state in place to add pruned tool call IDs.
10
- */
11
- export const purgeErrors = (state, logger, config, messages) => {
12
- if (state.manualMode && !config.manualMode.automaticStrategies) {
13
- return;
14
- }
15
- if (!config.strategies.purgeErrors.enabled) {
16
- return;
17
- }
18
- const allToolIds = state.toolIdList;
19
- if (allToolIds.length === 0) {
20
- return;
21
- }
22
- // Filter out IDs already pruned
23
- const unprunedIds = allToolIds.filter((id) => !state.prune.tools.has(id));
24
- if (unprunedIds.length === 0) {
25
- return;
26
- }
27
- const protectedTools = config.strategies.purgeErrors.protectedTools;
28
- const turnThreshold = Math.max(1, config.strategies.purgeErrors.turns);
29
- const newPruneIds = [];
30
- for (const id of unprunedIds) {
31
- const metadata = state.toolParameters.get(id);
32
- if (!metadata) {
33
- continue;
34
- }
35
- // Skip protected tools
36
- if (isToolNameProtected(metadata.tool, protectedTools)) {
37
- continue;
38
- }
39
- const filePaths = getFilePathsFromParameters(metadata.tool, metadata.parameters);
40
- if (isFilePathProtected(filePaths, config.protectedFilePatterns)) {
41
- continue;
42
- }
43
- // Only process error tools
44
- if (metadata.status !== "error") {
45
- continue;
46
- }
47
- // Check if the tool is old enough to prune
48
- const turnAge = state.currentTurn - metadata.turn;
49
- if (turnAge >= turnThreshold) {
50
- newPruneIds.push(id);
51
- }
52
- }
53
- if (newPruneIds.length > 0) {
54
- state.stats.totalPruneTokens += getTotalToolTokens(state, newPruneIds);
55
- for (const id of newPruneIds) {
56
- const entry = state.toolParameters.get(id);
57
- state.prune.tools.set(id, entry?.tokenCount ?? 0);
58
- }
59
- logger.debug(`Marked ${newPruneIds.length} error tool calls for pruning (older than ${turnThreshold} turns)`);
60
- }
61
- };
62
- //# sourceMappingURL=purge-errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"purge-errors.js","sourceRoot":"","sources":["../../../lib/strategies/purge-errors.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACvB,KAAmB,EACnB,MAAc,EACd,MAAoB,EACpB,QAAqB,EACjB,EAAE;IACN,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAC7D,OAAM;IACV,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,OAAM;IACV,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IACnC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAM;IACV,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAEzE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAM;IACV,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAA;IACnE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAEtE,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,SAAQ;QACZ,CAAC;QAED,uBAAuB;QACvB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;YACrD,SAAQ;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QAChF,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC/D,SAAQ;QACZ,CAAC;QAED,2BAA2B;QAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,SAAQ;QACZ,CAAC;QAED,2CAA2C;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAA;QACjD,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;IACL,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACtE,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC1C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,MAAM,CAAC,KAAK,CACR,UAAU,WAAW,CAAC,MAAM,6CAA6C,aAAa,SAAS,CAClG,CAAA;IACL,CAAC;AACL,CAAC,CAAA"}
@@ -1,52 +0,0 @@
1
- const SUB_AGENT_RESULT_BLOCK_REGEX = /(<task_result>\s*)([\s\S]*?)(\s*<\/task_result>)/i;
2
- export function getSubAgentId(part) {
3
- const sessionId = part?.state?.metadata?.sessionId;
4
- if (typeof sessionId !== "string") {
5
- return null;
6
- }
7
- const value = sessionId.trim();
8
- return value.length > 0 ? value : null;
9
- }
10
- export function buildSubagentResultText(messages) {
11
- const assistantMessages = messages.filter((message) => message.info.role === "assistant");
12
- if (assistantMessages.length === 0) {
13
- return "";
14
- }
15
- const lastAssistant = assistantMessages[assistantMessages.length - 1];
16
- const lastText = getLastTextPart(lastAssistant);
17
- if (assistantMessages.length < 2) {
18
- return lastText;
19
- }
20
- const secondToLastAssistant = assistantMessages[assistantMessages.length - 2];
21
- if (!assistantMessageHasCompressTool(secondToLastAssistant)) {
22
- return lastText;
23
- }
24
- const secondToLastText = getLastTextPart(secondToLastAssistant);
25
- return [secondToLastText, lastText].filter((text) => text.length > 0).join("\n\n");
26
- }
27
- export function mergeSubagentResult(output, subAgentResultText) {
28
- if (!subAgentResultText || typeof output !== "string") {
29
- return output;
30
- }
31
- return output.replace(SUB_AGENT_RESULT_BLOCK_REGEX, (_match, openTag, _body, closeTag) => `${openTag}${subAgentResultText}${closeTag}`);
32
- }
33
- function getLastTextPart(message) {
34
- const parts = Array.isArray(message.parts) ? message.parts : [];
35
- for (let index = parts.length - 1; index >= 0; index--) {
36
- const part = parts[index];
37
- if (part.type !== "text" || typeof part.text !== "string") {
38
- continue;
39
- }
40
- const text = part.text.trim();
41
- if (!text) {
42
- continue;
43
- }
44
- return text;
45
- }
46
- return "";
47
- }
48
- function assistantMessageHasCompressTool(message) {
49
- const parts = Array.isArray(message.parts) ? message.parts : [];
50
- return parts.some((part) => part.type === "tool" && part.tool === "compress" && part.state?.status === "completed");
51
- }
52
- //# sourceMappingURL=subagent-results.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subagent-results.js","sourceRoot":"","sources":["../../../lib/subagents/subagent-results.ts"],"names":[],"mappings":"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"}
@@ -1,133 +0,0 @@
1
- import * as _anthropicTokenizer from "@anthropic-ai/tokenizer";
2
- const anthropicCountTokens = (_anthropicTokenizer.countTokens ??
3
- _anthropicTokenizer.default?.countTokens);
4
- import { getLastUserMessage } from "./messages/query";
5
- export function getCurrentTokenUsage(state, messages) {
6
- for (let i = messages.length - 1; i >= 0; i--) {
7
- const msg = messages[i];
8
- if (msg.info.role !== "assistant") {
9
- continue;
10
- }
11
- const assistantInfo = msg.info;
12
- if ((assistantInfo.tokens?.output || 0) <= 0) {
13
- continue;
14
- }
15
- if (state.lastCompaction > 0 &&
16
- (msg.info.time.created < state.lastCompaction ||
17
- (msg.info.summary === true && msg.info.time.created === state.lastCompaction))) {
18
- return 0;
19
- }
20
- const input = assistantInfo.tokens?.input || 0;
21
- const output = assistantInfo.tokens?.output || 0;
22
- const reasoning = assistantInfo.tokens?.reasoning || 0;
23
- const cacheRead = assistantInfo.tokens?.cache?.read || 0;
24
- const cacheWrite = assistantInfo.tokens?.cache?.write || 0;
25
- return input + output + reasoning + cacheRead + cacheWrite;
26
- }
27
- return 0;
28
- }
29
- export function getCurrentParams(state, messages, logger) {
30
- const userMsg = getLastUserMessage(messages);
31
- if (!userMsg) {
32
- logger.debug("No user message found when determining current params");
33
- return {
34
- providerId: undefined,
35
- modelId: undefined,
36
- agent: undefined,
37
- variant: state.variant,
38
- };
39
- }
40
- const userInfo = userMsg.info;
41
- const agent = userInfo.agent;
42
- const providerId = userInfo.model.providerID;
43
- const modelId = userInfo.model.modelID;
44
- const variant = state.variant ?? userInfo.variant;
45
- return { providerId, modelId, agent, variant };
46
- }
47
- export function countTokens(text) {
48
- if (!text)
49
- return 0;
50
- try {
51
- return anthropicCountTokens(text);
52
- }
53
- catch {
54
- return Math.round(text.length / 4);
55
- }
56
- }
57
- export function estimateTokensBatch(texts) {
58
- if (texts.length === 0)
59
- return 0;
60
- return countTokens(texts.join(" "));
61
- }
62
- export const COMPACTED_TOOL_OUTPUT_PLACEHOLDER = "[Old tool result content cleared]";
63
- function stringifyToolContent(value) {
64
- return typeof value === "string" ? value : JSON.stringify(value);
65
- }
66
- export function extractCompletedToolOutput(part) {
67
- if (part?.type !== "tool" ||
68
- part.state?.status !== "completed" ||
69
- part.state?.output === undefined) {
70
- return undefined;
71
- }
72
- if (part.state?.time?.compacted) {
73
- return COMPACTED_TOOL_OUTPUT_PLACEHOLDER;
74
- }
75
- return stringifyToolContent(part.state.output);
76
- }
77
- export function extractToolContent(part) {
78
- const contents = [];
79
- if (part?.type !== "tool") {
80
- return contents;
81
- }
82
- if (part.state?.input !== undefined) {
83
- contents.push(stringifyToolContent(part.state.input));
84
- }
85
- const completedOutput = extractCompletedToolOutput(part);
86
- if (completedOutput !== undefined) {
87
- contents.push(completedOutput);
88
- }
89
- else if (part.state?.status === "error" && part.state?.error) {
90
- contents.push(stringifyToolContent(part.state.error));
91
- }
92
- return contents;
93
- }
94
- export function countToolTokens(part) {
95
- const contents = extractToolContent(part);
96
- return estimateTokensBatch(contents);
97
- }
98
- export function getTotalToolTokens(state, toolIds) {
99
- let total = 0;
100
- for (const id of toolIds) {
101
- const entry = state.toolParameters.get(id);
102
- total += entry?.tokenCount ?? 0;
103
- }
104
- return total;
105
- }
106
- export function countMessageTextTokens(msg) {
107
- const texts = [];
108
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
109
- for (const part of parts) {
110
- if (part.type === "text") {
111
- texts.push(part.text);
112
- }
113
- }
114
- if (texts.length === 0)
115
- return 0;
116
- return estimateTokensBatch(texts);
117
- }
118
- export function countAllMessageTokens(msg) {
119
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
120
- const texts = [];
121
- for (const part of parts) {
122
- if (part.type === "text") {
123
- texts.push(part.text);
124
- }
125
- else {
126
- texts.push(...extractToolContent(part));
127
- }
128
- }
129
- if (texts.length === 0)
130
- return 0;
131
- return estimateTokensBatch(texts);
132
- }
133
- //# sourceMappingURL=token-utils.js.map