From 98657f8b5ff4650571477871cb3ad93d8b7d689e Mon Sep 17 00:00:00 2001 From: 777genius Date: Sun, 19 Apr 2026 09:00:45 +0300 Subject: [PATCH] fix(team): harden retained log cleanup fallback --- .../services/team/TeamProvisioningService.ts | 24 ++++++++++++------- .../TaskLogStreamSection.integration.test.ts | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/services/team/TeamProvisioningService.ts b/src/main/services/team/TeamProvisioningService.ts index 4481fc52..5bf9f284 100644 --- a/src/main/services/team/TeamProvisioningService.ts +++ b/src/main/services/team/TeamProvisioningService.ts @@ -2290,9 +2290,12 @@ function updateProgress( return run.progress; } -function buildCombinedLogs(stdoutBuffer: string, stderrBuffer: string): string { - const stdoutTrimmed = stdoutBuffer.trim(); - const stderrTrimmed = stderrBuffer.trim(); +function buildCombinedLogs( + stdoutBuffer: string | undefined, + stderrBuffer: string | undefined +): string { + const stdoutTrimmed = (stdoutBuffer ?? '').trim(); + const stderrTrimmed = (stderrBuffer ?? '').trim(); if (stdoutTrimmed.length === 0 && stderrTrimmed.length === 0) { return ''; @@ -2372,7 +2375,10 @@ function normalizeRecordStringValues(value: unknown): Record { ); } -function extractLogsTail(stdoutBuffer: string, stderrBuffer: string): string | undefined { +function extractLogsTail( + stdoutBuffer: string | undefined, + stderrBuffer: string | undefined +): string | undefined { const trimmed = buildCombinedLogs(stdoutBuffer, stderrBuffer).trim(); if (trimmed.length === 0) { return undefined; @@ -2394,8 +2400,9 @@ function extractLogsTail(stdoutBuffer: string, stderrBuffer: string): string | u * in provisioning before any output has been line-split). */ function extractCliLogsFromRun(run: ProvisioningRun): string | undefined { - if (run.claudeLogLines.length > 0) { - const joined = run.claudeLogLines.join('\n').trim(); + const claudeLogLines = Array.isArray(run.claudeLogLines) ? run.claudeLogLines : []; + if (claudeLogLines.length > 0) { + const joined = claudeLogLines.join('\n').trim(); if (joined.length === 0) { return undefined; } @@ -2417,9 +2424,10 @@ interface PersistedTranscriptClaudeLogsCacheEntry { } function buildRetainedClaudeLogsSnapshot(run: ProvisioningRun): RetainedClaudeLogsSnapshot | null { - if (run.claudeLogLines.length > 0) { + const claudeLogLines = Array.isArray(run.claudeLogLines) ? run.claudeLogLines : []; + if (claudeLogLines.length > 0) { return { - lines: [...run.claudeLogLines], + lines: [...claudeLogLines], updatedAt: run.claudeLogsUpdatedAt, }; } diff --git a/test/renderer/components/team/taskLogs/TaskLogStreamSection.integration.test.ts b/test/renderer/components/team/taskLogs/TaskLogStreamSection.integration.test.ts index 6cfacbea..47a80be8 100644 --- a/test/renderer/components/team/taskLogs/TaskLogStreamSection.integration.test.ts +++ b/test/renderer/components/team/taskLogs/TaskLogStreamSection.integration.test.ts @@ -402,7 +402,7 @@ describe('TaskLogStreamSection integration', () => { expect(text).toContain('Task Log Stream'); expect(text).toContain('Grep'); expect(text).toContain('Edit'); - expect(text).toContain('Claude'); + expect(text).toContain('Agent'); expect(text).toContain('3 tool calls'); expect(text).not.toContain('[]'); expect(text).not.toContain('Audit complete');