@tarquinen/opencode-dcp 0.1.9 → 0.1.10
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/package.json +1 -1
- package/dist/lib/commands.d.ts +0 -17
- package/dist/lib/commands.d.ts.map +0 -1
- package/dist/lib/commands.js +0 -214
- package/dist/lib/commands.js.map +0 -1
- package/dist/lib/response.d.ts +0 -7
- package/dist/lib/response.d.ts.map +0 -1
- package/dist/lib/response.js +0 -60
- package/dist/lib/response.js.map +0 -1
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.10",
|
|
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",
|
package/dist/lib/commands.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/lib/commands.js
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
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
|
package/dist/lib/commands.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../lib/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/response.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/lib/response.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
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
|
package/dist/lib/response.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|