@tarquinen/opencode-dcp 2.2.6-beta0 → 2.2.8-beta0

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 (101) hide show
  1. package/README.md +36 -13
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/commands/decompress.d.ts +12 -0
  6. package/dist/lib/commands/decompress.d.ts.map +1 -0
  7. package/dist/lib/commands/decompress.js +159 -0
  8. package/dist/lib/commands/decompress.js.map +1 -0
  9. package/dist/lib/commands/help.d.ts.map +1 -1
  10. package/dist/lib/commands/help.js +4 -0
  11. package/dist/lib/commands/help.js.map +1 -1
  12. package/dist/lib/commands/manual.d.ts.map +1 -1
  13. package/dist/lib/commands/manual.js +5 -3
  14. package/dist/lib/commands/manual.js.map +1 -1
  15. package/dist/lib/commands/recompress.d.ts +12 -0
  16. package/dist/lib/commands/recompress.d.ts.map +1 -0
  17. package/dist/lib/commands/recompress.js +137 -0
  18. package/dist/lib/commands/recompress.js.map +1 -0
  19. package/dist/lib/config.d.ts +1 -0
  20. package/dist/lib/config.d.ts.map +1 -1
  21. package/dist/lib/config.js +13 -1
  22. package/dist/lib/config.js.map +1 -1
  23. package/dist/lib/hooks.d.ts +3 -2
  24. package/dist/lib/hooks.d.ts.map +1 -1
  25. package/dist/lib/hooks.js +27 -7
  26. package/dist/lib/hooks.js.map +1 -1
  27. package/dist/lib/logger.d.ts.map +1 -1
  28. package/dist/lib/logger.js +8 -5
  29. package/dist/lib/logger.js.map +1 -1
  30. package/dist/lib/messages/index.d.ts +4 -3
  31. package/dist/lib/messages/index.d.ts.map +1 -1
  32. package/dist/lib/messages/index.js +4 -3
  33. package/dist/lib/messages/index.js.map +1 -1
  34. package/dist/lib/messages/inject/inject.d.ts +3 -2
  35. package/dist/lib/messages/inject/inject.d.ts.map +1 -1
  36. package/dist/lib/messages/inject/inject.js +3 -3
  37. package/dist/lib/messages/inject/inject.js.map +1 -1
  38. package/dist/lib/messages/inject/subagent-results.d.ts +1 -1
  39. package/dist/lib/messages/inject/subagent-results.js +1 -1
  40. package/dist/lib/messages/inject/utils.d.ts +3 -1
  41. package/dist/lib/messages/inject/utils.d.ts.map +1 -1
  42. package/dist/lib/messages/inject/utils.js +8 -14
  43. package/dist/lib/messages/inject/utils.js.map +1 -1
  44. package/dist/lib/messages/reasoning-strip.d.ts +8 -0
  45. package/dist/lib/messages/reasoning-strip.d.ts.map +1 -0
  46. package/dist/lib/messages/reasoning-strip.js +33 -0
  47. package/dist/lib/messages/reasoning-strip.js.map +1 -0
  48. package/dist/lib/messages/sync.d.ts.map +1 -1
  49. package/dist/lib/messages/sync.js +8 -0
  50. package/dist/lib/messages/sync.js.map +1 -1
  51. package/dist/lib/prompts/context-limit-nudge.d.ts +2 -0
  52. package/dist/lib/prompts/context-limit-nudge.d.ts.map +1 -0
  53. package/dist/lib/prompts/context-limit-nudge.js +25 -0
  54. package/dist/lib/prompts/context-limit-nudge.js.map +1 -0
  55. package/dist/lib/prompts/index.d.ts +2 -1
  56. package/dist/lib/prompts/index.d.ts.map +1 -1
  57. package/dist/lib/prompts/index.js +24 -12
  58. package/dist/lib/prompts/index.js.map +1 -1
  59. package/dist/lib/prompts/internal-overlays.d.ts +3 -0
  60. package/dist/lib/prompts/internal-overlays.d.ts.map +1 -0
  61. package/dist/lib/prompts/internal-overlays.js +17 -0
  62. package/dist/lib/prompts/internal-overlays.js.map +1 -0
  63. package/dist/lib/prompts/store.d.ts +25 -0
  64. package/dist/lib/prompts/store.d.ts.map +1 -0
  65. package/dist/lib/prompts/store.js +377 -0
  66. package/dist/lib/prompts/store.js.map +1 -0
  67. package/dist/lib/prompts/{_codegen/system.generated.d.ts → system.d.ts} +2 -2
  68. package/dist/lib/prompts/system.d.ts.map +1 -0
  69. package/dist/lib/prompts/{_codegen/system.generated.js → system.js} +1 -20
  70. package/dist/lib/prompts/system.js.map +1 -0
  71. package/dist/lib/state/types.d.ts +2 -0
  72. package/dist/lib/state/types.d.ts.map +1 -1
  73. package/dist/lib/state/utils.d.ts.map +1 -1
  74. package/dist/lib/state/utils.js +5 -0
  75. package/dist/lib/state/utils.js.map +1 -1
  76. package/dist/lib/tools/compress.d.ts.map +1 -1
  77. package/dist/lib/tools/compress.js +10 -7
  78. package/dist/lib/tools/compress.js.map +1 -1
  79. package/dist/lib/tools/types.d.ts +2 -0
  80. package/dist/lib/tools/types.d.ts.map +1 -1
  81. package/dist/lib/tools/{compress-utils.d.ts → utils.d.ts} +5 -2
  82. package/dist/lib/tools/utils.d.ts.map +1 -0
  83. package/dist/lib/tools/{compress-utils.js → utils.js} +61 -6
  84. package/dist/lib/tools/utils.js.map +1 -0
  85. package/dist/lib/ui/notification.d.ts +1 -1
  86. package/dist/lib/ui/notification.d.ts.map +1 -1
  87. package/dist/lib/ui/notification.js +19 -7
  88. package/dist/lib/ui/notification.js.map +1 -1
  89. package/dist/lib/ui/utils.d.ts +1 -1
  90. package/dist/lib/ui/utils.d.ts.map +1 -1
  91. package/dist/lib/ui/utils.js +17 -7
  92. package/dist/lib/ui/utils.js.map +1 -1
  93. package/package.json +2 -4
  94. package/dist/lib/prompts/_codegen/system.generated.d.ts.map +0 -1
  95. package/dist/lib/prompts/_codegen/system.generated.js.map +0 -1
  96. package/dist/lib/prompts/nudge.d.ts +0 -2
  97. package/dist/lib/prompts/nudge.d.ts.map +0 -1
  98. package/dist/lib/prompts/nudge.js +0 -25
  99. package/dist/lib/prompts/nudge.js.map +0 -1
  100. package/dist/lib/tools/compress-utils.d.ts.map +0 -1
  101. package/dist/lib/tools/compress-utils.js.map +0 -1
package/README.md CHANGED
@@ -14,15 +14,15 @@ Add to your OpenCode config:
14
14
  ```jsonc
15
15
  // opencode.jsonc
16
16
  {
17
- "plugin": ["@tarquinen/opencode-dcp@latest"],
17
+ "plugin": ["@tarquinen/opencode-dcp@beta"],
18
18
  }
19
19
  ```
20
20
 
21
- Using `@latest` ensures you always get the newest version automatically when OpenCode starts.
21
+ Using `@beta` ensures you always get the newest version automatically when OpenCode starts.
22
22
 
23
23
  Restart OpenCode. The plugin will automatically start optimizing your sessions.
24
24
 
25
- ## Beta Notice (v2.2.6-beta0)
25
+ ## Beta Notice (v2.2.8-beta0)
26
26
 
27
27
  - Strategy shift to a single user-facing context tool: `compress`.
28
28
  - Context management is now less surgical and more focused on preserving high-signal work grouped by task.
@@ -35,9 +35,9 @@ For model-facing behavior (prompts and tool calls), this capability is always ad
35
35
 
36
36
  ### Tool
37
37
 
38
- **Compress** — Exposes a single `compress` tool with one method: select a conversation range using injected `startId` and `endId` (`mNNNN` or `bN`), then replace it with a technical summary.
38
+ **Compress** — Exposes a `compress` tool that will select a conversation range and replace it with a technical summary.
39
39
 
40
- The model can use that same method at different scales: tiny ranges for noise cleanup, focused ranges for preserving key findings, and full chapters for completed work.
40
+ The model can use `compress` at different scales: tiny ranges for noise cleanup, focused ranges for preserving key findings, and full chapters for completed work. The model will choose the best moment to compress based on session context size and opportunity.
41
41
 
42
42
  ### Strategies
43
43
 
@@ -55,17 +55,13 @@ LLM providers like Anthropic and OpenAI cache prompts based on exact prefix matc
55
55
 
56
56
  **Trade-off:** You lose some cache read benefits but gain larger token savings from reduced context size and performance improvements through reduced context poisoning. In most cases, the token savings outweigh the cache miss cost—especially in long sessions where context bloat becomes significant.
57
57
 
58
- > **Note:** In testing, cache hit rates were approximately 80% with DCP enabled vs 85% without for most providers.
59
-
60
- **Best use case:** Providers that count usage in requests, such as Github Copilot and Google Antigravity, have no negative price impact.
58
+ > **Note:** In testing, cache hit rates were approximately 85% with DCP enabled vs 90% without for most providers.
61
59
 
62
60
  **Best use cases:**
63
61
 
64
- - **Request-based billing** — Providers that count usage in requests, such as Github Copilot and Google Antigravity, have no negative price impact.
62
+ - **Request-based billing** — Providers that count usage in requests, such as Github Copilot have no negative price impact.
65
63
  - **Uniform token pricing** — Providers that bill cached tokens at the same rate as regular input tokens, such as Cerebras, see pure savings with no cache-miss penalty.
66
64
 
67
- **Claude Subscriptions:** Anthropic subscription users (who receive "free" caching) may experience faster limit depletion than hit-rate ratios suggest due to the higher relative cost of cache misses. See [Claude Cache Limits](https://she-llac.com/claude-limits) for details.
68
-
69
65
  ## Configuration
70
66
 
71
67
  DCP uses its own config file:
@@ -114,6 +110,9 @@ DCP uses its own config file:
114
110
  "experimental": {
115
111
  // Allow DCP processing in subagent sessions
116
112
  "allowSubAgents": false,
113
+ // Enable user-editable prompt overrides under dcp-prompts directories
114
+ // When false (default), prompt override files/directories are ignored
115
+ "customPrompts": false,
117
116
  },
118
117
  // Protect file operations from pruning via glob patterns
119
118
  // Patterns match tool parameters.filePath (e.g. read/write/edit)
@@ -194,15 +193,39 @@ DCP provides a `/dcp` slash command:
194
193
  - `/dcp manual [on|off]` — Toggle manual mode or set explicit state. When on, the AI will not autonomously use context management tools.
195
194
 
196
195
  - `/dcp compress [focus]` — Trigger a single compress tool execution. Optional focus text directs what range to compress.
196
+ - `/dcp decompress <n>` — Restore a specific active compression by ID (for example `/dcp decompress 2`). Running without an argument shows available compression IDs, token sizes, and topics.
197
+ - `/dcp recompress <n>` — Re-apply a user-decompressed compression by ID (for example `/dcp recompress 2`). Running without an argument shows recompressible IDs, token sizes, and topics.
198
+
199
+ ### Prompt Overrides
200
+
201
+ DCP exposes six editable prompts:
202
+
203
+ - `system`
204
+ - `compress`
205
+ - `context-limit-nudge`
206
+ - `user-turn-nudge`
207
+ - `assistant-turn-nudge`
208
+ - `iteration-nudge`
209
+
210
+ This feature is disabled by default. Set `experimental.customPrompts` to `true` in your DCP config to activate it.
211
+
212
+ When enabled, managed defaults are written to `~/.config/opencode/dcp-prompts/defaults/` as plain-text prompt files. A single `README.md` in that directory explains each prompt and how to create overrides.
213
+
214
+ To customize behavior, add a file with the same name under an overrides directory and edit it as plain text.
215
+
216
+ To reset an override, delete the matching file from your overrides directory.
217
+
218
+ > [!NOTE]
219
+ > `compress` prompt changes apply after plugin restart because tool descriptions are registered at startup.
197
220
 
198
221
  ### Protected Tools
199
222
 
200
223
  By default, these tools are always protected from pruning:
201
- `task`, `todowrite`, `todoread`, `compress`, `batch`, `plan_enter`, `plan_exit`
224
+ `task`, `skill`, `todowrite`, `todoread`, `compress`, `batch`, `plan_enter`, `plan_exit`
202
225
 
203
226
  The `protectedTools` arrays in `commands` and `strategies` add to this default list.
204
227
 
205
- For the `compress` tool, `compress.protectedTools` ensures specific tool outputs are appended to the compressed summary. It defaults to an empty array `[]` but always inherently protects `task`, `todowrite`, and `todoread`.
228
+ For the `compress` tool, `compress.protectedTools` ensures specific tool outputs are appended to the compressed summary. It defaults to an empty array `[]` but always inherently protects `task`, `skill`, `todowrite`, and `todoread`.
206
229
 
207
230
  ### Config Precedence
208
231
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAajD,QAAA,MAAM,MAAM,EAAE,MA4FK,CAAA;AAEnB,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAcjD,QAAA,MAAM,MAAM,EAAE,MAoGK,CAAA;AAEnB,eAAe,MAAM,CAAA"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import { getConfig } from "./lib/config";
2
2
  import { Logger } from "./lib/logger";
3
3
  import { createSessionState } from "./lib/state";
4
4
  import { createCompressTool } from "./lib/tools";
5
+ import { PromptStore } from "./lib/prompts/store";
5
6
  import { createChatMessageTransformHandler, createCommandExecuteHandler, createSystemPromptHandler, createTextCompleteHandler, } from "./lib/hooks";
6
7
  import { configureClientAuth, isSecureMode } from "./lib/auth";
7
8
  const plugin = (async (ctx) => {
@@ -11,6 +12,7 @@ const plugin = (async (ctx) => {
11
12
  }
12
13
  const logger = new Logger(config.debug);
13
14
  const state = createSessionState();
15
+ const prompts = new PromptStore(logger, ctx.directory, config.experimental.customPrompts);
14
16
  if (isSecureMode()) {
15
17
  configureClientAuth(ctx.client);
16
18
  // logger.info("Secure mode detected, configured client authentication")
@@ -19,8 +21,8 @@ const plugin = (async (ctx) => {
19
21
  strategies: config.strategies,
20
22
  });
21
23
  return {
22
- "experimental.chat.system.transform": createSystemPromptHandler(state, logger, config),
23
- "experimental.chat.messages.transform": createChatMessageTransformHandler(ctx.client, state, logger, config),
24
+ "experimental.chat.system.transform": createSystemPromptHandler(state, logger, config, prompts),
25
+ "experimental.chat.messages.transform": createChatMessageTransformHandler(ctx.client, state, logger, config, prompts),
24
26
  "chat.message": async (input, _output) => {
25
27
  // Cache variant from real user messages (not synthetic)
26
28
  // This avoids scanning all messages to find variant
@@ -37,6 +39,7 @@ const plugin = (async (ctx) => {
37
39
  logger,
38
40
  config,
39
41
  workingDirectory: ctx.directory,
42
+ prompts,
40
43
  }),
41
44
  }),
42
45
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Logger } from "../logger";
2
+ import type { SessionState, WithParts } from "../state";
3
+ export interface DecompressCommandContext {
4
+ client: any;
5
+ state: SessionState;
6
+ logger: Logger;
7
+ sessionId: string;
8
+ messages: WithParts[];
9
+ args: string[];
10
+ }
11
+ export declare function handleDecompressCommand(ctx: DecompressCommandContext): Promise<void>;
12
+ //# sourceMappingURL=decompress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../../../lib/commands/decompress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAwC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQ7F,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,IAAI,EAAE,MAAM,EAAE,CAAA;CACjB;AAsHD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqH1F"}
@@ -0,0 +1,159 @@
1
+ import { syncCompressionBlocks } from "../messages";
2
+ import { parseBlockRef } from "../message-ids";
3
+ import { getCurrentParams } from "../strategies/utils";
4
+ import { saveSessionState } from "../state/persistence";
5
+ import { sendIgnoredMessage } from "../ui/notification";
6
+ import { formatTokenCount } from "../ui/utils";
7
+ function parseBlockIdArg(arg) {
8
+ const normalized = arg.trim().toLowerCase();
9
+ const blockRef = parseBlockRef(normalized);
10
+ if (blockRef !== null) {
11
+ return blockRef;
12
+ }
13
+ if (!/^[1-9]\d*$/.test(normalized)) {
14
+ return null;
15
+ }
16
+ const parsed = Number.parseInt(normalized, 10);
17
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
18
+ }
19
+ function getAvailableBlocks(messagesState) {
20
+ return Array.from(messagesState.activeBlockIds)
21
+ .map((blockId) => messagesState.blocksById.get(blockId))
22
+ .filter((block) => !!block && block.active)
23
+ .sort((a, b) => a.blockId - b.blockId);
24
+ }
25
+ function findActiveParentBlockId(messagesState, block) {
26
+ const queue = [...block.parentBlockIds];
27
+ const visited = new Set();
28
+ while (queue.length > 0) {
29
+ const parentBlockId = queue.shift();
30
+ if (parentBlockId === undefined || visited.has(parentBlockId)) {
31
+ continue;
32
+ }
33
+ visited.add(parentBlockId);
34
+ const parent = messagesState.blocksById.get(parentBlockId);
35
+ if (!parent) {
36
+ continue;
37
+ }
38
+ if (parent.active) {
39
+ return parent.blockId;
40
+ }
41
+ for (const ancestorId of parent.parentBlockIds) {
42
+ if (!visited.has(ancestorId)) {
43
+ queue.push(ancestorId);
44
+ }
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ function snapshotActiveMessages(messagesState) {
50
+ const activeMessages = new Map();
51
+ for (const [messageId, entry] of messagesState.byMessageId) {
52
+ if (entry.activeBlockIds.length > 0) {
53
+ activeMessages.set(messageId, entry.tokenCount);
54
+ }
55
+ }
56
+ return activeMessages;
57
+ }
58
+ function formatDecompressMessage(targetBlockId, restoredMessageCount, restoredTokens, reactivatedBlockIds) {
59
+ const lines = [];
60
+ lines.push(`Restored compression ${targetBlockId}.`);
61
+ if (reactivatedBlockIds.length > 0) {
62
+ const refs = reactivatedBlockIds.map((id) => String(id)).join(", ");
63
+ lines.push(`Also restored nested compression(s): ${refs}.`);
64
+ }
65
+ if (restoredMessageCount > 0) {
66
+ lines.push(`Restored ${restoredMessageCount} message(s) (~${formatTokenCount(restoredTokens)}).`);
67
+ }
68
+ else {
69
+ lines.push("No messages were restored.");
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ function formatAvailableBlocksMessage(availableBlocks) {
74
+ const lines = [];
75
+ lines.push("Usage: /dcp decompress <n>");
76
+ lines.push("");
77
+ if (availableBlocks.length === 0) {
78
+ lines.push("No compressions are available to restore.");
79
+ return lines.join("\n");
80
+ }
81
+ lines.push("Available compressions:");
82
+ const entries = availableBlocks.map((block) => {
83
+ const topic = block.topic.replace(/\s+/g, " ").trim() || "(no topic)";
84
+ const label = `${block.blockId} (${formatTokenCount(block.compressedTokens)})`;
85
+ return { label, topic };
86
+ });
87
+ const labelWidth = Math.max(...entries.map((entry) => entry.label.length)) + 4;
88
+ for (const entry of entries) {
89
+ lines.push(` ${entry.label.padEnd(labelWidth)}${entry.topic}`);
90
+ }
91
+ return lines.join("\n");
92
+ }
93
+ export async function handleDecompressCommand(ctx) {
94
+ const { client, state, logger, sessionId, messages, args } = ctx;
95
+ const params = getCurrentParams(state, messages, logger);
96
+ const targetArg = args[0];
97
+ if (args.length > 1) {
98
+ await sendIgnoredMessage(client, sessionId, "Invalid arguments. Usage: /dcp decompress <n>", params, logger);
99
+ return;
100
+ }
101
+ syncCompressionBlocks(state, logger, messages);
102
+ const messagesState = state.prune.messages;
103
+ if (!targetArg) {
104
+ const availableBlocks = getAvailableBlocks(messagesState);
105
+ const message = formatAvailableBlocksMessage(availableBlocks);
106
+ await sendIgnoredMessage(client, sessionId, message, params, logger);
107
+ return;
108
+ }
109
+ const targetBlockId = parseBlockIdArg(targetArg);
110
+ if (targetBlockId === null) {
111
+ await sendIgnoredMessage(client, sessionId, `Please enter a compression number. Example: /dcp decompress 2`, params, logger);
112
+ return;
113
+ }
114
+ const targetBlock = messagesState.blocksById.get(targetBlockId);
115
+ if (!targetBlock) {
116
+ await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} does not exist.`, params, logger);
117
+ return;
118
+ }
119
+ if (!targetBlock.active) {
120
+ const activeAncestorBlockId = findActiveParentBlockId(messagesState, targetBlock);
121
+ if (activeAncestorBlockId !== null) {
122
+ await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} is inside compression ${activeAncestorBlockId}. Restore compression ${activeAncestorBlockId} first.`, params, logger);
123
+ return;
124
+ }
125
+ await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} is not active.`, params, logger);
126
+ return;
127
+ }
128
+ const activeMessagesBefore = snapshotActiveMessages(messagesState);
129
+ const activeBlockIdsBefore = new Set(messagesState.activeBlockIds);
130
+ targetBlock.active = false;
131
+ targetBlock.deactivatedByUser = true;
132
+ targetBlock.deactivatedAt = Date.now();
133
+ targetBlock.deactivatedByBlockId = undefined;
134
+ syncCompressionBlocks(state, logger, messages);
135
+ let restoredMessageCount = 0;
136
+ let restoredTokens = 0;
137
+ for (const [messageId, tokenCount] of activeMessagesBefore) {
138
+ const entry = messagesState.byMessageId.get(messageId);
139
+ const isActiveNow = entry ? entry.activeBlockIds.length > 0 : false;
140
+ if (!isActiveNow) {
141
+ restoredMessageCount++;
142
+ restoredTokens += tokenCount;
143
+ }
144
+ }
145
+ state.stats.totalPruneTokens = Math.max(0, state.stats.totalPruneTokens - restoredTokens);
146
+ const reactivatedBlockIds = Array.from(messagesState.activeBlockIds)
147
+ .filter((blockId) => !activeBlockIdsBefore.has(blockId))
148
+ .sort((a, b) => a - b);
149
+ await saveSessionState(state, logger);
150
+ const message = formatDecompressMessage(targetBlockId, restoredMessageCount, restoredTokens, reactivatedBlockIds);
151
+ await sendIgnoredMessage(client, sessionId, message, params, logger);
152
+ logger.info("Decompress command completed", {
153
+ targetBlockId,
154
+ restoredMessageCount,
155
+ restoredTokens,
156
+ reactivatedBlockIds,
157
+ });
158
+ }
159
+ //# sourceMappingURL=decompress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../../../lib/commands/decompress.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../lib/commands/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIvD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AA0CD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9E"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../lib/commands/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIvD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AA8CD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9E"}
@@ -12,11 +12,15 @@ const BASE_COMMANDS = [
12
12
  ];
13
13
  const TOOL_COMMANDS = {
14
14
  compress: ["/dcp compress [focus]", "Trigger manual compress tool execution"],
15
+ decompress: ["/dcp decompress <n>", "Restore selected compression"],
16
+ recompress: ["/dcp recompress <n>", "Re-apply a user-decompressed compression"],
15
17
  };
16
18
  function getVisibleCommands(config) {
17
19
  const commands = [...BASE_COMMANDS];
18
20
  if (config.compress.permission !== "deny") {
19
21
  commands.push(TOOL_COMMANDS.compress);
22
+ commands.push(TOOL_COMMANDS.decompress);
23
+ commands.push(TOOL_COMMANDS.recompress);
20
24
  }
21
25
  return commands;
22
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../lib/commands/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAWtD,MAAM,aAAa,GAAuB;IACtC,CAAC,cAAc,EAAE,gDAAgD,CAAC;IAClE,CAAC,YAAY,EAAE,6BAA6B,CAAC;IAC7C,CAAC,gBAAgB,EAAE,sDAAsD,CAAC;IAC1E,CAAC,sBAAsB,EAAE,0CAA0C,CAAC;CACvE,CAAA;AAED,MAAM,aAAa,GAAqC;IACpD,QAAQ,EAAE,CAAC,uBAAuB,EAAE,wCAAwC,CAAC;CAChF,CAAA;AAED,SAAS,kBAAkB,CAAC,MAAoB;IAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,CAAA;IAEnC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAmB,EAAE,MAAoB;IAChE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAA;IACrE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IACzF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAuB;IAC3D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;IAE1D,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;IACtB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAEpE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;AACxC,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../lib/commands/help.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../../lib/commands/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AA2B7C,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,wBAAsB,yBAAyB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAsB,0BAA0B,CAC5C,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB"}
1
+ {"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../../lib/commands/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AA6B7C,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;CACxB;AAED,wBAAsB,yBAAyB,CAC3C,GAAG,EAAE,oBAAoB,EACzB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAsB,0BAA0B,CAC5C,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { sendIgnoredMessage } from "../ui/notification";
10
10
  import { getCurrentParams } from "../strategies/utils";
11
+ import { buildCompressedBlockGuidance } from "../messages/inject/utils";
11
12
  const MANUAL_MODE_ON = "Manual mode is now ON. Use /dcp compress to trigger context tools manually.";
12
13
  const MANUAL_MODE_OFF = "Manual mode is now OFF.";
13
14
  const COMPRESS_TRIGGER_PROMPT = [
@@ -17,9 +18,10 @@ const COMPRESS_TRIGGER_PROMPT = [
17
18
  "Choose safe boundaries and preserve all critical implementation details.",
18
19
  "Return after compress with a brief explanation of what range was compressed.",
19
20
  ].join("\n\n");
20
- function getTriggerPrompt(tool, userFocus) {
21
+ function getTriggerPrompt(tool, state, userFocus) {
21
22
  const base = COMPRESS_TRIGGER_PROMPT;
22
- const sections = [base];
23
+ const compressedBlockGuidance = buildCompressedBlockGuidance(state);
24
+ const sections = [base, compressedBlockGuidance];
23
25
  if (userFocus && userFocus.trim().length > 0) {
24
26
  sections.push(`Additional user focus:\n${userFocus.trim()}`);
25
27
  }
@@ -41,6 +43,6 @@ export async function handleManualToggleCommand(ctx, modeArg) {
41
43
  logger.info("Manual mode toggled", { manualMode: state.manualMode });
42
44
  }
43
45
  export async function handleManualTriggerCommand(ctx, tool, userFocus) {
44
- return getTriggerPrompt(tool, userFocus);
46
+ return getTriggerPrompt(tool, ctx.state, userFocus);
45
47
  }
46
48
  //# sourceMappingURL=manual.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../lib/commands/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,cAAc,GAAG,6EAA6E,CAAA;AAEpG,MAAM,eAAe,GAAG,yBAAyB,CAAA;AAEjD,MAAM,uBAAuB,GAAG;IAC5B,+BAA+B;IAC/B,mEAAmE;IACnE,gIAAgI;IAChI,0EAA0E;IAC1E,8EAA8E;CACjF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEd,SAAS,gBAAgB,CAAC,IAAgB,EAAE,SAAkB;IAC1D,MAAM,IAAI,GAAG,uBAAuB,CAAA;IAEpC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,2BAA2B,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,GAAyB,EACzB,OAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;IAE1D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAA;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;IAC5B,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,CAAA;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,kBAAkB,CACpB,MAAM,EACN,SAAS,EACT,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EACnD,MAAM,EACN,MAAM,CACT,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC5C,GAAyB,EACzB,IAAgB,EAChB,SAAkB;IAElB,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../lib/commands/manual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AAEvE,MAAM,cAAc,GAAG,6EAA6E,CAAA;AAEpG,MAAM,eAAe,GAAG,yBAAyB,CAAA;AAEjD,MAAM,uBAAuB,GAAG;IAC5B,+BAA+B;IAC/B,mEAAmE;IACnE,gIAAgI;IAChI,0EAA0E;IAC1E,8EAA8E;CACjF,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEd,SAAS,gBAAgB,CAAC,IAAgB,EAAE,KAAmB,EAAE,SAAkB;IAC/E,MAAM,IAAI,GAAG,uBAAuB,CAAA;IACpC,MAAM,uBAAuB,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAA;IAEnE,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IAChD,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,2BAA2B,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,GAAyB,EACzB,OAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;IAE1D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAA;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;IAC5B,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,CAAA;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,kBAAkB,CACpB,MAAM,EACN,SAAS,EACT,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EACnD,MAAM,EACN,MAAM,CACT,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC5C,GAAyB,EACzB,IAAgB,EAChB,SAAkB;IAElB,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Logger } from "../logger";
2
+ import type { SessionState, WithParts } from "../state";
3
+ export interface RecompressCommandContext {
4
+ client: any;
5
+ state: SessionState;
6
+ logger: Logger;
7
+ sessionId: string;
8
+ messages: WithParts[];
9
+ args: string[];
10
+ }
11
+ export declare function handleRecompressCommand(ctx: RecompressCommandContext): Promise<void>;
12
+ //# sourceMappingURL=recompress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recompress.d.ts","sourceRoot":"","sources":["../../../lib/commands/recompress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAwC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAQ7F,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,IAAI,EAAE,MAAM,EAAE,CAAA;CACjB;AA4FD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH1F"}
@@ -0,0 +1,137 @@
1
+ import { syncCompressionBlocks } from "../messages";
2
+ import { parseBlockRef } from "../message-ids";
3
+ import { getCurrentParams } from "../strategies/utils";
4
+ import { saveSessionState } from "../state/persistence";
5
+ import { sendIgnoredMessage } from "../ui/notification";
6
+ import { formatTokenCount } from "../ui/utils";
7
+ function parseBlockIdArg(arg) {
8
+ const normalized = arg.trim().toLowerCase();
9
+ const blockRef = parseBlockRef(normalized);
10
+ if (blockRef !== null) {
11
+ return blockRef;
12
+ }
13
+ if (!/^[1-9]\d*$/.test(normalized)) {
14
+ return null;
15
+ }
16
+ const parsed = Number.parseInt(normalized, 10);
17
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
18
+ }
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
+ function snapshotActiveMessages(messagesState) {
27
+ const activeMessages = new Set();
28
+ for (const [messageId, entry] of messagesState.byMessageId) {
29
+ if (entry.activeBlockIds.length > 0) {
30
+ activeMessages.add(messageId);
31
+ }
32
+ }
33
+ return activeMessages;
34
+ }
35
+ function formatRecompressMessage(targetBlockId, recompressedMessageCount, recompressedTokens, deactivatedBlockIds) {
36
+ const lines = [];
37
+ lines.push(`Re-applied compression ${targetBlockId}.`);
38
+ if (deactivatedBlockIds.length > 0) {
39
+ const refs = deactivatedBlockIds.map((id) => String(id)).join(", ");
40
+ lines.push(`Also re-compressed nested compression(s): ${refs}.`);
41
+ }
42
+ if (recompressedMessageCount > 0) {
43
+ lines.push(`Re-compressed ${recompressedMessageCount} message(s) (~${formatTokenCount(recompressedTokens)}).`);
44
+ }
45
+ else {
46
+ lines.push("No messages were re-compressed.");
47
+ }
48
+ return lines.join("\n");
49
+ }
50
+ function formatAvailableBlocksMessage(availableBlocks) {
51
+ const lines = [];
52
+ lines.push("Usage: /dcp recompress <n>");
53
+ lines.push("");
54
+ if (availableBlocks.length === 0) {
55
+ lines.push("No user-decompressed blocks are available to re-compress.");
56
+ return lines.join("\n");
57
+ }
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 };
63
+ });
64
+ const labelWidth = Math.max(...entries.map((entry) => entry.label.length)) + 4;
65
+ for (const entry of entries) {
66
+ lines.push(` ${entry.label.padEnd(labelWidth)}${entry.topic}`);
67
+ }
68
+ return lines.join("\n");
69
+ }
70
+ export async function handleRecompressCommand(ctx) {
71
+ const { client, state, logger, sessionId, messages, args } = ctx;
72
+ const params = getCurrentParams(state, messages, logger);
73
+ const targetArg = args[0];
74
+ if (args.length > 1) {
75
+ await sendIgnoredMessage(client, sessionId, "Invalid arguments. Usage: /dcp recompress <n>", params, logger);
76
+ return;
77
+ }
78
+ syncCompressionBlocks(state, logger, messages);
79
+ const messagesState = state.prune.messages;
80
+ const availableMessageIds = new Set(messages.map((msg) => msg.info.id));
81
+ if (!targetArg) {
82
+ const availableBlocks = getRecompressibleBlocks(messagesState, availableMessageIds);
83
+ const message = formatAvailableBlocksMessage(availableBlocks);
84
+ await sendIgnoredMessage(client, sessionId, message, params, logger);
85
+ return;
86
+ }
87
+ const targetBlockId = parseBlockIdArg(targetArg);
88
+ if (targetBlockId === null) {
89
+ await sendIgnoredMessage(client, sessionId, `Please enter a compression number. Example: /dcp recompress 2`, params, logger);
90
+ return;
91
+ }
92
+ const targetBlock = messagesState.blocksById.get(targetBlockId);
93
+ if (!targetBlock) {
94
+ await sendIgnoredMessage(client, sessionId, `Compression ${targetBlockId} does not exist.`, params, logger);
95
+ return;
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);
99
+ return;
100
+ }
101
+ if (!targetBlock.deactivatedByUser) {
102
+ const message = targetBlock.active
103
+ ? `Compression ${targetBlockId} is already active.`
104
+ : `Compression ${targetBlockId} is not user-decompressed.`;
105
+ await sendIgnoredMessage(client, sessionId, message, params, logger);
106
+ return;
107
+ }
108
+ const activeMessagesBefore = snapshotActiveMessages(messagesState);
109
+ const activeBlockIdsBefore = new Set(messagesState.activeBlockIds);
110
+ targetBlock.deactivatedByUser = false;
111
+ targetBlock.deactivatedAt = undefined;
112
+ targetBlock.deactivatedByBlockId = undefined;
113
+ syncCompressionBlocks(state, logger, messages);
114
+ let recompressedMessageCount = 0;
115
+ let recompressedTokens = 0;
116
+ for (const [messageId, entry] of messagesState.byMessageId) {
117
+ const isActiveNow = entry.activeBlockIds.length > 0;
118
+ if (isActiveNow && !activeMessagesBefore.has(messageId)) {
119
+ recompressedMessageCount++;
120
+ recompressedTokens += entry.tokenCount;
121
+ }
122
+ }
123
+ state.stats.totalPruneTokens += recompressedTokens;
124
+ const deactivatedBlockIds = Array.from(activeBlockIdsBefore)
125
+ .filter((blockId) => !messagesState.activeBlockIds.has(blockId))
126
+ .sort((a, b) => a - b);
127
+ await saveSessionState(state, logger);
128
+ const message = formatRecompressMessage(targetBlockId, recompressedMessageCount, recompressedTokens, deactivatedBlockIds);
129
+ await sendIgnoredMessage(client, sessionId, message, params, logger);
130
+ logger.info("Recompress command completed", {
131
+ targetBlockId,
132
+ recompressedMessageCount,
133
+ recompressedTokens,
134
+ deactivatedBlockIds,
135
+ });
136
+ }
137
+ //# sourceMappingURL=recompress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recompress.js","sourceRoot":"","sources":["../../../lib/commands/recompress.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ export interface TurnProtection {
38
38
  }
39
39
  export interface ExperimentalConfig {
40
40
  allowSubAgents: boolean;
41
+ customPrompts: boolean;
41
42
  }
42
43
  export interface PluginConfig {
43
44
  enabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,KAAK,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA;IACtC,eAAe,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAA;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAA;IACtD,cAAc,EAAE,MAAM,CAAA;IACtB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,iBAAiB,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;IACjD,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,YAAY,EAAE,kBAAkB,CAAA;IAChC,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,EAAE;QACR,aAAa,EAAE,aAAa,CAAA;QAC5B,eAAe,EAAE,eAAe,CAAA;QAChC,WAAW,EAAE,WAAW,CAAA;KAC3B,CAAA;CACJ;AAgBD,eAAO,MAAM,iBAAiB,aAwC5B,CAAA;AAoBF,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAG9E;AAED,UAAU,eAAe;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,eAAe,EAAE,CA6YlF;AAmWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAsCxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,KAAK,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA;IACtC,eAAe,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAA;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAA;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAA;IACtD,cAAc,EAAE,MAAM,CAAA;IACtB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IAC/B,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,iBAAiB,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;IACjD,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAA;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,gBAAgB,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,YAAY,EAAE,kBAAkB,CAAA;IAChC,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,QAAQ,EAAE,YAAY,CAAA;IACtB,UAAU,EAAE;QACR,aAAa,EAAE,aAAa,CAAA;QAC5B,eAAe,EAAE,eAAe,CAAA;QAChC,WAAW,EAAE,WAAW,CAAA;KAC3B,CAAA;CACJ;AAiBD,eAAO,MAAM,iBAAiB,aAyC5B,CAAA;AAoBF,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAG9E;AAED,UAAU,eAAe;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,eAAe,EAAE,CAwZlF;AAqWD,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAsCxD"}