From 9ddc3e0c4253b4cf3a1a7b864b7a92294cf2e8d4 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 1 Aug 2026 19:07:16 +0200 Subject: [PATCH] Show complete native subagent conversations (#2760) * fix(server): preserve provider subagent messages The provider SDK defaults to forwarding only child tool activity, which leaves the nested timeline without the child response. Request the full nested transcript so provider subagent panes retain both sides of the conversation. * fix(app): correct project status badge test imports --- packages/app/e2e/browser/provider-subagents.real.spec.ts | 3 +++ packages/app/e2e/helpers/project-status-badge.ts | 6 +++--- packages/app/e2e/project-status-badge.spec.ts | 2 +- packages/server/src/server/agent/providers/claude/agent.ts | 2 ++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/app/e2e/browser/provider-subagents.real.spec.ts b/packages/app/e2e/browser/provider-subagents.real.spec.ts index 6e9bc64f6..054e0fabf 100644 --- a/packages/app/e2e/browser/provider-subagents.real.spec.ts +++ b/packages/app/e2e/browser/provider-subagents.real.spec.ts @@ -75,6 +75,9 @@ test.describe("real provider subagent timelines", () => { const panel = page.getByTestId("provider-subagent-panel"); await expect(panel).toBeVisible({ timeout: 30_000 }); + await expect( + panel.getByTestId("user-message").filter({ hasText: scenario.sentinel }), + ).toBeVisible({ timeout: 30_000 }); await expect( panel.getByTestId("assistant-message").filter({ hasText: scenario.sentinel }), ).toBeVisible({ timeout: 30_000 }); diff --git a/packages/app/e2e/helpers/project-status-badge.ts b/packages/app/e2e/helpers/project-status-badge.ts index c3b573e1c..fbcb907a8 100644 --- a/packages/app/e2e/helpers/project-status-badge.ts +++ b/packages/app/e2e/helpers/project-status-badge.ts @@ -1,7 +1,7 @@ import { expect, type Page } from "@playwright/test"; -import { gotoAppShell } from "./app"; -import { seedWorkspace, type SeededWorkspace } from "./seed-client"; -import { waitForSidebarHydration } from "./workspace-ui"; +import { gotoAppShell } from "../support/helpers/app"; +import { seedWorkspace, type SeededWorkspace } from "../support/helpers/seed-client"; +import { waitForSidebarHydration } from "../support/helpers/workspace-ui"; export interface StatusProject { seed: SeededWorkspace; diff --git a/packages/app/e2e/project-status-badge.spec.ts b/packages/app/e2e/project-status-badge.spec.ts index a2e7b837d..0dcf0e5f6 100644 --- a/packages/app/e2e/project-status-badge.spec.ts +++ b/packages/app/e2e/project-status-badge.spec.ts @@ -1,4 +1,4 @@ -import { test } from "./fixtures"; +import { test } from "./support/fixtures"; import { expandStatusProject, expectCollapsedProjectStatus, diff --git a/packages/server/src/server/agent/providers/claude/agent.ts b/packages/server/src/server/agent/providers/claude/agent.ts index c29f7ca27..ab7a0cf1f 100644 --- a/packages/server/src/server/agent/providers/claude/agent.ts +++ b/packages/server/src/server/agent/providers/claude/agent.ts @@ -3103,6 +3103,8 @@ class ClaudeAgentSession implements AgentSession { ...(effort ? { effort } : {}), ...extraClaudeOptions, ...settingsOptions, + // Provider subagent panes render the child's nested transcript. + forwardSubagentText: true, // Merged rather than assigned above: extraClaudeOptions is spread after the base, so any // user-configured hooks would otherwise replace these wholesale and silently stop effort // from being observed.