From ca5ff004e5640395fdcb3cdbace13e80b705f6b6 Mon Sep 17 00:00:00 2001 From: cthomas Date: Tue, 23 Dec 2025 11:20:16 -0800 Subject: [PATCH] feat: send debug info with feedback (#354) --- src/cli/App.tsx | 43 ++++++++++++++++++++++++++---------------- src/telemetry/index.ts | 7 +++++++ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/cli/App.tsx b/src/cli/App.tsx index 29daff8..2b22dad 100644 --- a/src/cli/App.tsx +++ b/src/cli/App.tsx @@ -4250,26 +4250,37 @@ DO NOT respond to these messages or otherwise consider them in your response unl refreshDerived(); const settings = settingsManager.getSettings(); - const baseURL = - process.env.LETTA_BASE_URL || - settings.env?.LETTA_BASE_URL || - "https://api.letta.com"; const apiKey = process.env.LETTA_API_KEY || settings.env?.LETTA_API_KEY; - // Send feedback request manually since it's not in the SDK - const response = await fetch(`${baseURL}/v1/metadata/feedback`, { - method: "POST", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${apiKey}`, - "X-Letta-Source": "letta-code", + // Only send anonymized, safe settings for debugging + const { + env: _env, + refreshToken: _refreshToken, + anthropicOAuth: _anthropicOAuth, + ...safeSettings + } = settings; + + const response = await fetch( + "https://api.letta.com/v1/metadata/feedback", + { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${apiKey}`, + "X-Letta-Source": "letta-code", + }, + body: JSON.stringify({ + message: message, + feature: "letta-code", + agent_id: agentId, + session_id: telemetry.getSessionId(), + version: process.env.npm_package_version || "unknown", + platform: process.platform, + settings: JSON.stringify(safeSettings), + }), }, - body: JSON.stringify({ - message: message, - feature: "letta-code", - }), - }); + ); if (!response.ok) { const errorText = await response.text(); diff --git a/src/telemetry/index.ts b/src/telemetry/index.ts index cefef7b..b4a07f0 100644 --- a/src/telemetry/index.ts +++ b/src/telemetry/index.ts @@ -220,6 +220,13 @@ class TelemetryManager { this.sessionStatsGetter = getter; } + /** + * Get the current session ID + */ + getSessionId(): string { + return this.sessionId; + } + /** * Track session start */