@tarquinen/opencode-dcp 0.3.9 → 0.3.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/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -275
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/janitor.d.ts.map +1 -1
- package/dist/lib/janitor.js +63 -215
- package/dist/lib/janitor.js.map +1 -1
- package/dist/lib/logger.d.ts +5 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +34 -17
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/model-selector.d.ts.map +1 -1
- package/dist/lib/model-selector.js +4 -71
- package/dist/lib/model-selector.js.map +1 -1
- package/dist/lib/state.d.ts +7 -0
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +13 -0
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/tokenizer.d.ts +1 -3
- package/dist/lib/tokenizer.d.ts.map +1 -1
- package/dist/lib/tokenizer.js +4 -17
- package/dist/lib/tokenizer.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/logger.js
CHANGED
|
@@ -19,25 +19,51 @@ export class Logger {
|
|
|
19
19
|
await mkdir(this.logDir, { recursive: true });
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Formats data object into a compact, readable string
|
|
24
|
+
* e.g., {saved: "~4.1K", pruned: 4, duplicates: 0} -> "saved=~4.1K pruned=4 duplicates=0"
|
|
25
|
+
*/
|
|
26
|
+
formatData(data) {
|
|
27
|
+
if (!data)
|
|
28
|
+
return "";
|
|
29
|
+
const parts = [];
|
|
30
|
+
for (const [key, value] of Object.entries(data)) {
|
|
31
|
+
if (value === undefined || value === null)
|
|
32
|
+
continue;
|
|
33
|
+
// Format arrays compactly
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
if (value.length === 0)
|
|
36
|
+
continue;
|
|
37
|
+
parts.push(`${key}=[${value.slice(0, 3).join(",")}${value.length > 3 ? `...+${value.length - 3}` : ""}]`);
|
|
38
|
+
}
|
|
39
|
+
// Format objects inline if small, skip if large
|
|
40
|
+
else if (typeof value === 'object') {
|
|
41
|
+
const str = JSON.stringify(value);
|
|
42
|
+
if (str.length < 50) {
|
|
43
|
+
parts.push(`${key}=${str}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Format primitives directly
|
|
47
|
+
else {
|
|
48
|
+
parts.push(`${key}=${value}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return parts.join(" ");
|
|
52
|
+
}
|
|
22
53
|
async write(level, component, message, data) {
|
|
23
54
|
if (!this.enabled)
|
|
24
55
|
return;
|
|
25
56
|
try {
|
|
26
57
|
await this.ensureLogDir();
|
|
27
58
|
const timestamp = new Date().toISOString();
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
component,
|
|
32
|
-
message,
|
|
33
|
-
...(data && { data })
|
|
34
|
-
};
|
|
59
|
+
const dataStr = this.formatData(data);
|
|
60
|
+
// Simple, readable format: TIMESTAMP LEVEL component: message | key=value key=value
|
|
61
|
+
const logLine = `${timestamp} ${level.padEnd(5)} ${component}: ${message}${dataStr ? " | " + dataStr : ""}\n`;
|
|
35
62
|
const dailyLogDir = join(this.logDir, "daily");
|
|
36
63
|
if (!existsSync(dailyLogDir)) {
|
|
37
64
|
await mkdir(dailyLogDir, { recursive: true });
|
|
38
65
|
}
|
|
39
66
|
const logFile = join(dailyLogDir, `${new Date().toISOString().split('T')[0]}.log`);
|
|
40
|
-
const logLine = JSON.stringify(logEntry) + "\n";
|
|
41
67
|
await writeFile(logFile, logLine, { flag: "a" });
|
|
42
68
|
}
|
|
43
69
|
catch (error) {
|
|
@@ -117,7 +143,6 @@ export class Logger {
|
|
|
117
143
|
// We detect being "inside a string" by tracking quotes
|
|
118
144
|
let result = '';
|
|
119
145
|
let inString = false;
|
|
120
|
-
let escaped = false;
|
|
121
146
|
for (let i = 0; i < jsonText.length; i++) {
|
|
122
147
|
const char = jsonText[i];
|
|
123
148
|
const prevChar = i > 0 ? jsonText[i - 1] : '';
|
|
@@ -206,14 +231,6 @@ export class Logger {
|
|
|
206
231
|
// Pretty print with 2-space indentation
|
|
207
232
|
const jsonString = JSON.stringify(content, null, 2);
|
|
208
233
|
await writeFile(filepath, jsonString);
|
|
209
|
-
// Log that we saved it
|
|
210
|
-
await this.debug("logger", "Saved AI context", {
|
|
211
|
-
sessionID,
|
|
212
|
-
filepath,
|
|
213
|
-
messageCount: messages.length,
|
|
214
|
-
isJanitorShadow,
|
|
215
|
-
parsed: isJanitorShadow
|
|
216
|
-
});
|
|
217
234
|
}
|
|
218
235
|
catch (error) {
|
|
219
236
|
// Silently fail - don't break the plugin if logging fails
|
package/dist/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAE5B,MAAM,OAAO,MAAM;IACP,MAAM,CAAQ;IACf,OAAO,CAAS;IACf,WAAW,GAAW,CAAC,CAAA,CAAC,yCAAyC;IAEzE,YAAY,OAAgB;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,qFAAqF;QACrF,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACxD,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,SAAiB,EAAE,OAAe,EAAE,IAAU;QAC7E,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../lib/model-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,SAAS;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAmBF,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;CAC3B;AA8CD;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC7B,YAAY,CAAC,EAAE,SAAS,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../lib/model-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,SAAS;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAmBF,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;CAC3B;AA8CD;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC7B,YAAY,CAAC,EAAE,SAAS,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,oBAAoB,CAAC,CAiF/B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAqBjG"}
|
|
@@ -89,7 +89,6 @@ async function importOpencodeAI(logger, maxRetries = 3, delayMs = 100, workspace
|
|
|
89
89
|
* @returns Selected model with metadata about the selection
|
|
90
90
|
*/
|
|
91
91
|
export async function selectModel(currentModel, logger, configModel, workspaceDir) {
|
|
92
|
-
logger?.info('model-selector', 'Model selection started', { currentModel, configModel, workspaceDir });
|
|
93
92
|
// Lazy import with retry logic - handles plugin initialization timing issues
|
|
94
93
|
// Some providers (like openai via @openhax/codex) may not be ready on first attempt
|
|
95
94
|
// Pass workspaceDir so OpencodeAI can find project-level config and plugins
|
|
@@ -99,22 +98,12 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
99
98
|
if (configModel) {
|
|
100
99
|
const parts = configModel.split('/');
|
|
101
100
|
if (parts.length !== 2) {
|
|
102
|
-
logger?.warn('model-selector', '
|
|
103
|
-
configModel
|
|
104
|
-
});
|
|
101
|
+
logger?.warn('model-selector', 'Invalid config model format', { configModel });
|
|
105
102
|
}
|
|
106
103
|
else {
|
|
107
104
|
const [providerID, modelID] = parts;
|
|
108
|
-
logger?.debug('model-selector', 'Attempting to use config-specified model', {
|
|
109
|
-
providerID,
|
|
110
|
-
modelID
|
|
111
|
-
});
|
|
112
105
|
try {
|
|
113
106
|
const model = await opencodeAI.getLanguageModel(providerID, modelID);
|
|
114
|
-
logger?.info('model-selector', '✓ Successfully using config-specified model', {
|
|
115
|
-
providerID,
|
|
116
|
-
modelID
|
|
117
|
-
});
|
|
118
107
|
return {
|
|
119
108
|
model,
|
|
120
109
|
modelInfo: { providerID, modelID },
|
|
@@ -123,9 +112,7 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
123
112
|
};
|
|
124
113
|
}
|
|
125
114
|
catch (error) {
|
|
126
|
-
logger?.warn('model-selector',
|
|
127
|
-
providerID,
|
|
128
|
-
modelID,
|
|
115
|
+
logger?.warn('model-selector', `Config model failed: ${providerID}/${modelID}`, {
|
|
129
116
|
error: error.message
|
|
130
117
|
});
|
|
131
118
|
failedModelInfo = { providerID, modelID };
|
|
@@ -135,27 +122,14 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
135
122
|
// Step 2: Try user's current model (if not skipped provider)
|
|
136
123
|
if (currentModel) {
|
|
137
124
|
if (shouldSkipProvider(currentModel.providerID)) {
|
|
138
|
-
logger?.info('model-selector', 'Skipping user model (provider not suitable for background tasks)', {
|
|
139
|
-
providerID: currentModel.providerID,
|
|
140
|
-
modelID: currentModel.modelID,
|
|
141
|
-
reason: 'github-copilot and anthropic are skipped for analysis'
|
|
142
|
-
});
|
|
143
125
|
// Track as failed so we can show toast
|
|
144
126
|
if (!failedModelInfo) {
|
|
145
127
|
failedModelInfo = currentModel;
|
|
146
128
|
}
|
|
147
129
|
}
|
|
148
130
|
else {
|
|
149
|
-
logger?.debug('model-selector', 'Attempting to use user\'s current model', {
|
|
150
|
-
providerID: currentModel.providerID,
|
|
151
|
-
modelID: currentModel.modelID
|
|
152
|
-
});
|
|
153
131
|
try {
|
|
154
132
|
const model = await opencodeAI.getLanguageModel(currentModel.providerID, currentModel.modelID);
|
|
155
|
-
logger?.info('model-selector', '✓ Successfully using user\'s current model', {
|
|
156
|
-
providerID: currentModel.providerID,
|
|
157
|
-
modelID: currentModel.modelID
|
|
158
|
-
});
|
|
159
133
|
return {
|
|
160
134
|
model,
|
|
161
135
|
modelInfo: currentModel,
|
|
@@ -164,11 +138,6 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
164
138
|
};
|
|
165
139
|
}
|
|
166
140
|
catch (error) {
|
|
167
|
-
logger?.warn('model-selector', '✗ Failed to use user\'s current model', {
|
|
168
|
-
providerID: currentModel.providerID,
|
|
169
|
-
modelID: currentModel.modelID,
|
|
170
|
-
error: error.message
|
|
171
|
-
});
|
|
172
141
|
if (!failedModelInfo) {
|
|
173
142
|
failedModelInfo = currentModel;
|
|
174
143
|
}
|
|
@@ -176,38 +145,15 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
176
145
|
}
|
|
177
146
|
}
|
|
178
147
|
// Step 3: Try fallback models from authenticated providers
|
|
179
|
-
logger?.debug('model-selector', 'Fetching available authenticated providers');
|
|
180
148
|
const providers = await opencodeAI.listProviders();
|
|
181
|
-
const availableProviderIDs = Object.keys(providers);
|
|
182
|
-
logger?.info('model-selector', 'Available authenticated providers', {
|
|
183
|
-
providerCount: availableProviderIDs.length,
|
|
184
|
-
providerIDs: availableProviderIDs,
|
|
185
|
-
providers: Object.entries(providers).map(([id, info]) => ({
|
|
186
|
-
id,
|
|
187
|
-
source: info.source,
|
|
188
|
-
name: info.info?.name
|
|
189
|
-
}))
|
|
190
|
-
});
|
|
191
|
-
logger?.debug('model-selector', 'Attempting fallback models from providers', {
|
|
192
|
-
priorityOrder: PROVIDER_PRIORITY
|
|
193
|
-
});
|
|
194
149
|
for (const providerID of PROVIDER_PRIORITY) {
|
|
195
|
-
if (!providers[providerID])
|
|
196
|
-
logger?.debug('model-selector', `Skipping ${providerID} (not authenticated)`);
|
|
150
|
+
if (!providers[providerID])
|
|
197
151
|
continue;
|
|
198
|
-
}
|
|
199
152
|
const fallbackModelID = FALLBACK_MODELS[providerID];
|
|
200
|
-
if (!fallbackModelID)
|
|
201
|
-
logger?.debug('model-selector', `Skipping ${providerID} (no fallback model configured)`);
|
|
153
|
+
if (!fallbackModelID)
|
|
202
154
|
continue;
|
|
203
|
-
}
|
|
204
|
-
logger?.debug('model-selector', `Attempting ${providerID}/${fallbackModelID}`);
|
|
205
155
|
try {
|
|
206
156
|
const model = await opencodeAI.getLanguageModel(providerID, fallbackModelID);
|
|
207
|
-
logger?.info('model-selector', `✓ Successfully using fallback model`, {
|
|
208
|
-
providerID,
|
|
209
|
-
modelID: fallbackModelID
|
|
210
|
-
});
|
|
211
157
|
return {
|
|
212
158
|
model,
|
|
213
159
|
modelInfo: { providerID, modelID: fallbackModelID },
|
|
@@ -217,9 +163,6 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
217
163
|
};
|
|
218
164
|
}
|
|
219
165
|
catch (error) {
|
|
220
|
-
logger?.warn('model-selector', `✗ Failed to use ${providerID}/${fallbackModelID}`, {
|
|
221
|
-
error: error.message
|
|
222
|
-
});
|
|
223
166
|
continue;
|
|
224
167
|
}
|
|
225
168
|
}
|
|
@@ -230,13 +173,8 @@ export async function selectModel(currentModel, logger, configModel, workspaceDi
|
|
|
230
173
|
* This can be used by the plugin to get the current session's model
|
|
231
174
|
*/
|
|
232
175
|
export function extractModelFromSession(sessionState, logger) {
|
|
233
|
-
logger?.debug('model-selector', 'Extracting model from session state');
|
|
234
176
|
// Try to get from ACP session state
|
|
235
177
|
if (sessionState?.model?.providerID && sessionState?.model?.modelID) {
|
|
236
|
-
logger?.info('model-selector', 'Found model in ACP session state', {
|
|
237
|
-
providerID: sessionState.model.providerID,
|
|
238
|
-
modelID: sessionState.model.modelID
|
|
239
|
-
});
|
|
240
178
|
return {
|
|
241
179
|
providerID: sessionState.model.providerID,
|
|
242
180
|
modelID: sessionState.model.modelID
|
|
@@ -246,17 +184,12 @@ export function extractModelFromSession(sessionState, logger) {
|
|
|
246
184
|
if (sessionState?.messages && Array.isArray(sessionState.messages)) {
|
|
247
185
|
const lastMessage = sessionState.messages[sessionState.messages.length - 1];
|
|
248
186
|
if (lastMessage?.model?.providerID && lastMessage?.model?.modelID) {
|
|
249
|
-
logger?.info('model-selector', 'Found model in last message', {
|
|
250
|
-
providerID: lastMessage.model.providerID,
|
|
251
|
-
modelID: lastMessage.model.modelID
|
|
252
|
-
});
|
|
253
187
|
return {
|
|
254
188
|
providerID: lastMessage.model.providerID,
|
|
255
189
|
modelID: lastMessage.model.modelID
|
|
256
190
|
};
|
|
257
191
|
}
|
|
258
192
|
}
|
|
259
|
-
logger?.warn('model-selector', 'Could not extract model from session state');
|
|
260
193
|
return undefined;
|
|
261
194
|
}
|
|
262
195
|
//# sourceMappingURL=model-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selector.js","sourceRoot":"","sources":["../../lib/model-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2B;IACnD,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,kBAAkB;IAC7B,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,eAAe;IACzB,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,mBAAmB;IAC5B,GAAG,EAAE,eAAe;IACpB,QAAQ,EAAE,YAAY;CACzB,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACtB,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,UAAU;IACV,KAAK;IACL,SAAS;IACT,KAAK;IACL,UAAU;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAUvD;;GAEG;AACH,SAAS,kBAAkB,CAAC,UAAkB;IAC1C,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,MAAe,EAAE,aAAqB,CAAC,EAAE,UAAkB,GAAG,EAAE,YAAqB;IACjH,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;YACzE,OAAO,IAAI,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,SAAS,GAAG,KAAK,CAAC;YAElB,oEAAoE;YACpE,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACnD,MAAM,EAAE,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,OAAO,IAAI,UAAU,qBAAqB,EAAE;oBAC1F,KAAK,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;gBAEH,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACvB,iDAAiD;oBACjD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;oBACrE,SAAS;gBACb,CAAC;YACL,CAAC;YAED,gCAAgC;YAChC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,YAAwB,EACxB,MAAe,EACf,WAAoB,EACpB,YAAqB;IAErB,
|
|
1
|
+
{"version":3,"file":"model-selector.js","sourceRoot":"","sources":["../../lib/model-selector.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/state.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
export interface SessionStats {
|
|
2
|
+
totalToolsPruned: number;
|
|
3
|
+
totalTokensSaved: number;
|
|
4
|
+
}
|
|
1
5
|
export declare class StateManager {
|
|
2
6
|
private state;
|
|
7
|
+
private stats;
|
|
3
8
|
get(sessionID: string): Promise<string[]>;
|
|
4
9
|
set(sessionID: string, prunedIds: string[]): Promise<void>;
|
|
10
|
+
getStats(sessionID: string): Promise<SessionStats>;
|
|
11
|
+
addStats(sessionID: string, toolsPruned: number, tokensSaved: number): Promise<SessionStats>;
|
|
5
12
|
}
|
|
6
13
|
//# 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,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAmC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../lib/state.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;CAC3B;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,KAAK,CAAuC;IAE9C,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;IAI1D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIlD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CASrG"}
|
package/dist/lib/state.js
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
// lib/state.ts
|
|
2
2
|
export class StateManager {
|
|
3
3
|
state = new Map();
|
|
4
|
+
stats = new Map();
|
|
4
5
|
async get(sessionID) {
|
|
5
6
|
return this.state.get(sessionID) ?? [];
|
|
6
7
|
}
|
|
7
8
|
async set(sessionID, prunedIds) {
|
|
8
9
|
this.state.set(sessionID, prunedIds);
|
|
9
10
|
}
|
|
11
|
+
async getStats(sessionID) {
|
|
12
|
+
return this.stats.get(sessionID) ?? { totalToolsPruned: 0, totalTokensSaved: 0 };
|
|
13
|
+
}
|
|
14
|
+
async addStats(sessionID, toolsPruned, tokensSaved) {
|
|
15
|
+
const current = await this.getStats(sessionID);
|
|
16
|
+
const updated = {
|
|
17
|
+
totalToolsPruned: current.totalToolsPruned + toolsPruned,
|
|
18
|
+
totalTokensSaved: current.totalTokensSaved + tokensSaved
|
|
19
|
+
};
|
|
20
|
+
this.stats.set(sessionID, updated);
|
|
21
|
+
return updated;
|
|
22
|
+
}
|
|
10
23
|
}
|
|
11
24
|
//# 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;AAOf,MAAM,OAAO,YAAY;IACb,KAAK,GAA0B,IAAI,GAAG,EAAE,CAAA;IACxC,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEpD,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;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAA;IACpF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,WAAmB,EAAE,WAAmB;QACtE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAiB;YAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,GAAG,WAAW;YACxD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,GAAG,WAAW;SAC3D,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAClC,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ"}
|
package/dist/lib/tokenizer.d.ts
CHANGED
|
@@ -9,15 +9,13 @@
|
|
|
9
9
|
* during plugin initialization. The package is only loaded when tokenization
|
|
10
10
|
* is actually needed.
|
|
11
11
|
*/
|
|
12
|
-
import type { Logger } from './logger';
|
|
13
12
|
/**
|
|
14
13
|
* Batch estimates tokens for multiple text samples
|
|
15
14
|
*
|
|
16
15
|
* @param texts - Array of text strings to tokenize
|
|
17
|
-
* @param logger - Optional logger instance
|
|
18
16
|
* @returns Array of token counts
|
|
19
17
|
*/
|
|
20
|
-
export declare function estimateTokensBatch(texts: string[]
|
|
18
|
+
export declare function estimateTokensBatch(texts: string[]): Promise<number[]>;
|
|
21
19
|
/**
|
|
22
20
|
* Formats token count for display (e.g., 1500 -> "1.5K", 50 -> "50")
|
|
23
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../lib/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../lib/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS5E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD"}
|
package/dist/lib/tokenizer.js
CHANGED
|
@@ -13,29 +13,16 @@
|
|
|
13
13
|
* Batch estimates tokens for multiple text samples
|
|
14
14
|
*
|
|
15
15
|
* @param texts - Array of text strings to tokenize
|
|
16
|
-
* @param logger - Optional logger instance
|
|
17
16
|
* @returns Array of token counts
|
|
18
17
|
*/
|
|
19
|
-
export async function estimateTokensBatch(texts
|
|
18
|
+
export async function estimateTokensBatch(texts) {
|
|
20
19
|
try {
|
|
21
20
|
// Lazy import - only load the 53MB gpt-tokenizer package when actually needed
|
|
22
21
|
const { encode } = await import('gpt-tokenizer');
|
|
23
|
-
|
|
24
|
-
const tokens = encode(text);
|
|
25
|
-
return tokens.length;
|
|
26
|
-
});
|
|
27
|
-
logger?.debug('tokenizer', 'Batch token estimation complete', {
|
|
28
|
-
batchSize: texts.length,
|
|
29
|
-
totalTokens: results.reduce((sum, count) => sum + count, 0),
|
|
30
|
-
avgTokensPerText: Math.round(results.reduce((sum, count) => sum + count, 0) / results.length)
|
|
31
|
-
});
|
|
32
|
-
return results;
|
|
22
|
+
return texts.map(text => encode(text).length);
|
|
33
23
|
}
|
|
34
|
-
catch
|
|
35
|
-
|
|
36
|
-
error: error.message
|
|
37
|
-
});
|
|
38
|
-
// Fallback to character-based estimation
|
|
24
|
+
catch {
|
|
25
|
+
// Fallback to character-based estimation if tokenizer fails
|
|
39
26
|
return texts.map(text => Math.round(text.length / 4));
|
|
40
27
|
}
|
|
41
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../lib/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../lib/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAe;IACrD,IAAI,CAAC;QACD,8EAA8E;QAC9E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;QAChD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,4DAA4D;QAC5D,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC3C,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAA;AAC5B,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.3.
|
|
4
|
+
"version": "0.3.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",
|