@tarquinen/opencode-dcp 3.1.9 → 3.1.11

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 (151) hide show
  1. package/README.md +5 -0
  2. package/dist/index.d.ts +2 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7905 -76
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/compress/message.d.ts.map +1 -1
  7. package/dist/lib/compress/protected-content.d.ts +2 -0
  8. package/dist/lib/compress/protected-content.d.ts.map +1 -1
  9. package/dist/lib/compress/range.d.ts.map +1 -1
  10. package/dist/lib/config.d.ts +2 -0
  11. package/dist/lib/config.d.ts.map +1 -1
  12. package/dist/lib/hooks.d.ts +2 -10
  13. package/dist/lib/hooks.d.ts.map +1 -1
  14. package/dist/lib/messages/index.d.ts +1 -0
  15. package/dist/lib/messages/index.d.ts.map +1 -1
  16. package/dist/lib/messages/inject/utils.d.ts +7 -0
  17. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  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/update.d.ts +22 -0
  24. package/dist/lib/update.d.ts.map +1 -0
  25. package/package.json +6 -5
  26. package/dist/lib/auth.js +0 -32
  27. package/dist/lib/auth.js.map +0 -1
  28. package/dist/lib/commands/compression-targets.js +0 -98
  29. package/dist/lib/commands/compression-targets.js.map +0 -1
  30. package/dist/lib/commands/context.js +0 -239
  31. package/dist/lib/commands/context.js.map +0 -1
  32. package/dist/lib/commands/decompress.js +0 -174
  33. package/dist/lib/commands/decompress.js.map +0 -1
  34. package/dist/lib/commands/help.js +0 -52
  35. package/dist/lib/commands/help.js.map +0 -1
  36. package/dist/lib/commands/index.js +0 -8
  37. package/dist/lib/commands/index.js.map +0 -1
  38. package/dist/lib/commands/manual.js +0 -75
  39. package/dist/lib/commands/manual.js.map +0 -1
  40. package/dist/lib/commands/recompress.js +0 -140
  41. package/dist/lib/commands/recompress.js.map +0 -1
  42. package/dist/lib/commands/stats.js +0 -97
  43. package/dist/lib/commands/stats.js.map +0 -1
  44. package/dist/lib/commands/sweep.js +0 -195
  45. package/dist/lib/commands/sweep.js.map +0 -1
  46. package/dist/lib/compress/index.js +0 -3
  47. package/dist/lib/compress/index.js.map +0 -1
  48. package/dist/lib/compress/message-utils.js +0 -179
  49. package/dist/lib/compress/message-utils.js.map +0 -1
  50. package/dist/lib/compress/message.js +0 -82
  51. package/dist/lib/compress/message.js.map +0 -1
  52. package/dist/lib/compress/pipeline.js +0 -41
  53. package/dist/lib/compress/pipeline.js.map +0 -1
  54. package/dist/lib/compress/protected-content.js +0 -106
  55. package/dist/lib/compress/protected-content.js.map +0 -1
  56. package/dist/lib/compress/range-utils.js +0 -199
  57. package/dist/lib/compress/range-utils.js.map +0 -1
  58. package/dist/lib/compress/range.js +0 -90
  59. package/dist/lib/compress/range.js.map +0 -1
  60. package/dist/lib/compress/search.js +0 -204
  61. package/dist/lib/compress/search.js.map +0 -1
  62. package/dist/lib/compress/state.js +0 -213
  63. package/dist/lib/compress/state.js.map +0 -1
  64. package/dist/lib/compress/timing.js +0 -42
  65. package/dist/lib/compress/timing.js.map +0 -1
  66. package/dist/lib/compress/types.js +0 -2
  67. package/dist/lib/compress/types.js.map +0 -1
  68. package/dist/lib/compress-permission.js +0 -10
  69. package/dist/lib/compress-permission.js.map +0 -1
  70. package/dist/lib/config.js +0 -760
  71. package/dist/lib/config.js.map +0 -1
  72. package/dist/lib/hooks.js +0 -245
  73. package/dist/lib/hooks.js.map +0 -1
  74. package/dist/lib/host-permissions.js +0 -58
  75. package/dist/lib/host-permissions.js.map +0 -1
  76. package/dist/lib/logger.js +0 -204
  77. package/dist/lib/logger.js.map +0 -1
  78. package/dist/lib/message-ids.js +0 -128
  79. package/dist/lib/message-ids.js.map +0 -1
  80. package/dist/lib/messages/index.js +0 -9
  81. package/dist/lib/messages/index.js.map +0 -1
  82. package/dist/lib/messages/inject/inject.js +0 -128
  83. package/dist/lib/messages/inject/inject.js.map +0 -1
  84. package/dist/lib/messages/inject/subagent-results.js +0 -58
  85. package/dist/lib/messages/inject/subagent-results.js.map +0 -1
  86. package/dist/lib/messages/inject/utils.js +0 -211
  87. package/dist/lib/messages/inject/utils.js.map +0 -1
  88. package/dist/lib/messages/priority.js +0 -65
  89. package/dist/lib/messages/priority.js.map +0 -1
  90. package/dist/lib/messages/prune.js +0 -180
  91. package/dist/lib/messages/prune.js.map +0 -1
  92. package/dist/lib/messages/query.js +0 -52
  93. package/dist/lib/messages/query.js.map +0 -1
  94. package/dist/lib/messages/reasoning-strip.js +0 -33
  95. package/dist/lib/messages/reasoning-strip.js.map +0 -1
  96. package/dist/lib/messages/shape.js +0 -39
  97. package/dist/lib/messages/shape.js.map +0 -1
  98. package/dist/lib/messages/sync.js +0 -93
  99. package/dist/lib/messages/sync.js.map +0 -1
  100. package/dist/lib/messages/utils.js +0 -146
  101. package/dist/lib/messages/utils.js.map +0 -1
  102. package/dist/lib/prompts/compress-message.js +0 -44
  103. package/dist/lib/prompts/compress-message.js.map +0 -1
  104. package/dist/lib/prompts/compress-range.js +0 -61
  105. package/dist/lib/prompts/compress-range.js.map +0 -1
  106. package/dist/lib/prompts/context-limit-nudge.js +0 -19
  107. package/dist/lib/prompts/context-limit-nudge.js.map +0 -1
  108. package/dist/lib/prompts/extensions/nudge.js +0 -35
  109. package/dist/lib/prompts/extensions/nudge.js.map +0 -1
  110. package/dist/lib/prompts/extensions/system.js +0 -30
  111. package/dist/lib/prompts/extensions/system.js.map +0 -1
  112. package/dist/lib/prompts/extensions/tool.js +0 -34
  113. package/dist/lib/prompts/extensions/tool.js.map +0 -1
  114. package/dist/lib/prompts/index.js +0 -18
  115. package/dist/lib/prompts/index.js.map +0 -1
  116. package/dist/lib/prompts/iteration-nudge.js +0 -7
  117. package/dist/lib/prompts/iteration-nudge.js.map +0 -1
  118. package/dist/lib/prompts/store.js +0 -358
  119. package/dist/lib/prompts/store.js.map +0 -1
  120. package/dist/lib/prompts/system.js +0 -34
  121. package/dist/lib/prompts/system.js.map +0 -1
  122. package/dist/lib/prompts/turn-nudge.js +0 -11
  123. package/dist/lib/prompts/turn-nudge.js.map +0 -1
  124. package/dist/lib/protected-patterns.js +0 -107
  125. package/dist/lib/protected-patterns.js.map +0 -1
  126. package/dist/lib/state/index.js +0 -5
  127. package/dist/lib/state/index.js.map +0 -1
  128. package/dist/lib/state/persistence.js +0 -172
  129. package/dist/lib/state/persistence.js.map +0 -1
  130. package/dist/lib/state/state.js +0 -143
  131. package/dist/lib/state/state.js.map +0 -1
  132. package/dist/lib/state/tool-cache.js +0 -69
  133. package/dist/lib/state/tool-cache.js.map +0 -1
  134. package/dist/lib/state/types.js +0 -2
  135. package/dist/lib/state/types.js.map +0 -1
  136. package/dist/lib/state/utils.js +0 -265
  137. package/dist/lib/state/utils.js.map +0 -1
  138. package/dist/lib/strategies/deduplication.js +0 -100
  139. package/dist/lib/strategies/deduplication.js.map +0 -1
  140. package/dist/lib/strategies/index.js +0 -3
  141. package/dist/lib/strategies/index.js.map +0 -1
  142. package/dist/lib/strategies/purge-errors.js +0 -62
  143. package/dist/lib/strategies/purge-errors.js.map +0 -1
  144. package/dist/lib/subagents/subagent-results.js +0 -52
  145. package/dist/lib/subagents/subagent-results.js.map +0 -1
  146. package/dist/lib/token-utils.js +0 -133
  147. package/dist/lib/token-utils.js.map +0 -1
  148. package/dist/lib/ui/notification.js +0 -243
  149. package/dist/lib/ui/notification.js.map +0 -1
  150. package/dist/lib/ui/utils.js +0 -256
  151. package/dist/lib/ui/utils.js.map +0 -1
@@ -1,195 +0,0 @@
1
- /**
2
- * DCP Sweep command handler.
3
- * Prunes tool outputs since the last user message, or the last N tools.
4
- *
5
- * Usage:
6
- * /dcp sweep - Prune all tools since the previous user message
7
- * /dcp sweep 10 - Prune the last 10 tools
8
- */
9
- import { sendIgnoredMessage } from "../ui/notification";
10
- import { formatPrunedItemsList } from "../ui/utils";
11
- import { getCurrentParams, getTotalToolTokens } from "../token-utils";
12
- import { isIgnoredUserMessage } from "../messages/query";
13
- import { buildToolIdList } from "../messages/utils";
14
- import { saveSessionState } from "../state/persistence";
15
- import { isMessageCompacted } from "../state/utils";
16
- import { getFilePathsFromParameters, isFilePathProtected, isToolNameProtected, } from "../protected-patterns";
17
- import { syncToolCache } from "../state/tool-cache";
18
- function findLastUserMessageIndex(messages) {
19
- for (let i = messages.length - 1; i >= 0; i--) {
20
- const msg = messages[i];
21
- if (msg.info.role === "user" && !isIgnoredUserMessage(msg)) {
22
- return i;
23
- }
24
- }
25
- return -1;
26
- }
27
- function collectToolIdsAfterIndex(state, messages, afterIndex) {
28
- const toolIds = [];
29
- for (let i = afterIndex + 1; i < messages.length; i++) {
30
- const msg = messages[i];
31
- if (isMessageCompacted(state, msg)) {
32
- continue;
33
- }
34
- const parts = Array.isArray(msg.parts) ? msg.parts : [];
35
- if (parts.length > 0) {
36
- for (const part of parts) {
37
- if (part.type === "tool" && part.callID && part.tool) {
38
- toolIds.push(part.callID);
39
- }
40
- }
41
- }
42
- }
43
- return toolIds;
44
- }
45
- function formatNoUserMessage() {
46
- const lines = [];
47
- lines.push("╭───────────────────────────────────────────────────────────╮");
48
- lines.push("│ DCP Sweep │");
49
- lines.push("╰───────────────────────────────────────────────────────────╯");
50
- lines.push("");
51
- lines.push("Nothing swept: no user message found.");
52
- return lines.join("\n");
53
- }
54
- function formatSweepMessage(toolCount, tokensSaved, mode, toolIds, toolMetadata, workingDirectory, skippedProtected) {
55
- const lines = [];
56
- lines.push("╭───────────────────────────────────────────────────────────╮");
57
- lines.push("│ DCP Sweep │");
58
- lines.push("╰───────────────────────────────────────────────────────────╯");
59
- lines.push("");
60
- if (toolCount === 0) {
61
- if (mode === "since-user") {
62
- lines.push("No tools found since the previous user message.");
63
- }
64
- else {
65
- lines.push(`No tools found to sweep.`);
66
- }
67
- if (skippedProtected && skippedProtected > 0) {
68
- lines.push(`(${skippedProtected} protected tool(s) skipped)`);
69
- }
70
- }
71
- else {
72
- if (mode === "since-user") {
73
- lines.push(`Swept ${toolCount} tool(s) since the previous user message.`);
74
- }
75
- else {
76
- lines.push(`Swept the last ${toolCount} tool(s).`);
77
- }
78
- lines.push(`Tokens saved: ~${tokensSaved.toLocaleString()}`);
79
- if (skippedProtected && skippedProtected > 0) {
80
- lines.push(`(${skippedProtected} protected tool(s) skipped)`);
81
- }
82
- lines.push("");
83
- const itemLines = formatPrunedItemsList(toolIds, toolMetadata, workingDirectory);
84
- lines.push(...itemLines);
85
- }
86
- return lines.join("\n");
87
- }
88
- export async function handleSweepCommand(ctx) {
89
- const { client, state, config, logger, sessionId, messages, args, workingDirectory } = ctx;
90
- const params = getCurrentParams(state, messages, logger);
91
- const protectedTools = config.commands.protectedTools;
92
- syncToolCache(state, config, logger, messages);
93
- buildToolIdList(state, messages);
94
- // Parse optional numeric argument
95
- const numArg = args[0] ? parseInt(args[0], 10) : null;
96
- const isLastNMode = numArg !== null && !isNaN(numArg) && numArg > 0;
97
- let toolIdsToSweep;
98
- let mode;
99
- if (isLastNMode) {
100
- // Mode: Sweep last N tools
101
- mode = "last-n";
102
- const startIndex = Math.max(0, state.toolIdList.length - numArg);
103
- toolIdsToSweep = state.toolIdList.slice(startIndex);
104
- logger.info(`Sweep command: last ${numArg} mode, found ${toolIdsToSweep.length} tools`);
105
- }
106
- else {
107
- // Mode: Sweep since last user message
108
- mode = "since-user";
109
- const lastUserMsgIndex = findLastUserMessageIndex(messages);
110
- if (lastUserMsgIndex === -1) {
111
- // No user message found - show message and return
112
- const message = formatNoUserMessage();
113
- await sendIgnoredMessage(client, sessionId, message, params, logger);
114
- logger.info("Sweep command: no user message found");
115
- return;
116
- }
117
- else {
118
- toolIdsToSweep = collectToolIdsAfterIndex(state, messages, lastUserMsgIndex);
119
- logger.info(`Sweep command: found last user at index ${lastUserMsgIndex}, sweeping ${toolIdsToSweep.length} tools`);
120
- }
121
- }
122
- // Filter out already-pruned tools, protected tools, and protected file paths
123
- const newToolIds = toolIdsToSweep.filter((id) => {
124
- if (state.prune.tools.has(id)) {
125
- return false;
126
- }
127
- const entry = state.toolParameters.get(id);
128
- if (!entry) {
129
- return true;
130
- }
131
- if (isToolNameProtected(entry.tool, protectedTools)) {
132
- logger.debug(`Sweep: skipping protected tool ${entry.tool} (${id})`);
133
- return false;
134
- }
135
- const filePaths = getFilePathsFromParameters(entry.tool, entry.parameters);
136
- if (isFilePathProtected(filePaths, config.protectedFilePatterns)) {
137
- logger.debug(`Sweep: skipping protected file path(s) ${filePaths.join(", ")} (${id})`);
138
- return false;
139
- }
140
- return true;
141
- });
142
- // Count how many were skipped due to protection
143
- const skippedProtected = toolIdsToSweep.filter((id) => {
144
- const entry = state.toolParameters.get(id);
145
- if (!entry) {
146
- return false;
147
- }
148
- if (isToolNameProtected(entry.tool, protectedTools)) {
149
- return true;
150
- }
151
- const filePaths = getFilePathsFromParameters(entry.tool, entry.parameters);
152
- if (isFilePathProtected(filePaths, config.protectedFilePatterns)) {
153
- return true;
154
- }
155
- return false;
156
- }).length;
157
- if (newToolIds.length === 0) {
158
- const message = formatSweepMessage(0, 0, mode, [], new Map(), workingDirectory, skippedProtected);
159
- await sendIgnoredMessage(client, sessionId, message, params, logger);
160
- logger.info("Sweep command: no new tools to sweep", { skippedProtected });
161
- return;
162
- }
163
- const tokensSaved = getTotalToolTokens(state, newToolIds);
164
- // Add to prune list
165
- for (const id of newToolIds) {
166
- const entry = state.toolParameters.get(id);
167
- state.prune.tools.set(id, entry?.tokenCount ?? 0);
168
- }
169
- state.stats.pruneTokenCounter += tokensSaved;
170
- state.stats.totalPruneTokens += state.stats.pruneTokenCounter;
171
- state.stats.pruneTokenCounter = 0;
172
- // Collect metadata for logging
173
- const toolMetadata = new Map();
174
- for (const id of newToolIds) {
175
- const entry = state.toolParameters.get(id);
176
- if (entry) {
177
- toolMetadata.set(id, entry);
178
- }
179
- }
180
- // Persist state
181
- saveSessionState(state, logger).catch((err) => logger.error("Failed to persist state after sweep", { error: err.message }));
182
- const message = formatSweepMessage(newToolIds.length, tokensSaved, mode, newToolIds, toolMetadata, workingDirectory, skippedProtected);
183
- await sendIgnoredMessage(client, sessionId, message, params, logger);
184
- logger.info("Sweep command completed", {
185
- toolsSwept: newToolIds.length,
186
- tokensSaved,
187
- skippedProtected,
188
- mode,
189
- tools: Array.from(toolMetadata.entries()).map(([id, entry]) => ({
190
- id,
191
- tool: entry.tool,
192
- })),
193
- });
194
- }
195
- //# sourceMappingURL=sweep.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../../lib/commands/sweep.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { createCompressMessageTool } from "./message";
2
- export { createCompressRangeTool } from "./range";
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/compress/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
@@ -1,179 +0,0 @@
1
- import { parseBoundaryId } from "../message-ids";
2
- import { isIgnoredUserMessage, isProtectedUserMessage } from "../messages/query";
3
- import { resolveAnchorMessageId, resolveBoundaryIds, resolveSelection } from "./search";
4
- import { COMPRESSED_BLOCK_HEADER } from "./state";
5
- class SoftIssue extends Error {
6
- kind;
7
- messageId;
8
- constructor(kind, messageId, message) {
9
- super(message);
10
- this.kind = kind;
11
- this.messageId = messageId;
12
- }
13
- }
14
- export function validateArgs(args) {
15
- if (typeof args.topic !== "string" || args.topic.trim().length === 0) {
16
- throw new Error("topic is required and must be a non-empty string");
17
- }
18
- if (!Array.isArray(args.content) || args.content.length === 0) {
19
- throw new Error("content is required and must be a non-empty array");
20
- }
21
- for (let index = 0; index < args.content.length; index++) {
22
- const entry = args.content[index];
23
- const prefix = `content[${index}]`;
24
- if (typeof entry?.messageId !== "string" || entry.messageId.trim().length === 0) {
25
- throw new Error(`${prefix}.messageId is required and must be a non-empty string`);
26
- }
27
- if (typeof entry?.topic !== "string" || entry.topic.trim().length === 0) {
28
- throw new Error(`${prefix}.topic is required and must be a non-empty string`);
29
- }
30
- if (typeof entry?.summary !== "string" || entry.summary.trim().length === 0) {
31
- throw new Error(`${prefix}.summary is required and must be a non-empty string`);
32
- }
33
- }
34
- }
35
- export function formatResult(processedCount, skippedIssues, skippedCount) {
36
- const messageNoun = processedCount === 1 ? "message" : "messages";
37
- const processedText = processedCount > 0
38
- ? `Compressed ${processedCount} ${messageNoun} into ${COMPRESSED_BLOCK_HEADER}.`
39
- : "Compressed 0 messages.";
40
- if (skippedCount === 0) {
41
- return processedText;
42
- }
43
- const issueNoun = skippedCount === 1 ? "issue" : "issues";
44
- const issueLines = skippedIssues.map((issue) => `- ${issue}`).join("\n");
45
- return `${processedText}\nSkipped ${skippedCount} ${issueNoun}:\n${issueLines}`;
46
- }
47
- export function formatIssues(skippedIssues, skippedCount) {
48
- const issueNoun = skippedCount === 1 ? "issue" : "issues";
49
- const issueLines = skippedIssues.map((issue) => `- ${issue}`).join("\n");
50
- return `Unable to compress any messages. Found ${skippedCount} ${issueNoun}:\n${issueLines}`;
51
- }
52
- const ISSUE_TEMPLATES = {
53
- blocked: [
54
- "refers to a protected message and cannot be compressed.",
55
- "refer to protected messages and cannot be compressed.",
56
- ],
57
- "invalid-format": [
58
- "is invalid. Use an injected raw message ID of the form mNNNN.",
59
- "are invalid. Use injected raw message IDs of the form mNNNN.",
60
- ],
61
- "block-id": [
62
- "is invalid here. Block IDs like bN are not allowed; use an mNNNN message ID instead.",
63
- "are invalid here. Block IDs like bN are not allowed; use mNNNN message IDs instead.",
64
- ],
65
- "not-in-context": [
66
- "is not available in the current conversation context. Choose an injected mNNNN ID visible in context.",
67
- "are not available in the current conversation context. Choose injected mNNNN IDs visible in context.",
68
- ],
69
- protected: [
70
- "refers to a protected message and cannot be compressed.",
71
- "refer to protected messages and cannot be compressed.",
72
- ],
73
- "already-compressed": [
74
- "is already part of an active compression.",
75
- "are already part of active compressions.",
76
- ],
77
- duplicate: [
78
- "was selected more than once in this batch.",
79
- "were each selected more than once in this batch.",
80
- ],
81
- };
82
- function formatSkippedGroup(kind, messageIds) {
83
- const templates = ISSUE_TEMPLATES[kind];
84
- const ids = messageIds.join(", ");
85
- const single = messageIds.length === 1;
86
- const prefix = single ? "messageId" : "messageIds";
87
- if (!templates) {
88
- return `${prefix} ${ids}: unknown issue.`;
89
- }
90
- return `${prefix} ${ids} ${single ? templates[0] : templates[1]}`;
91
- }
92
- function groupSkippedIssues(issues) {
93
- const groups = new Map();
94
- const order = [];
95
- for (const issue of issues) {
96
- let ids = groups.get(issue.kind);
97
- if (!ids) {
98
- ids = [];
99
- groups.set(issue.kind, ids);
100
- order.push(issue.kind);
101
- }
102
- ids.push(issue.messageId);
103
- }
104
- return order.map((kind) => {
105
- const ids = groups.get(kind);
106
- return formatSkippedGroup(kind, ids);
107
- });
108
- }
109
- export function resolveMessages(args, searchContext, state, config) {
110
- const issues = [];
111
- const plans = [];
112
- const seenMessageIds = new Set();
113
- for (const entry of args.content) {
114
- const normalizedMessageId = entry.messageId.trim();
115
- if (seenMessageIds.has(normalizedMessageId)) {
116
- issues.push({ kind: "duplicate", messageId: normalizedMessageId });
117
- continue;
118
- }
119
- try {
120
- const plan = resolveMessage({
121
- ...entry,
122
- messageId: normalizedMessageId,
123
- }, searchContext, state, config);
124
- seenMessageIds.add(plan.entry.messageId);
125
- plans.push(plan);
126
- }
127
- catch (error) {
128
- if (error instanceof SoftIssue) {
129
- issues.push({ kind: error.kind, messageId: error.messageId });
130
- continue;
131
- }
132
- throw error;
133
- }
134
- }
135
- return {
136
- plans,
137
- skippedIssues: groupSkippedIssues(issues),
138
- skippedCount: issues.length,
139
- };
140
- }
141
- function resolveMessage(entry, searchContext, state, config) {
142
- if (entry.messageId.toUpperCase() === "BLOCKED") {
143
- throw new SoftIssue("blocked", "BLOCKED", "protected message");
144
- }
145
- const parsed = parseBoundaryId(entry.messageId);
146
- if (!parsed) {
147
- throw new SoftIssue("invalid-format", entry.messageId, "invalid format");
148
- }
149
- if (parsed.kind === "compressed-block") {
150
- throw new SoftIssue("block-id", entry.messageId, "block ID used");
151
- }
152
- const messageId = state.messageIds.byRef.get(parsed.ref);
153
- const rawMessage = messageId ? searchContext.rawMessagesById.get(messageId) : undefined;
154
- if (!messageId ||
155
- !rawMessage ||
156
- !searchContext.rawIndexById.has(messageId) ||
157
- isIgnoredUserMessage(rawMessage)) {
158
- throw new SoftIssue("not-in-context", parsed.ref, "not in context");
159
- }
160
- const { startReference, endReference } = resolveBoundaryIds(searchContext, state, parsed.ref, parsed.ref);
161
- const selection = resolveSelection(searchContext, startReference, endReference);
162
- if (isProtectedUserMessage(config, rawMessage)) {
163
- throw new SoftIssue("protected", parsed.ref, "protected message");
164
- }
165
- const pruneEntry = state.prune.messages.byMessageId.get(messageId);
166
- if (pruneEntry && pruneEntry.activeBlockIds.length > 0) {
167
- throw new SoftIssue("already-compressed", parsed.ref, "already compressed");
168
- }
169
- return {
170
- entry: {
171
- messageId: parsed.ref,
172
- topic: entry.topic,
173
- summary: entry.summary,
174
- },
175
- selection,
176
- anchorMessageId: resolveAnchorMessageId(startReference),
177
- };
178
- }
179
- //# sourceMappingURL=message-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-utils.js","sourceRoot":"","sources":["../../../lib/compress/message-utils.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- import { tool } from "@opencode-ai/plugin";
2
- import { countTokens } from "../token-utils";
3
- import { MESSAGE_FORMAT_EXTENSION } from "../prompts/extensions/tool";
4
- import { formatIssues, formatResult, resolveMessages, validateArgs } from "./message-utils";
5
- import { finalizeSession, prepareSession } from "./pipeline";
6
- import { appendProtectedTools } from "./protected-content";
7
- import { allocateBlockId, allocateRunId, applyCompressionState, wrapCompressedSummary, } from "./state";
8
- function buildSchema() {
9
- return {
10
- topic: tool.schema
11
- .string()
12
- .describe("Short label (3-5 words) for the overall batch - e.g., 'Closed Research Notes'"),
13
- content: tool.schema
14
- .array(tool.schema.object({
15
- messageId: tool.schema
16
- .string()
17
- .describe("Raw message ID to compress (e.g. m0001)"),
18
- topic: tool.schema
19
- .string()
20
- .describe("Short label (3-5 words) for this one message summary"),
21
- summary: tool.schema
22
- .string()
23
- .describe("Complete technical summary replacing that one message"),
24
- }))
25
- .describe("Batch of individual message summaries to create in one tool call"),
26
- };
27
- }
28
- export function createCompressMessageTool(ctx) {
29
- ctx.prompts.reload();
30
- const runtimePrompts = ctx.prompts.getRuntimePrompts();
31
- return tool({
32
- description: runtimePrompts.compressMessage + MESSAGE_FORMAT_EXTENSION,
33
- args: buildSchema(),
34
- async execute(args, toolCtx) {
35
- const input = args;
36
- validateArgs(input);
37
- const callId = typeof toolCtx.callID === "string"
38
- ? toolCtx.callID
39
- : undefined;
40
- const { rawMessages, searchContext } = await prepareSession(ctx, toolCtx, `Compress Message: ${input.topic}`);
41
- const { plans, skippedIssues, skippedCount } = resolveMessages(input, searchContext, ctx.state, ctx.config);
42
- if (plans.length === 0 && skippedCount > 0) {
43
- throw new Error(formatIssues(skippedIssues, skippedCount));
44
- }
45
- const notifications = [];
46
- const preparedPlans = [];
47
- for (const plan of plans) {
48
- const summaryWithTools = await appendProtectedTools(ctx.client, ctx.state, ctx.config.experimental.allowSubAgents, plan.entry.summary, plan.selection, searchContext, ctx.config.compress.protectedTools, ctx.config.protectedFilePatterns);
49
- preparedPlans.push({
50
- plan,
51
- summaryWithTools,
52
- });
53
- }
54
- const runId = allocateRunId(ctx.state);
55
- for (const { plan, summaryWithTools } of preparedPlans) {
56
- const blockId = allocateBlockId(ctx.state);
57
- const storedSummary = wrapCompressedSummary(blockId, summaryWithTools);
58
- const summaryTokens = countTokens(storedSummary);
59
- applyCompressionState(ctx.state, {
60
- topic: plan.entry.topic,
61
- batchTopic: input.topic,
62
- startId: plan.entry.messageId,
63
- endId: plan.entry.messageId,
64
- mode: "message",
65
- runId,
66
- compressMessageId: toolCtx.messageID,
67
- compressCallId: callId,
68
- summaryTokens,
69
- }, plan.selection, plan.anchorMessageId, blockId, storedSummary, []);
70
- notifications.push({
71
- blockId,
72
- runId,
73
- summary: summaryWithTools,
74
- summaryTokens,
75
- });
76
- }
77
- await finalizeSession(ctx, toolCtx, rawMessages, notifications, input.topic);
78
- return formatResult(plans.length, skippedIssues, skippedCount);
79
- },
80
- });
81
- }
82
- //# sourceMappingURL=message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../lib/compress/message.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { ensureSessionInitialized } from "../state";
2
- import { saveSessionState } from "../state/persistence";
3
- import { assignMessageRefs } from "../message-ids";
4
- import { isIgnoredUserMessage } from "../messages/query";
5
- import { deduplicate, purgeErrors } from "../strategies";
6
- import { getCurrentParams } from "../token-utils";
7
- import { sendCompressNotification } from "../ui/notification";
8
- import { buildSearchContext, fetchSessionMessages } from "./search";
9
- import { applyPendingCompressionDurations } from "./timing";
10
- export async function prepareSession(ctx, toolCtx, title) {
11
- if (ctx.state.manualMode && ctx.state.manualMode !== "compress-pending") {
12
- throw new Error("Manual mode: compress blocked. Do not retry until `<compress triggered manually>` appears in user context.");
13
- }
14
- await toolCtx.ask({
15
- permission: "compress",
16
- patterns: ["*"],
17
- always: ["*"],
18
- metadata: {},
19
- });
20
- toolCtx.metadata({ title });
21
- const rawMessages = await fetchSessionMessages(ctx.client, toolCtx.sessionID);
22
- await ensureSessionInitialized(ctx.client, ctx.state, toolCtx.sessionID, ctx.logger, rawMessages, ctx.config.manualMode.enabled);
23
- assignMessageRefs(ctx.state, rawMessages);
24
- deduplicate(ctx.state, ctx.logger, ctx.config, rawMessages);
25
- purgeErrors(ctx.state, ctx.logger, ctx.config, rawMessages);
26
- return {
27
- rawMessages,
28
- searchContext: buildSearchContext(ctx.state, rawMessages),
29
- };
30
- }
31
- export async function finalizeSession(ctx, toolCtx, rawMessages, entries, batchTopic) {
32
- ctx.state.manualMode = ctx.state.manualMode ? "active" : false;
33
- applyPendingCompressionDurations(ctx.state);
34
- await saveSessionState(ctx.state, ctx.logger);
35
- const params = getCurrentParams(ctx.state, rawMessages, ctx.logger);
36
- const sessionMessageIds = rawMessages
37
- .filter((msg) => !isIgnoredUserMessage(msg))
38
- .map((msg) => msg.info.id);
39
- await sendCompressNotification(ctx.client, ctx.logger, ctx.config, ctx.state, toolCtx.sessionID, entries, batchTopic, sessionMessageIds, params);
40
- }
41
- //# sourceMappingURL=pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../lib/compress/pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,106 +0,0 @@
1
- import { isIgnoredUserMessage } from "../messages/query";
2
- import { getFilePathsFromParameters, isFilePathProtected, isToolNameProtected, } from "../protected-patterns";
3
- import { buildSubagentResultText, getSubAgentId, mergeSubagentResult, } from "../subagents/subagent-results";
4
- import { fetchSessionMessages } from "./search";
5
- export function appendProtectedUserMessages(summary, selection, searchContext, state, enabled) {
6
- if (!enabled)
7
- return summary;
8
- const userTexts = [];
9
- for (const messageId of selection.messageIds) {
10
- const existingCompressionEntry = state.prune.messages.byMessageId.get(messageId);
11
- if (existingCompressionEntry && existingCompressionEntry.activeBlockIds.length > 0) {
12
- continue;
13
- }
14
- const message = searchContext.rawMessagesById.get(messageId);
15
- if (!message)
16
- continue;
17
- if (message.info.role !== "user")
18
- continue;
19
- if (isIgnoredUserMessage(message))
20
- continue;
21
- const parts = Array.isArray(message.parts) ? message.parts : [];
22
- for (const part of parts) {
23
- if (part.type === "text" && typeof part.text === "string" && part.text.trim()) {
24
- userTexts.push(part.text);
25
- break;
26
- }
27
- }
28
- }
29
- if (userTexts.length === 0) {
30
- return summary;
31
- }
32
- const heading = "\n\nThe following user messages were sent in this conversation verbatim:";
33
- const body = userTexts.map((text) => `\n${text}`).join("");
34
- return summary + heading + body;
35
- }
36
- export async function appendProtectedTools(client, state, allowSubAgents, summary, selection, searchContext, protectedTools, protectedFilePatterns = []) {
37
- const protectedOutputs = [];
38
- for (const messageId of selection.messageIds) {
39
- const existingCompressionEntry = state.prune.messages.byMessageId.get(messageId);
40
- if (existingCompressionEntry && existingCompressionEntry.activeBlockIds.length > 0) {
41
- continue;
42
- }
43
- const message = searchContext.rawMessagesById.get(messageId);
44
- if (!message)
45
- continue;
46
- const parts = Array.isArray(message.parts) ? message.parts : [];
47
- for (const part of parts) {
48
- if (part.type === "tool" && part.callID) {
49
- let isToolProtected = isToolNameProtected(part.tool, protectedTools);
50
- if (!isToolProtected && protectedFilePatterns.length > 0) {
51
- const filePaths = getFilePathsFromParameters(part.tool, part.state?.input);
52
- if (isFilePathProtected(filePaths, protectedFilePatterns)) {
53
- isToolProtected = true;
54
- }
55
- }
56
- if (isToolProtected) {
57
- const title = `Tool: ${part.tool}`;
58
- let output = "";
59
- if (part.state?.status === "completed" && part.state?.output) {
60
- output =
61
- typeof part.state.output === "string"
62
- ? part.state.output
63
- : JSON.stringify(part.state.output);
64
- }
65
- if (allowSubAgents &&
66
- part.tool === "task" &&
67
- part.state?.status === "completed" &&
68
- typeof part.state?.output === "string") {
69
- const cachedSubAgentResult = state.subAgentResultCache.get(part.callID);
70
- if (cachedSubAgentResult !== undefined) {
71
- if (cachedSubAgentResult) {
72
- output = mergeSubagentResult(part.state.output, cachedSubAgentResult);
73
- }
74
- }
75
- else {
76
- const subAgentSessionId = getSubAgentId(part);
77
- if (subAgentSessionId) {
78
- let subAgentResultText = "";
79
- try {
80
- const subAgentMessages = await fetchSessionMessages(client, subAgentSessionId);
81
- subAgentResultText = buildSubagentResultText(subAgentMessages);
82
- }
83
- catch {
84
- subAgentResultText = "";
85
- }
86
- if (subAgentResultText) {
87
- state.subAgentResultCache.set(part.callID, subAgentResultText);
88
- output = mergeSubagentResult(part.state.output, subAgentResultText);
89
- }
90
- }
91
- }
92
- }
93
- if (output) {
94
- protectedOutputs.push(`\n### ${title}\n${output}`);
95
- }
96
- }
97
- }
98
- }
99
- }
100
- if (protectedOutputs.length === 0) {
101
- return summary;
102
- }
103
- const heading = "\n\nThe following protected tools were used in this conversation as well:";
104
- return summary + heading + protectedOutputs.join("");
105
- }
106
- //# sourceMappingURL=protected-content.js.map