@tarquinen/opencode-dcp 3.0.3 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +23 -18
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +11 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/commands/compression-targets.d.ts +13 -0
  6. package/dist/lib/commands/compression-targets.d.ts.map +1 -0
  7. package/dist/lib/commands/compression-targets.js +97 -0
  8. package/dist/lib/commands/compression-targets.js.map +1 -0
  9. package/dist/lib/commands/context.js +1 -1
  10. package/dist/lib/commands/context.js.map +1 -1
  11. package/dist/lib/commands/decompress.d.ts.map +1 -1
  12. package/dist/lib/commands/decompress.js +43 -28
  13. package/dist/lib/commands/decompress.js.map +1 -1
  14. package/dist/lib/commands/manual.d.ts.map +1 -1
  15. package/dist/lib/commands/manual.js +6 -6
  16. package/dist/lib/commands/manual.js.map +1 -1
  17. package/dist/lib/commands/recompress.d.ts.map +1 -1
  18. package/dist/lib/commands/recompress.js +34 -31
  19. package/dist/lib/commands/recompress.js.map +1 -1
  20. package/dist/lib/compress/index.d.ts +4 -0
  21. package/dist/lib/compress/index.d.ts.map +1 -0
  22. package/dist/lib/compress/index.js +3 -0
  23. package/dist/lib/compress/index.js.map +1 -0
  24. package/dist/lib/compress/message-utils.d.ts +8 -0
  25. package/dist/lib/compress/message-utils.d.ts.map +1 -0
  26. package/dist/lib/compress/message-utils.js +123 -0
  27. package/dist/lib/compress/message-utils.js.map +1 -0
  28. package/dist/lib/compress/message.d.ts +4 -0
  29. package/dist/lib/compress/message.d.ts.map +1 -0
  30. package/dist/lib/compress/message.js +78 -0
  31. package/dist/lib/compress/message.js.map +1 -0
  32. package/dist/lib/compress/pipeline.d.ts +29 -0
  33. package/dist/lib/compress/pipeline.d.ts.map +1 -0
  34. package/dist/lib/compress/pipeline.js +40 -0
  35. package/dist/lib/compress/pipeline.js.map +1 -0
  36. package/dist/lib/compress/protected-content.d.ts +5 -0
  37. package/dist/lib/compress/protected-content.d.ts.map +1 -0
  38. package/dist/lib/compress/protected-content.js +106 -0
  39. package/dist/lib/compress/protected-content.js.map +1 -0
  40. package/dist/lib/compress/range-utils.d.ts +10 -0
  41. package/dist/lib/compress/range-utils.d.ts.map +1 -0
  42. package/dist/lib/compress/range-utils.js +199 -0
  43. package/dist/lib/compress/range-utils.js.map +1 -0
  44. package/dist/lib/compress/range.d.ts +4 -0
  45. package/dist/lib/compress/range.d.ts.map +1 -0
  46. package/dist/lib/compress/range.js +86 -0
  47. package/dist/lib/compress/range.js.map +1 -0
  48. package/dist/lib/compress/search.d.ts +11 -0
  49. package/dist/lib/compress/search.d.ts.map +1 -0
  50. package/dist/lib/compress/search.js +204 -0
  51. package/dist/lib/compress/search.js.map +1 -0
  52. package/dist/lib/compress/state.d.ts +8 -0
  53. package/dist/lib/compress/state.d.ts.map +1 -0
  54. package/dist/lib/compress/state.js +197 -0
  55. package/dist/lib/compress/state.js.map +1 -0
  56. package/dist/lib/compress/types.d.ts +92 -0
  57. package/dist/lib/compress/types.d.ts.map +1 -0
  58. package/dist/lib/{tools → compress}/types.js.map +1 -1
  59. package/dist/lib/config.d.ts +5 -7
  60. package/dist/lib/config.d.ts.map +1 -1
  61. package/dist/lib/config.js +24 -30
  62. package/dist/lib/config.js.map +1 -1
  63. package/dist/lib/hooks.d.ts.map +1 -1
  64. package/dist/lib/hooks.js +6 -8
  65. package/dist/lib/hooks.js.map +1 -1
  66. package/dist/lib/message-ids.d.ts +1 -1
  67. package/dist/lib/message-ids.d.ts.map +1 -1
  68. package/dist/lib/message-ids.js +19 -3
  69. package/dist/lib/message-ids.js.map +1 -1
  70. package/dist/lib/messages/inject/inject.d.ts +3 -2
  71. package/dist/lib/messages/inject/inject.d.ts.map +1 -1
  72. package/dist/lib/messages/inject/inject.js +31 -10
  73. package/dist/lib/messages/inject/inject.js.map +1 -1
  74. package/dist/lib/messages/inject/utils.d.ts +2 -2
  75. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  76. package/dist/lib/messages/inject/utils.js +102 -42
  77. package/dist/lib/messages/inject/utils.js.map +1 -1
  78. package/dist/lib/messages/priority.d.ts +13 -0
  79. package/dist/lib/messages/priority.d.ts.map +1 -0
  80. package/dist/lib/messages/priority.js +65 -0
  81. package/dist/lib/messages/priority.js.map +1 -0
  82. package/dist/lib/messages/prune.js +6 -4
  83. package/dist/lib/messages/prune.js.map +1 -1
  84. package/dist/lib/messages/utils.d.ts +9 -2
  85. package/dist/lib/messages/utils.d.ts.map +1 -1
  86. package/dist/lib/messages/utils.js +41 -9
  87. package/dist/lib/messages/utils.js.map +1 -1
  88. package/dist/lib/prompts/compress-message.d.ts +2 -0
  89. package/dist/lib/prompts/compress-message.d.ts.map +1 -0
  90. package/dist/lib/prompts/compress-message.js +44 -0
  91. package/dist/lib/prompts/compress-message.js.map +1 -0
  92. package/dist/lib/prompts/compress-range.d.ts +2 -0
  93. package/dist/lib/prompts/compress-range.d.ts.map +1 -0
  94. package/dist/lib/prompts/{compress.js → compress-range.js} +5 -29
  95. package/dist/lib/prompts/compress-range.js.map +1 -0
  96. package/dist/lib/prompts/internal-overlays.d.ts +2 -2
  97. package/dist/lib/prompts/internal-overlays.d.ts.map +1 -1
  98. package/dist/lib/prompts/internal-overlays.js +17 -11
  99. package/dist/lib/prompts/internal-overlays.js.map +1 -1
  100. package/dist/lib/prompts/message-priority-guidance.d.ts +2 -0
  101. package/dist/lib/prompts/message-priority-guidance.d.ts.map +1 -0
  102. package/dist/lib/prompts/message-priority-guidance.js +9 -0
  103. package/dist/lib/prompts/message-priority-guidance.js.map +1 -0
  104. package/dist/lib/prompts/store.d.ts +3 -2
  105. package/dist/lib/prompts/store.d.ts.map +1 -1
  106. package/dist/lib/prompts/store.js +30 -18
  107. package/dist/lib/prompts/store.js.map +1 -1
  108. package/dist/lib/prompts/system.d.ts +1 -1
  109. package/dist/lib/prompts/system.d.ts.map +1 -1
  110. package/dist/lib/prompts/system.js +26 -9
  111. package/dist/lib/prompts/system.js.map +1 -1
  112. package/dist/lib/shared-utils.d.ts +1 -0
  113. package/dist/lib/shared-utils.d.ts.map +1 -1
  114. package/dist/lib/shared-utils.js +7 -0
  115. package/dist/lib/shared-utils.js.map +1 -1
  116. package/dist/lib/state/persistence.d.ts +1 -0
  117. package/dist/lib/state/persistence.d.ts.map +1 -1
  118. package/dist/lib/state/persistence.js +1 -0
  119. package/dist/lib/state/persistence.js.map +1 -1
  120. package/dist/lib/state/types.d.ts +6 -0
  121. package/dist/lib/state/types.d.ts.map +1 -1
  122. package/dist/lib/state/utils.d.ts +1 -0
  123. package/dist/lib/state/utils.d.ts.map +1 -1
  124. package/dist/lib/state/utils.js +31 -9
  125. package/dist/lib/state/utils.js.map +1 -1
  126. package/dist/lib/strategies/index.d.ts +0 -1
  127. package/dist/lib/strategies/index.d.ts.map +1 -1
  128. package/dist/lib/strategies/index.js +0 -1
  129. package/dist/lib/strategies/index.js.map +1 -1
  130. package/dist/lib/strategies/utils.d.ts +1 -5
  131. package/dist/lib/strategies/utils.d.ts.map +1 -1
  132. package/dist/lib/strategies/utils.js +24 -28
  133. package/dist/lib/strategies/utils.js.map +1 -1
  134. package/dist/lib/ui/notification.d.ts +8 -1
  135. package/dist/lib/ui/notification.d.ts.map +1 -1
  136. package/dist/lib/ui/notification.js +66 -13
  137. package/dist/lib/ui/notification.js.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/lib/prompts/compress.d.ts +0 -2
  140. package/dist/lib/prompts/compress.d.ts.map +0 -1
  141. package/dist/lib/prompts/compress.js.map +0 -1
  142. package/dist/lib/strategies/supersede-writes.d.ts +0 -13
  143. package/dist/lib/strategies/supersede-writes.d.ts.map +0 -1
  144. package/dist/lib/strategies/supersede-writes.js +0 -94
  145. package/dist/lib/strategies/supersede-writes.js.map +0 -1
  146. package/dist/lib/tools/compress.d.ts +0 -4
  147. package/dist/lib/tools/compress.d.ts.map +0 -1
  148. package/dist/lib/tools/compress.js +0 -110
  149. package/dist/lib/tools/compress.js.map +0 -1
  150. package/dist/lib/tools/index.d.ts +0 -3
  151. package/dist/lib/tools/index.d.ts.map +0 -1
  152. package/dist/lib/tools/index.js +0 -2
  153. package/dist/lib/tools/index.js.map +0 -1
  154. package/dist/lib/tools/types.d.ts +0 -13
  155. package/dist/lib/tools/types.d.ts.map +0 -1
  156. package/dist/lib/tools/utils.d.ts +0 -80
  157. package/dist/lib/tools/utils.d.ts.map +0 -1
  158. package/dist/lib/tools/utils.js +0 -694
  159. package/dist/lib/tools/utils.js.map +0 -1
  160. /package/dist/lib/{tools → compress}/types.js +0 -0
@@ -4,6 +4,7 @@ import { getCurrentParams } from "../strategies/utils";
4
4
  import { saveSessionState } from "../state/persistence";
5
5
  import { sendIgnoredMessage } from "../ui/notification";
6
6
  import { formatTokenCount } from "../ui/utils";
7
+ import { getRecompressibleCompressionTargets, resolveCompressionTarget, } from "./compression-targets";
7
8
  function parseBlockIdArg(arg) {
8
9
  const normalized = arg.trim().toLowerCase();
9
10
  const blockRef = parseBlockRef(normalized);
@@ -16,13 +17,6 @@ function parseBlockIdArg(arg) {
16
17
  const parsed = Number.parseInt(normalized, 10);
17
18
  return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
18
19
  }
19
- function getRecompressibleBlocks(messagesState, availableMessageIds) {
20
- return Array.from(messagesState.blocksById.values())
21
- .filter((block) => block.deactivatedByUser &&
22
- !block.active &&
23
- availableMessageIds.has(block.compressMessageId))
24
- .sort((a, b) => a.blockId - b.blockId);
25
- }
26
20
  function snapshotActiveMessages(messagesState) {
27
21
  const activeMessages = new Set();
28
22
  for (const [messageId, entry] of messagesState.byMessageId) {
@@ -32,9 +26,12 @@ function snapshotActiveMessages(messagesState) {
32
26
  }
33
27
  return activeMessages;
34
28
  }
35
- function formatRecompressMessage(targetBlockId, recompressedMessageCount, recompressedTokens, deactivatedBlockIds) {
29
+ function formatRecompressMessage(target, recompressedMessageCount, recompressedTokens, deactivatedBlockIds) {
36
30
  const lines = [];
37
- lines.push(`Re-applied compression ${targetBlockId}.`);
31
+ lines.push(`Re-applied compression ${target.displayId}.`);
32
+ if (target.runId !== target.displayId || target.grouped) {
33
+ lines.push(`Tool call label: Compression #${target.runId}.`);
34
+ }
38
35
  if (deactivatedBlockIds.length > 0) {
39
36
  const refs = deactivatedBlockIds.map((id) => String(id)).join(", ");
40
37
  lines.push(`Also re-compressed nested compression(s): ${refs}.`);
@@ -47,19 +44,22 @@ function formatRecompressMessage(targetBlockId, recompressedMessageCount, recomp
47
44
  }
48
45
  return lines.join("\n");
49
46
  }
50
- function formatAvailableBlocksMessage(availableBlocks) {
47
+ function formatAvailableBlocksMessage(availableTargets) {
51
48
  const lines = [];
52
49
  lines.push("Usage: /dcp recompress <n>");
53
50
  lines.push("");
54
- if (availableBlocks.length === 0) {
51
+ if (availableTargets.length === 0) {
55
52
  lines.push("No user-decompressed blocks are available to re-compress.");
56
53
  return lines.join("\n");
57
54
  }
58
- lines.push("Available user-decompressed blocks:");
59
- const entries = availableBlocks.map((block) => {
60
- const topic = block.topic.replace(/\s+/g, " ").trim() || "(no topic)";
61
- const label = `${block.blockId} (${formatTokenCount(block.compressedTokens)})`;
62
- return { label, topic };
55
+ lines.push("Available user-decompressed compressions:");
56
+ const entries = availableTargets.map((target) => {
57
+ const topic = target.topic.replace(/\s+/g, " ").trim() || "(no topic)";
58
+ const label = `${target.displayId} (${formatTokenCount(target.compressedTokens)})`;
59
+ const details = target.grouped
60
+ ? `Compression #${target.runId} - ${target.blocks.length} messages`
61
+ : `Compression #${target.runId}`;
62
+ return { label, topic: `${details} - ${topic}` };
63
63
  });
64
64
  const labelWidth = Math.max(...entries.map((entry) => entry.label.length)) + 4;
65
65
  for (const entry of entries) {
@@ -79,8 +79,8 @@ export async function handleRecompressCommand(ctx) {
79
79
  const messagesState = state.prune.messages;
80
80
  const availableMessageIds = new Set(messages.map((msg) => msg.info.id));
81
81
  if (!targetArg) {
82
- const availableBlocks = getRecompressibleBlocks(messagesState, availableMessageIds);
83
- const message = formatAvailableBlocksMessage(availableBlocks);
82
+ const availableTargets = getRecompressibleCompressionTargets(messagesState, availableMessageIds);
83
+ const message = formatAvailableBlocksMessage(availableTargets);
84
84
  await sendIgnoredMessage(client, sessionId, message, params, logger);
85
85
  return;
86
86
  }
@@ -89,27 +89,29 @@ export async function handleRecompressCommand(ctx) {
89
89
  await sendIgnoredMessage(client, sessionId, `Please enter a compression number. Example: /dcp recompress 2`, params, logger);
90
90
  return;
91
91
  }
92
- const targetBlock = messagesState.blocksById.get(targetBlockId);
93
- if (!targetBlock) {
92
+ const target = resolveCompressionTarget(messagesState, targetBlockId);
93
+ if (!target) {
94
94
  await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} does not exist.`, params, logger);
95
95
  return;
96
96
  }
97
- if (!availableMessageIds.has(targetBlock.compressMessageId)) {
98
- await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} can no longer be re-applied because its origin message is no longer in this session.`, params, logger);
97
+ if (target.blocks.some((block) => !availableMessageIds.has(block.compressMessageId))) {
98
+ await sendIgnoredMessage(client, sessionId, `Compression ${target.displayId} can no longer be re-applied because its origin message is no longer in this session.`, params, logger);
99
99
  return;
100
100
  }
101
- if (!targetBlock.deactivatedByUser) {
102
- const message = targetBlock.active
103
- ? `Compression ${targetBlockId} is already active.`
104
- : `Compression ${targetBlockId} is not user-decompressed.`;
101
+ if (!target.blocks.some((block) => block.deactivatedByUser)) {
102
+ const message = target.blocks.some((block) => block.active)
103
+ ? `Compression ${target.displayId} is already active.`
104
+ : `Compression ${target.displayId} is not user-decompressed.`;
105
105
  await sendIgnoredMessage(client, sessionId, message, params, logger);
106
106
  return;
107
107
  }
108
108
  const activeMessagesBefore = snapshotActiveMessages(messagesState);
109
109
  const activeBlockIdsBefore = new Set(messagesState.activeBlockIds);
110
- targetBlock.deactivatedByUser = false;
111
- targetBlock.deactivatedAt = undefined;
112
- targetBlock.deactivatedByBlockId = undefined;
110
+ for (const block of target.blocks) {
111
+ block.deactivatedByUser = false;
112
+ block.deactivatedAt = undefined;
113
+ block.deactivatedByBlockId = undefined;
114
+ }
113
115
  syncCompressionBlocks(state, logger, messages);
114
116
  let recompressedMessageCount = 0;
115
117
  let recompressedTokens = 0;
@@ -125,10 +127,11 @@ export async function handleRecompressCommand(ctx) {
125
127
  .filter((blockId) => !messagesState.activeBlockIds.has(blockId))
126
128
  .sort((a, b) => a - b);
127
129
  await saveSessionState(state, logger);
128
- const message = formatRecompressMessage(targetBlockId, recompressedMessageCount, recompressedTokens, deactivatedBlockIds);
130
+ const message = formatRecompressMessage(target, recompressedMessageCount, recompressedTokens, deactivatedBlockIds);
129
131
  await sendIgnoredMessage(client, sessionId, message, params, logger);
130
132
  logger.info("Recompress command completed", {
131
- targetBlockId,
133
+ targetBlockId: target.displayId,
134
+ targetRunId: target.runId,
132
135
  recompressedMessageCount,
133
136
  recompressedTokens,
134
137
  deactivatedBlockIds,
@@ -1 +1 @@
1
- {"version":3,"file":"recompress.js","sourceRoot":"","sources":["../../../lib/commands/recompress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recompress.js","sourceRoot":"","sources":["../../../lib/commands/recompress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ToolContext } from "./types";
2
+ export { createCompressMessageTool } from "./message";
3
+ export { createCompressRangeTool } from "./range";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/compress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { createCompressMessageTool } from "./message";
2
+ export { createCompressRangeTool } from "./range";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,8 @@
1
+ import type { PluginConfig } from "../config";
2
+ import type { SessionState } from "../state";
3
+ import type { CompressMessageToolArgs, ResolvedMessageCompressionsResult, SearchContext } from "./types";
4
+ export declare function validateArgs(args: CompressMessageToolArgs): void;
5
+ export declare function formatResult(processedCount: number, skippedIssues: string[]): string;
6
+ export declare function formatIssues(skippedIssues: string[]): string;
7
+ export declare function resolveMessages(args: CompressMessageToolArgs, searchContext: SearchContext, state: SessionState, config: PluginConfig): ResolvedMessageCompressionsResult;
8
+ //# sourceMappingURL=message-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-utils.d.ts","sourceRoot":"","sources":["../../../lib/compress/message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAK5C,OAAO,KAAK,EAER,uBAAuB,EAEvB,iCAAiC,EACjC,aAAa,EAChB,MAAM,SAAS,CAAA;AAIhB,wBAAgB,YAAY,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAyBhE;AAED,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAcpF;AAED,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAI5D;AAED,wBAAgB,eAAe,CAC3B,IAAI,EAAE,uBAAuB,EAC7B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GACrB,iCAAiC,CAwCnC"}
@@ -0,0 +1,123 @@
1
+ import { parseBoundaryId } from "../message-ids";
2
+ import { isIgnoredUserMessage, isProtectedUserMessage } from "../messages/utils";
3
+ import { resolveAnchorMessageId, resolveBoundaryIds, resolveSelection } from "./search";
4
+ import { COMPRESSED_BLOCK_HEADER } from "./state";
5
+ class SoftIssue extends Error {
6
+ }
7
+ export function validateArgs(args) {
8
+ if (typeof args.topic !== "string" || args.topic.trim().length === 0) {
9
+ throw new Error("topic is required and must be a non-empty string");
10
+ }
11
+ if (!Array.isArray(args.content) || args.content.length === 0) {
12
+ throw new Error("content is required and must be a non-empty array");
13
+ }
14
+ for (let index = 0; index < args.content.length; index++) {
15
+ const entry = args.content[index];
16
+ const prefix = `content[${index}]`;
17
+ if (typeof entry?.messageId !== "string" || entry.messageId.trim().length === 0) {
18
+ throw new Error(`${prefix}.messageId is required and must be a non-empty string`);
19
+ }
20
+ if (typeof entry?.topic !== "string" || entry.topic.trim().length === 0) {
21
+ throw new Error(`${prefix}.topic is required and must be a non-empty string`);
22
+ }
23
+ if (typeof entry?.summary !== "string" || entry.summary.trim().length === 0) {
24
+ throw new Error(`${prefix}.summary is required and must be a non-empty string`);
25
+ }
26
+ }
27
+ }
28
+ export function formatResult(processedCount, skippedIssues) {
29
+ const messageNoun = processedCount === 1 ? "message" : "messages";
30
+ const processedText = processedCount > 0
31
+ ? `Compressed ${processedCount} ${messageNoun} into ${COMPRESSED_BLOCK_HEADER}.`
32
+ : "Compressed 0 messages.";
33
+ if (skippedIssues.length === 0) {
34
+ return processedText;
35
+ }
36
+ const issueNoun = skippedIssues.length === 1 ? "issue" : "issues";
37
+ const issueLines = skippedIssues.map((issue) => `- ${issue}`).join("\n");
38
+ return `${processedText}\nSkipped ${skippedIssues.length} ${issueNoun}:\n${issueLines}`;
39
+ }
40
+ export function formatIssues(skippedIssues) {
41
+ const issueNoun = skippedIssues.length === 1 ? "issue" : "issues";
42
+ const issueLines = skippedIssues.map((issue) => `- ${issue}`).join("\n");
43
+ return `Unable to compress any messages. Found ${skippedIssues.length} ${issueNoun}:\n${issueLines}`;
44
+ }
45
+ export function resolveMessages(args, searchContext, state, config) {
46
+ const issues = [];
47
+ const plans = [];
48
+ const seenMessageIds = new Set();
49
+ for (const entry of args.content) {
50
+ const normalizedMessageId = entry.messageId.trim();
51
+ if (seenMessageIds.has(normalizedMessageId)) {
52
+ issues.push(`messageId ${normalizedMessageId} was selected more than once in this batch.`);
53
+ continue;
54
+ }
55
+ try {
56
+ const plan = resolveMessage({
57
+ ...entry,
58
+ messageId: normalizedMessageId,
59
+ }, searchContext, state, config);
60
+ seenMessageIds.add(plan.entry.messageId);
61
+ plans.push(plan);
62
+ }
63
+ catch (error) {
64
+ if (error instanceof SoftIssue) {
65
+ issues.push(error.message);
66
+ continue;
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ return {
72
+ plans,
73
+ skippedIssues: issues,
74
+ };
75
+ }
76
+ function resolveMessage(entry, searchContext, state, config) {
77
+ if (entry.messageId.toUpperCase() === "BLOCKED") {
78
+ throw new SoftIssue("messageId BLOCKED refers to a protected message and cannot be compressed.");
79
+ }
80
+ const parsed = parseBoundaryId(entry.messageId);
81
+ if (!parsed) {
82
+ throw new Error(`messageId ${entry.messageId} is invalid. Use an injected raw message ID of the form mNNNN.`);
83
+ }
84
+ if (parsed.kind === "compressed-block") {
85
+ throw new SoftIssue(`messageId ${entry.messageId} is invalid here. Block IDs like bN are not allowed; use an mNNNN message ID instead.`);
86
+ }
87
+ const messageId = state.messageIds.byRef.get(parsed.ref);
88
+ const rawMessage = messageId ? searchContext.rawMessagesById.get(messageId) : undefined;
89
+ const hasBoundary = !!rawMessage &&
90
+ !!messageId &&
91
+ searchContext.rawIndexById.has(messageId) &&
92
+ !isIgnoredUserMessage(rawMessage);
93
+ if (!hasBoundary) {
94
+ throw new SoftIssue(`messageId ${parsed.ref} is not available in the current conversation context. Choose an injected mNNNN ID visible in context.`);
95
+ }
96
+ const { startReference, endReference } = resolveBoundaryIds(searchContext, state, parsed.ref, parsed.ref);
97
+ const selection = resolveSelection(searchContext, startReference, endReference);
98
+ const rawMessageId = selection.messageIds[0];
99
+ if (!rawMessageId) {
100
+ throw new Error(`messageId ${parsed.ref} could not be resolved to a raw message.`);
101
+ }
102
+ const message = searchContext.rawMessagesById.get(rawMessageId);
103
+ if (!message) {
104
+ throw new Error(`messageId ${parsed.ref} is not available in the current conversation.`);
105
+ }
106
+ if (isProtectedUserMessage(config, message)) {
107
+ throw new SoftIssue(`messageId ${parsed.ref} refers to a protected message and cannot be compressed.`);
108
+ }
109
+ const pruneEntry = state.prune.messages.byMessageId.get(rawMessageId);
110
+ if (pruneEntry && pruneEntry.activeBlockIds.length > 0) {
111
+ throw new Error(`messageId ${parsed.ref} is already part of an active compression.`);
112
+ }
113
+ return {
114
+ entry: {
115
+ messageId: parsed.ref,
116
+ topic: entry.topic,
117
+ summary: entry.summary,
118
+ },
119
+ selection,
120
+ anchorMessageId: resolveAnchorMessageId(startReference),
121
+ };
122
+ }
123
+ //# sourceMappingURL=message-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-utils.js","sourceRoot":"","sources":["../../../lib/compress/message-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import type { ToolContext } from "./types";
3
+ export declare function createCompressMessageTool(ctx: ToolContext): ReturnType<typeof tool>;
4
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../lib/compress/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAuC1C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CA2FnF"}
@@ -0,0 +1,78 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { countTokens } from "../strategies/utils";
3
+ import { MESSAGE_FORMAT_OVERLAY } from "../prompts/internal-overlays";
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_OVERLAY,
33
+ args: buildSchema(),
34
+ async execute(args, toolCtx) {
35
+ const input = args;
36
+ validateArgs(input);
37
+ const { rawMessages, searchContext } = await prepareSession(ctx, toolCtx, `Compress Message: ${input.topic}`);
38
+ const { plans, skippedIssues } = resolveMessages(input, searchContext, ctx.state, ctx.config);
39
+ if (plans.length === 0 && skippedIssues.length > 0) {
40
+ throw new Error(formatIssues(skippedIssues));
41
+ }
42
+ const notifications = [];
43
+ const preparedPlans = [];
44
+ for (const plan of plans) {
45
+ 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);
46
+ preparedPlans.push({
47
+ plan,
48
+ summaryWithTools,
49
+ });
50
+ }
51
+ const runId = allocateRunId(ctx.state);
52
+ for (const { plan, summaryWithTools } of preparedPlans) {
53
+ const blockId = allocateBlockId(ctx.state);
54
+ const storedSummary = wrapCompressedSummary(blockId, summaryWithTools);
55
+ const summaryTokens = countTokens(storedSummary);
56
+ applyCompressionState(ctx.state, {
57
+ topic: plan.entry.topic,
58
+ batchTopic: input.topic,
59
+ startId: plan.entry.messageId,
60
+ endId: plan.entry.messageId,
61
+ mode: "message",
62
+ runId,
63
+ compressMessageId: toolCtx.messageID,
64
+ summaryTokens,
65
+ }, plan.selection, plan.anchorMessageId, blockId, storedSummary, []);
66
+ notifications.push({
67
+ blockId,
68
+ runId,
69
+ summary: summaryWithTools,
70
+ summaryTokens,
71
+ });
72
+ }
73
+ await finalizeSession(ctx, toolCtx, rawMessages, notifications, input.topic);
74
+ return formatResult(plans.length, skippedIssues);
75
+ },
76
+ });
77
+ }
78
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../lib/compress/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { WithParts } from "../state";
2
+ import type { ToolContext } from "./types";
3
+ import type { SearchContext } from "./types";
4
+ interface RunContext {
5
+ ask(input: {
6
+ permission: string;
7
+ patterns: string[];
8
+ always: string[];
9
+ metadata: Record<string, unknown>;
10
+ }): Promise<void>;
11
+ metadata(input: {
12
+ title: string;
13
+ }): void;
14
+ sessionID: string;
15
+ }
16
+ export interface NotificationEntry {
17
+ blockId: number;
18
+ runId: number;
19
+ summary: string;
20
+ summaryTokens: number;
21
+ }
22
+ export interface PreparedSession {
23
+ rawMessages: WithParts[];
24
+ searchContext: SearchContext;
25
+ }
26
+ export declare function prepareSession(ctx: ToolContext, toolCtx: RunContext, title: string): Promise<PreparedSession>;
27
+ export declare function finalizeSession(ctx: ToolContext, toolCtx: RunContext, rawMessages: WithParts[], entries: NotificationEntry[], batchTopic: string | undefined): Promise<void>;
28
+ export {};
29
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../lib/compress/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,UAAU,UAAU;IAChB,GAAG,CAAC,KAAK,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,MAAM,EAAE,MAAM,EAAE,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjB,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACxC,SAAS,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,aAAa,EAAE,aAAa,CAAA;CAC/B;AAED,wBAAsB,cAAc,CAChC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,wBAAsB,eAAe,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,SAAS,EAAE,EACxB,OAAO,EAAE,iBAAiB,EAAE,EAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,40 @@
1
+ import { ensureSessionInitialized } from "../state";
2
+ import { saveSessionState } from "../state/persistence";
3
+ import { assignMessageRefs } from "../message-ids";
4
+ import { isIgnoredUserMessage } from "../messages/utils";
5
+ import { deduplicate, purgeErrors } from "../strategies";
6
+ import { getCurrentParams, getCurrentTokenUsage } from "../strategies/utils";
7
+ import { sendCompressNotification } from "../ui/notification";
8
+ import { buildSearchContext, fetchSessionMessages } from "./search";
9
+ export async function prepareSession(ctx, toolCtx, title) {
10
+ if (ctx.state.manualMode && ctx.state.manualMode !== "compress-pending") {
11
+ throw new Error("Manual mode: compress blocked. Do not retry until `<compress triggered manually>` appears in user context.");
12
+ }
13
+ await toolCtx.ask({
14
+ permission: "compress",
15
+ patterns: ["*"],
16
+ always: ["*"],
17
+ metadata: {},
18
+ });
19
+ toolCtx.metadata({ title });
20
+ const rawMessages = await fetchSessionMessages(ctx.client, toolCtx.sessionID);
21
+ await ensureSessionInitialized(ctx.client, ctx.state, toolCtx.sessionID, ctx.logger, rawMessages, ctx.config.manualMode.enabled);
22
+ assignMessageRefs(ctx.state, rawMessages);
23
+ deduplicate(ctx.state, ctx.logger, ctx.config, rawMessages);
24
+ purgeErrors(ctx.state, ctx.logger, ctx.config, rawMessages);
25
+ return {
26
+ rawMessages,
27
+ searchContext: buildSearchContext(ctx.state, rawMessages),
28
+ };
29
+ }
30
+ export async function finalizeSession(ctx, toolCtx, rawMessages, entries, batchTopic) {
31
+ ctx.state.manualMode = ctx.state.manualMode ? "active" : false;
32
+ await saveSessionState(ctx.state, ctx.logger);
33
+ const params = getCurrentParams(ctx.state, rawMessages, ctx.logger);
34
+ const totalSessionTokens = getCurrentTokenUsage(ctx.state, rawMessages);
35
+ const sessionMessageIds = rawMessages
36
+ .filter((msg) => !isIgnoredUserMessage(msg))
37
+ .map((msg) => msg.info.id);
38
+ await sendCompressNotification(ctx.client, ctx.logger, ctx.config, ctx.state, toolCtx.sessionID, entries, batchTopic, totalSessionTokens, sessionMessageIds, params);
39
+ }
40
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../lib/compress/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AA0BnE,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,GAAgB,EAChB,OAAmB,EACnB,KAAa;IAEb,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,kBAAkB,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACX,4GAA4G,CAC/G,CAAA;IACL,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC;QACd,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,CAAC,GAAG,CAAC;QACf,MAAM,EAAE,CAAC,GAAG,CAAC;QACb,QAAQ,EAAE,EAAE;KACf,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAE3B,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAE7E,MAAM,wBAAwB,CAC1B,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,EACT,OAAO,CAAC,SAAS,EACjB,GAAG,CAAC,MAAM,EACV,WAAW,EACX,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAChC,CAAA;IAED,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAEzC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC3D,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAE3D,OAAO;QACH,WAAW;QACX,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5D,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,GAAgB,EAChB,OAAmB,EACnB,WAAwB,EACxB,OAA4B,EAC5B,UAA8B;IAE9B,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9D,MAAM,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACvE,MAAM,iBAAiB,GAAG,WAAW;SAChC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;SAC3C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,wBAAwB,CAC1B,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,KAAK,EACT,OAAO,CAAC,SAAS,EACjB,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,MAAM,CACT,CAAA;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SessionState } from "../state";
2
+ import type { SearchContext, SelectionResolution } from "./types";
3
+ export declare function appendProtectedUserMessages(summary: string, selection: SelectionResolution, searchContext: SearchContext, state: SessionState, enabled: boolean): string;
4
+ export declare function appendProtectedTools(client: any, state: SessionState, allowSubAgents: boolean, summary: string, selection: SelectionResolution, searchContext: SearchContext, protectedTools: string[], protectedFilePatterns?: string[]): Promise<string>;
5
+ //# sourceMappingURL=protected-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-content.d.ts","sourceRoot":"","sources":["../../../lib/compress/protected-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAa5C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAEjE,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,mBAAmB,EAC9B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,OAAO,GACjB,MAAM,CAgCR;AAED,wBAAsB,oBAAoB,CACtC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,mBAAmB,EAC9B,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,MAAM,EAAE,EACxB,qBAAqB,GAAE,MAAM,EAAO,GACrC,OAAO,CAAC,MAAM,CAAC,CAyFjB"}
@@ -0,0 +1,106 @@
1
+ import { isIgnoredUserMessage } from "../messages/utils";
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