diff --git a/source/Calamari.AiAgent/ClaudeCodeBehaviour/ClaudeCodeCliRunner.cs b/source/Calamari.AiAgent/ClaudeCodeBehaviour/ClaudeCodeCliRunner.cs index 97f2ae8aa..e5b77f4ab 100644 --- a/source/Calamari.AiAgent/ClaudeCodeBehaviour/ClaudeCodeCliRunner.cs +++ b/source/Calamari.AiAgent/ClaudeCodeBehaviour/ClaudeCodeCliRunner.cs @@ -60,6 +60,8 @@ public async Task RunAsync(ClaudeCommandArgsBuilder argsBuilder, if (File.Exists(verboseLogPath)) { + ThrowIfTranscriptTooBig(verboseLogPath); + log.WriteServiceMessage(new ServiceMessage(ClaudeCodeServiceMessages.Transcript.Name, new Dictionary() { {ClaudeCodeServiceMessages.Transcript.TranscriptAttribute, await File.ReadAllTextAsync(verboseLogPath, cancellationToken)}, @@ -71,6 +73,14 @@ public async Task RunAsync(ClaudeCommandArgsBuilder argsBuilder, return responseBuilder.ToString(); } + static void ThrowIfTranscriptTooBig(string verboseLogPath) + { + const long maxTranscriptSize = 1L * 1024 * 1024 * 1024; + var transcriptSize = new FileInfo(verboseLogPath).Length; + if (transcriptSize > maxTranscriptSize) + throw new InvalidOperationException($"Claude agent transcript log is too large ({transcriptSize:N0} bytes). The 1 GB limit was exceeded."); + } + async Task ProcessError(Process process) { var buffer = new char[1024];