@tarquinen/opencode-dcp 3.1.7 → 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 (150) 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/compress/search.d.ts.map +1 -1
  7. package/dist/lib/config.d.ts +1 -0
  8. package/dist/lib/config.d.ts.map +1 -1
  9. package/dist/lib/hooks.d.ts +2 -10
  10. package/dist/lib/hooks.d.ts.map +1 -1
  11. package/dist/lib/messages/index.d.ts +1 -0
  12. package/dist/lib/messages/index.d.ts.map +1 -1
  13. package/dist/lib/messages/inject/utils.d.ts +7 -0
  14. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  15. package/dist/lib/messages/query.d.ts.map +1 -1
  16. package/dist/lib/messages/shape.d.ts +5 -0
  17. package/dist/lib/messages/shape.d.ts.map +1 -0
  18. package/dist/lib/messages/utils.d.ts +1 -1
  19. package/dist/lib/messages/utils.d.ts.map +1 -1
  20. package/dist/lib/state/state.d.ts.map +1 -1
  21. package/dist/lib/state/types.d.ts +0 -1
  22. package/dist/lib/state/types.d.ts.map +1 -1
  23. package/dist/lib/state/utils.d.ts.map +1 -1
  24. package/dist/lib/update.d.ts +22 -0
  25. package/dist/lib/update.d.ts.map +1 -0
  26. package/package.json +6 -5
  27. package/dist/lib/auth.js +0 -32
  28. package/dist/lib/auth.js.map +0 -1
  29. package/dist/lib/commands/compression-targets.js +0 -98
  30. package/dist/lib/commands/compression-targets.js.map +0 -1
  31. package/dist/lib/commands/context.js +0 -239
  32. package/dist/lib/commands/context.js.map +0 -1
  33. package/dist/lib/commands/decompress.js +0 -174
  34. package/dist/lib/commands/decompress.js.map +0 -1
  35. package/dist/lib/commands/help.js +0 -52
  36. package/dist/lib/commands/help.js.map +0 -1
  37. package/dist/lib/commands/index.js +0 -8
  38. package/dist/lib/commands/index.js.map +0 -1
  39. package/dist/lib/commands/manual.js +0 -75
  40. package/dist/lib/commands/manual.js.map +0 -1
  41. package/dist/lib/commands/recompress.js +0 -140
  42. package/dist/lib/commands/recompress.js.map +0 -1
  43. package/dist/lib/commands/stats.js +0 -97
  44. package/dist/lib/commands/stats.js.map +0 -1
  45. package/dist/lib/commands/sweep.js +0 -195
  46. package/dist/lib/commands/sweep.js.map +0 -1
  47. package/dist/lib/compress/index.js +0 -3
  48. package/dist/lib/compress/index.js.map +0 -1
  49. package/dist/lib/compress/message-utils.js +0 -179
  50. package/dist/lib/compress/message-utils.js.map +0 -1
  51. package/dist/lib/compress/message.js +0 -82
  52. package/dist/lib/compress/message.js.map +0 -1
  53. package/dist/lib/compress/pipeline.js +0 -41
  54. package/dist/lib/compress/pipeline.js.map +0 -1
  55. package/dist/lib/compress/protected-content.js +0 -106
  56. package/dist/lib/compress/protected-content.js.map +0 -1
  57. package/dist/lib/compress/range-utils.js +0 -199
  58. package/dist/lib/compress/range-utils.js.map +0 -1
  59. package/dist/lib/compress/range.js +0 -90
  60. package/dist/lib/compress/range.js.map +0 -1
  61. package/dist/lib/compress/search.js +0 -204
  62. package/dist/lib/compress/search.js.map +0 -1
  63. package/dist/lib/compress/state.js +0 -213
  64. package/dist/lib/compress/state.js.map +0 -1
  65. package/dist/lib/compress/timing.js +0 -42
  66. package/dist/lib/compress/timing.js.map +0 -1
  67. package/dist/lib/compress/types.js +0 -2
  68. package/dist/lib/compress/types.js.map +0 -1
  69. package/dist/lib/compress-permission.js +0 -10
  70. package/dist/lib/compress-permission.js.map +0 -1
  71. package/dist/lib/config.js +0 -760
  72. package/dist/lib/config.js.map +0 -1
  73. package/dist/lib/hooks.js +0 -236
  74. package/dist/lib/hooks.js.map +0 -1
  75. package/dist/lib/host-permissions.js +0 -58
  76. package/dist/lib/host-permissions.js.map +0 -1
  77. package/dist/lib/logger.js +0 -204
  78. package/dist/lib/logger.js.map +0 -1
  79. package/dist/lib/message-ids.js +0 -128
  80. package/dist/lib/message-ids.js.map +0 -1
  81. package/dist/lib/messages/index.js +0 -9
  82. package/dist/lib/messages/index.js.map +0 -1
  83. package/dist/lib/messages/inject/inject.js +0 -128
  84. package/dist/lib/messages/inject/inject.js.map +0 -1
  85. package/dist/lib/messages/inject/subagent-results.js +0 -58
  86. package/dist/lib/messages/inject/subagent-results.js.map +0 -1
  87. package/dist/lib/messages/inject/utils.js +0 -211
  88. package/dist/lib/messages/inject/utils.js.map +0 -1
  89. package/dist/lib/messages/priority.js +0 -65
  90. package/dist/lib/messages/priority.js.map +0 -1
  91. package/dist/lib/messages/prune.js +0 -180
  92. package/dist/lib/messages/prune.js.map +0 -1
  93. package/dist/lib/messages/query.js +0 -39
  94. package/dist/lib/messages/query.js.map +0 -1
  95. package/dist/lib/messages/reasoning-strip.js +0 -33
  96. package/dist/lib/messages/reasoning-strip.js.map +0 -1
  97. package/dist/lib/messages/sync.js +0 -93
  98. package/dist/lib/messages/sync.js.map +0 -1
  99. package/dist/lib/messages/utils.js +0 -146
  100. package/dist/lib/messages/utils.js.map +0 -1
  101. package/dist/lib/prompts/compress-message.js +0 -44
  102. package/dist/lib/prompts/compress-message.js.map +0 -1
  103. package/dist/lib/prompts/compress-range.js +0 -61
  104. package/dist/lib/prompts/compress-range.js.map +0 -1
  105. package/dist/lib/prompts/context-limit-nudge.js +0 -19
  106. package/dist/lib/prompts/context-limit-nudge.js.map +0 -1
  107. package/dist/lib/prompts/extensions/nudge.js +0 -35
  108. package/dist/lib/prompts/extensions/nudge.js.map +0 -1
  109. package/dist/lib/prompts/extensions/system.js +0 -30
  110. package/dist/lib/prompts/extensions/system.js.map +0 -1
  111. package/dist/lib/prompts/extensions/tool.js +0 -34
  112. package/dist/lib/prompts/extensions/tool.js.map +0 -1
  113. package/dist/lib/prompts/index.js +0 -18
  114. package/dist/lib/prompts/index.js.map +0 -1
  115. package/dist/lib/prompts/iteration-nudge.js +0 -7
  116. package/dist/lib/prompts/iteration-nudge.js.map +0 -1
  117. package/dist/lib/prompts/store.js +0 -358
  118. package/dist/lib/prompts/store.js.map +0 -1
  119. package/dist/lib/prompts/system.js +0 -34
  120. package/dist/lib/prompts/system.js.map +0 -1
  121. package/dist/lib/prompts/turn-nudge.js +0 -11
  122. package/dist/lib/prompts/turn-nudge.js.map +0 -1
  123. package/dist/lib/protected-patterns.js +0 -107
  124. package/dist/lib/protected-patterns.js.map +0 -1
  125. package/dist/lib/state/index.js +0 -5
  126. package/dist/lib/state/index.js.map +0 -1
  127. package/dist/lib/state/persistence.js +0 -172
  128. package/dist/lib/state/persistence.js.map +0 -1
  129. package/dist/lib/state/state.js +0 -143
  130. package/dist/lib/state/state.js.map +0 -1
  131. package/dist/lib/state/tool-cache.js +0 -69
  132. package/dist/lib/state/tool-cache.js.map +0 -1
  133. package/dist/lib/state/types.js +0 -2
  134. package/dist/lib/state/types.js.map +0 -1
  135. package/dist/lib/state/utils.js +0 -255
  136. package/dist/lib/state/utils.js.map +0 -1
  137. package/dist/lib/strategies/deduplication.js +0 -100
  138. package/dist/lib/strategies/deduplication.js.map +0 -1
  139. package/dist/lib/strategies/index.js +0 -3
  140. package/dist/lib/strategies/index.js.map +0 -1
  141. package/dist/lib/strategies/purge-errors.js +0 -62
  142. package/dist/lib/strategies/purge-errors.js.map +0 -1
  143. package/dist/lib/subagents/subagent-results.js +0 -52
  144. package/dist/lib/subagents/subagent-results.js.map +0 -1
  145. package/dist/lib/token-utils.js +0 -133
  146. package/dist/lib/token-utils.js.map +0 -1
  147. package/dist/lib/ui/notification.js +0 -243
  148. package/dist/lib/ui/notification.js.map +0 -1
  149. package/dist/lib/ui/utils.js +0 -256
  150. package/dist/lib/ui/utils.js.map +0 -1
@@ -1,180 +0,0 @@
1
- import { isMessageCompacted } from "../state/utils";
2
- import { createSyntheticUserMessage, replaceBlockIdsWithBlocked } from "./utils";
3
- import { getLastUserMessage } from "./query";
4
- const PRUNED_TOOL_OUTPUT_REPLACEMENT = "[Output removed to save context - information superseded or no longer needed]";
5
- const PRUNED_TOOL_ERROR_INPUT_REPLACEMENT = "[input removed due to failed tool call]";
6
- const PRUNED_QUESTION_INPUT_REPLACEMENT = "[questions removed - see output for user's answers]";
7
- export const prune = (state, logger, config, messages) => {
8
- filterCompressedRanges(state, logger, config, messages);
9
- // pruneFullTool(state, logger, messages)
10
- pruneToolOutputs(state, logger, messages);
11
- pruneToolInputs(state, logger, messages);
12
- pruneToolErrors(state, logger, messages);
13
- };
14
- const pruneFullTool = (state, logger, messages) => {
15
- const messagesToRemove = [];
16
- for (const msg of messages) {
17
- if (isMessageCompacted(state, msg)) {
18
- continue;
19
- }
20
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
21
- const partsToRemove = [];
22
- for (const part of parts) {
23
- if (part.type !== "tool") {
24
- continue;
25
- }
26
- if (!state.prune.tools.has(part.callID)) {
27
- continue;
28
- }
29
- if (part.tool !== "edit" && part.tool !== "write") {
30
- continue;
31
- }
32
- partsToRemove.push(part.callID);
33
- }
34
- if (partsToRemove.length === 0) {
35
- continue;
36
- }
37
- msg.parts = parts.filter((part) => part.type !== "tool" || !partsToRemove.includes(part.callID));
38
- if (msg.parts.length === 0) {
39
- messagesToRemove.push(msg.info.id);
40
- }
41
- }
42
- if (messagesToRemove.length > 0) {
43
- const result = messages.filter((msg) => !messagesToRemove.includes(msg.info.id));
44
- messages.length = 0;
45
- messages.push(...result);
46
- }
47
- };
48
- const pruneToolOutputs = (state, logger, messages) => {
49
- for (const msg of messages) {
50
- if (isMessageCompacted(state, msg)) {
51
- continue;
52
- }
53
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
54
- for (const part of parts) {
55
- if (part.type !== "tool") {
56
- continue;
57
- }
58
- if (!state.prune.tools.has(part.callID)) {
59
- continue;
60
- }
61
- if (part.state.status !== "completed") {
62
- continue;
63
- }
64
- if (part.tool === "question" || part.tool === "edit" || part.tool === "write") {
65
- continue;
66
- }
67
- part.state.output = PRUNED_TOOL_OUTPUT_REPLACEMENT;
68
- }
69
- }
70
- };
71
- const pruneToolInputs = (state, logger, messages) => {
72
- for (const msg of messages) {
73
- if (isMessageCompacted(state, msg)) {
74
- continue;
75
- }
76
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
77
- for (const part of parts) {
78
- if (part.type !== "tool") {
79
- continue;
80
- }
81
- if (!state.prune.tools.has(part.callID)) {
82
- continue;
83
- }
84
- if (part.state.status !== "completed") {
85
- continue;
86
- }
87
- if (part.tool !== "question") {
88
- continue;
89
- }
90
- if (part.state.input?.questions !== undefined) {
91
- part.state.input.questions = PRUNED_QUESTION_INPUT_REPLACEMENT;
92
- }
93
- }
94
- }
95
- };
96
- const pruneToolErrors = (state, logger, messages) => {
97
- for (const msg of messages) {
98
- if (isMessageCompacted(state, msg)) {
99
- continue;
100
- }
101
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
102
- for (const part of parts) {
103
- if (part.type !== "tool") {
104
- continue;
105
- }
106
- if (!state.prune.tools.has(part.callID)) {
107
- continue;
108
- }
109
- if (part.state.status !== "error") {
110
- continue;
111
- }
112
- // Prune all string inputs for errored tools
113
- const input = part.state.input;
114
- if (input && typeof input === "object") {
115
- for (const key of Object.keys(input)) {
116
- if (typeof input[key] === "string") {
117
- input[key] = PRUNED_TOOL_ERROR_INPUT_REPLACEMENT;
118
- }
119
- }
120
- }
121
- }
122
- }
123
- };
124
- const filterCompressedRanges = (state, logger, config, messages) => {
125
- if (state.prune.messages.byMessageId.size === 0 &&
126
- state.prune.messages.activeByAnchorMessageId.size === 0) {
127
- return;
128
- }
129
- const result = [];
130
- for (const msg of messages) {
131
- const msgId = msg.info.id;
132
- // Check if there's a summary to inject at this anchor point
133
- const blockId = state.prune.messages.activeByAnchorMessageId.get(msgId);
134
- const summary = blockId !== undefined ? state.prune.messages.blocksById.get(blockId) : undefined;
135
- if (summary) {
136
- const rawSummaryContent = summary.summary;
137
- if (summary.active !== true ||
138
- typeof rawSummaryContent !== "string" ||
139
- rawSummaryContent.length === 0) {
140
- logger.warn("Skipping malformed compress summary", {
141
- anchorMessageId: msgId,
142
- blockId: summary.blockId,
143
- });
144
- }
145
- else {
146
- // Find user message for variant and as base for synthetic message
147
- const msgIndex = messages.indexOf(msg);
148
- const userMessage = getLastUserMessage(messages, msgIndex);
149
- if (userMessage) {
150
- const userInfo = userMessage.info;
151
- const summaryContent = config.compress.mode === "message"
152
- ? replaceBlockIdsWithBlocked(rawSummaryContent)
153
- : rawSummaryContent;
154
- const summarySeed = `${summary.blockId}:${summary.anchorMessageId}`;
155
- result.push(createSyntheticUserMessage(userMessage, summaryContent, userInfo.variant, summarySeed));
156
- logger.info("Injected compress summary", {
157
- anchorMessageId: msgId,
158
- summaryLength: summaryContent.length,
159
- });
160
- }
161
- else {
162
- logger.warn("No user message found for compress summary", {
163
- anchorMessageId: msgId,
164
- });
165
- }
166
- }
167
- }
168
- // Skip messages that are in the prune list
169
- const pruneEntry = state.prune.messages.byMessageId.get(msgId);
170
- if (pruneEntry && pruneEntry.activeBlockIds.length > 0) {
171
- continue;
172
- }
173
- // Normal message, include it
174
- result.push(msg);
175
- }
176
- // Replace messages array contents
177
- messages.length = 0;
178
- messages.push(...result);
179
- };
180
- //# sourceMappingURL=prune.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../lib/messages/prune.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- export const getLastUserMessage = (messages, startIndex) => {
2
- const start = startIndex ?? messages.length - 1;
3
- for (let i = start; i >= 0; i--) {
4
- const msg = messages[i];
5
- if (msg.info.role === "user" && !isIgnoredUserMessage(msg)) {
6
- return msg;
7
- }
8
- }
9
- return null;
10
- };
11
- export const messageHasCompress = (message) => {
12
- if (message.info.role !== "assistant") {
13
- return false;
14
- }
15
- const parts = Array.isArray(message.parts) ? message.parts : [];
16
- return parts.some((part) => part.type === "tool" && part.tool === "compress" && part.state?.status === "completed");
17
- };
18
- export const isIgnoredUserMessage = (message) => {
19
- if (message.info.role !== "user") {
20
- return false;
21
- }
22
- const parts = Array.isArray(message.parts) ? message.parts : [];
23
- if (parts.length === 0) {
24
- return true;
25
- }
26
- for (const part of parts) {
27
- if (!part.ignored) {
28
- return false;
29
- }
30
- }
31
- return true;
32
- };
33
- export function isProtectedUserMessage(config, message) {
34
- return (config.compress.mode === "message" &&
35
- config.compress.protectUserMessages &&
36
- message.info.role === "user" &&
37
- !isIgnoredUserMessage(message));
38
- }
39
- //# sourceMappingURL=query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../lib/messages/query.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,QAAqB,EACrB,UAAmB,EACH,EAAE;IAClB,MAAM,KAAK,GAAG,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,CAAA;QACd,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAkB,EAAW,EAAE;IAC9D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,KAAK,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,CAC7F,CAAA;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAkB,EAAW,EAAE;IAChE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAE,IAAY,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC,CAAA;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAoB,EAAE,OAAkB;IAC3E,OAAO,CACH,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;QAClC,MAAM,CAAC,QAAQ,CAAC,mBAAmB;QACnC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;QAC5B,CAAC,oBAAoB,CAAC,OAAO,CAAC,CACjC,CAAA;AACL,CAAC"}
@@ -1,33 +0,0 @@
1
- import { getLastUserMessage } from "./query";
2
- /**
3
- * Mirrors opencode's differentModel handling by preserving part content while
4
- * dropping provider metadata on assistant parts that came from a different
5
- * model/provider than the current turn's user message.
6
- */
7
- export function stripStaleMetadata(messages) {
8
- const lastUserMessage = getLastUserMessage(messages);
9
- if (lastUserMessage?.info.role !== "user") {
10
- return;
11
- }
12
- const modelID = lastUserMessage.info.model.modelID;
13
- const providerID = lastUserMessage.info.model.providerID;
14
- messages.forEach((message) => {
15
- if (message.info.role !== "assistant") {
16
- return;
17
- }
18
- if (message.info.modelID === modelID && message.info.providerID === providerID) {
19
- return;
20
- }
21
- message.parts = message.parts.map((part) => {
22
- if (part.type !== "text" && part.type !== "tool" && part.type !== "reasoning") {
23
- return part;
24
- }
25
- if (!("metadata" in part)) {
26
- return part;
27
- }
28
- const { metadata: _metadata, ...rest } = part;
29
- return rest;
30
- });
31
- });
32
- }
33
- //# sourceMappingURL=reasoning-strip.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reasoning-strip.js","sourceRoot":"","sources":["../../../lib/messages/reasoning-strip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAqB;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACpD,IAAI,eAAe,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;IAClD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAExD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACzB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,OAAM;QACV,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAC7E,OAAM;QACV,CAAC;QAED,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC5E,OAAO,IAAI,CAAA;YACf,CAAC;YAED,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAA;YACf,CAAC;YAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;YAC7C,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -1,93 +0,0 @@
1
- function sortBlocksByCreation(a, b) {
2
- const createdAtDiff = a.createdAt - b.createdAt;
3
- if (createdAtDiff !== 0) {
4
- return createdAtDiff;
5
- }
6
- return a.blockId - b.blockId;
7
- }
8
- export const syncCompressionBlocks = (state, logger, messages) => {
9
- const messagesState = state.prune.messages;
10
- if (!messagesState?.blocksById?.size) {
11
- return;
12
- }
13
- const messageIds = new Set(messages.map((msg) => msg.info.id));
14
- const previousActiveBlockIds = new Set(Array.from(messagesState.blocksById.values())
15
- .filter((block) => block.active)
16
- .map((block) => block.blockId));
17
- messagesState.activeBlockIds.clear();
18
- messagesState.activeByAnchorMessageId.clear();
19
- const now = Date.now();
20
- const missingOriginBlockIds = [];
21
- const orderedBlocks = Array.from(messagesState.blocksById.values()).sort(sortBlocksByCreation);
22
- for (const block of orderedBlocks) {
23
- const hasOriginMessage = typeof block.compressMessageId === "string" &&
24
- block.compressMessageId.length > 0 &&
25
- messageIds.has(block.compressMessageId);
26
- if (!hasOriginMessage) {
27
- block.active = false;
28
- block.deactivatedAt = now;
29
- block.deactivatedByBlockId = undefined;
30
- missingOriginBlockIds.push(block.blockId);
31
- continue;
32
- }
33
- if (block.deactivatedByUser) {
34
- block.active = false;
35
- if (block.deactivatedAt === undefined) {
36
- block.deactivatedAt = now;
37
- }
38
- block.deactivatedByBlockId = undefined;
39
- continue;
40
- }
41
- for (const consumedBlockId of block.consumedBlockIds) {
42
- if (!messagesState.activeBlockIds.has(consumedBlockId)) {
43
- continue;
44
- }
45
- const consumedBlock = messagesState.blocksById.get(consumedBlockId);
46
- if (consumedBlock) {
47
- consumedBlock.active = false;
48
- consumedBlock.deactivatedAt = now;
49
- consumedBlock.deactivatedByBlockId = block.blockId;
50
- const mappedBlockId = messagesState.activeByAnchorMessageId.get(consumedBlock.anchorMessageId);
51
- if (mappedBlockId === consumedBlock.blockId) {
52
- messagesState.activeByAnchorMessageId.delete(consumedBlock.anchorMessageId);
53
- }
54
- }
55
- messagesState.activeBlockIds.delete(consumedBlockId);
56
- }
57
- block.active = true;
58
- block.deactivatedAt = undefined;
59
- block.deactivatedByBlockId = undefined;
60
- messagesState.activeBlockIds.add(block.blockId);
61
- if (messageIds.has(block.anchorMessageId)) {
62
- messagesState.activeByAnchorMessageId.set(block.anchorMessageId, block.blockId);
63
- }
64
- }
65
- for (const entry of messagesState.byMessageId.values()) {
66
- const allBlockIds = Array.isArray(entry.allBlockIds)
67
- ? [...new Set(entry.allBlockIds.filter((id) => Number.isInteger(id) && id > 0))]
68
- : [];
69
- entry.allBlockIds = allBlockIds;
70
- entry.activeBlockIds = allBlockIds.filter((id) => messagesState.activeBlockIds.has(id));
71
- }
72
- const nextActiveBlockIds = messagesState.activeBlockIds;
73
- let deactivatedCount = 0;
74
- let reactivatedCount = 0;
75
- for (const blockId of previousActiveBlockIds) {
76
- if (!nextActiveBlockIds.has(blockId)) {
77
- deactivatedCount++;
78
- }
79
- }
80
- for (const blockId of nextActiveBlockIds) {
81
- if (!previousActiveBlockIds.has(blockId)) {
82
- reactivatedCount++;
83
- }
84
- }
85
- if (missingOriginBlockIds.length > 0 || deactivatedCount > 0 || reactivatedCount > 0) {
86
- logger.info("Synced compress block state", {
87
- missingOriginCount: missingOriginBlockIds.length,
88
- deactivatedCount,
89
- reactivatedCount,
90
- });
91
- }
92
- };
93
- //# sourceMappingURL=sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../lib/messages/sync.ts"],"names":[],"mappings":"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"}
@@ -1,146 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { isMessageCompacted } from "../state/utils";
3
- const SUMMARY_ID_HASH_LENGTH = 16;
4
- const DCP_BLOCK_ID_TAG_REGEX = /(<dcp-message-id(?=[\s>])[^>]*>)b\d+(<\/dcp-message-id>)/g;
5
- const DCP_PAIRED_TAG_REGEX = /<dcp[^>]*>[\s\S]*?<\/dcp[^>]*>/gi;
6
- const DCP_UNPAIRED_TAG_REGEX = /<\/?dcp[^>]*>/gi;
7
- const generateStableId = (prefix, seed) => {
8
- const hash = createHash("sha256").update(seed).digest("hex").slice(0, SUMMARY_ID_HASH_LENGTH);
9
- return `${prefix}_${hash}`;
10
- };
11
- export const createSyntheticUserMessage = (baseMessage, content, variant, stableSeed) => {
12
- const userInfo = baseMessage.info;
13
- const now = Date.now();
14
- const deterministicSeed = stableSeed?.trim() || userInfo.id;
15
- const messageId = generateStableId("msg_dcp_summary", deterministicSeed);
16
- const partId = generateStableId("prt_dcp_summary", deterministicSeed);
17
- return {
18
- info: {
19
- id: messageId,
20
- sessionID: userInfo.sessionID,
21
- role: "user",
22
- agent: userInfo.agent,
23
- model: userInfo.model,
24
- time: { created: now },
25
- ...(variant !== undefined && { variant }),
26
- },
27
- parts: [
28
- {
29
- id: partId,
30
- sessionID: userInfo.sessionID,
31
- messageID: messageId,
32
- type: "text",
33
- text: content,
34
- },
35
- ],
36
- };
37
- };
38
- export const createSyntheticTextPart = (baseMessage, content, stableSeed) => {
39
- const userInfo = baseMessage.info;
40
- const deterministicSeed = stableSeed?.trim() || userInfo.id;
41
- const partId = generateStableId("prt_dcp_text", deterministicSeed);
42
- return {
43
- id: partId,
44
- sessionID: userInfo.sessionID,
45
- messageID: userInfo.id,
46
- type: "text",
47
- text: content,
48
- };
49
- };
50
- export const appendToLastTextPart = (message, injection) => {
51
- const textPart = findLastTextPart(message);
52
- if (!textPart) {
53
- return false;
54
- }
55
- return appendToTextPart(textPart, injection);
56
- };
57
- const findLastTextPart = (message) => {
58
- for (let i = message.parts.length - 1; i >= 0; i--) {
59
- const part = message.parts[i];
60
- if (part.type === "text") {
61
- return part;
62
- }
63
- }
64
- return null;
65
- };
66
- export const appendToTextPart = (part, injection) => {
67
- if (typeof part.text !== "string") {
68
- return false;
69
- }
70
- const normalizedInjection = injection.replace(/^\n+/, "");
71
- if (!normalizedInjection.trim()) {
72
- return false;
73
- }
74
- if (part.text.includes(normalizedInjection)) {
75
- return true;
76
- }
77
- const baseText = part.text.replace(/\n*$/, "");
78
- part.text = baseText.length > 0 ? `${baseText}\n\n${normalizedInjection}` : normalizedInjection;
79
- return true;
80
- };
81
- export const appendToAllToolParts = (message, tag) => {
82
- let injected = false;
83
- for (const part of message.parts) {
84
- if (part.type === "tool") {
85
- injected = appendToToolPart(part, tag) || injected;
86
- }
87
- }
88
- return injected;
89
- };
90
- export const appendToToolPart = (part, tag) => {
91
- if (part.state?.status !== "completed" || typeof part.state.output !== "string") {
92
- return false;
93
- }
94
- if (part.state.output.includes(tag)) {
95
- return true;
96
- }
97
- part.state.output = `${part.state.output}${tag}`;
98
- return true;
99
- };
100
- export const hasContent = (message) => {
101
- return message.parts.some((part) => (part.type === "text" &&
102
- typeof part.text === "string" &&
103
- part.text.trim().length > 0) ||
104
- (part.type === "tool" &&
105
- part.state?.status === "completed" &&
106
- typeof part.state.output === "string"));
107
- };
108
- export function buildToolIdList(state, messages) {
109
- const toolIds = [];
110
- for (const msg of messages) {
111
- if (isMessageCompacted(state, msg)) {
112
- continue;
113
- }
114
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
115
- if (parts.length > 0) {
116
- for (const part of parts) {
117
- if (part.type === "tool" && part.callID && part.tool) {
118
- toolIds.push(part.callID);
119
- }
120
- }
121
- }
122
- }
123
- state.toolIdList = toolIds;
124
- return toolIds;
125
- }
126
- export const replaceBlockIdsWithBlocked = (text) => {
127
- return text.replace(DCP_BLOCK_ID_TAG_REGEX, "$1BLOCKED$2");
128
- };
129
- export const stripHallucinationsFromString = (text) => {
130
- return text.replace(DCP_PAIRED_TAG_REGEX, "").replace(DCP_UNPAIRED_TAG_REGEX, "");
131
- };
132
- export const stripHallucinations = (messages) => {
133
- for (const message of messages) {
134
- for (const part of message.parts) {
135
- if (part.type === "text" && typeof part.text === "string") {
136
- part.text = stripHallucinationsFromString(part.text);
137
- }
138
- if (part.type === "tool" &&
139
- part.state?.status === "completed" &&
140
- typeof part.state.output === "string") {
141
- part.state.output = stripHallucinationsFromString(part.state.output);
142
- }
143
- }
144
- }
145
- };
146
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/messages/utils.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- export const COMPRESS_MESSAGE = `Collapse selected individual messages in the conversation into detailed summaries.
2
-
3
- THE SUMMARY
4
- Your summary must be EXHAUSTIVE. Capture file paths, function signatures, decisions made, constraints discovered, key findings, tool outcomes, and user intent details that matter... EVERYTHING that preserves the value of the selected message after the raw message is removed.
5
-
6
- USER INTENT FIDELITY
7
- When a selected message contains user intent, preserve that intent with extra care. Do not change scope, constraints, priorities, acceptance criteria, or requested outcomes.
8
- Directly quote short user instructions when that best preserves exact meaning.
9
-
10
- Yet be LEAN. Strip away the noise: failed attempts that led nowhere, verbose tool output, and repetition. What remains should be pure signal - golden nuggets of detail that preserve full understanding with zero ambiguity.
11
- If a message contains no significant technical decisions, code changes, or user requirements, produce a minimal one-line summary rather than a detailed one.
12
-
13
- MESSAGE IDS
14
- You specify individual raw messages by ID using the injected IDs visible in the conversation:
15
-
16
- - \`mNNNN\` IDs identify raw messages
17
-
18
- Each message has an ID inside XML metadata tags like \`<dcp-message-id priority="high">m0007</dcp-message-id>\`.
19
- The same ID tag appears in every tool output of the message it belongs to — each unique ID identifies one complete message.
20
- Treat these tags as message metadata only, not as content to summarize. Use only the inner \`mNNNN\` value as the \`messageId\`.
21
- The \`priority\` attribute indicates relative context cost. You MUST compress high-priority messages when their full text is no longer necessary for the active task.
22
- If prior compress-tool results are present, always compress and summarize them minimally only as part of a broader compression pass. Do not invoke the compress tool solely to re-compress an earlier compression result.
23
- Messages marked as \`<dcp-message-id>BLOCKED</dcp-message-id>\` cannot be compressed.
24
-
25
- Rules:
26
-
27
- - Pick each \`messageId\` directly from injected IDs visible in context.
28
- - Only use raw message IDs of the form \`mNNNN\`.
29
- - Ignore XML attributes such as \`priority\` when copying the ID; use only the inner \`mNNNN\` value.
30
- - Do not invent IDs. Use only IDs that are present in context.
31
-
32
- BATCHING
33
- Select MANY messages in a single tool call when they are safe to compress.
34
- Each entry should summarize exactly one message, and the tool can receive as many entries as needed in one batch.
35
-
36
- GENERAL CLEANUP
37
- Use the topic "general cleanup" for broad cleanup passes.
38
- During general cleanup, compress all medium and high-priority messages that are not relevant to the active task.
39
- Optimize for reducing context footprint, not for grouping messages by topic.
40
- Do not compress away still-active instructions, unresolved questions, or constraints that are likely to matter soon.
41
- Prioritize the earliest messages in the context as they will be the least relevant to the active task.
42
- General cleanup should be done periodically between other normal compression tool passes, not as the primary form of compression.
43
- `;
44
- //# sourceMappingURL=compress-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compress-message.js","sourceRoot":"","sources":["../../../lib/prompts/compress-message.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C/B,CAAA"}
@@ -1,61 +0,0 @@
1
- export const COMPRESS_RANGE = `Collapse a range in the conversation into a detailed summary.
2
-
3
- THE SUMMARY
4
- Your summary must be EXHAUSTIVE. Capture file paths, function signatures, decisions made, constraints discovered, key findings... EVERYTHING that maintains context integrity. This is not a brief note - it is an authoritative record so faithful that the original conversation adds no value.
5
-
6
- USER INTENT FIDELITY
7
- When the compressed range includes user messages, preserve the user's intent with extra care. Do not change scope, constraints, priorities, acceptance criteria, or requested outcomes.
8
- Directly quote user messages when they are short enough to include safely. Direct quotes are preferred when they best preserve exact meaning.
9
-
10
- Yet be LEAN. Strip away the noise: failed attempts that led nowhere, verbose tool outputs, back-and-forth exploration. What remains should be pure signal - golden nuggets of detail that preserve full understanding with zero ambiguity.
11
-
12
- COMPRESSED BLOCK PLACEHOLDERS
13
- When the selected range includes previously compressed blocks, use this exact placeholder format when referencing one:
14
-
15
- - \`(bN)\`
16
-
17
- Compressed block sections in context are clearly marked with a header:
18
-
19
- - \`[Compressed conversation section]\`
20
-
21
- Compressed block IDs always use the \`bN\` form (never \`mNNNN\`) and are represented in the same XML metadata tag format.
22
-
23
- Rules:
24
-
25
- - Include every required block placeholder exactly once.
26
- - Do not invent placeholders for blocks outside the selected range.
27
- - Treat \`(bN)\` placeholders as RESERVED TOKENS. Do not emit \`(bN)\` text anywhere except intentional placeholders.
28
- - If you need to mention a block in prose, use plain text like \`compressed bN\` (not as a placeholder).
29
- - Preflight check before finalizing: the set of \`(bN)\` placeholders in your summary must exactly match the required set, with no duplicates.
30
-
31
- These placeholders are semantic references. They will be replaced with the full stored compressed block content when the tool processes your output.
32
-
33
- FLOW PRESERVATION WITH PLACEHOLDERS
34
- When you use compressed block placeholders, write the surrounding summary text so it still reads correctly AFTER placeholder expansion.
35
-
36
- - Treat each placeholder as a stand-in for a full conversation segment, not as a short label.
37
- - Ensure transitions before and after each placeholder preserve chronology and causality.
38
- - Do not write text that depends on the placeholder staying literal (for example, "as noted in \`(b2)\`").
39
- - Your final meaning must be coherent once each placeholder is replaced with its full compressed block content.
40
-
41
- BOUNDARY IDS
42
- You specify boundaries by ID using the injected IDs visible in the conversation:
43
-
44
- - \`mNNNN\` IDs identify raw messages
45
- - \`bN\` IDs identify previously compressed blocks
46
-
47
- Each message has an ID inside XML metadata tags like \`<dcp-message-id>...</dcp-message-id>\`.
48
- The same ID tag appears in every tool output of the message it belongs to — each unique ID identifies one complete message.
49
- Treat these tags as boundary metadata only, not as tool result content.
50
-
51
- Rules:
52
-
53
- - Pick \`startId\` and \`endId\` directly from injected IDs in context.
54
- - IDs must exist in the current visible context.
55
- - \`startId\` must appear before \`endId\`.
56
- - Do not invent IDs. Use only IDs that are present in context.
57
-
58
- BATCHING
59
- When multiple independent ranges are ready and their boundaries do not overlap, include all of them as separate entries in the \`content\` array of a single tool call. Each entry should have its own \`startId\`, \`endId\`, and \`summary\`.
60
- `;
61
- //# sourceMappingURL=compress-range.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compress-range.js","sourceRoot":"","sources":["../../../lib/prompts/compress-range.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D7B,CAAA"}