@tarquinen/opencode-dcp 0.1.6 → 0.1.8

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
@@ -2,28 +2,15 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@tarquinen/opencode-dcp.svg)](https://www.npmjs.com/package/@tarquinen/opencode-dcp)
4
4
 
5
- OpenCode plugin that optimizes token usage by analyzing conversation history and pruning obsolete tool outputs from requests.
5
+ Automatically reduces token usage in OpenCode by removing obsolete tool outputs from conversation history.
6
6
 
7
- ## Features
7
+ ## What It Does
8
8
 
9
- - **Zero Configuration**: Uses the free `opencode/big-pickle` model - no API keys required
10
- - **Automatic Optimization**: Runs in the background when sessions become idle
11
- - **Smart Analysis**: Uses AI to identify truly obsolete context
12
- - **Debug Logging**: Optional file-based logging for troubleshooting
13
-
14
- ## How It Works
15
-
16
- 1. When a session becomes idle, the Janitor analyzes the conversation using shadow inference
17
- 2. It identifies tool call outputs that are no longer relevant to the conversation
18
- 3. These IDs are stored in memory for that session
19
- 4. On subsequent requests, a custom fetch function filters out the obsolete tool responses
20
- 5. Result: Fewer tokens sent to the LLM, lower costs, faster responses
9
+ When your OpenCode session becomes idle, this plugin analyzes your conversation and identifies tool outputs that are no longer relevant (superseded file reads, old errors that were fixed, exploratory searches, etc.). These obsolete outputs are pruned from future requests to save tokens and reduce costs.
21
10
 
22
11
  ## Installation
23
12
 
24
- ### Via NPM (Recommended)
25
-
26
- Add the plugin to your OpenCode configuration:
13
+ Add to your OpenCode configuration:
27
14
 
28
15
  **Global:** `~/.config/opencode/opencode.json`
29
16
  **Project:** `.opencode/opencode.json`
@@ -36,66 +23,29 @@ Add the plugin to your OpenCode configuration:
36
23
  }
37
24
  ```
38
25
 
39
- Then restart OpenCode. The plugin will automatically:
40
- - Analyze conversations when sessions become idle
41
- - Identify obsolete tool outputs
42
- - Prune them from future requests
43
- - Save you tokens and money!
26
+ Restart OpenCode. The plugin will automatically start optimizing your sessions.
44
27
 
45
- ### Local Development
28
+ ## Debug Logging
46
29
 
47
- If you want to modify the plugin, you can clone this repository and use a local path:
48
-
49
- ```json
50
- {
51
- "plugin": [
52
- "./plugin/dynamic-context-pruning"
53
- ]
54
- }
55
- ```
56
-
57
- ## Configuration
58
-
59
- No configuration required! The plugin works out of the box with:
60
- - Zero-config setup using `opencode/big-pickle` model
61
- - Automatic background optimization
62
- - Smart AI-powered analysis
63
-
64
- ### Debug Logging (Optional)
65
-
66
- To enable debug logging, set the `OPENCODE_DCP_DEBUG` environment variable:
30
+ Enable debug logging by setting the `OPENCODE_DCP_DEBUG` environment variable:
67
31
 
68
32
  ```bash
69
- # Enable debug logging for one session
33
+ # For one session
70
34
  OPENCODE_DCP_DEBUG=1 opencode
71
35
 
72
- # Or export it to enable for all sessions
36
+ # For all sessions
73
37
  export OPENCODE_DCP_DEBUG=1
74
38
  opencode
75
39
  ```
76
40
 
77
- Debug logs will be written to `~/.config/opencode/logs/dcp/YYYY-MM-DD.log`.
41
+ Logs are written to `~/.config/opencode/logs/dcp/YYYY-MM-DD.log`.
78
42
 
79
- You can watch logs in real-time:
43
+ Watch logs in real-time:
80
44
 
81
45
  ```bash
82
46
  tail -f ~/.config/opencode/logs/dcp/$(date +%Y-%m-%d).log
83
47
  ```
84
48
 
85
- ## Architecture
86
-
87
- - **Janitor**: Background process that analyzes sessions using opencode/big-pickle model
88
- - **State Manager**: In-memory store for pruned tool call IDs per session
89
- - **Fetch Injector**: Injects custom fetch via `chat.params` hook
90
- - **Pruning Fetch Wrapper**: Filters request bodies based on session state
91
- - **Logger**: File-based debug logging system
92
-
93
- ## Development Status
94
-
95
- Current implementation status: **Step 1 - Project Scaffolding** ✅
96
-
97
- See `@notes/dynamic-context-pruning/IMPLEMENTATION-PLAN.md` for full implementation details.
98
-
99
49
  ## License
100
50
 
101
51
  MIT
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";IAkHQ;;OAEG;;;;IA8BH;;OAEG;;;;;;;;;;;;;AA3IX,wBA6QmB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";IA8IQ;;OAEG;;;;IA8BH;;OAEG;;;;;;;;;;;;;AAvKX,wBAySmB"}
package/dist/index.js CHANGED
@@ -13,7 +13,8 @@ export default (async (ctx) => {
13
13
  // Logger uses ~/.config/opencode/logs/dcp/ for consistent log location
14
14
  const logger = new Logger(config.debug);
15
15
  const stateManager = new StateManager();
16
- const janitor = new Janitor(ctx.client, stateManager, logger);
16
+ const toolParametersCache = new Map(); // callID -> parameters
17
+ const janitor = new Janitor(ctx.client, stateManager, logger, toolParametersCache);
17
18
  // Track pruned counts per session for this request
18
19
  const requestPrunedCounts = new Map();
19
20
  // Store the original global fetch
@@ -32,6 +33,33 @@ export default (async (ctx) => {
32
33
  url: typeof input === 'string' ? input.substring(0, 80) : 'URL object',
33
34
  messageCount: body.messages.length
34
35
  });
36
+ // Capture tool call parameters from assistant messages
37
+ const assistantMessages = body.messages.filter((m) => m.role === 'assistant');
38
+ for (const msg of assistantMessages) {
39
+ if (msg.tool_calls && Array.isArray(msg.tool_calls)) {
40
+ for (const toolCall of msg.tool_calls) {
41
+ if (toolCall.id && toolCall.function) {
42
+ try {
43
+ const params = typeof toolCall.function.arguments === 'string'
44
+ ? JSON.parse(toolCall.function.arguments)
45
+ : toolCall.function.arguments;
46
+ toolParametersCache.set(toolCall.id, {
47
+ tool: toolCall.function.name,
48
+ parameters: params
49
+ });
50
+ logger.debug("global-fetch", "Cached tool parameters", {
51
+ callID: toolCall.id,
52
+ tool: toolCall.function.name,
53
+ hasParams: !!params
54
+ });
55
+ }
56
+ catch (e) {
57
+ // Ignore JSON parse errors
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
35
63
  // Try to extract session ID from the request (might be in headers or we track it)
36
64
  // For now, we'll use a simpler approach: collect ALL pruned IDs from all sessions
37
65
  // This is safe because tool_call_ids are globally unique
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,17 @@
1
+ import type { StateManager } from "./state";
2
+ import type { Logger } from "./logger";
3
+ interface CommandOptions {
4
+ stateManager: StateManager;
5
+ logger: Logger;
6
+ sessionId?: string;
7
+ }
8
+ /**
9
+ * Check if the request body contains a pruning stats command
10
+ */
11
+ export declare function isPruningStatsCommand(body: any): boolean;
12
+ /**
13
+ * Create a stats response for the pruning command
14
+ */
15
+ export declare function createPruningStatsResponse(opts: CommandOptions, client: any): Promise<Response>;
16
+ export {};
17
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../lib/commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,UAAU,cAAc;IACpB,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CA6CxD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC5C,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,GAAG,GACZ,OAAO,CAAC,QAAQ,CAAC,CAmCnB"}
@@ -0,0 +1,214 @@
1
+ // commands.ts - Command handlers for dynamic-context-pruning plugin
2
+ import { randomUUID } from "node:crypto";
3
+ /**
4
+ * Check if the request body contains a pruning stats command
5
+ */
6
+ export function isPruningStatsCommand(body) {
7
+ if (!body?.messages || !Array.isArray(body.messages)) {
8
+ return false;
9
+ }
10
+ // Get the last user message
11
+ const lastUserMessage = body.messages
12
+ .slice()
13
+ .reverse()
14
+ .find((m) => m.role === 'user');
15
+ if (!lastUserMessage) {
16
+ return false;
17
+ }
18
+ // Extract text content
19
+ let text = '';
20
+ if (typeof lastUserMessage.content === 'string') {
21
+ text = lastUserMessage.content;
22
+ }
23
+ else if (Array.isArray(lastUserMessage.content)) {
24
+ const textParts = lastUserMessage.content
25
+ .filter((part) => part?.type === 'text' || part?.type === 'input_text')
26
+ .map((part) => part.text || '');
27
+ text = textParts.join(' ');
28
+ }
29
+ // Normalize and check for command triggers
30
+ const normalized = text.trim().toLowerCase();
31
+ const triggers = [
32
+ 'dcp-stats',
33
+ 'dcpstats',
34
+ 'dcp-metrics',
35
+ 'dcpmetrics',
36
+ 'dcp-metrics-report',
37
+ 'dcpmetricsreport',
38
+ 'prune-stats',
39
+ 'prunestats',
40
+ '/dcp-stats',
41
+ '/dcp-metrics',
42
+ '/prune-stats'
43
+ ];
44
+ return triggers.some(trigger => normalized === trigger || normalized.startsWith(trigger + ' '));
45
+ }
46
+ /**
47
+ * Create a stats response for the pruning command
48
+ */
49
+ export async function createPruningStatsResponse(opts, client) {
50
+ const { stateManager, logger, sessionId } = opts;
51
+ logger.info("command", "Generating pruning stats response");
52
+ // Collect statistics from all non-subagent sessions
53
+ const allSessions = await client.session.list();
54
+ const stats = {
55
+ totalSessions: 0,
56
+ totalPrunedIds: 0,
57
+ sessions: []
58
+ };
59
+ if (allSessions.data) {
60
+ for (const session of allSessions.data) {
61
+ // Skip subagent sessions
62
+ if (session.parentID)
63
+ continue;
64
+ const prunedIds = await stateManager.get(session.id);
65
+ if (prunedIds.length > 0) {
66
+ stats.totalSessions++;
67
+ stats.totalPrunedIds += prunedIds.length;
68
+ stats.sessions.push({
69
+ id: session.id.substring(0, 12) + '...',
70
+ prunedCount: prunedIds.length
71
+ });
72
+ }
73
+ }
74
+ }
75
+ // Format the display message
76
+ const message = formatStatsDisplay(stats, sessionId);
77
+ // Create SSE response that mimics OpenAI's format
78
+ return createSseResponse(message, "dcp-stats");
79
+ }
80
+ function formatStatsDisplay(stats, sessionId) {
81
+ const timestamp = new Date().toISOString();
82
+ const lines = [];
83
+ lines.push(`Dynamic Context Pruning Stats -- ${timestamp}`);
84
+ lines.push('');
85
+ lines.push('Overview');
86
+ lines.push(`- Active sessions with pruned content: ${stats.totalSessions}`);
87
+ lines.push(`- Total pruned tool call IDs: ${stats.totalPrunedIds}`);
88
+ lines.push('');
89
+ if (sessionId) {
90
+ // Find current session stats
91
+ const currentSessionStats = stats.sessions.find((s) => sessionId.startsWith(s.id.replace('...', '')));
92
+ if (currentSessionStats) {
93
+ lines.push('Current Session');
94
+ lines.push(`- Session ID: ${currentSessionStats.id}`);
95
+ lines.push(`- Pruned tool calls: ${currentSessionStats.prunedCount}`);
96
+ lines.push('');
97
+ }
98
+ }
99
+ if (stats.sessions.length > 0) {
100
+ lines.push('Sessions with Pruned Content');
101
+ for (const session of stats.sessions.slice(0, 10)) {
102
+ lines.push(`- ${session.id}: ${session.prunedCount} pruned`);
103
+ }
104
+ if (stats.sessions.length > 10) {
105
+ lines.push(`... and ${stats.sessions.length - 10} more`);
106
+ }
107
+ }
108
+ else {
109
+ lines.push('No pruned content yet. The janitor will automatically');
110
+ lines.push('prune tool responses when they become superseded.');
111
+ }
112
+ lines.push('');
113
+ lines.push('How it works:');
114
+ lines.push('- Tool responses are analyzed after each AI turn');
115
+ lines.push('- Superseded/redundant content is marked for pruning');
116
+ lines.push('- Pruned content is replaced with short placeholders');
117
+ lines.push('- This saves context tokens on every subsequent request');
118
+ return lines.join('\n');
119
+ }
120
+ /**
121
+ * Create an SSE (Server-Sent Events) response that OpenCode will display as AI output
122
+ * This mimics the OpenAI Responses API format
123
+ */
124
+ function createSseResponse(text, commandName) {
125
+ const responseId = `resp_cmd_${randomUUID()}`;
126
+ const messageId = `msg_cmd_${randomUUID()}`;
127
+ const created = Math.floor(Date.now() / 1000);
128
+ const outputTokens = Math.max(1, Math.ceil(text.length / 4));
129
+ const assistantMessage = {
130
+ id: messageId,
131
+ type: "message",
132
+ role: "assistant",
133
+ content: [
134
+ {
135
+ type: "output_text",
136
+ text,
137
+ },
138
+ ],
139
+ metadata: {
140
+ source: commandName,
141
+ },
142
+ };
143
+ const responsePayload = {
144
+ id: responseId,
145
+ object: "response",
146
+ created,
147
+ model: "dcp-command",
148
+ status: "completed",
149
+ usage: {
150
+ input_tokens: 0,
151
+ output_tokens: outputTokens,
152
+ reasoning_tokens: 0,
153
+ total_tokens: outputTokens,
154
+ },
155
+ output: [assistantMessage],
156
+ metadata: {
157
+ command: commandName,
158
+ },
159
+ };
160
+ // Emit the SSE event sequence that OpenAI's Responses API uses
161
+ const events = [
162
+ {
163
+ id: responseId,
164
+ type: "response.created",
165
+ response: {
166
+ id: responseId,
167
+ object: "response",
168
+ created,
169
+ model: "dcp-command",
170
+ status: "in_progress",
171
+ },
172
+ },
173
+ {
174
+ id: responseId,
175
+ type: "response.output_text.delta",
176
+ response_id: responseId,
177
+ output_index: 0,
178
+ item_id: messageId,
179
+ delta: text,
180
+ },
181
+ {
182
+ id: responseId,
183
+ type: "response.output_item.added",
184
+ response_id: responseId,
185
+ output_index: 0,
186
+ item: assistantMessage,
187
+ },
188
+ {
189
+ id: responseId,
190
+ type: "response.output_item.done",
191
+ response_id: responseId,
192
+ output_index: 0,
193
+ item: assistantMessage,
194
+ },
195
+ {
196
+ id: responseId,
197
+ type: "response.completed",
198
+ response: responsePayload,
199
+ },
200
+ ];
201
+ // Convert events to SSE format
202
+ const ssePayload = events
203
+ .map((event) => `data: ${JSON.stringify(event)}\n\n`)
204
+ .join('') + 'data: [DONE]\n\n';
205
+ return new Response(ssePayload, {
206
+ status: 200,
207
+ headers: {
208
+ 'content-type': 'text/event-stream; charset=utf-8',
209
+ 'cache-control': 'no-cache',
210
+ 'connection': 'keep-alive',
211
+ },
212
+ });
213
+ }
214
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../lib/commands.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@ export declare class Janitor {
4
4
  private client;
5
5
  private stateManager;
6
6
  private logger;
7
- constructor(client: any, stateManager: StateManager, logger: Logger);
7
+ private toolParametersCache;
8
+ constructor(client: any, stateManager: StateManager, logger: Logger, toolParametersCache: Map<string, any>);
8
9
  run(sessionID: string): Promise<void>;
9
10
  }
10
11
  //# sourceMappingURL=janitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,qBAAa,OAAO;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;gBAFN,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM;IAGpB,GAAG,CAAC,SAAS,EAAE,MAAM;CAkP9B"}
1
+ {"version":3,"file":"janitor.d.ts","sourceRoot":"","sources":["../../lib/janitor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAG3C,qBAAa,OAAO;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;gBAHnB,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAG3C,GAAG,CAAC,SAAS,EAAE,MAAM;CAwU9B"}
@@ -1,14 +1,17 @@
1
1
  import { generateObject } from "ai";
2
2
  import { createShadowModel } from "./factory";
3
3
  import { z } from "zod";
4
+ import { buildAnalysisPrompt } from "./prompt";
4
5
  export class Janitor {
5
6
  client;
6
7
  stateManager;
7
8
  logger;
8
- constructor(client, stateManager, logger) {
9
+ toolParametersCache;
10
+ constructor(client, stateManager, logger, toolParametersCache) {
9
11
  this.client = client;
10
12
  this.stateManager = stateManager;
11
13
  this.logger = logger;
14
+ this.toolParametersCache = toolParametersCache;
12
15
  }
13
16
  async run(sessionID) {
14
17
  this.logger.info("janitor", "Starting analysis", { sessionID });
@@ -34,9 +37,10 @@ export class Janitor {
34
37
  return;
35
38
  }
36
39
  // Extract tool call IDs from the session and track their output sizes
37
- // Also track batch tool relationships
40
+ // Also track batch tool relationships and tool metadata
38
41
  const toolCallIds = [];
39
42
  const toolOutputs = new Map();
43
+ const toolMetadata = new Map(); // callID -> {tool, parameters}
40
44
  const batchToolChildren = new Map(); // batchID -> [childIDs]
41
45
  let currentBatchId = null;
42
46
  for (const msg of messages) {
@@ -44,6 +48,25 @@ export class Janitor {
44
48
  for (const part of msg.parts) {
45
49
  if (part.type === "tool" && part.callID) {
46
50
  toolCallIds.push(part.callID);
51
+ // Try to get parameters from cache first, fall back to part.parameters
52
+ const cachedData = this.toolParametersCache.get(part.callID);
53
+ const parameters = cachedData?.parameters || part.parameters;
54
+ // Track tool metadata (name and parameters)
55
+ toolMetadata.set(part.callID, {
56
+ tool: part.tool,
57
+ parameters: parameters
58
+ });
59
+ // Debug: log what we're storing
60
+ if (part.callID.startsWith('prt_') || part.tool === "read" || part.tool === "list") {
61
+ this.logger.debug("janitor", "Storing tool metadata", {
62
+ sessionID,
63
+ callID: part.callID,
64
+ tool: part.tool,
65
+ hasParameters: !!parameters,
66
+ hasCached: !!cachedData,
67
+ parameters: parameters
68
+ });
69
+ }
47
70
  // Track the output content for size calculation
48
71
  if (part.state?.status === "completed" && part.state.output) {
49
72
  toolOutputs.set(part.callID, part.state.output);
@@ -120,35 +143,7 @@ export class Janitor {
120
143
  pruned_tool_call_ids: z.array(z.string()),
121
144
  reasoning: z.string(),
122
145
  }),
123
- prompt: `You are a conversation analyzer that identifies obsolete tool outputs in a coding session.
124
-
125
- Your task: Analyze the session history and identify tool call IDs whose outputs are NO LONGER RELEVANT to the current conversation context.
126
-
127
- Guidelines for identifying obsolete tool calls:
128
- 1. Tool outputs that were superseded by newer reads of the same file/resource
129
- 2. Exploratory reads that didn't lead to actual edits or meaningful discussion
130
- 3. Tool calls from >10 turns ago that are no longer referenced
131
- 4. Error outputs that were subsequently fixed
132
- 5. Tool calls whose information has been replaced by more recent operations
133
-
134
- DO NOT prune:
135
- - Recent tool calls (within last 5 turns)
136
- - Tool calls that modified state (edits, writes, etc.)
137
- - Tool calls whose outputs are actively being discussed
138
- - Tool calls that produced errors still being debugged
139
-
140
- Available tool call IDs in this session (not yet pruned): ${unprunedToolCallIds.join(", ")}
141
-
142
- Session history:
143
- ${JSON.stringify(messages, null, 2)}
144
-
145
- You MUST respond with valid JSON matching this exact schema:
146
- {
147
- "pruned_tool_call_ids": ["id1", "id2", ...],
148
- "reasoning": "explanation of why these IDs were selected"
149
- }
150
-
151
- Return ONLY the tool call IDs that should be pruned (removed from future LLM requests).`
146
+ prompt: buildAnalysisPrompt(unprunedToolCallIds, messages)
152
147
  });
153
148
  // Expand batch tool IDs to include their children
154
149
  const expandedPrunedIds = new Set();
@@ -174,16 +169,6 @@ Return ONLY the tool call IDs that should be pruned (removed from future LLM req
174
169
  prunedIds: finalPrunedIds,
175
170
  reasoning: result.object.reasoning
176
171
  });
177
- // Calculate approximate size saved from newly pruned tool outputs (using expanded IDs)
178
- let totalCharsSaved = 0;
179
- for (const prunedId of finalPrunedIds) {
180
- const output = toolOutputs.get(prunedId);
181
- if (output) {
182
- totalCharsSaved += output.length;
183
- }
184
- }
185
- // Rough token estimate (1 token ≈ 4 characters for English text)
186
- const estimatedTokensSaved = Math.round(totalCharsSaved / 4);
187
172
  // Merge newly pruned IDs with existing ones (using expanded IDs)
188
173
  const allPrunedIds = [...new Set([...alreadyPrunedIds, ...finalPrunedIds])];
189
174
  await this.stateManager.set(sessionID, allPrunedIds);
@@ -195,19 +180,115 @@ Return ONLY the tool call IDs that should be pruned (removed from future LLM req
195
180
  // Show toast notification if we pruned anything
196
181
  if (finalPrunedIds.length > 0) {
197
182
  try {
183
+ // Helper function to shorten paths for display
184
+ const shortenPath = (path) => {
185
+ // Replace home directory with ~
186
+ const homeDir = require('os').homedir();
187
+ if (path.startsWith(homeDir)) {
188
+ path = '~' + path.slice(homeDir.length);
189
+ }
190
+ // Shorten node_modules paths: show package + file only
191
+ const nodeModulesMatch = path.match(/node_modules\/(@[^\/]+\/[^\/]+|[^\/]+)\/(.*)/);
192
+ if (nodeModulesMatch) {
193
+ return `${nodeModulesMatch[1]}/${nodeModulesMatch[2]}`;
194
+ }
195
+ return path;
196
+ };
197
+ // Helper function to truncate long strings
198
+ const truncate = (str, maxLen = 60) => {
199
+ if (str.length <= maxLen)
200
+ return str;
201
+ return str.slice(0, maxLen - 3) + '...';
202
+ };
203
+ // Build a summary of pruned tools by grouping them
204
+ const toolsSummary = new Map(); // tool name -> [parameters]
205
+ for (const prunedId of finalPrunedIds) {
206
+ const metadata = toolMetadata.get(prunedId);
207
+ if (metadata) {
208
+ const toolName = metadata.tool;
209
+ if (!toolsSummary.has(toolName)) {
210
+ toolsSummary.set(toolName, []);
211
+ }
212
+ this.logger.debug("janitor", "Processing pruned tool metadata", {
213
+ sessionID,
214
+ prunedId,
215
+ toolName,
216
+ parameters: metadata.parameters
217
+ });
218
+ // Extract meaningful parameter info based on tool type
219
+ let paramInfo = "";
220
+ if (metadata.parameters) {
221
+ // For read tool, show filePath
222
+ if (toolName === "read" && metadata.parameters.filePath) {
223
+ paramInfo = truncate(shortenPath(metadata.parameters.filePath), 50);
224
+ }
225
+ // For list tool, show path
226
+ else if (toolName === "list" && metadata.parameters.path) {
227
+ paramInfo = truncate(shortenPath(metadata.parameters.path), 50);
228
+ }
229
+ // For bash/command tools, prefer description over command
230
+ else if (toolName === "bash") {
231
+ if (metadata.parameters.description) {
232
+ paramInfo = truncate(metadata.parameters.description, 50);
233
+ }
234
+ else if (metadata.parameters.command) {
235
+ paramInfo = truncate(metadata.parameters.command, 50);
236
+ }
237
+ }
238
+ // For other tools, show the first relevant parameter
239
+ else if (metadata.parameters.path) {
240
+ paramInfo = truncate(shortenPath(metadata.parameters.path), 50);
241
+ }
242
+ else if (metadata.parameters.pattern) {
243
+ paramInfo = truncate(metadata.parameters.pattern, 50);
244
+ }
245
+ else if (metadata.parameters.command) {
246
+ paramInfo = truncate(metadata.parameters.command, 50);
247
+ }
248
+ }
249
+ if (paramInfo) {
250
+ toolsSummary.get(toolName).push(paramInfo);
251
+ }
252
+ }
253
+ else {
254
+ this.logger.warn("janitor", "No metadata found for pruned tool", {
255
+ sessionID,
256
+ prunedId
257
+ });
258
+ }
259
+ }
260
+ // Format the message with tool details
261
+ let message = `Pruned ${finalPrunedIds.length} tool output${finalPrunedIds.length > 1 ? 's' : ''} from context\n`;
262
+ for (const [toolName, params] of toolsSummary.entries()) {
263
+ if (params.length > 0) {
264
+ message += `\n${toolName} (${params.length}):\n`;
265
+ for (const param of params) {
266
+ message += ` ${param}\n`;
267
+ }
268
+ }
269
+ else {
270
+ // For tools with no specific params (like batch), just show the tool name and count
271
+ const count = finalPrunedIds.filter(id => {
272
+ const m = toolMetadata.get(id);
273
+ return m && m.tool === toolName;
274
+ }).length;
275
+ if (count > 0) {
276
+ message += `\n${toolName} (${count})\n`;
277
+ }
278
+ }
279
+ }
198
280
  await this.client.tui.showToast({
199
281
  body: {
200
282
  title: "Context Pruned",
201
- message: `Removed ${finalPrunedIds.length} tool output${finalPrunedIds.length > 1 ? 's' : ''} (~${estimatedTokensSaved.toLocaleString()} tokens saved)`,
283
+ message: message.trim(),
202
284
  variant: "success",
203
- duration: 5000
285
+ duration: 8000 // Longer duration since we're showing more info
204
286
  }
205
287
  });
206
288
  this.logger.info("janitor", "Toast notification shown", {
207
289
  sessionID,
208
290
  prunedCount: finalPrunedIds.length,
209
- estimatedTokensSaved,
210
- totalCharsSaved
291
+ toolsSummary: Array.from(toolsSummary.entries())
211
292
  });
212
293
  }
213
294
  catch (toastError) {
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export declare function buildAnalysisPrompt(unprunedToolCallIds: string[], messages: any[]): string;
2
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAgC1F"}
@@ -0,0 +1,34 @@
1
+ export function buildAnalysisPrompt(unprunedToolCallIds, messages) {
2
+ return `You are a conversation analyzer that identifies obsolete tool outputs in a coding session.
3
+
4
+ Your task: Analyze the session history and identify tool call IDs whose outputs are NO LONGER RELEVANT to the current conversation context.
5
+
6
+ Guidelines for identifying obsolete tool calls:
7
+ 1. Tool outputs that were superseded by newer reads of the same file/resource
8
+ 2. Exploratory reads that didn't lead to actual edits or meaningful discussion AND were not explicitly requested to be retained
9
+ 3. Tool calls from >10 turns ago that are no longer referenced and have served their purpose
10
+ 4. Error outputs that were subsequently fixed
11
+ 5. Tool calls whose information has been replaced by more recent operations
12
+
13
+ DO NOT prune:
14
+ - Recent tool calls
15
+ - Tool calls that modified state (edits, writes, etc.)
16
+ - Tool calls whose outputs are actively being discussed
17
+ - Tool calls that produced errors still being debugged
18
+ - Tool calls where the user explicitly indicated they want to retain the information (e.g., "save this", "remember this", "keep this for later", "don't output anything else but save this")
19
+ - Tool calls that are the MOST RECENT activity in the conversation (these may be intended for future use)
20
+
21
+ Available tool call IDs in this session (not yet pruned): ${unprunedToolCallIds.join(", ")}
22
+
23
+ Session history:
24
+ ${JSON.stringify(messages, null, 2)}
25
+
26
+ You MUST respond with valid JSON matching this exact schema:
27
+ {
28
+ "pruned_tool_call_ids": ["id1", "id2", ...],
29
+ "reasoning": "explanation of why these IDs were selected"
30
+ }
31
+
32
+ Return ONLY the tool call IDs that should be pruned (removed from future LLM requests).`;
33
+ }
34
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,mBAA6B,EAAE,QAAe;IAC9E,OAAO;;;;;;;;;;;;;;;;;;;4DAmBiD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGxF,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;wFAQqD,CAAA;AACxF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Creates a Server-Sent Events (SSE) response that mimics an OpenAI chat completion stream.
3
+ * This allows the plugin to inject "assistant" messages into the chat UI without
4
+ * calling an actual LLM.
5
+ */
6
+ export declare function createStaticResponse(text: string): Response;
7
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../lib/response.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAyD3D"}
@@ -0,0 +1,60 @@
1
+ // lib/response.ts
2
+ /**
3
+ * Creates a Server-Sent Events (SSE) response that mimics an OpenAI chat completion stream.
4
+ * This allows the plugin to inject "assistant" messages into the chat UI without
5
+ * calling an actual LLM.
6
+ */
7
+ export function createStaticResponse(text) {
8
+ // Generate a unique ID for this response
9
+ const responseId = `resp_${Date.now()}`;
10
+ const created = Math.floor(Date.now() / 1000);
11
+ // Define the sequence of SSE events to simulate a stream
12
+ const events = [
13
+ // 1. Start of response
14
+ {
15
+ id: responseId,
16
+ object: "chat.completion.chunk",
17
+ created,
18
+ model: "dcp-plugin",
19
+ choices: [{ index: 0, delta: { role: "assistant", content: "" }, finish_reason: null }]
20
+ },
21
+ // 2. The actual content (sent as one chunk for simplicity, but could be split)
22
+ {
23
+ id: responseId,
24
+ object: "chat.completion.chunk",
25
+ created,
26
+ model: "dcp-plugin",
27
+ choices: [{ index: 0, delta: { content: text }, finish_reason: null }]
28
+ },
29
+ // 3. Finish signal
30
+ {
31
+ id: responseId,
32
+ object: "chat.completion.chunk",
33
+ created,
34
+ model: "dcp-plugin",
35
+ choices: [{ index: 0, delta: {}, finish_reason: "stop" }]
36
+ },
37
+ // 4. Done signal (handled by stream logic below)
38
+ ];
39
+ // Create a ReadableStream to push these events
40
+ const stream = new ReadableStream({
41
+ start(controller) {
42
+ const encoder = new TextEncoder();
43
+ for (const event of events) {
44
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
45
+ }
46
+ // Send the standard [DONE] message
47
+ controller.enqueue(encoder.encode("data: [DONE]\n\n"));
48
+ controller.close();
49
+ }
50
+ });
51
+ // Return the Response with correct headers for SSE
52
+ return new Response(stream, {
53
+ headers: {
54
+ "Content-Type": "text/event-stream",
55
+ "Cache-Control": "no-cache",
56
+ "Connection": "keep-alive"
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../lib/response.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC7C,yCAAyC;IACzC,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAE7C,yDAAyD;IACzD,MAAM,MAAM,GAAG;QACX,uBAAuB;QACvB;YACI,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,uBAAuB;YAC/B,OAAO;YACP,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC1F;QACD,+EAA+E;QAC/E;YACI,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,uBAAuB;YAC/B,OAAO;YACP,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACzE;QACD,mBAAmB;QACnB;YACI,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,uBAAuB;YAC/B,OAAO;YACP,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;SAC5D;QACD,iDAAiD;KACpD,CAAA;IAED,+CAA+C;IAC/C,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAC9B,KAAK,CAAC,UAAU;YACZ,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;YAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YAC5E,CAAC;YAED,mCAAmC;YACnC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;YACtD,UAAU,CAAC,KAAK,EAAE,CAAA;QACtB,CAAC;KACJ,CAAC,CAAA;IAEF,mDAAmD;IACnD,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE;YACL,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,YAAY;SAC7B;KACJ,CAAC,CAAA;AACN,CAAC"}
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.1.6",
4
+ "version": "0.1.8",
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",
@@ -25,7 +25,7 @@
25
25
  "author": "tarquinen",
26
26
  "license": "MIT",
27
27
  "peerDependencies": {
28
- "@opencode-ai/plugin": "^0.13.7"
28
+ "@opencode-ai/plugin": ">=0.13.7"
29
29
  },
30
30
  "dependencies": {
31
31
  "@ai-sdk/openai-compatible": "^1.0.0",
@@ -34,7 +34,7 @@
34
34
  "zod": "^3.23.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@opencode-ai/plugin": "^0.13.7",
37
+ "@opencode-ai/plugin": ">=0.13.7",
38
38
  "@types/node": "^22.0.0",
39
39
  "typescript": "^5.7.0"
40
40
  },