opencode-tps-meter 0.1.0
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 +594 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/constants.d.ts +43 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +832 -0
- package/dist/index.mjs +786 -0
- package/dist/tokenCounter.d.ts +85 -0
- package/dist/tokenCounter.d.ts.map +1 -0
- package/dist/tracker.d.ts +17 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/ui.d.ts +18 -0
- package/dist/ui.d.ts.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Counter Module for OpenCode TPS Meter
|
|
3
|
+
*
|
|
4
|
+
* Provides token counting implementations using heuristics.
|
|
5
|
+
* No external dependencies - pure JavaScript implementation.
|
|
6
|
+
*
|
|
7
|
+
* @module tokenCounter
|
|
8
|
+
*/
|
|
9
|
+
import type { TokenCounter } from "./types.js";
|
|
10
|
+
/** Type for token counting algorithms */
|
|
11
|
+
export type TokenizerAlgorithm = "heuristic" | "word" | "code";
|
|
12
|
+
/**
|
|
13
|
+
* Create a fast heuristic token counter.
|
|
14
|
+
* Uses a simple approximation: Math.ceil(text.length / 4).
|
|
15
|
+
*
|
|
16
|
+
* This is useful for fast approximate token counting.
|
|
17
|
+
*
|
|
18
|
+
* Accuracy: ~75% for English text (tokens ≈ characters / 4)
|
|
19
|
+
*
|
|
20
|
+
* @returns {TokenCounter} - TokenCounter implementation
|
|
21
|
+
* @deprecated Use createTokenizer('heuristic') instead
|
|
22
|
+
*/
|
|
23
|
+
export declare function createHeuristicCounter(): TokenCounter;
|
|
24
|
+
/**
|
|
25
|
+
* Create a word-based heuristic token counter.
|
|
26
|
+
* Uses approximation: Math.ceil(wordCount / 0.75).
|
|
27
|
+
*
|
|
28
|
+
* Better for English prose than character-based heuristics.
|
|
29
|
+
*
|
|
30
|
+
* Accuracy: ~80% for English prose
|
|
31
|
+
*
|
|
32
|
+
* @returns {TokenCounter} - TokenCounter implementation
|
|
33
|
+
* @deprecated Use createTokenizer('word') instead
|
|
34
|
+
*/
|
|
35
|
+
export declare function createWordHeuristicCounter(): TokenCounter;
|
|
36
|
+
/**
|
|
37
|
+
* Create a code-optimized heuristic token counter.
|
|
38
|
+
* Uses approximation: Math.ceil(text.length / 3).
|
|
39
|
+
*
|
|
40
|
+
* Code typically has more tokens per character than prose.
|
|
41
|
+
*
|
|
42
|
+
* @returns {TokenCounter} - TokenCounter implementation
|
|
43
|
+
* @deprecated Use createTokenizer('code') instead
|
|
44
|
+
*/
|
|
45
|
+
export declare function createCodeHeuristicCounter(): TokenCounter;
|
|
46
|
+
/**
|
|
47
|
+
* Factory function to create a token counter instance.
|
|
48
|
+
*
|
|
49
|
+
* @param {'heuristic' | 'word' | 'code'} [preferred='heuristic'] - The preferred tokenizer type
|
|
50
|
+
* - 'heuristic': Use char/4 approximation (default, recommended)
|
|
51
|
+
* - 'word': Use word/0.75 approximation, better for prose
|
|
52
|
+
* - 'code': Use char/3 approximation, better for code
|
|
53
|
+
* @returns {TokenCounter} - An instance of the requested token counter
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // Create default heuristic tokenizer
|
|
57
|
+
* const tokenizer = createTokenizer();
|
|
58
|
+
* const count = tokenizer.count("Hello, world!");
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Create word-based tokenizer for prose
|
|
62
|
+
* const wordTokenizer = createTokenizer('word');
|
|
63
|
+
* const approxCount = wordTokenizer.count("Hello, world!");
|
|
64
|
+
*/
|
|
65
|
+
export declare function createTokenizer(algorithm?: TokenizerAlgorithm): TokenCounter;
|
|
66
|
+
/**
|
|
67
|
+
* Convenience export for direct token counting using the default tokenizer.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} text - The text to count tokens for
|
|
70
|
+
* @returns {number} - The number of tokens
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* import { countTokens } from './tokenCounter';
|
|
74
|
+
* const tokenCount = countTokens("Hello, world!");
|
|
75
|
+
*/
|
|
76
|
+
export declare function countTokens(text: string): number;
|
|
77
|
+
/**
|
|
78
|
+
* Simple text encoding function (returns empty array - placeholder for compatibility)
|
|
79
|
+
*
|
|
80
|
+
* @param {string} text - The text to encode
|
|
81
|
+
* @returns {number[]} - Array of token IDs (always empty in this implementation)
|
|
82
|
+
*/
|
|
83
|
+
export declare function encodeText(text: string): number[];
|
|
84
|
+
export type { TokenCounter } from "./types.js";
|
|
85
|
+
//# sourceMappingURL=tokenCounter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenCounter.d.ts","sourceRoot":"","sources":["../src/tokenCounter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,yCAAyC;AACzC,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAqD/D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAErD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAEzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAEzD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,SAAS,GAAE,kBAAgC,GAAG,YAAY,CAEzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjD;AAGD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token tracking logic for OpenCode TPS Meter Plugin
|
|
3
|
+
* Implements a TPS tracker with a configurable rolling window using a ring buffer
|
|
4
|
+
*/
|
|
5
|
+
import type { TPSTrackerOptions, TPSTracker } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a TPSTracker instance - Tracks tokens per second with a rolling window
|
|
8
|
+
*
|
|
9
|
+
* Uses a ring buffer to efficiently track token counts over time.
|
|
10
|
+
* Maximum buffer size of 100 entries with automatic pruning of entries
|
|
11
|
+
* older than the configured window duration.
|
|
12
|
+
*
|
|
13
|
+
* @param options - Optional configuration including sessionId
|
|
14
|
+
* @returns TPSTracker instance with methods to track and calculate TPS
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTracker(options?: TPSTrackerOptions): TPSTracker;
|
|
17
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAe,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CA6KzE"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for OpenCode TPS Meter Plugin
|
|
3
|
+
*
|
|
4
|
+
* @module types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the TPS Meter plugin
|
|
8
|
+
* Controls behavior, display, and performance characteristics
|
|
9
|
+
*
|
|
10
|
+
* @interface Config
|
|
11
|
+
*/
|
|
12
|
+
export interface Config {
|
|
13
|
+
/** Whether the plugin is enabled (default: true) */
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
/** Display update interval in milliseconds (default: 50) */
|
|
16
|
+
updateIntervalMs: number;
|
|
17
|
+
/** Rolling window duration for TPS calculation in milliseconds (default: 1000) */
|
|
18
|
+
rollingWindowMs: number;
|
|
19
|
+
/** Whether to show average TPS (default: true) */
|
|
20
|
+
showAverage: boolean;
|
|
21
|
+
/** Whether to show instantaneous TPS (default: true) */
|
|
22
|
+
showInstant: boolean;
|
|
23
|
+
/** Whether to show total token count (default: true) */
|
|
24
|
+
showTotalTokens: boolean;
|
|
25
|
+
/** Whether to show elapsed time (default: false) */
|
|
26
|
+
showElapsed: boolean;
|
|
27
|
+
/** Display format style (default: 'compact') */
|
|
28
|
+
format: 'compact' | 'verbose' | 'minimal';
|
|
29
|
+
/** Minimum TPS value to display (default: 0) */
|
|
30
|
+
minVisibleTPS: number;
|
|
31
|
+
/** Fallback token counting heuristic when tokenizer unavailable (default: 'chars_div_4') */
|
|
32
|
+
fallbackTokenHeuristic: 'chars_div_4' | 'chars_div_3' | 'words_div_0_75';
|
|
33
|
+
/** Enable TPS-based color coding for visual feedback (default: false) */
|
|
34
|
+
enableColorCoding: boolean;
|
|
35
|
+
/** TPS threshold for "slow" (red) - below this is slow (default: 10) */
|
|
36
|
+
slowTpsThreshold: number;
|
|
37
|
+
/** TPS threshold for "fast" (green) - above this is fast (default: 50) */
|
|
38
|
+
fastTpsThreshold: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Plugin context provided by OpenCode framework
|
|
42
|
+
* Contains client and other framework-provided utilities
|
|
43
|
+
*
|
|
44
|
+
* @interface PluginContext
|
|
45
|
+
*/
|
|
46
|
+
export interface PluginContext {
|
|
47
|
+
/** OpenCode client for TUI, toast, and other interactions */
|
|
48
|
+
client: OpenCodeClient;
|
|
49
|
+
/** Plugin metadata and utilities */
|
|
50
|
+
plugin: {
|
|
51
|
+
/** Unique plugin identifier */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Plugin name */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Plugin version */
|
|
56
|
+
version: string;
|
|
57
|
+
};
|
|
58
|
+
/** Logger instance */
|
|
59
|
+
logger: Logger;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* OpenCode client interface for TUI and toast interactions
|
|
63
|
+
*
|
|
64
|
+
* @interface OpenCodeClient
|
|
65
|
+
*/
|
|
66
|
+
export interface OpenCodeClient {
|
|
67
|
+
/** TUI (Terminal User Interface) methods */
|
|
68
|
+
tui?: {
|
|
69
|
+
/** Set status bar message (if supported) */
|
|
70
|
+
setStatus?: (message: string) => void;
|
|
71
|
+
/** Show a toast notification */
|
|
72
|
+
showToast?: (options: {
|
|
73
|
+
body?: {
|
|
74
|
+
title?: string;
|
|
75
|
+
message: string;
|
|
76
|
+
variant: "info" | "success" | "warning" | "error";
|
|
77
|
+
duration?: number;
|
|
78
|
+
};
|
|
79
|
+
query?: {
|
|
80
|
+
directory?: string;
|
|
81
|
+
};
|
|
82
|
+
}) => Promise<unknown> | void;
|
|
83
|
+
/** Publish a TUI event */
|
|
84
|
+
publish?: (options: {
|
|
85
|
+
body?: {
|
|
86
|
+
type: "tui.toast.show" | "tui.prompt.append" | "tui.command.execute" | "tui.status.set" | "tui.status.clear";
|
|
87
|
+
properties: {
|
|
88
|
+
title?: string;
|
|
89
|
+
message?: string;
|
|
90
|
+
variant?: "info" | "success" | "warning" | "error" | "default";
|
|
91
|
+
duration?: number;
|
|
92
|
+
text?: string;
|
|
93
|
+
command?: string;
|
|
94
|
+
pluginId?: string;
|
|
95
|
+
rightText?: string;
|
|
96
|
+
priority?: number;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
query?: {
|
|
100
|
+
directory?: string;
|
|
101
|
+
};
|
|
102
|
+
}) => Promise<unknown> | void;
|
|
103
|
+
};
|
|
104
|
+
/** Toast notification methods */
|
|
105
|
+
toast?: {
|
|
106
|
+
/** Show info toast */
|
|
107
|
+
info: (message: string, options?: {
|
|
108
|
+
duration?: number;
|
|
109
|
+
}) => void;
|
|
110
|
+
/** Show success toast */
|
|
111
|
+
success: (message: string, options?: {
|
|
112
|
+
duration?: number;
|
|
113
|
+
}) => void;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Tool state structures for tool parts
|
|
118
|
+
*/
|
|
119
|
+
export interface ToolStateBase {
|
|
120
|
+
status: string;
|
|
121
|
+
input?: Record<string, unknown>;
|
|
122
|
+
raw?: string;
|
|
123
|
+
title?: string;
|
|
124
|
+
metadata?: Record<string, unknown>;
|
|
125
|
+
time?: {
|
|
126
|
+
start: number;
|
|
127
|
+
end?: number;
|
|
128
|
+
};
|
|
129
|
+
output?: string;
|
|
130
|
+
error?: string;
|
|
131
|
+
}
|
|
132
|
+
export interface ToolStateCompleted extends ToolStateBase {
|
|
133
|
+
status: "completed";
|
|
134
|
+
output: string;
|
|
135
|
+
}
|
|
136
|
+
export interface ToolStateError extends ToolStateBase {
|
|
137
|
+
status: "error";
|
|
138
|
+
error: string;
|
|
139
|
+
}
|
|
140
|
+
export type ToolState = ToolStateBase | ToolStateCompleted | ToolStateError;
|
|
141
|
+
export interface FilePartSourceText {
|
|
142
|
+
value: string;
|
|
143
|
+
start: number;
|
|
144
|
+
end: number;
|
|
145
|
+
}
|
|
146
|
+
export interface FilePartSource {
|
|
147
|
+
type: "file" | "symbol" | "resource";
|
|
148
|
+
text?: FilePartSourceText;
|
|
149
|
+
path?: string;
|
|
150
|
+
name?: string;
|
|
151
|
+
uri?: string;
|
|
152
|
+
}
|
|
153
|
+
export interface Part {
|
|
154
|
+
id: string;
|
|
155
|
+
sessionID: string;
|
|
156
|
+
messageID: string;
|
|
157
|
+
type: string;
|
|
158
|
+
text?: string;
|
|
159
|
+
prompt?: string;
|
|
160
|
+
description?: string;
|
|
161
|
+
command?: string;
|
|
162
|
+
source?: FilePartSource;
|
|
163
|
+
filename?: string;
|
|
164
|
+
url?: string;
|
|
165
|
+
state?: ToolState;
|
|
166
|
+
snapshot?: string;
|
|
167
|
+
reason?: string;
|
|
168
|
+
files?: Array<string>;
|
|
169
|
+
name?: string;
|
|
170
|
+
error?: unknown;
|
|
171
|
+
auto?: boolean;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Logger interface for plugin logging
|
|
175
|
+
*
|
|
176
|
+
* @interface Logger
|
|
177
|
+
*/
|
|
178
|
+
export interface Logger {
|
|
179
|
+
/** Log debug message */
|
|
180
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
181
|
+
/** Log info message */
|
|
182
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
183
|
+
/** Log warning message */
|
|
184
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
185
|
+
/** Log error message */
|
|
186
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Event data structure for message events
|
|
190
|
+
*
|
|
191
|
+
* @interface MessageEvent
|
|
192
|
+
*/
|
|
193
|
+
export interface MessageEvent {
|
|
194
|
+
/** Event type identifier */
|
|
195
|
+
type: "message.part.updated" | "message.updated" | "session.idle";
|
|
196
|
+
/** Event payload */
|
|
197
|
+
properties: {
|
|
198
|
+
part?: Part;
|
|
199
|
+
delta?: string;
|
|
200
|
+
info?: {
|
|
201
|
+
id: string;
|
|
202
|
+
sessionID: string;
|
|
203
|
+
role: "user" | "assistant" | "system";
|
|
204
|
+
time?: {
|
|
205
|
+
created: number;
|
|
206
|
+
completed?: number;
|
|
207
|
+
};
|
|
208
|
+
tokens?: {
|
|
209
|
+
input: number;
|
|
210
|
+
output: number;
|
|
211
|
+
reasoning?: number;
|
|
212
|
+
cache?: {
|
|
213
|
+
read: number;
|
|
214
|
+
write: number;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
finish?: string;
|
|
218
|
+
error?: unknown;
|
|
219
|
+
};
|
|
220
|
+
sessionID?: string;
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Plugin event handler return type
|
|
225
|
+
*
|
|
226
|
+
* @interface PluginHandlers
|
|
227
|
+
*/
|
|
228
|
+
export interface PluginHandlers {
|
|
229
|
+
/** Event handler for plugin events */
|
|
230
|
+
event: (args: {
|
|
231
|
+
event: MessageEvent;
|
|
232
|
+
}) => Promise<void> | void;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Token counting interface
|
|
236
|
+
*
|
|
237
|
+
* @interface TokenCounter
|
|
238
|
+
*/
|
|
239
|
+
export interface TokenCounter {
|
|
240
|
+
/** Count tokens in the given text */
|
|
241
|
+
count(text: string): number;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Display state for UI updates
|
|
245
|
+
*
|
|
246
|
+
* @interface DisplayState
|
|
247
|
+
*/
|
|
248
|
+
export interface DisplayState {
|
|
249
|
+
/** Instantaneous TPS value */
|
|
250
|
+
instantTps: number;
|
|
251
|
+
/** Average TPS value */
|
|
252
|
+
avgTps: number;
|
|
253
|
+
/** Total token count */
|
|
254
|
+
totalTokens: number;
|
|
255
|
+
/** Elapsed time in milliseconds */
|
|
256
|
+
elapsedMs: number;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* TPS Tracker options
|
|
260
|
+
*
|
|
261
|
+
* @interface TPSTrackerOptions
|
|
262
|
+
*/
|
|
263
|
+
export interface TPSTrackerOptions {
|
|
264
|
+
/** Optional session identifier */
|
|
265
|
+
sessionId?: string;
|
|
266
|
+
/** Optional rolling window duration in milliseconds */
|
|
267
|
+
rollingWindowMs?: number;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Buffer entry for TPS tracking
|
|
271
|
+
*
|
|
272
|
+
* @interface BufferEntry
|
|
273
|
+
*/
|
|
274
|
+
export interface BufferEntry {
|
|
275
|
+
/** Timestamp in milliseconds */
|
|
276
|
+
timestamp: number;
|
|
277
|
+
/** Token count at this timestamp */
|
|
278
|
+
count: number;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* TPSTracker interface for tracking tokens per second
|
|
282
|
+
*
|
|
283
|
+
* @interface TPSTracker
|
|
284
|
+
*/
|
|
285
|
+
export interface TPSTracker {
|
|
286
|
+
/** Records a token count at the specified time */
|
|
287
|
+
recordTokens(count: number, timestamp?: number): void;
|
|
288
|
+
/** Calculates the instantaneous TPS over the last 2-second rolling window */
|
|
289
|
+
getInstantTPS(): number;
|
|
290
|
+
/** Calculates the average TPS over the entire session */
|
|
291
|
+
getAverageTPS(): number;
|
|
292
|
+
/** Gets the total number of tokens recorded */
|
|
293
|
+
getTotalTokens(): number;
|
|
294
|
+
/** Gets the elapsed time since tracking began */
|
|
295
|
+
getElapsedMs(): number;
|
|
296
|
+
/** Gets the optional session ID */
|
|
297
|
+
getSessionId(): string | undefined;
|
|
298
|
+
/** Resets all tracking data */
|
|
299
|
+
reset(): void;
|
|
300
|
+
/** Gets the current number of entries in the buffer */
|
|
301
|
+
getBufferSize(): number;
|
|
302
|
+
/** Gets the maximum buffer size */
|
|
303
|
+
getMaxBufferSize(): number;
|
|
304
|
+
/** Gets the rolling window duration in milliseconds */
|
|
305
|
+
getWindowMs(): number;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* UIManager interface for managing TPS display
|
|
309
|
+
*
|
|
310
|
+
* @interface UIManager
|
|
311
|
+
*/
|
|
312
|
+
export interface UIManager {
|
|
313
|
+
/** Updates the display with current TPS statistics */
|
|
314
|
+
updateDisplay(instantTps: number, avgTps: number, totalTokens: number, elapsedMs: number): void;
|
|
315
|
+
/** Displays final statistics immediately */
|
|
316
|
+
showFinalStats(totalTokens: number, avgTps: number, elapsedMs: number): void;
|
|
317
|
+
/** Clears the display and cleans up resources */
|
|
318
|
+
clear(): void;
|
|
319
|
+
/** Changes the update interval for display throttling */
|
|
320
|
+
setUpdateInterval(ms: number): void;
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Manager for OpenCode TPS Meter Extension
|
|
3
|
+
* Handles display of token processing statistics with throttling and dual-mode support
|
|
4
|
+
*/
|
|
5
|
+
import type { Config, OpenCodeClient, UIManager as IUIManager } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Creates a UIManager instance
|
|
8
|
+
*
|
|
9
|
+
* Handles display of token processing statistics with throttling and dual-mode support
|
|
10
|
+
* (status bar primary, toast fallback)
|
|
11
|
+
*
|
|
12
|
+
* @param client - OpenCode client object with TUI and toast capabilities
|
|
13
|
+
* @param config - Configuration options
|
|
14
|
+
* @returns UIManager instance
|
|
15
|
+
*/
|
|
16
|
+
export declare function createUIManager(client: OpenCodeClient, config: Config): IUIManager;
|
|
17
|
+
export default createUIManager;
|
|
18
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAgB,SAAS,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AAGhG;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,GACb,UAAU,CAwSZ;AAED,eAAe,eAAe,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "opencode-tps-meter",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Live tokens-per-second meter for OpenCode",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": { "types": "./dist/index.d.ts", "default": "./dist/index.mjs" },
|
|
12
|
+
"require": { "types": "./dist/index.d.ts", "default": "./dist/index.js" }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "bun run build.ts",
|
|
18
|
+
"test": "bun test",
|
|
19
|
+
"prepublishOnly": "bun run build"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/ChiR24/opencode-tps-meter.git"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/ChiR24/opencode-tps-meter#readme",
|
|
26
|
+
"bugs": "https://github.com/ChiR24/opencode-tps-meter/issues",
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@opencode-ai/plugin": "^1.0.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"typescript": "^5.0.0",
|
|
32
|
+
"@types/node": "^20.0.0"
|
|
33
|
+
},
|
|
34
|
+
"keywords": ["opencode", "opencode-plugin", "ai", "tokens"],
|
|
35
|
+
"license": "MIT"
|
|
36
|
+
}
|