Skip to content

feat(web): pulse running subagents and open their threads in the side panel - #70

Open
saphid wants to merge 1 commit into
agent/web-subagent-lineagefrom
agent/web-subagent-lineage-links
Open

saphid wants to merge 1 commit into
agent/web-subagent-lineagefrom
agent/web-subagent-lineage-links

Conversation

@saphid

@saphid saphid commented Sep 18, 2026

Copy link
Copy Markdown
Owner

What Changed

Subagent rows in the thread details panel's Lineage section now pulse while the agent is actually running, using the repo's stepped status-pulse animation (settled agents keep a steady dot). Each subagent row also gains a split action: clicking the row still navigates to the thread as before, and a new panel button opens the subagent thread as a read-only transcript in the right panel, beside the current conversation instead of replacing it.

The transcript surface is a new right-panel surface kind (thread), rendered from the target thread's projection with every mutating interaction disabled. Scope: web client only. Mobile, desktop shell, wire contracts, and providers are untouched; the server already exposes everything the client needs.

Why

Subagent lineage rows had exactly one behavior: replace the current thread. Watching what a subagent is doing meant losing your place in the parent conversation. The pulse closes the opposite gap: a settled dot and a running dot looked identical, so you couldn't tell at a glance whether the fleet was still working. This builds on the lineage panel from agent/web-subagent-lineage and follows its existing split-row pattern (the same one the merge-back button uses).

Verification

  • pnpm --filter @t3tools/web run typecheck: passed (no errors; only pre-existing effect-schema suggestions in unrelated files).
  • vp test run src/rightPanelStore.test.ts src/components/chat/ThreadTranscriptPanel.test.tsx src/components/chat/ThreadRelationshipsControl.agents.test.tsx in apps/web: 69 passed, 0 failed. New tests cover: thread surface dedupe/title refresh/scoping/closing, loading persisted panels from versions without thread surfaces, the open-in-panel action wiring and its callback, and rows staying single-button when the callback is absent.
  • Exercised in a running client against an isolated dev home: drove a real turn that delegated a subagent, confirmed the live row renders animate-status-pulse while running, clicked "Open in side panel" and confirmed the read-only transcript beside the thread, then re-verified the before state by temporarily stashing the diff against the same session.

UI Changes

Before — lineage rows navigate only, static dots:

Before: lineage rows without panel action or pulse

After — split rows with an open-in-panel action:

After: lineage rows with open-in-side-panel action

After — subagent thread open as a read-only transcript beside the conversation:

After: subagent transcript in the side panel

Motion — running subagent's dot pulsing in the Lineage panel (MP4):

running-pulse video (MP4)

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Implementation used GLM xlarge via OpenCode in T3 Code.

… panel

Subagent rows in the thread details panel pulse while the agent is
actually running, and each subagent row gains a split action that opens
the subagent thread as a read-only transcript in the right panel, beside
the current conversation instead of replacing it.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 18, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

⚠️ The latest CI run did not produce a thread transfer result for 38fff38.

This comment will update automatically after the next completed run.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant