@tarquinen/opencode-dcp 0.1.10 → 0.1.11
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -146
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/janitor.d.ts +2 -1
- package/dist/lib/janitor.d.ts.map +1 -1
- package/dist/lib/janitor.js +40 -8
- package/dist/lib/janitor.js.map +1 -1
- package/dist/lib/prompt.d.ts +1 -1
- package/dist/lib/prompt.d.ts.map +1 -1
- package/dist/lib/prompt.js +5 -2
- package/dist/lib/prompt.js.map +1 -1
- package/dist/lib/state.d.ts +0 -7
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +2 -20
- package/dist/lib/state.js.map +1 -1
- package/package.json +3 -2
- package/dist/lib/factory.d.ts +0 -2
- package/dist/lib/factory.d.ts.map +0 -1
- package/dist/lib/factory.js +0 -12
- package/dist/lib/factory.js.map +0 -1
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":";IAgFQ;;OAEG;;;;IA8BH;;OAEG;;;;;;;;;;;;;AAzGX,wBAoPmB"}
|
package/dist/index.js
CHANGED
|
@@ -14,108 +14,56 @@ export default (async (ctx) => {
|
|
|
14
14
|
const logger = new Logger(config.debug);
|
|
15
15
|
const stateManager = new StateManager();
|
|
16
16
|
const toolParametersCache = new Map(); // callID -> parameters
|
|
17
|
-
const janitor = new Janitor(ctx.client, stateManager, logger, toolParametersCache);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const janitor = new Janitor(ctx.client, stateManager, logger, toolParametersCache, config.protectedTools);
|
|
18
|
+
const cacheToolParameters = (messages, component) => {
|
|
19
|
+
for (const message of messages) {
|
|
20
|
+
if (message.role !== 'assistant' || !Array.isArray(message.tool_calls)) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
for (const toolCall of message.tool_calls) {
|
|
24
|
+
if (!toolCall.id || !toolCall.function) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const params = typeof toolCall.function.arguments === 'string'
|
|
29
|
+
? JSON.parse(toolCall.function.arguments)
|
|
30
|
+
: toolCall.function.arguments;
|
|
31
|
+
toolParametersCache.set(toolCall.id, {
|
|
32
|
+
tool: toolCall.function.name,
|
|
33
|
+
parameters: params
|
|
34
|
+
});
|
|
35
|
+
logger.debug(component, "Cached tool parameters", {
|
|
36
|
+
callID: toolCall.id,
|
|
37
|
+
tool: toolCall.function.name,
|
|
38
|
+
hasParams: !!params
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
// Ignore JSON parse errors for individual tool calls
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
// Lightweight global fetch wrapper that only caches tool parameters so Janitor can display
|
|
48
|
+
// meaningful metadata even if the plugin loads mid-session before chat.params runs.
|
|
21
49
|
const originalGlobalFetch = globalThis.fetch;
|
|
22
|
-
// Wrap globalThis.fetch to intercept ALL fetch calls
|
|
23
|
-
// This works because even if auth providers set a custom fetch,
|
|
24
|
-
// they ultimately call fetch() which goes through globalThis.fetch
|
|
25
50
|
globalThis.fetch = async (input, init) => {
|
|
26
|
-
// Check if this looks like an AI API request by examining the body
|
|
27
51
|
if (init?.body && typeof init.body === 'string') {
|
|
28
52
|
try {
|
|
29
53
|
const body = JSON.parse(init.body);
|
|
30
|
-
// Only process requests that have a messages array (AI requests)
|
|
31
54
|
if (body.messages && Array.isArray(body.messages)) {
|
|
32
|
-
|
|
33
|
-
url: typeof input === 'string' ? input.substring(0, 80) : 'URL object',
|
|
34
|
-
messageCount: body.messages.length
|
|
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
|
-
}
|
|
63
|
-
// Try to extract session ID from the request (might be in headers or we track it)
|
|
64
|
-
// For now, we'll use a simpler approach: collect ALL pruned IDs from all sessions
|
|
65
|
-
// This is safe because tool_call_ids are globally unique
|
|
66
|
-
const toolMessages = body.messages.filter((m) => m.role === 'tool');
|
|
67
|
-
if (toolMessages.length > 0) {
|
|
68
|
-
logger.debug("global-fetch", "Found tool messages in request", {
|
|
69
|
-
toolMessageCount: toolMessages.length,
|
|
70
|
-
toolCallIds: toolMessages.map((m) => m.tool_call_id).slice(0, 5)
|
|
71
|
-
});
|
|
72
|
-
// Collect all pruned IDs across all sessions, excluding subagent sessions
|
|
73
|
-
const allSessions = await ctx.client.session.list();
|
|
74
|
-
const allPrunedIds = new Set();
|
|
75
|
-
if (allSessions.data) {
|
|
76
|
-
for (const session of allSessions.data) {
|
|
77
|
-
// Skip subagent sessions (don't log - it's normal and would spam logs)
|
|
78
|
-
if (session.parentID) {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const prunedIds = await stateManager.get(session.id);
|
|
82
|
-
prunedIds.forEach(id => allPrunedIds.add(id));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (allPrunedIds.size > 0) {
|
|
86
|
-
let replacedCount = 0;
|
|
87
|
-
body.messages = body.messages.map((m) => {
|
|
88
|
-
if (m.role === 'tool' && allPrunedIds.has(m.tool_call_id)) {
|
|
89
|
-
replacedCount++;
|
|
90
|
-
return {
|
|
91
|
-
...m,
|
|
92
|
-
content: '[Output removed to save context - information superseded or no longer needed]'
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return m;
|
|
96
|
-
});
|
|
97
|
-
if (replacedCount > 0) {
|
|
98
|
-
logger.info("global-fetch", "✂️ Replaced pruned tool messages", {
|
|
99
|
-
totalPrunedIds: allPrunedIds.size,
|
|
100
|
-
replacedCount: replacedCount,
|
|
101
|
-
totalMessages: body.messages.length
|
|
102
|
-
});
|
|
103
|
-
// Update the request body with modified messages
|
|
104
|
-
init.body = JSON.stringify(body);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
55
|
+
cacheToolParameters(body.messages, "global-fetch");
|
|
108
56
|
}
|
|
109
57
|
}
|
|
110
58
|
catch (e) {
|
|
111
|
-
//
|
|
59
|
+
// Ignore parse errors and fall through to original fetch
|
|
112
60
|
}
|
|
113
61
|
}
|
|
114
|
-
// Call the original fetch
|
|
115
62
|
return originalGlobalFetch(input, init);
|
|
116
63
|
};
|
|
117
64
|
logger.info("plugin", "Dynamic Context Pruning plugin initialized", {
|
|
118
65
|
debug: config.debug,
|
|
66
|
+
protectedTools: config.protectedTools,
|
|
119
67
|
logDirectory: join(homedir(), ".config", "opencode", "logs", "dcp"),
|
|
120
68
|
globalFetchWrapped: true
|
|
121
69
|
});
|
|
@@ -188,78 +136,84 @@ export default (async (ctx) => {
|
|
|
188
136
|
prunedCount: prunedIds.length,
|
|
189
137
|
prunedIds: prunedIds.length > 0 ? prunedIds : undefined
|
|
190
138
|
});
|
|
191
|
-
//
|
|
192
|
-
|
|
139
|
+
// Parse the request body once if possible for logging, caching, and filtering
|
|
140
|
+
let parsedBody;
|
|
141
|
+
if (init?.body && typeof init.body === 'string') {
|
|
193
142
|
try {
|
|
194
|
-
|
|
195
|
-
const toolMessages = bodyPreview.messages?.filter((m) => m.role === 'tool') || [];
|
|
196
|
-
logger.debug("pruning-fetch", "Request body before filtering", {
|
|
197
|
-
sessionId,
|
|
198
|
-
totalMessages: bodyPreview.messages?.length || 0,
|
|
199
|
-
toolMessages: toolMessages.length,
|
|
200
|
-
toolCallIds: toolMessages.map((m) => m.tool_call_id)
|
|
201
|
-
});
|
|
143
|
+
parsedBody = JSON.parse(init.body);
|
|
202
144
|
}
|
|
203
145
|
catch (e) {
|
|
204
|
-
// Ignore parse errors
|
|
146
|
+
// Ignore parse errors; we'll skip caching/filtering in this case
|
|
205
147
|
}
|
|
206
148
|
}
|
|
149
|
+
if (parsedBody?.messages) {
|
|
150
|
+
const toolMessages = parsedBody.messages.filter((m) => m.role === 'tool') || [];
|
|
151
|
+
logger.debug("pruning-fetch", "Request body before filtering", {
|
|
152
|
+
sessionId,
|
|
153
|
+
totalMessages: parsedBody.messages.length,
|
|
154
|
+
toolMessages: toolMessages.length,
|
|
155
|
+
toolCallIds: toolMessages.map((m) => m.tool_call_id)
|
|
156
|
+
});
|
|
157
|
+
// Capture tool call parameters from assistant messages so Janitor toast metadata stays rich
|
|
158
|
+
cacheToolParameters(parsedBody.messages, "pruning-fetch");
|
|
159
|
+
}
|
|
207
160
|
// Reset the count for this request
|
|
208
161
|
let prunedThisRequest = 0;
|
|
209
162
|
// Only attempt filtering if there are pruned IDs and a request body exists
|
|
210
163
|
if (prunedIds.length > 0 && init?.body) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
prunedThisRequest++;
|
|
222
|
-
return {
|
|
223
|
-
...m,
|
|
224
|
-
content: '[Output removed to save context - information superseded or no longer needed]'
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
return m;
|
|
164
|
+
let body = parsedBody;
|
|
165
|
+
if (!body && typeof init.body === 'string') {
|
|
166
|
+
try {
|
|
167
|
+
body = JSON.parse(init.body);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
logger.error("pruning-fetch", "Failed to parse/filter request body", {
|
|
171
|
+
sessionId,
|
|
172
|
+
error: error.message,
|
|
173
|
+
stack: error.stack
|
|
228
174
|
});
|
|
229
|
-
|
|
230
|
-
logger.info("pruning-fetch", "Replaced pruned tool messages", {
|
|
231
|
-
sessionId,
|
|
232
|
-
totalMessages: originalMessageCount,
|
|
233
|
-
replacedCount: prunedThisRequest,
|
|
234
|
-
prunedIds
|
|
235
|
-
});
|
|
236
|
-
// Log remaining tool messages
|
|
237
|
-
const remainingToolMessages = body.messages.filter((m) => m.role === 'tool');
|
|
238
|
-
logger.debug("pruning-fetch", "Tool messages after replacement", {
|
|
239
|
-
sessionId,
|
|
240
|
-
totalToolCount: remainingToolMessages.length,
|
|
241
|
-
toolCallIds: remainingToolMessages.map((m) => m.tool_call_id)
|
|
242
|
-
});
|
|
243
|
-
// Track how many were pruned for this request
|
|
244
|
-
requestPrunedCounts.set(sessionId, prunedThisRequest);
|
|
245
|
-
// Update the request body with modified messages
|
|
246
|
-
init.body = JSON.stringify(body);
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
logger.debug("pruning-fetch", "No messages replaced", {
|
|
250
|
-
sessionId,
|
|
251
|
-
messageCount: originalMessageCount
|
|
252
|
-
});
|
|
253
|
-
}
|
|
175
|
+
return existingFetch(fetchInput, init);
|
|
254
176
|
}
|
|
255
177
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
178
|
+
if (body?.messages && Array.isArray(body.messages)) {
|
|
179
|
+
const originalMessageCount = body.messages.length;
|
|
180
|
+
// Replace tool response messages whose tool_call_id is in the pruned list
|
|
181
|
+
// with a short placeholder message instead of removing them entirely.
|
|
182
|
+
// This preserves the message structure and avoids API validation errors.
|
|
183
|
+
body.messages = body.messages.map((m) => {
|
|
184
|
+
if (m.role === 'tool' && prunedIds.includes(m.tool_call_id)) {
|
|
185
|
+
prunedThisRequest++;
|
|
186
|
+
return {
|
|
187
|
+
...m,
|
|
188
|
+
content: '[Output removed to save context - information superseded or no longer needed]'
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return m;
|
|
261
192
|
});
|
|
262
|
-
|
|
193
|
+
if (prunedThisRequest > 0) {
|
|
194
|
+
logger.info("pruning-fetch", "Replaced pruned tool messages", {
|
|
195
|
+
sessionId,
|
|
196
|
+
totalMessages: originalMessageCount,
|
|
197
|
+
replacedCount: prunedThisRequest,
|
|
198
|
+
prunedIds
|
|
199
|
+
});
|
|
200
|
+
// Log remaining tool messages
|
|
201
|
+
const remainingToolMessages = body.messages.filter((m) => m.role === 'tool');
|
|
202
|
+
logger.debug("pruning-fetch", "Tool messages after replacement", {
|
|
203
|
+
sessionId,
|
|
204
|
+
totalToolCount: remainingToolMessages.length,
|
|
205
|
+
toolCallIds: remainingToolMessages.map((m) => m.tool_call_id)
|
|
206
|
+
});
|
|
207
|
+
// Update the request body with modified messages
|
|
208
|
+
init.body = JSON.stringify(body);
|
|
209
|
+
parsedBody = body;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
logger.debug("pruning-fetch", "No messages replaced", {
|
|
213
|
+
sessionId,
|
|
214
|
+
messageCount: originalMessageCount
|
|
215
|
+
});
|
|
216
|
+
}
|
|
263
217
|
}
|
|
264
218
|
}
|
|
265
219
|
// Call the EXISTING fetch (which might be from auth provider) with potentially modified body
|
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,mBAAmB,GAAG,IAAI,GAAG,EAAe,CAAA,CAAC,uBAAuB;IAC1E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,MAAM,EAAE,CAAA;CAC3B;AAOD,wBAAgB,SAAS,IAAI,YAAY,CAQxC"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
const defaultConfig = {
|
|
2
|
-
debug: false // Default to false, can be enabled via environment variable
|
|
2
|
+
debug: false, // Default to false, can be enabled via environment variable
|
|
3
|
+
protectedTools: ['task'] // Tools that should never be pruned
|
|
3
4
|
};
|
|
4
5
|
export function getConfig() {
|
|
5
6
|
// Check for environment variable
|
|
6
7
|
const debugEnv = process.env.OPENCODE_DCP_DEBUG;
|
|
7
8
|
return {
|
|
8
|
-
debug: debugEnv === 'true' || debugEnv === '1' || defaultConfig.debug
|
|
9
|
+
debug: debugEnv === 'true' || debugEnv === '1' || defaultConfig.debug,
|
|
10
|
+
protectedTools: defaultConfig.protectedTools
|
|
9
11
|
};
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,aAAa,GAAiB;IAChC,KAAK,EAAE,KAAK,EAAE,4DAA4D;IAC1E,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,oCAAoC;CAChE,CAAA;AAED,MAAM,UAAU,SAAS;IACrB,iCAAiC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAA;IAE/C,OAAO;QACH,KAAK,EAAE,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,GAAG,IAAI,aAAa,CAAC,KAAK;QACrE,cAAc,EAAE,aAAa,CAAC,cAAc;KAC/C,CAAA;AACL,CAAC"}
|
package/dist/lib/janitor.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ export declare class Janitor {
|
|
|
5
5
|
private stateManager;
|
|
6
6
|
private logger;
|
|
7
7
|
private toolParametersCache;
|
|
8
|
-
|
|
8
|
+
private protectedTools;
|
|
9
|
+
constructor(client: any, stateManager: StateManager, logger: Logger, toolParametersCache: Map<string, any>, protectedTools: string[]);
|
|
9
10
|
run(sessionID: string): Promise<void>;
|
|
10
11
|
}
|
|
11
12
|
//# 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;AAG3C,qBAAa,OAAO;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,mBAAmB;
|
|
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;IAC3B,OAAO,CAAC,cAAc;gBAJd,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EACrC,cAAc,EAAE,MAAM,EAAE;IAG9B,GAAG,CAAC,SAAS,EAAE,MAAM;CAsX9B"}
|
package/dist/lib/janitor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateObject } from "ai";
|
|
2
|
-
import {
|
|
2
|
+
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { buildAnalysisPrompt } from "./prompt";
|
|
5
5
|
export class Janitor {
|
|
@@ -7,11 +7,13 @@ export class Janitor {
|
|
|
7
7
|
stateManager;
|
|
8
8
|
logger;
|
|
9
9
|
toolParametersCache;
|
|
10
|
-
|
|
10
|
+
protectedTools;
|
|
11
|
+
constructor(client, stateManager, logger, toolParametersCache, protectedTools) {
|
|
11
12
|
this.client = client;
|
|
12
13
|
this.stateManager = stateManager;
|
|
13
14
|
this.logger = logger;
|
|
14
15
|
this.toolParametersCache = toolParametersCache;
|
|
16
|
+
this.protectedTools = protectedTools;
|
|
15
17
|
}
|
|
16
18
|
async run(sessionID) {
|
|
17
19
|
this.logger.info("janitor", "Starting analysis", { sessionID });
|
|
@@ -127,13 +129,41 @@ export class Janitor {
|
|
|
127
129
|
alreadyPrunedCount: alreadyPrunedIds.length,
|
|
128
130
|
unprunedCount: unprunedToolCallIds.length
|
|
129
131
|
});
|
|
132
|
+
// Filter out protected tools from being considered for pruning
|
|
133
|
+
const protectedToolCallIds = [];
|
|
134
|
+
const prunableToolCallIds = unprunedToolCallIds.filter(id => {
|
|
135
|
+
const metadata = toolMetadata.get(id);
|
|
136
|
+
if (metadata && this.protectedTools.includes(metadata.tool)) {
|
|
137
|
+
protectedToolCallIds.push(id);
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
});
|
|
142
|
+
if (protectedToolCallIds.length > 0) {
|
|
143
|
+
this.logger.debug("janitor", "Protected tools excluded from pruning", {
|
|
144
|
+
sessionID,
|
|
145
|
+
protectedCount: protectedToolCallIds.length,
|
|
146
|
+
protectedTools: protectedToolCallIds.map(id => {
|
|
147
|
+
const metadata = toolMetadata.get(id);
|
|
148
|
+
return { id, tool: metadata?.tool };
|
|
149
|
+
})
|
|
150
|
+
});
|
|
151
|
+
}
|
|
130
152
|
// If there are no unpruned tool calls, skip analysis
|
|
131
|
-
if (
|
|
132
|
-
this.logger.debug("janitor", "No
|
|
153
|
+
if (prunableToolCallIds.length === 0) {
|
|
154
|
+
this.logger.debug("janitor", "No prunable tool calls found, skipping analysis", {
|
|
155
|
+
sessionID,
|
|
156
|
+
protectedCount: protectedToolCallIds.length
|
|
157
|
+
});
|
|
133
158
|
return;
|
|
134
159
|
}
|
|
135
160
|
// Use big-pickle model - no auth needed!
|
|
136
|
-
|
|
161
|
+
// Use big-pickle model (public and free, no auth needed)
|
|
162
|
+
const openai = createOpenAICompatible({
|
|
163
|
+
baseURL: "https://opencode.ai/zen/v1",
|
|
164
|
+
name: "opencode",
|
|
165
|
+
});
|
|
166
|
+
const model = openai("big-pickle");
|
|
137
167
|
this.logger.debug("janitor", "Starting shadow inference", { sessionID });
|
|
138
168
|
// Analyze which tool calls are obsolete
|
|
139
169
|
const result = await generateObject({
|
|
@@ -143,7 +173,7 @@ export class Janitor {
|
|
|
143
173
|
pruned_tool_call_ids: z.array(z.string()),
|
|
144
174
|
reasoning: z.string(),
|
|
145
175
|
}),
|
|
146
|
-
prompt: buildAnalysisPrompt(
|
|
176
|
+
prompt: buildAnalysisPrompt(prunableToolCallIds, messages, this.protectedTools)
|
|
147
177
|
});
|
|
148
178
|
// Expand batch tool IDs to include their children
|
|
149
179
|
const expandedPrunedIds = new Set();
|
|
@@ -268,7 +298,9 @@ export class Janitor {
|
|
|
268
298
|
}
|
|
269
299
|
}
|
|
270
300
|
// Format the message with tool details
|
|
271
|
-
|
|
301
|
+
const toolText = finalPrunedIds.length === 1 ? 'tool' : 'tools';
|
|
302
|
+
const title = `Pruned ${finalPrunedIds.length} ${toolText} from context`;
|
|
303
|
+
let message = `~${estimatedTokensSaved.toLocaleString()} tokens saved\n`;
|
|
272
304
|
for (const [toolName, params] of toolsSummary.entries()) {
|
|
273
305
|
if (params.length > 0) {
|
|
274
306
|
message += `\n${toolName} (${params.length}):\n`;
|
|
@@ -289,7 +321,7 @@ export class Janitor {
|
|
|
289
321
|
}
|
|
290
322
|
await this.client.tui.showToast({
|
|
291
323
|
body: {
|
|
292
|
-
title:
|
|
324
|
+
title: title,
|
|
293
325
|
message: message.trim(),
|
|
294
326
|
variant: "success",
|
|
295
327
|
duration: 8000 // Longer duration since we're showing more info
|
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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"}
|
package/dist/lib/prompt.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function buildAnalysisPrompt(unprunedToolCallIds: string[], messages: any[]): string;
|
|
1
|
+
export declare function buildAnalysisPrompt(unprunedToolCallIds: string[], messages: any[], protectedTools: string[]): string;
|
|
2
2
|
//# sourceMappingURL=prompt.d.ts.map
|
package/dist/lib/prompt.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,CAoCpH"}
|
package/dist/lib/prompt.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export function buildAnalysisPrompt(unprunedToolCallIds, messages) {
|
|
1
|
+
export function buildAnalysisPrompt(unprunedToolCallIds, messages, protectedTools) {
|
|
2
|
+
const protectedToolsText = protectedTools.length > 0
|
|
3
|
+
? `- NEVER prune the following protected tools: ${protectedTools.join(", ")}\n`
|
|
4
|
+
: '';
|
|
2
5
|
return `You are a conversation analyzer that identifies obsolete tool outputs in a coding session.
|
|
3
6
|
|
|
4
7
|
Your task: Analyze the session history and identify tool call IDs whose outputs are NO LONGER RELEVANT to the current conversation context.
|
|
@@ -11,7 +14,7 @@ Guidelines for identifying obsolete tool calls:
|
|
|
11
14
|
5. Tool calls whose information has been replaced by more recent operations
|
|
12
15
|
|
|
13
16
|
DO NOT prune:
|
|
14
|
-
- Recent tool calls
|
|
17
|
+
${protectedToolsText}- Recent tool calls
|
|
15
18
|
- Tool calls that modified state (edits, writes, etc.)
|
|
16
19
|
- Tool calls whose outputs are actively being discussed
|
|
17
20
|
- Tool calls that produced errors still being debugged
|
package/dist/lib/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,mBAA6B,EAAE,QAAe;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../lib/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,mBAA6B,EAAE,QAAe,EAAE,cAAwB;IACxG,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,gDAAgD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC/E,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;;;;;;;;;;;EAYT,kBAAkB;;;;;;;4DAOwC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGxF,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;wFAQqD,CAAA;AACxF,CAAC"}
|
package/dist/lib/state.d.ts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
export interface PruningMetadata {
|
|
2
|
-
prunedIds: string[];
|
|
3
|
-
lastPruneCount: number;
|
|
4
|
-
}
|
|
5
1
|
export declare class StateManager {
|
|
6
2
|
private state;
|
|
7
3
|
get(sessionID: string): Promise<string[]>;
|
|
8
4
|
set(sessionID: string, prunedIds: string[]): Promise<void>;
|
|
9
|
-
getLastPruneCount(sessionID: string): Promise<number>;
|
|
10
|
-
resetLastPruneCount(sessionID: string): Promise<void>;
|
|
11
|
-
clear(sessionID: string): Promise<void>;
|
|
12
5
|
}
|
|
13
6
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/lib/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../lib/state.ts"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../lib/state.ts"],"names":[],"mappings":"AAEA,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAmC;IAE1C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnE"}
|
package/dist/lib/state.js
CHANGED
|
@@ -2,28 +2,10 @@
|
|
|
2
2
|
export class StateManager {
|
|
3
3
|
state = new Map();
|
|
4
4
|
async get(sessionID) {
|
|
5
|
-
return this.state.get(sessionID)
|
|
5
|
+
return this.state.get(sessionID) ?? [];
|
|
6
6
|
}
|
|
7
7
|
async set(sessionID, prunedIds) {
|
|
8
|
-
|
|
9
|
-
const previousCount = existing?.prunedIds.length ?? 0;
|
|
10
|
-
const newCount = prunedIds.length - previousCount;
|
|
11
|
-
this.state.set(sessionID, {
|
|
12
|
-
prunedIds,
|
|
13
|
-
lastPruneCount: newCount
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
async getLastPruneCount(sessionID) {
|
|
17
|
-
return this.state.get(sessionID)?.lastPruneCount ?? 0;
|
|
18
|
-
}
|
|
19
|
-
async resetLastPruneCount(sessionID) {
|
|
20
|
-
const existing = this.state.get(sessionID);
|
|
21
|
-
if (existing) {
|
|
22
|
-
existing.lastPruneCount = 0;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
async clear(sessionID) {
|
|
26
|
-
this.state.delete(sessionID);
|
|
8
|
+
this.state.set(sessionID, prunedIds);
|
|
27
9
|
}
|
|
28
10
|
}
|
|
29
11
|
//# sourceMappingURL=state.js.map
|
package/dist/lib/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../lib/state.ts"],"names":[],"mappings":"AAAA,eAAe;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../lib/state.ts"],"names":[],"mappings":"AAAA,eAAe;AAEf,MAAM,OAAO,YAAY;IACb,KAAK,GAA0B,IAAI,GAAG,EAAE,CAAA;IAEhD,KAAK,CAAC,GAAG,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,SAAmB;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
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.11",
|
|
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",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"scripts": {
|
|
10
|
-
"
|
|
10
|
+
"clean": "rm -rf dist",
|
|
11
|
+
"build": "npm run clean && tsc",
|
|
11
12
|
"postbuild": "rm -rf dist/logs",
|
|
12
13
|
"prepublishOnly": "npm run build",
|
|
13
14
|
"dev": "opencode plugin dev",
|
package/dist/lib/factory.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../lib/factory.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,+CAShC"}
|
package/dist/lib/factory.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// lib/factory.ts
|
|
2
|
-
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
3
|
-
export function createShadowModel() {
|
|
4
|
-
// No credentials needed - big-pickle is public and free
|
|
5
|
-
const openai = createOpenAICompatible({
|
|
6
|
-
baseURL: "https://opencode.ai/zen/v1",
|
|
7
|
-
// No apiKey required - the endpoint is public
|
|
8
|
-
name: "opencode",
|
|
9
|
-
});
|
|
10
|
-
return openai("big-pickle");
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=factory.js.map
|
package/dist/lib/factory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../lib/factory.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAElE,MAAM,UAAU,iBAAiB;IAC7B,wDAAwD;IACxD,MAAM,MAAM,GAAG,sBAAsB,CAAC;QAClC,OAAO,EAAE,4BAA4B;QACrC,8CAA8C;QAC9C,IAAI,EAAE,UAAU;KACnB,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,YAAY,CAAC,CAAA;AAC/B,CAAC"}
|