From 0e080abefb58700143fe4b02d26682838c29b502 Mon Sep 17 00:00:00 2001 From: 777genius Date: Thu, 7 May 2026 18:44:28 +0300 Subject: [PATCH] fix(logs): detect additional error payload fields --- .../memberLogPreviewExtractor.test.ts | 33 +++++++++++++++++++ .../policies/memberLogPreviewExtractor.ts | 8 ++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/features/member-log-stream/core/domain/policies/__tests__/memberLogPreviewExtractor.test.ts b/src/features/member-log-stream/core/domain/policies/__tests__/memberLogPreviewExtractor.test.ts index 85de7ebd..a69147d1 100644 --- a/src/features/member-log-stream/core/domain/policies/__tests__/memberLogPreviewExtractor.test.ts +++ b/src/features/member-log-stream/core/domain/policies/__tests__/memberLogPreviewExtractor.test.ts @@ -425,6 +425,39 @@ Reply to this comment using MCP tool task_add_comment. expect(result.items[0]?.preview).not.toContain('{"type"'); }); + it('marks structured isError payloads as errors and prefers stderr details', () => { + const result = extractMemberLogPreviewItems({ + provider: 'opencode_runtime', + maxItems: 3, + textLimit: 160, + messages: [ + message({ + uuid: 'stderr-result', + type: 'user', + role: 'user', + timestamp: '2026-04-01T10:01:00.000Z', + content: [ + { + type: 'tool_result', + tool_use_id: 'tool-stderr', + content: { + isError: true, + stderr: 'Permission denied while writing app/index.tsx', + }, + }, + ], + }), + ], + }); + + expect(result.items[0]).toMatchObject({ + kind: 'tool_result', + title: 'Tool error', + preview: 'Permission denied while writing app/index.tsx', + tone: 'error', + }); + }); + it('formats orphan comment result payloads without guessing add vs read semantics', () => { const result = extractMemberLogPreviewItems({ provider: 'claude_transcript', diff --git a/src/features/member-log-stream/core/domain/policies/memberLogPreviewExtractor.ts b/src/features/member-log-stream/core/domain/policies/memberLogPreviewExtractor.ts index 2db993f7..84c3dc42 100644 --- a/src/features/member-log-stream/core/domain/policies/memberLogPreviewExtractor.ts +++ b/src/features/member-log-stream/core/domain/policies/memberLogPreviewExtractor.ts @@ -297,7 +297,12 @@ function unknownPayloadLooksLikeError(value: unknown): boolean { if (type === 'error' || type?.endsWith('_error')) { return true; } - if (record.ok === false || record.success === false) { + if ( + record.ok === false || + record.success === false || + record.isError === true || + record.is_error === true + ) { return true; } @@ -325,6 +330,7 @@ function payloadErrorMessage(payload: Record): string | null { const direct = stringField(payload, 'error') ?? stringField(payload, 'errorMessage') ?? + stringField(payload, 'stderr') ?? stringField(payload, 'message'); if (direct) { return direct;