UNPKG

bugger-mcp

Version:

MCP Server for managing bugs, feature requests, and improvements

77 lines 2.42 kB
// Token usage tracking system for MCP tool operations export class TokenUsageTracker { sessionUsage; static instance; constructor() { this.sessionUsage = { sessionId: this.generateSessionId(), startTime: new Date().toISOString(), operations: [], totalTokens: 0 }; } static getInstance() { if (!TokenUsageTracker.instance) { TokenUsageTracker.instance = new TokenUsageTracker(); } return TokenUsageTracker.instance; } /** * Estimate token count using the same method as context collection engine */ estimateTokenCount(text) { // Rough estimation: ~4 characters per token for English text return Math.ceil(text.length / 4); } /** * Start tracking a new operation */ startOperation(operationName) { this.sessionUsage.currentOperation = operationName; } /** * Record token usage for the current operation */ recordUsage(input, output, operationName) { const inputTokens = this.estimateTokenCount(input); const outputTokens = this.estimateTokenCount(output); const totalTokens = inputTokens + outputTokens; const usage = { input: inputTokens, output: outputTokens, total: totalTokens, operation: operationName || this.sessionUsage.currentOperation || 'unknown', timestamp: new Date().toISOString() }; this.sessionUsage.operations.push(usage); this.sessionUsage.totalTokens += totalTokens; return usage; } /** * Get current session usage */ getSessionUsage() { return { ...this.sessionUsage }; } generateSessionId() { return `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } formatNumber(num) { return num.toLocaleString(); } formatDuration(ms) { const seconds = Math.floor(ms / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); if (hours > 0) { return `${hours}h ${minutes % 60}m ${seconds % 60}s`; } else if (minutes > 0) { return `${minutes}m ${seconds % 60}s`; } else { return `${seconds}s`; } } } //# sourceMappingURL=token-usage-tracker.js.map