Skip to content

feat(web): subagents in the header with a child view, model-written titles, and a quieter sidebar - #922

Merged
agentforce314 merged 1 commit into
mainfrom
feat/web-subagents-todos-titles
Sep 10, 2026
Merged

feat(web): subagents in the header with a child view, model-written titles, and a quieter sidebar#922
agentforce314 merged 1 commit into
mainfrom
feat/web-subagents-todos-titles

Conversation

@agentforce314

Copy link
Copy Markdown
Owner

Summary

Brings the browser client up to the DeepSeek Harness reference on the three gaps that showed in a side-by-side: subagents were invisible, session titles were the raw first prompt, and the sidebar filled with untitled rows.

  • Subagents. N subagents ▾ beside the session title, a live dot while any run, and a dropdown naming each delegation with its type, model, state, tokens and duration. A row opens the run in the conversation column: its prompt, everything it did as tool rows, and a read-only seat where the composer would be, with the parent title as the way back and a sibling switcher on the child's name.
  • Data behind it. The gateway now translates agent_progress frames into subagent.progress events (they were dropped before) carrying the tool_use_id of the Agent call; the Agent tool's result envelope rides tool.complete as result.agent and is persisted beside the stored result, so a resumed session lists its subagents exactly as the live one did. Foreground subagents keep the same sidechain transcript background ones do, and a new subagent.transcript method serves it.
  • Titles. After the instant heuristic name, a generate_title control asks the session's own provider for a short title and swaps it in; a rename typed in between wins. Not the Anthropic-only generate_llm_title path.
  • Rows and sidebar. Agent rows read Agent · description with live activity or N tools · duration; Bash rows summarise with the model's description of the command; blank sessions are listed only while on screen, as "New session".

Test plan

  • ui-web: npm run typecheck clean, vitest 588 passing, including new suites for the subagent catalog fold, progress folding, envelope hydration, Agent/Bash row descriptions and blank-session filtering.
  • Python: tests/server/test_desktop_translate.py, test_desktop_sessions.py, test_desktop_gateway.py, tests/test_session_title.py, the Agent tool admission and terminal-progress suites, and the message-construction suites all pass, with new tests for subagent.progress, result.agent, transcript loading, the RPC and title generation.
  • Live, against DeepSeek: a session spawning two Explore subagents with a three-item checklist showed 2 subagents, 1 running, the to-dos panel moving to 3 completed, both child views with their transcripts, and a model-written title replacing the heuristic within thirty seconds.

🤖 Generated with Claude Code

…itles, and a quieter sidebar

The browser client showed nothing of a session's delegations: the gateway
dropped every agent_progress frame, and the Agent tool's result envelope
reached neither the wire nor the saved session. Titles were the first prompt
line, and every abandoned "New session" press left an untitled row behind.

Web
- "N subagents ▾" beside the title, with a live dot while any run; the list
  names each delegation with type, model, state, tokens and duration, and
  opens it in the conversation column: prompt, its own tool rows, a
  read-only seat, the parent title as the way back and a sibling switcher.
- Agent rows read `Agent · description` with live activity or `N tools ·
  duration`, and a body of prompt, report and a button into the run.
- Bash rows summarise with the model's description of the command; the
  command itself stays in the terminal card.
- Blank sessions are listed only while on screen, as "New session".

Backend
- agent_progress → subagent.progress events, carrying the tool_use_id of the
  Agent call so a running row and its progress find each other.
- The Agent result envelope (agent_id, status, model, duration, tokens, tool
  count) rides tool.complete as result.agent and is persisted beside the
  stored result, so a resumed session lists its subagents like the live one.
- Foreground subagents keep a sidechain transcript like background ones;
  subagent.transcript reads it in the session.resume message shape.
- A generate_title control asks the session's own provider for a short
  title after the heuristic name lands; an explicit rename wins.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@agentforce314
agentforce314 merged commit 9eb9822 into main Sep 10, 2026
5 of 7 checks passed
@agentforce314
agentforce314 deleted the feat/web-subagents-todos-titles branch September 10, 2026 03:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant