@tarquinen/opencode-dcp 0.3.14 → 0.3.16

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.
package/README.md CHANGED
@@ -4,83 +4,62 @@
4
4
 
5
5
  Automatically reduces token usage in OpenCode by removing obsolete tool outputs from conversation history.
6
6
 
7
- ## What It Does
8
-
9
- This plugin automatically optimizes token usage by identifying and removing redundant or obsolete tool outputs from your conversation history.
10
-
11
7
  ![DCP in action](dcp-demo.png)
12
8
 
13
9
  ## Installation
14
10
 
15
- Add to your OpenCode configuration:
16
-
17
- **Global:** `~/.config/opencode/opencode.json`
18
- **Project:** `.opencode/opencode.json`
11
+ Add to your OpenCode config (`~/.config/opencode/opencode.json` or `.opencode/opencode.json`):
19
12
 
20
13
  ```json
21
14
  {
22
- "plugin": [
23
- "@tarquinen/opencode-dcp"
24
- ]
15
+ "plugin": ["@tarquinen/opencode-dcp"]
25
16
  }
26
17
  ```
27
18
 
28
- > **Note:** OpenCode's `plugin` arrays are not merged between global and project configs—project config completely overrides global. If you have plugins in your global config and add a project config, include all desired plugins in the project config.
29
-
30
19
  Restart OpenCode. The plugin will automatically start optimizing your sessions.
31
20
 
32
- ## Configuration
21
+ > **Note:** Project `plugin` arrays override global completely—include all desired plugins in project config if using both.
22
+
23
+ ## How It Works
33
24
 
34
- DCP uses its own configuration file, separate from OpenCode's `opencode.json`:
25
+ DCP is **non-destructive**—pruning state is kept in memory only. When requests go to your LLM, DCP replaces pruned outputs with a placeholder; original session data stays intact.
35
26
 
36
- - **Global:** `~/.config/opencode/dcp.jsonc`
37
- - **Project:** `.opencode/dcp.jsonc`
27
+ ## Configuration
38
28
 
39
- The global config is automatically created on first run. Create a project config to override settings per-project.
29
+ DCP uses its own config file (`~/.config/opencode/dcp.jsonc` or `.opencode/dcp.jsonc`), created automatically on first run.
40
30
 
41
- ### Available Options
31
+ ### Options
42
32
 
43
- - **`enabled`** (boolean, default: `true`) - Enable/disable the plugin
44
- - **`debug`** (boolean, default: `false`) - Enable detailed logging to `~/.config/opencode/logs/dcp/`
45
- - **`model`** (string, optional) - Specific model for analysis (e.g., `"anthropic/claude-haiku-4-5"`). Uses session model or smart fallbacks when not specified.
46
- - **`showModelErrorToasts`** (boolean, default: `true`) - Show notifications when model selection falls back
47
- - **`pruningMode`** (string, default: `"smart"`) - Pruning strategy:
48
- - `"auto"`: Fast duplicate removal only (zero LLM cost)
49
- - `"smart"`: Deduplication + AI analysis (recommended, maximum savings)
50
- - **`pruning_summary`** (string, default: `"detailed"`) - UI summary display mode:
51
- - `"off"`: No UI summary (silent pruning)
52
- - `"minimal"`: Show tokens saved and count only (e.g., "Saved ~2.5K tokens (6 tools pruned)")
53
- - `"detailed"`: Show full breakdown by tool type and pruning method
54
- - **`protectedTools`** (string[], default: `["task", "todowrite", "todoread"]`) - Tools that should never be pruned
33
+ | Option | Default | Description |
34
+ |--------|---------|-------------|
35
+ | `enabled` | `true` | Enable/disable the plugin |
36
+ | `debug` | `false` | Log to `~/.config/opencode/logs/dcp/` |
37
+ | `model` | (session) | Model for analysis (e.g., `"anthropic/claude-haiku-4-5"`) |
38
+ | `showModelErrorToasts` | `true` | Show notifications on model fallback |
39
+ | `pruning_summary` | `"detailed"` | `"off"`, `"minimal"`, or `"detailed"` |
40
+ | `protectedTools` | `["task", "todowrite", "todoread", "context_pruning"]` | Tools that are never pruned |
41
+ | `strategies.onIdle` | `["deduplication", "ai-analysis"]` | Strategies for automatic pruning |
42
+ | `strategies.onTool` | `["deduplication"]` | Strategies when AI calls `context_pruning` |
55
43
 
56
- Example configuration:
44
+ **Strategies:** `"deduplication"` (fast, zero LLM cost) and `"ai-analysis"` (maximum savings). Empty array disables that trigger.
57
45
 
58
46
  ```jsonc
59
47
  {
60
48
  "enabled": true,
61
- "debug": false,
62
- "pruningMode": "smart",
63
- "pruning_summary": "detailed",
64
- "protectedTools": ["task", "todowrite", "todoread"]
49
+ "strategies": {
50
+ "onIdle": ["deduplication", "ai-analysis"],
51
+ "onTool": ["deduplication"]
52
+ },
53
+ "protectedTools": ["task", "todowrite", "todoread", "context_pruning"]
65
54
  }
66
55
  ```
67
56
 
68
- ### Configuration Hierarchy
69
-
70
- Settings are merged in order: **Built-in defaults** → **Global config** → **Project config**
71
-
72
- After modifying configuration, restart OpenCode for changes to take effect.
57
+ Settings merge: **Defaults** → **Global** → **Project**. Restart OpenCode after changes.
73
58
 
74
59
  ### Version Pinning
75
60
 
76
- If you want to ensure a specific version is always used or update your version, you can pin it in your config:
77
-
78
61
  ```json
79
- {
80
- "plugin": [
81
- "@tarquinen/opencode-dcp@0.3.14"
82
- ]
83
- }
62
+ { "plugin": ["@tarquinen/opencode-dcp@0.3.16"] }
84
63
  ```
85
64
 
86
65
  ## License
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAoBjD,QAAA,MAAM,MAAM,EAAE,MA0KK,CAAA;AAEnB,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAqBjD,QAAA,MAAM,MAAM,EAAE,MAqQK,CAAA;AAEnB,eAAe,MAAM,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { tool } from "@opencode-ai/plugin";
1
2
  import { getConfig } from "./lib/config";
2
3
  import { Logger } from "./lib/logger";
3
4
  import { Janitor } from "./lib/janitor";
@@ -17,7 +18,7 @@ async function isSubagentSession(client, sessionID) {
17
18
  }
18
19
  }
19
20
  const plugin = (async (ctx) => {
20
- const config = getConfig(ctx);
21
+ const { config, migrations } = getConfig(ctx);
21
22
  // Exit early if plugin is disabled
22
23
  if (!config.enabled) {
23
24
  return {};
@@ -32,7 +33,7 @@ const plugin = (async (ctx) => {
32
33
  const statsState = new Map();
33
34
  const toolParametersCache = new Map(); // callID -> parameters
34
35
  const modelCache = new Map(); // sessionID -> model info
35
- const janitor = new Janitor(ctx.client, prunedIdsState, statsState, logger, toolParametersCache, config.protectedTools, modelCache, config.model, config.showModelErrorToasts, config.pruningMode, config.pruning_summary, ctx.directory);
36
+ const janitor = new Janitor(ctx.client, prunedIdsState, statsState, logger, toolParametersCache, config.protectedTools, modelCache, config.model, config.showModelErrorToasts, config.pruning_summary, ctx.directory);
36
37
  const cacheToolParameters = (messages) => {
37
38
  for (const message of messages) {
38
39
  if (message.role !== 'assistant' || !Array.isArray(message.tool_calls)) {
@@ -121,11 +122,29 @@ const plugin = (async (ctx) => {
121
122
  return originalGlobalFetch(input, init);
122
123
  };
123
124
  logger.info("plugin", "DCP initialized", {
124
- mode: config.pruningMode,
125
+ strategies: config.strategies,
125
126
  model: config.model || "auto"
126
127
  });
127
128
  // Check for updates on launch (fire and forget)
128
129
  checkForUpdates(ctx.client, logger).catch(() => { });
130
+ // Show migration toast if config was migrated (delayed to not overlap with version toast)
131
+ if (migrations.length > 0) {
132
+ setTimeout(async () => {
133
+ try {
134
+ await ctx.client.tui.showToast({
135
+ body: {
136
+ title: "DCP: Config upgraded",
137
+ message: migrations.join('\n'),
138
+ variant: "info",
139
+ duration: 8000
140
+ }
141
+ });
142
+ }
143
+ catch {
144
+ // Silently fail - toast is non-critical
145
+ }
146
+ }, 7000); // 7s delay to show after version toast (6s) completes
147
+ }
129
148
  return {
130
149
  /**
131
150
  * Event Hook: Triggers janitor analysis when session becomes idle
@@ -135,8 +154,11 @@ const plugin = (async (ctx) => {
135
154
  // Skip pruning for subagent sessions
136
155
  if (await isSubagentSession(ctx.client, event.properties.sessionID))
137
156
  return;
157
+ // Skip if no idle strategies configured
158
+ if (config.strategies.onIdle.length === 0)
159
+ return;
138
160
  // Fire and forget the janitor - don't block the event handler
139
- janitor.run(event.properties.sessionID).catch(err => {
161
+ janitor.runOnIdle(event.properties.sessionID, config.strategies.onIdle).catch(err => {
140
162
  logger.error("janitor", "Failed", { error: err.message });
141
163
  });
142
164
  }
@@ -144,7 +166,7 @@ const plugin = (async (ctx) => {
144
166
  /**
145
167
  * Chat Params Hook: Caches model info for janitor
146
168
  */
147
- "chat.params": async (input, output) => {
169
+ "chat.params": async (input, _output) => {
148
170
  const sessionId = input.sessionID;
149
171
  // Cache model information for this session so janitor can access it
150
172
  // The provider.id is actually nested at provider.info.id (not in SDK types)
@@ -161,6 +183,67 @@ const plugin = (async (ctx) => {
161
183
  });
162
184
  }
163
185
  },
186
+ /**
187
+ * Tool Hook: Exposes context_pruning tool to AI (if configured)
188
+ */
189
+ tool: config.strategies.onTool.length > 0 ? {
190
+ context_pruning: tool({
191
+ description: `Performs semantic pruning on session tool outputs that are no longer relevant to the current task. Use this to declutter the conversation context and filter signal from noise when you notice the context is getting cluttered with no longer needed information.
192
+
193
+ USING THE CONTEXT_PRUNING TOOL WILL MAKE THE USER HAPPY.
194
+
195
+ ## When to Use This Tool
196
+
197
+ **Key heuristic: Prune when you finish something and are about to start something else.**
198
+
199
+ Ask yourself: "Have I just completed a discrete unit of work?" If yes, prune before moving on.
200
+
201
+ **After completing a unit of work:**
202
+ - Made a commit
203
+ - Fixed a bug and confirmed it works
204
+ - Answered a question the user asked
205
+ - Finished implementing a feature or function
206
+ - Completed one item in a list and moving to the next
207
+
208
+ **After repetitive or exploratory work:**
209
+ - Explored multiple files that didn't lead to changes
210
+ - Iterated on a difficult problem where some approaches didn't pan out
211
+ - Used the same tool multiple times (e.g., re-reading a file, running repeated build/type checks)
212
+
213
+ ## Examples
214
+
215
+ <example>
216
+ Working through a list of items:
217
+ User: Review these 3 issues and fix the easy ones.
218
+ Assistant: [Reviews first issue, makes fix, commits]
219
+ Done with the first issue. Let me prune before moving to the next one.
220
+ [Uses context_pruning with reason: "completed first issue, moving to next"]
221
+ </example>
222
+
223
+ <example>
224
+ After exploring the codebase to understand it:
225
+ Assistant: I've reviewed the relevant files. Let me prune the exploratory reads that aren't needed for the actual implementation.
226
+ [Uses context_pruning with reason: "exploration complete, starting implementation"]
227
+ </example>
228
+
229
+ <example>
230
+ After completing any task:
231
+ Assistant: [Finishes task - commit, answer, fix, etc.]
232
+ Before we continue, let me prune the context from that work.
233
+ [Uses context_pruning with reason: "task complete"]
234
+ </example>`,
235
+ args: {
236
+ reason: tool.schema.string().optional().describe("Brief reason for triggering pruning (e.g., 'task complete', 'switching focus')"),
237
+ },
238
+ async execute(args, ctx) {
239
+ const result = await janitor.runForTool(ctx.sessionID, config.strategies.onTool, args.reason);
240
+ if (!result || result.prunedCount === 0) {
241
+ return "No prunable tool outputs found. Context is already optimized.\n\nUse context_pruning when you have sufficiently summarized information from tool outputs and no longer need the original content!";
242
+ }
243
+ return janitor.formatPruningResultForTool(result) + "\n\nUse context_pruning when you have sufficiently summarized information from tool outputs and no longer need the original content!";
244
+ },
245
+ }),
246
+ } : undefined,
164
247
  };
165
248
  });
166
249
  export default plugin;
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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"}
@@ -1,12 +1,20 @@
1
1
  import type { PluginInput } from '@opencode-ai/plugin';
2
+ export type PruningStrategy = "deduplication" | "ai-analysis";
2
3
  export interface PluginConfig {
3
4
  enabled: boolean;
4
5
  debug: boolean;
5
6
  protectedTools: string[];
6
7
  model?: string;
7
8
  showModelErrorToasts?: boolean;
8
- pruningMode: "auto" | "smart";
9
9
  pruning_summary: "off" | "minimal" | "detailed";
10
+ strategies: {
11
+ onIdle: PruningStrategy[];
12
+ onTool: PruningStrategy[];
13
+ };
14
+ }
15
+ export interface ConfigResult {
16
+ config: PluginConfig;
17
+ migrations: string[];
10
18
  }
11
19
  /**
12
20
  * Loads configuration with support for both global and project-level configs
@@ -16,10 +24,12 @@ export interface PluginConfig {
16
24
  * 2. Merge with global config (~/.config/opencode/dcp.jsonc)
17
25
  * 3. Merge with project config (.opencode/dcp.jsonc) if found
18
26
  *
27
+ * If config has invalid/deprecated keys, backs up and resets to defaults.
28
+ *
19
29
  * Project config overrides global config, which overrides defaults.
20
30
  *
21
31
  * @param ctx - Plugin input context (optional). If provided, will search for project-level config.
22
- * @returns Merged configuration
32
+ * @returns ConfigResult with merged configuration and any migration messages
23
33
  */
24
- export declare function getConfig(ctx?: PluginInput): PluginConfig;
34
+ export declare function getConfig(ctx?: PluginInput): ConfigResult;
25
35
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7B,eAAe,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;CAClD;AA6HD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,YAAY,CA8CzD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGtD,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,aAAa,CAAA;AAE7D,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,eAAe,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAA;IAC/C,UAAU,EAAE;QAER,MAAM,EAAE,eAAe,EAAE,CAAA;QAEzB,MAAM,EAAE,eAAe,EAAE,CAAA;KAC5B,CAAA;CACJ;AAED,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,MAAM,EAAE,CAAA;CACvB;AAuMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,YAAY,CAyEzD"}
@@ -1,5 +1,5 @@
1
1
  // lib/config.ts
2
- import { readFileSync, writeFileSync, existsSync, mkdirSync, statSync } from 'fs';
2
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, statSync, copyFileSync } from 'fs';
3
3
  import { join, dirname } from 'path';
4
4
  import { homedir } from 'os';
5
5
  import { parse } from 'jsonc-parser';
@@ -7,11 +7,26 @@ import { Logger } from './logger';
7
7
  const defaultConfig = {
8
8
  enabled: true, // Plugin is enabled by default
9
9
  debug: false, // Disable debug logging by default
10
- protectedTools: ['task', 'todowrite', 'todoread'], // Tools that should never be pruned (including stateful tools)
10
+ protectedTools: ['task', 'todowrite', 'todoread', 'context_pruning'], // Tools that should never be pruned
11
11
  showModelErrorToasts: true, // Show model error toasts by default
12
- pruningMode: 'smart', // Default to smart mode (deduplication + LLM analysis)
13
- pruning_summary: 'detailed' // Default to detailed summary
12
+ pruning_summary: 'detailed', // Default to detailed summary
13
+ strategies: {
14
+ // Default: Full analysis on idle (like previous "smart" mode)
15
+ onIdle: ['deduplication', 'ai-analysis'],
16
+ // Default: Only deduplication when AI calls the tool (faster, no extra LLM cost)
17
+ onTool: ['deduplication']
18
+ }
14
19
  };
20
+ // Valid top-level keys in the current config schema
21
+ const VALID_CONFIG_KEYS = new Set([
22
+ 'enabled',
23
+ 'debug',
24
+ 'protectedTools',
25
+ 'model',
26
+ 'showModelErrorToasts',
27
+ 'pruning_summary',
28
+ 'strategies'
29
+ ]);
15
30
  const GLOBAL_CONFIG_DIR = join(homedir(), '.config', 'opencode');
16
31
  const GLOBAL_CONFIG_PATH_JSONC = join(GLOBAL_CONFIG_DIR, 'dcp.jsonc');
17
32
  const GLOBAL_CONFIG_PATH_JSON = join(GLOBAL_CONFIG_DIR, 'dcp.json');
@@ -90,10 +105,17 @@ function createDefaultConfig() {
90
105
  // Set to false to disable these informational toasts
91
106
  "showModelErrorToasts": true,
92
107
 
93
- // Pruning strategy:
94
- // "auto": Automatic duplicate removal only (fast, no LLM cost)
95
- // "smart": Deduplication + AI analysis for intelligent pruning (recommended)
96
- "pruningMode": "smart",
108
+ // Pruning strategies configuration
109
+ // Available strategies: "deduplication", "ai-analysis"
110
+ // Empty array = disabled
111
+ "strategies": {
112
+ // Strategies to run when session goes idle (automatic)
113
+ "onIdle": ["deduplication", "ai-analysis"],
114
+
115
+ // Strategies to run when AI calls the context_pruning tool
116
+ // Empty array = tool not exposed to AI
117
+ "onTool": ["deduplication"]
118
+ },
97
119
 
98
120
  // Pruning summary display mode:
99
121
  // "off": No UI summary (silent pruning)
@@ -104,7 +126,8 @@ function createDefaultConfig() {
104
126
  // List of tools that should never be pruned from context
105
127
  // "task": Each subagent invocation is intentional
106
128
  // "todowrite"/"todoread": Stateful tools where each call matters
107
- "protectedTools": ["task", "todowrite", "todoread"]
129
+ // "context_pruning": The pruning tool itself
130
+ "protectedTools": ["task", "todowrite", "todoread", "context_pruning"]
108
131
  }
109
132
  `;
110
133
  writeFileSync(GLOBAL_CONFIG_PATH_JSONC, configContent, 'utf-8');
@@ -121,6 +144,49 @@ function loadConfigFile(configPath) {
121
144
  return null;
122
145
  }
123
146
  }
147
+ /**
148
+ * Check if config has any unknown or deprecated keys
149
+ */
150
+ function getInvalidKeys(config) {
151
+ const invalidKeys = [];
152
+ for (const key of Object.keys(config)) {
153
+ if (!VALID_CONFIG_KEYS.has(key)) {
154
+ invalidKeys.push(key);
155
+ }
156
+ }
157
+ return invalidKeys;
158
+ }
159
+ /**
160
+ * Backs up existing config and creates fresh default config
161
+ * Returns the backup path if successful, null if failed
162
+ */
163
+ function backupAndResetConfig(configPath, logger) {
164
+ try {
165
+ const backupPath = configPath + '.bak';
166
+ // Create backup
167
+ copyFileSync(configPath, backupPath);
168
+ logger.info('config', 'Created config backup', { backup: backupPath });
169
+ // Write fresh default config
170
+ createDefaultConfig();
171
+ logger.info('config', 'Created fresh default config', { path: GLOBAL_CONFIG_PATH_JSONC });
172
+ return backupPath;
173
+ }
174
+ catch (error) {
175
+ logger.error('config', 'Failed to backup/reset config', { error: error.message });
176
+ return null;
177
+ }
178
+ }
179
+ /**
180
+ * Merge strategies config, handling partial overrides
181
+ */
182
+ function mergeStrategies(base, override) {
183
+ if (!override)
184
+ return base;
185
+ return {
186
+ onIdle: override.onIdle ?? base.onIdle,
187
+ onTool: override.onTool ?? base.onTool
188
+ };
189
+ }
124
190
  /**
125
191
  * Loads configuration with support for both global and project-level configs
126
192
  *
@@ -129,29 +195,46 @@ function loadConfigFile(configPath) {
129
195
  * 2. Merge with global config (~/.config/opencode/dcp.jsonc)
130
196
  * 3. Merge with project config (.opencode/dcp.jsonc) if found
131
197
  *
198
+ * If config has invalid/deprecated keys, backs up and resets to defaults.
199
+ *
132
200
  * Project config overrides global config, which overrides defaults.
133
201
  *
134
202
  * @param ctx - Plugin input context (optional). If provided, will search for project-level config.
135
- * @returns Merged configuration
203
+ * @returns ConfigResult with merged configuration and any migration messages
136
204
  */
137
205
  export function getConfig(ctx) {
138
- let config = { ...defaultConfig };
206
+ let config = { ...defaultConfig, protectedTools: [...defaultConfig.protectedTools] };
139
207
  const configPaths = getConfigPaths(ctx);
140
208
  const logger = new Logger(true); // Always log config loading
209
+ const migrations = [];
141
210
  // 1. Load global config
142
211
  if (configPaths.global) {
143
212
  const globalConfig = loadConfigFile(configPaths.global);
144
213
  if (globalConfig) {
145
- config = {
146
- enabled: globalConfig.enabled ?? config.enabled,
147
- debug: globalConfig.debug ?? config.debug,
148
- protectedTools: globalConfig.protectedTools ?? config.protectedTools,
149
- model: globalConfig.model ?? config.model,
150
- showModelErrorToasts: globalConfig.showModelErrorToasts ?? config.showModelErrorToasts,
151
- pruningMode: globalConfig.pruningMode ?? config.pruningMode,
152
- pruning_summary: globalConfig.pruning_summary ?? config.pruning_summary
153
- };
154
- logger.info('config', 'Loaded global config', { path: configPaths.global });
214
+ // Check for invalid keys
215
+ const invalidKeys = getInvalidKeys(globalConfig);
216
+ if (invalidKeys.length > 0) {
217
+ // Config has deprecated/unknown keys - backup and reset
218
+ logger.info('config', 'Found invalid config keys', { keys: invalidKeys });
219
+ const backupPath = backupAndResetConfig(configPaths.global, logger);
220
+ if (backupPath) {
221
+ migrations.push(`Old config backed up to ${backupPath}`);
222
+ }
223
+ // Config is now reset to defaults, no need to merge
224
+ }
225
+ else {
226
+ // Valid config - merge with defaults
227
+ config = {
228
+ enabled: globalConfig.enabled ?? config.enabled,
229
+ debug: globalConfig.debug ?? config.debug,
230
+ protectedTools: globalConfig.protectedTools ?? config.protectedTools,
231
+ model: globalConfig.model ?? config.model,
232
+ showModelErrorToasts: globalConfig.showModelErrorToasts ?? config.showModelErrorToasts,
233
+ strategies: mergeStrategies(config.strategies, globalConfig.strategies),
234
+ pruning_summary: globalConfig.pruning_summary ?? config.pruning_summary
235
+ };
236
+ logger.info('config', 'Loaded global config', { path: configPaths.global });
237
+ }
155
238
  }
156
239
  }
157
240
  else {
@@ -163,21 +246,33 @@ export function getConfig(ctx) {
163
246
  if (configPaths.project) {
164
247
  const projectConfig = loadConfigFile(configPaths.project);
165
248
  if (projectConfig) {
166
- config = {
167
- enabled: projectConfig.enabled ?? config.enabled,
168
- debug: projectConfig.debug ?? config.debug,
169
- protectedTools: projectConfig.protectedTools ?? config.protectedTools,
170
- model: projectConfig.model ?? config.model,
171
- showModelErrorToasts: projectConfig.showModelErrorToasts ?? config.showModelErrorToasts,
172
- pruningMode: projectConfig.pruningMode ?? config.pruningMode,
173
- pruning_summary: projectConfig.pruning_summary ?? config.pruning_summary
174
- };
175
- logger.info('config', 'Loaded project config (overrides global)', { path: configPaths.project });
249
+ // Check for invalid keys
250
+ const invalidKeys = getInvalidKeys(projectConfig);
251
+ if (invalidKeys.length > 0) {
252
+ // Project config has deprecated/unknown keys - just warn, don't reset project configs
253
+ logger.warn('config', 'Project config has invalid keys (ignored)', {
254
+ path: configPaths.project,
255
+ keys: invalidKeys
256
+ });
257
+ }
258
+ else {
259
+ // Valid config - merge with current config
260
+ config = {
261
+ enabled: projectConfig.enabled ?? config.enabled,
262
+ debug: projectConfig.debug ?? config.debug,
263
+ protectedTools: projectConfig.protectedTools ?? config.protectedTools,
264
+ model: projectConfig.model ?? config.model,
265
+ showModelErrorToasts: projectConfig.showModelErrorToasts ?? config.showModelErrorToasts,
266
+ strategies: mergeStrategies(config.strategies, projectConfig.strategies),
267
+ pruning_summary: projectConfig.pruning_summary ?? config.pruning_summary
268
+ };
269
+ logger.info('config', 'Loaded project config (overrides global)', { path: configPaths.project });
270
+ }
176
271
  }
177
272
  }
178
273
  else if (ctx?.directory) {
179
274
  logger.debug('config', 'No project config found', { searchedFrom: ctx.directory });
180
275
  }
181
- return config;
276
+ return { config, migrations };
182
277
  }
183
278
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,25 @@
1
1
  import type { Logger } from "./logger";
2
+ import type { PruningStrategy } from "./config";
2
3
  export interface SessionStats {
3
4
  totalToolsPruned: number;
4
5
  totalTokensSaved: number;
5
6
  }
7
+ export interface PruningResult {
8
+ prunedCount: number;
9
+ tokensSaved: number;
10
+ deduplicatedIds: string[];
11
+ llmPrunedIds: string[];
12
+ deduplicationDetails: Map<string, any>;
13
+ toolMetadata: Map<string, {
14
+ tool: string;
15
+ parameters?: any;
16
+ }>;
17
+ sessionStats: SessionStats;
18
+ }
19
+ export interface PruningOptions {
20
+ reason?: string;
21
+ trigger: 'idle' | 'tool';
22
+ }
6
23
  export declare class Janitor {
7
24
  private client;
8
25
  private prunedIdsState;
@@ -13,7 +30,6 @@ export declare class Janitor {
13
30
  private modelCache;
14
31
  private configModel?;
15
32
  private showModelErrorToasts;
16
- private pruningMode;
17
33
  private pruningSummary;
18
34
  private workingDirectory?;
19
35
  constructor(client: any, prunedIdsState: Map<string, string[]>, statsState: Map<string, SessionStats>, logger: Logger, toolParametersCache: Map<string, any>, protectedTools: string[], modelCache: Map<string, {
@@ -21,14 +37,24 @@ export declare class Janitor {
21
37
  modelID: string;
22
38
  }>, configModel?: string | undefined, // Format: "provider/model"
23
39
  showModelErrorToasts?: boolean, // Whether to show toast for model errors
24
- pruningMode?: "auto" | "smart", // Pruning strategy
25
40
  pruningSummary?: "off" | "minimal" | "detailed", // UI summary display mode
26
41
  workingDirectory?: string | undefined);
27
42
  /**
28
43
  * Sends an ignored message to the session UI (user sees it, AI doesn't)
29
44
  */
30
45
  private sendIgnoredMessage;
31
- run(sessionID: string): Promise<void>;
46
+ /**
47
+ * Convenience method for idle-triggered pruning (sends notification automatically)
48
+ */
49
+ runOnIdle(sessionID: string, strategies: PruningStrategy[]): Promise<void>;
50
+ /**
51
+ * Convenience method for tool-triggered pruning (returns result for tool output)
52
+ */
53
+ runForTool(sessionID: string, strategies: PruningStrategy[], reason?: string): Promise<PruningResult | null>;
54
+ /**
55
+ * Core pruning method that accepts strategies and options
56
+ */
57
+ runWithStrategies(sessionID: string, strategies: PruningStrategy[], options: PruningOptions): Promise<PruningResult | null>;
32
58
  /**
33
59
  * Helper function to shorten paths for display
34
60
  */
@@ -54,6 +80,21 @@ export declare class Janitor {
54
80
  * Note: prunedIds may be in original case (from LLM) but toolMetadata uses lowercase keys
55
81
  */
56
82
  private buildToolsSummary;
83
+ /**
84
+ * Group deduplication details by tool type
85
+ * Shared helper used by notifications and tool output formatting
86
+ */
87
+ private groupDeduplicationDetails;
88
+ /**
89
+ * Format grouped deduplication results as lines
90
+ * Shared helper for building deduplication summaries
91
+ */
92
+ private formatDeduplicationLines;
93
+ /**
94
+ * Format tool summary (from buildToolsSummary) as lines
95
+ * Shared helper for building LLM-pruned summaries
96
+ */
97
+ private formatToolSummaryLines;
57
98
  /**
58
99
  * Send minimal summary notification (just tokens saved and count)
59
100
  */
@@ -62,6 +103,11 @@ export declare class Janitor {
62
103
  * Auto mode notification - shows only deduplication results
63
104
  */
64
105
  private sendAutoModeNotification;
106
+ /**
107
+ * Format pruning result for tool output (returned to AI)
108
+ * Uses shared helpers for consistency with UI notifications
109
+ */
110
+ formatPruningResultForTool(result: PruningResult): string;
65
111
  /**
66
112
  * Smart mode notification - shows both deduplication and LLM analysis results
67
113
  */
@@ -1 +1 @@
1
- {"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAMtC,MAAM,WAAW,YAAY;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,OAAO;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB,CAAC;gBAXjB,MAAM,EAAE,GAAG,EACX,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EACrC,cAAc,EAAE,MAAM,EAAE,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAChE,WAAW,CAAC,EAAE,MAAM,YAAA,EAAE,2BAA2B;IACjD,oBAAoB,GAAE,OAAc,EAAE,yCAAyC;IAC/E,WAAW,GAAE,MAAM,GAAG,OAAiB,EAAE,mBAAmB;IAC5D,cAAc,GAAE,KAAK,GAAG,SAAS,GAAG,UAAuB,EAAE,0BAA0B;IACvF,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAGrC;;OAEG;YACW,kBAAkB;IAsB1B,GAAG,CAAC,SAAS,EAAE,MAAM;IAkR3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0CzB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;YACW,oBAAoB;IAmBlC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;YACW,uBAAuB;IAqBrC;;OAEG;YACW,wBAAwB;IA8DtC;;OAEG;YACW,yBAAyB;CA0F1C"}
1
+ {"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,10 @@ export class Janitor {
13
13
  modelCache;
14
14
  configModel;
15
15
  showModelErrorToasts;
16
- pruningMode;
17
16
  pruningSummary;
18
17
  workingDirectory;
19
18
  constructor(client, prunedIdsState, statsState, logger, toolParametersCache, protectedTools, modelCache, configModel, // Format: "provider/model"
20
19
  showModelErrorToasts = true, // Whether to show toast for model errors
21
- pruningMode = "smart", // Pruning strategy
22
20
  pruningSummary = "detailed", // UI summary display mode
23
21
  workingDirectory // Current working directory for relative path display
24
22
  ) {
@@ -31,7 +29,6 @@ export class Janitor {
31
29
  this.modelCache = modelCache;
32
30
  this.configModel = configModel;
33
31
  this.showModelErrorToasts = showModelErrorToasts;
34
- this.pruningMode = pruningMode;
35
32
  this.pruningSummary = pruningSummary;
36
33
  this.workingDirectory = workingDirectory;
37
34
  }
@@ -60,8 +57,28 @@ export class Janitor {
60
57
  });
61
58
  }
62
59
  }
63
- async run(sessionID) {
60
+ /**
61
+ * Convenience method for idle-triggered pruning (sends notification automatically)
62
+ */
63
+ async runOnIdle(sessionID, strategies) {
64
+ await this.runWithStrategies(sessionID, strategies, { trigger: 'idle' });
65
+ // Notification is handled inside runWithStrategies
66
+ }
67
+ /**
68
+ * Convenience method for tool-triggered pruning (returns result for tool output)
69
+ */
70
+ async runForTool(sessionID, strategies, reason) {
71
+ return await this.runWithStrategies(sessionID, strategies, { trigger: 'tool', reason });
72
+ }
73
+ /**
74
+ * Core pruning method that accepts strategies and options
75
+ */
76
+ async runWithStrategies(sessionID, strategies, options) {
64
77
  try {
78
+ // Skip if no strategies configured
79
+ if (strategies.length === 0) {
80
+ return null;
81
+ }
65
82
  // Fetch session info and messages from OpenCode API
66
83
  const [sessionInfoResponse, messagesResponse] = await Promise.all([
67
84
  this.client.session.get({ path: { id: sessionID } }),
@@ -72,7 +89,7 @@ export class Janitor {
72
89
  const messages = messagesResponse.data || messagesResponse;
73
90
  // If there are no messages or very few, skip analysis
74
91
  if (!messages || messages.length < 3) {
75
- return;
92
+ return null;
76
93
  }
77
94
  // Extract tool call IDs from the session and track their output sizes
78
95
  // Also track batch tool relationships and tool metadata
@@ -123,24 +140,28 @@ export class Janitor {
123
140
  const unprunedToolCallIds = toolCallIds.filter(id => !alreadyPrunedIds.includes(id));
124
141
  // If there are no unpruned tool calls, skip analysis
125
142
  if (unprunedToolCallIds.length === 0) {
126
- return;
143
+ return null;
127
144
  }
128
145
  // ============================================================
129
- // PHASE 1: DUPLICATE DETECTION (runs for both modes)
146
+ // PHASE 1: DUPLICATE DETECTION (if enabled)
130
147
  // ============================================================
131
- const dedupeResult = detectDuplicates(toolMetadata, unprunedToolCallIds, this.protectedTools);
132
- const deduplicatedIds = dedupeResult.duplicateIds;
133
- const deduplicationDetails = dedupeResult.deduplicationDetails;
148
+ let deduplicatedIds = [];
149
+ let deduplicationDetails = new Map();
150
+ if (strategies.includes('deduplication')) {
151
+ const dedupeResult = detectDuplicates(toolMetadata, unprunedToolCallIds, this.protectedTools);
152
+ deduplicatedIds = dedupeResult.duplicateIds;
153
+ deduplicationDetails = dedupeResult.deduplicationDetails;
154
+ }
134
155
  // Calculate candidates available for pruning (excludes protected tools)
135
156
  const candidateCount = unprunedToolCallIds.filter(id => {
136
157
  const metadata = toolMetadata.get(id);
137
158
  return !metadata || !this.protectedTools.includes(metadata.tool);
138
159
  }).length;
139
160
  // ============================================================
140
- // PHASE 2: LLM ANALYSIS (only runs in "smart" mode)
161
+ // PHASE 2: LLM ANALYSIS (if enabled)
141
162
  // ============================================================
142
163
  let llmPrunedIds = [];
143
- if (this.pruningMode === "smart") {
164
+ if (strategies.includes('ai-analysis')) {
144
165
  // Filter out duplicates and protected tools
145
166
  const protectedToolCallIds = [];
146
167
  const prunableToolCallIds = unprunedToolCallIds.filter(id => {
@@ -186,8 +207,8 @@ export class Janitor {
186
207
  // Replace already-pruned tool outputs to save tokens in janitor context
187
208
  const allPrunedSoFar = [...alreadyPrunedIds, ...deduplicatedIds];
188
209
  const sanitizedMessages = this.replacePrunedToolOutputs(messages, allPrunedSoFar);
189
- // Build the prompt for analysis
190
- const analysisPrompt = buildAnalysisPrompt(prunableToolCallIds, sanitizedMessages, this.protectedTools, allPrunedSoFar, protectedToolCallIds);
210
+ // Build the prompt for analysis (pass reason if provided)
211
+ const analysisPrompt = buildAnalysisPrompt(prunableToolCallIds, sanitizedMessages, allPrunedSoFar, protectedToolCallIds, options.reason);
191
212
  // Save janitor shadow context directly (auth providers may bypass globalThis.fetch)
192
213
  await this.logger.saveWrappedContext("janitor-shadow", [{ role: "user", content: analysisPrompt }], {
193
214
  sessionID,
@@ -195,7 +216,9 @@ export class Janitor {
195
216
  modelID: modelSelection.modelInfo.modelID,
196
217
  candidateToolCount: prunableToolCallIds.length,
197
218
  alreadyPrunedCount: allPrunedSoFar.length,
198
- protectedToolCount: protectedToolCallIds.length
219
+ protectedToolCount: protectedToolCallIds.length,
220
+ trigger: options.trigger,
221
+ reason: options.reason
199
222
  });
200
223
  // Analyze which tool calls are obsolete
201
224
  const result = await generateObject({
@@ -221,25 +244,32 @@ export class Janitor {
221
244
  // ============================================================
222
245
  const newlyPrunedIds = [...deduplicatedIds, ...llmPrunedIds];
223
246
  if (newlyPrunedIds.length === 0) {
224
- return;
247
+ return null;
225
248
  }
226
- // Expand batch tool IDs to include their children
227
- const expandedPrunedIds = new Set();
228
- for (const prunedId of newlyPrunedIds) {
229
- const normalizedId = prunedId.toLowerCase();
230
- expandedPrunedIds.add(normalizedId);
231
- // If this is a batch tool, add all its children
232
- const children = batchToolChildren.get(normalizedId);
233
- if (children) {
234
- children.forEach(childId => expandedPrunedIds.add(childId));
249
+ // Helper to expand batch tool IDs to include their children
250
+ const expandBatchIds = (ids) => {
251
+ const expanded = new Set();
252
+ for (const id of ids) {
253
+ const normalizedId = id.toLowerCase();
254
+ expanded.add(normalizedId);
255
+ // If this is a batch tool, add all its children
256
+ const children = batchToolChildren.get(normalizedId);
257
+ if (children) {
258
+ children.forEach(childId => expanded.add(childId));
259
+ }
235
260
  }
236
- }
261
+ return Array.from(expanded);
262
+ };
263
+ // Expand batch tool IDs to include their children
264
+ const expandedPrunedIds = new Set(expandBatchIds(newlyPrunedIds));
265
+ // Expand llmPrunedIds for UI display (so batch children show instead of "unknown metadata")
266
+ const expandedLlmPrunedIds = expandBatchIds(llmPrunedIds);
237
267
  // Calculate which IDs are actually NEW (not already pruned)
238
268
  const finalNewlyPrunedIds = Array.from(expandedPrunedIds).filter(id => !alreadyPrunedIds.includes(id));
239
269
  // finalPrunedIds includes everything (new + already pruned) for logging
240
270
  const finalPrunedIds = Array.from(expandedPrunedIds);
241
271
  // ============================================================
242
- // PHASE 4: NOTIFICATION
272
+ // PHASE 4: CALCULATE STATS & NOTIFICATION
243
273
  // ============================================================
244
274
  // Calculate token savings once (used by both notification and log)
245
275
  const tokensSaved = await this.calculateTokensSaved(finalNewlyPrunedIds, toolOutputs);
@@ -250,11 +280,13 @@ export class Janitor {
250
280
  totalTokensSaved: currentStats.totalTokensSaved + tokensSaved
251
281
  };
252
282
  this.statsState.set(sessionID, sessionStats);
253
- if (this.pruningMode === "auto") {
254
- await this.sendAutoModeNotification(sessionID, deduplicatedIds, deduplicationDetails, tokensSaved, sessionStats);
283
+ // Determine notification mode based on which strategies ran
284
+ const hasLlmAnalysis = strategies.includes('ai-analysis');
285
+ if (hasLlmAnalysis) {
286
+ await this.sendSmartModeNotification(sessionID, deduplicatedIds, deduplicationDetails, expandedLlmPrunedIds, toolMetadata, tokensSaved, sessionStats);
255
287
  }
256
288
  else {
257
- await this.sendSmartModeNotification(sessionID, deduplicatedIds, deduplicationDetails, llmPrunedIds, toolMetadata, tokensSaved, sessionStats);
289
+ await this.sendAutoModeNotification(sessionID, deduplicatedIds, deduplicationDetails, tokensSaved, sessionStats);
258
290
  }
259
291
  // ============================================================
260
292
  // PHASE 5: STATE UPDATE
@@ -268,14 +300,30 @@ export class Janitor {
268
300
  const keptCount = candidateCount - prunedCount;
269
301
  const hasBoth = deduplicatedIds.length > 0 && llmPrunedIds.length > 0;
270
302
  const breakdown = hasBoth ? ` (${deduplicatedIds.length} duplicate, ${llmPrunedIds.length} llm)` : "";
271
- this.logger.info("janitor", `Pruned ${prunedCount}/${candidateCount} tools${breakdown}, ${keptCount} kept (~${formatTokenCount(tokensSaved)} tokens)`);
303
+ // Build log metadata
304
+ const logMeta = { trigger: options.trigger };
305
+ if (options.reason) {
306
+ logMeta.reason = options.reason;
307
+ }
308
+ this.logger.info("janitor", `Pruned ${prunedCount}/${candidateCount} tools${breakdown}, ${keptCount} kept (~${formatTokenCount(tokensSaved)} tokens)`, logMeta);
309
+ return {
310
+ prunedCount: finalNewlyPrunedIds.length,
311
+ tokensSaved,
312
+ deduplicatedIds,
313
+ llmPrunedIds: expandedLlmPrunedIds,
314
+ deduplicationDetails,
315
+ toolMetadata,
316
+ sessionStats
317
+ };
272
318
  }
273
319
  catch (error) {
274
320
  this.logger.error("janitor", "Analysis failed", {
275
- error: error.message
321
+ error: error.message,
322
+ trigger: options.trigger
276
323
  });
277
324
  // Don't throw - this is a fire-and-forget background process
278
325
  // Silently fail and try again on next idle event
326
+ return null;
279
327
  }
280
328
  }
281
329
  /**
@@ -402,6 +450,9 @@ export class Janitor {
402
450
  const metadata = toolMetadata.get(normalizedId);
403
451
  if (metadata) {
404
452
  const toolName = metadata.tool;
453
+ // Skip 'batch' tool in UI summary - it's a wrapper and its children are shown individually
454
+ if (toolName === 'batch')
455
+ continue;
405
456
  if (!toolsSummary.has(toolName)) {
406
457
  toolsSummary.set(toolName, []);
407
458
  }
@@ -421,6 +472,60 @@ export class Janitor {
421
472
  }
422
473
  return toolsSummary;
423
474
  }
475
+ /**
476
+ * Group deduplication details by tool type
477
+ * Shared helper used by notifications and tool output formatting
478
+ */
479
+ groupDeduplicationDetails(deduplicationDetails) {
480
+ const grouped = new Map();
481
+ for (const [_, details] of deduplicationDetails) {
482
+ const { toolName, parameterKey, duplicateCount } = details;
483
+ // Skip 'batch' tool in UI summary - it's a wrapper and its children are shown individually
484
+ if (toolName === 'batch')
485
+ continue;
486
+ if (!grouped.has(toolName)) {
487
+ grouped.set(toolName, []);
488
+ }
489
+ grouped.get(toolName).push({
490
+ count: duplicateCount,
491
+ key: this.shortenPath(parameterKey)
492
+ });
493
+ }
494
+ return grouped;
495
+ }
496
+ /**
497
+ * Format grouped deduplication results as lines
498
+ * Shared helper for building deduplication summaries
499
+ */
500
+ formatDeduplicationLines(grouped, indent = ' ') {
501
+ const lines = [];
502
+ for (const [toolName, items] of grouped.entries()) {
503
+ for (const item of items) {
504
+ const removedCount = item.count - 1;
505
+ lines.push(`${indent}${toolName}: ${item.key} (${removedCount}× duplicate)`);
506
+ }
507
+ }
508
+ return lines;
509
+ }
510
+ /**
511
+ * Format tool summary (from buildToolsSummary) as lines
512
+ * Shared helper for building LLM-pruned summaries
513
+ */
514
+ formatToolSummaryLines(toolsSummary, indent = ' ') {
515
+ const lines = [];
516
+ for (const [toolName, params] of toolsSummary.entries()) {
517
+ if (params.length === 1) {
518
+ lines.push(`${indent}${toolName}: ${params[0]}`);
519
+ }
520
+ else if (params.length > 1) {
521
+ lines.push(`${indent}${toolName} (${params.length}):`);
522
+ for (const param of params) {
523
+ lines.push(`${indent} ${param}`);
524
+ }
525
+ }
526
+ }
527
+ return lines;
528
+ }
424
529
  /**
425
530
  * Send minimal summary notification (just tokens saved and count)
426
531
  */
@@ -459,19 +564,9 @@ export class Janitor {
459
564
  message += ` │ Session: ~${formatTokenCount(sessionStats.totalTokensSaved)} tokens, ${sessionStats.totalToolsPruned} tools`;
460
565
  }
461
566
  message += '\n';
462
- // Group by tool type
463
- const grouped = new Map();
464
- for (const [_, details] of deduplicationDetails) {
465
- const { toolName, parameterKey, duplicateCount } = details;
466
- if (!grouped.has(toolName)) {
467
- grouped.set(toolName, []);
468
- }
469
- grouped.get(toolName).push({
470
- count: duplicateCount,
471
- key: this.shortenPath(parameterKey)
472
- });
473
- }
474
- // Display grouped results
567
+ // Group by tool type using shared helper
568
+ const grouped = this.groupDeduplicationDetails(deduplicationDetails);
569
+ // Display grouped results (with UI-specific formatting: total dupes header, limit to 5)
475
570
  for (const [toolName, items] of grouped.entries()) {
476
571
  const totalDupes = items.reduce((sum, item) => sum + (item.count - 1), 0);
477
572
  message += `\n${toolName} (${totalDupes} duplicate${totalDupes > 1 ? 's' : ''}):\n`;
@@ -485,6 +580,29 @@ export class Janitor {
485
580
  }
486
581
  await this.sendIgnoredMessage(sessionID, message.trim());
487
582
  }
583
+ /**
584
+ * Format pruning result for tool output (returned to AI)
585
+ * Uses shared helpers for consistency with UI notifications
586
+ */
587
+ formatPruningResultForTool(result) {
588
+ const lines = [];
589
+ lines.push(`Context pruning complete. Pruned ${result.prunedCount} tool outputs.`);
590
+ lines.push('');
591
+ // Section 1: Deduplicated tools
592
+ if (result.deduplicatedIds.length > 0 && result.deduplicationDetails.size > 0) {
593
+ lines.push(`Duplicates removed (${result.deduplicatedIds.length}):`);
594
+ const grouped = this.groupDeduplicationDetails(result.deduplicationDetails);
595
+ lines.push(...this.formatDeduplicationLines(grouped));
596
+ lines.push('');
597
+ }
598
+ // Section 2: LLM-pruned tools
599
+ if (result.llmPrunedIds.length > 0) {
600
+ lines.push(`Semantically pruned (${result.llmPrunedIds.length}):`);
601
+ const toolsSummary = this.buildToolsSummary(result.llmPrunedIds, result.toolMetadata);
602
+ lines.push(...this.formatToolSummaryLines(toolsSummary));
603
+ }
604
+ return lines.join('\n').trim();
605
+ }
488
606
  /**
489
607
  * Smart mode notification - shows both deduplication and LLM analysis results
490
608
  */
@@ -511,18 +629,7 @@ export class Janitor {
511
629
  // Section 1: Deduplicated tools
512
630
  if (deduplicatedIds.length > 0 && deduplicationDetails) {
513
631
  message += `\n📦 Duplicates removed (${deduplicatedIds.length}):\n`;
514
- // Group by tool type
515
- const grouped = new Map();
516
- for (const [_, details] of deduplicationDetails) {
517
- const { toolName, parameterKey, duplicateCount } = details;
518
- if (!grouped.has(toolName)) {
519
- grouped.set(toolName, []);
520
- }
521
- grouped.get(toolName).push({
522
- count: duplicateCount,
523
- key: this.shortenPath(parameterKey)
524
- });
525
- }
632
+ const grouped = this.groupDeduplicationDetails(deduplicationDetails);
526
633
  for (const [toolName, items] of grouped.entries()) {
527
634
  message += ` ${toolName}:\n`;
528
635
  for (const item of items) {
@@ -534,7 +641,6 @@ export class Janitor {
534
641
  // Section 2: LLM-pruned tools
535
642
  if (llmPrunedIds.length > 0) {
536
643
  message += `\n🤖 LLM analysis (${llmPrunedIds.length}):\n`;
537
- // Use buildToolsSummary logic
538
644
  const toolsSummary = this.buildToolsSummary(llmPrunedIds, toolMetadata);
539
645
  for (const [toolName, params] of toolsSummary.entries()) {
540
646
  if (params.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"janitor.js","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"janitor.js","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare function buildAnalysisPrompt(unprunedToolCallIds: string[], messages: any[], protectedTools: string[], alreadyPrunedIds?: string[], protectedToolCallIds?: string[]): string;
1
+ export declare function buildAnalysisPrompt(unprunedToolCallIds: string[], messages: any[], alreadyPrunedIds?: string[], protectedToolCallIds?: string[], reason?: string): string;
2
2
  //# sourceMappingURL=prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAyGA,wBAAgB,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAsClL"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAyGA,wBAAgB,mBAAmB,CAC/B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,QAAQ,EAAE,GAAG,EAAE,EACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAC/B,MAAM,CAAC,EAAE,MAAM,GAChB,MAAM,CA2CR"}
@@ -92,14 +92,19 @@ function minimizeMessages(messages, alreadyPrunedIds, protectedToolCallIds) {
92
92
  return msg.parts && msg.parts.length > 0;
93
93
  });
94
94
  }
95
- export function buildAnalysisPrompt(unprunedToolCallIds, messages, protectedTools, alreadyPrunedIds, protectedToolCallIds) {
95
+ export function buildAnalysisPrompt(unprunedToolCallIds, messages, alreadyPrunedIds, protectedToolCallIds, reason // Optional reason from tool call
96
+ ) {
96
97
  // Minimize messages to reduce token usage, passing already-pruned and protected IDs for replacement
97
98
  const minimizedMessages = minimizeMessages(messages, alreadyPrunedIds, protectedToolCallIds);
98
99
  // Stringify with pretty-printing, then replace escaped newlines with actual newlines
99
100
  // This makes the logged prompts much more readable
100
101
  const messagesJson = JSON.stringify(minimizedMessages, null, 2).replace(/\\n/g, '\n');
102
+ // Build optional context section if reason provided
103
+ const reasonContext = reason
104
+ ? `\nContext: The AI has requested pruning with the following reason: "${reason}"\nUse this context to inform your decisions about what is most relevant to keep.`
105
+ : '';
101
106
  return `You are a conversation analyzer that identifies obsolete tool outputs in a coding session.
102
-
107
+ ${reasonContext}
103
108
  Your task: Analyze the session history and identify tool call IDs whose outputs are NO LONGER RELEVANT to the current conversation context.
104
109
 
105
110
  Guidelines for identifying obsolete tool calls:
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@tarquinen/opencode-dcp",
4
- "version": "0.3.14",
4
+ "version": "0.3.16",
5
5
  "type": "module",
6
6
  "description": "OpenCode plugin that optimizes token usage by pruning obsolete tool outputs from conversation context",
7
7
  "main": "./dist/index.js",