build: Add telemetry compiled output

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Christian Gick
2026-01-08 14:30:38 +02:00
parent 20e6ea0a47
commit cb8dd13cac
3 changed files with 77 additions and 0 deletions

30
dist/index.js vendored
View File

@@ -18,6 +18,7 @@ import { execSync } from "child_process";
import { compressRead } from "./compressors/read.js";
import { compressGrep } from "./compressors/grep.js";
import { compressGlob } from "./compressors/glob.js";
import { logTelemetry, calculateCompressionRatio } from "./telemetry.js";
// Configuration from environment
const COMPRESSION_LEVEL = process.env.COMPRESSION_LEVEL || "medium";
// Compression presets
@@ -155,6 +156,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
removeComments: !args?.keepComments,
};
const result = compressRead(content, path, options);
// Log telemetry
logTelemetry({
tool: "compressed_read",
inputSize: result.originalLines,
outputSize: result.compressedLines,
compressionRatio: calculateCompressionRatio(result.originalLines, result.compressedLines),
path,
success: true,
});
return {
content: [
{
@@ -191,6 +201,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
maxMatchesPerFile: args?.maxMatchesPerFile || preset.grep.maxMatchesPerFile,
};
const result = compressGrep(output, options);
// Log telemetry
logTelemetry({
tool: "compressed_grep",
inputSize: result.originalMatches,
outputSize: result.compressedMatches,
compressionRatio: calculateCompressionRatio(result.originalMatches, result.compressedMatches),
path: searchPath,
pattern,
success: true,
});
return {
content: [
{
@@ -233,6 +253,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
maxFiles: args?.maxFiles || preset.glob.maxFiles,
};
const result = compressGlob(paths, options);
// Log telemetry
logTelemetry({
tool: "compressed_glob",
inputSize: paths.length,
outputSize: result.compressedCount,
compressionRatio: calculateCompressionRatio(paths.length, result.compressedCount),
path: basePath,
pattern,
success: true,
});
return {
content: [
{

17
dist/telemetry.d.ts vendored Normal file
View File

@@ -0,0 +1,17 @@
/**
* Telemetry for compressed tools usage tracking
* Logs to ~/.local/share/mcp/compressed-tools.jsonl
*/
export interface TelemetryEvent {
timestamp: string;
tool: "compressed_read" | "compressed_grep" | "compressed_glob";
inputSize: number;
outputSize: number;
compressionRatio: number;
path?: string;
pattern?: string;
success: boolean;
error?: string;
}
export declare function logTelemetry(event: Omit<TelemetryEvent, "timestamp">): void;
export declare function calculateCompressionRatio(original: number, compressed: number): number;

30
dist/telemetry.js vendored Normal file
View File

@@ -0,0 +1,30 @@
/**
* Telemetry for compressed tools usage tracking
* Logs to ~/.local/share/mcp/compressed-tools.jsonl
*/
import { appendFileSync, mkdirSync, existsSync } from "fs";
import { homedir } from "os";
import { join } from "path";
const LOG_DIR = join(homedir(), ".local", "share", "mcp");
const LOG_FILE = join(LOG_DIR, "compressed-tools.jsonl");
// Ensure log directory exists
if (!existsSync(LOG_DIR)) {
mkdirSync(LOG_DIR, { recursive: true });
}
export function logTelemetry(event) {
const entry = {
timestamp: new Date().toISOString(),
...event,
};
try {
appendFileSync(LOG_FILE, JSON.stringify(entry) + "\n");
}
catch {
// Silently fail - telemetry should never break the tool
}
}
export function calculateCompressionRatio(original, compressed) {
if (original === 0)
return 0;
return Math.round((1 - compressed / original) * 100 * 10) / 10;
}