@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 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.9",
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",
@@ -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"}
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../lib/commands.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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
@@ -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"}