@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 +11 -61
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/commands.d.ts +17 -0
- package/dist/lib/commands.d.ts.map +1 -0
- package/dist/lib/commands.js +214 -0
- package/dist/lib/commands.js.map +1 -0
- package/dist/lib/janitor.d.ts +2 -1
- package/dist/lib/janitor.d.ts.map +1 -1
- package/dist/lib/janitor.js +126 -45
- package/dist/lib/janitor.js.map +1 -1
- package/dist/lib/prompt.d.ts +2 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +34 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/response.d.ts +7 -0
- package/dist/lib/response.d.ts.map +1 -0
- package/dist/lib/response.js +60 -0
- package/dist/lib/response.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,28 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@tarquinen/opencode-dcp)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Automatically reduces token usage in OpenCode by removing obsolete tool outputs from conversation history.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## What It Does
|
|
8
8
|
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
## Debug Logging
|
|
46
29
|
|
|
47
|
-
|
|
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
|
-
#
|
|
33
|
+
# For one session
|
|
70
34
|
OPENCODE_DCP_DEBUG=1 opencode
|
|
71
35
|
|
|
72
|
-
#
|
|
36
|
+
# For all sessions
|
|
73
37
|
export OPENCODE_DCP_DEBUG=1
|
|
74
38
|
opencode
|
|
75
39
|
```
|
|
76
40
|
|
|
77
|
-
|
|
41
|
+
Logs are written to `~/.config/opencode/logs/dcp/YYYY-MM-DD.log`.
|
|
78
42
|
|
|
79
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";
|
|
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
|
|
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":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAE5B,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,4EAA4E;IAC5E,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACnC,UAAkB,CAAC,mBAAmB,GAAG,KAAK,CAAA;IACnD,CAAC;IAED,uEAAuE;IACvE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;IACvC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;
|
|
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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"}
|
package/dist/lib/janitor.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export declare class Janitor {
|
|
|
4
4
|
private client;
|
|
5
5
|
private stateManager;
|
|
6
6
|
private logger;
|
|
7
|
-
|
|
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;
|
|
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"}
|
package/dist/lib/janitor.js
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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:
|
|
283
|
+
message: message.trim(),
|
|
202
284
|
variant: "success",
|
|
203
|
-
duration:
|
|
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
|
-
|
|
210
|
-
totalCharsSaved
|
|
291
|
+
toolsSummary: Array.from(toolsSummary.entries())
|
|
211
292
|
});
|
|
212
293
|
}
|
|
213
294
|
catch (toastError) {
|
package/dist/lib/janitor.js.map
CHANGED
|
@@ -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 @@
|
|
|
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.
|
|
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": "
|
|
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": "
|
|
37
|
+
"@opencode-ai/plugin": ">=0.13.7",
|
|
38
38
|
"@types/node": "^22.0.0",
|
|
39
39
|
"typescript": "^5.7.0"
|
|
40
40
|
},
|