Skip to content

The Session header's child seats never render, so the subagent catalog is unreachable #803

Closed
Birfy/FlyBot
#28

Description

@bjf-frz

What happens

The subagent catalog never appears in the Session header. ui-subagent registers its count dropdown on conversation.session.header.actions, but that seat is never rendered, so a user who starts a subagent sees no entry point and no way to open the child conversation from the header.

Why

core/src/client/index.js claims the whole Session header as a single slot:

shadow('conversation.session.header', { priority: -10, inject: face }, HeaderPill)

The native ConversationSessionHeader is the only component that renders the child seats of that slot — conversation.session.header.lineage, .actions, .utilities, .corner. HeaderPill renders one div and never calls renderSlot, so all four child seats stop being drawn. The same origin appears in sidebar.workspaces (priority -10), which hides sidebar.workspaces.directoryFlow, .session.menu.item, .session.row.action, sidebar.session.row.leading and .session.row.hover.

What I expect

FlyBot's pill should be appended to the native header instead of replacing it, so the seats the shell declares keep rendering. With the pill moved to conversation.session.header.utilities (a list seat) the native header returns, SubagentCatalogAction mounts, and the header shows the subagent count again.

Scope

Right side only, in this issue: conversation.session.header. The left sidebar has the same root cause but TeamSidebar is FlyBot's main surface, so it needs its own design and is not part of this change.

Evidence

  • React fiber: the conversation.session.header outlet subtree ended at HeaderPill → div.bt-head; ConversationSessionHeader was absent.
  • Among 33 rendered slot outlets, .lineage, .actions, .utilities and .corner were none of them.
  • DOM: <header> carried only conversation.header.leading and conversation.session.header; native crumbs count was 0.
  • After moving the pill to .utilities: all six header seats render, SubagentCatalogAction is mounted, and the header shows 3 个子智能体 whose dropdown lists all three child sessions with mode, token total and duration.

Activity

  1. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    area:uiWeb/desktop UI and copy
    bugSomething isn't working
    on Oct 23, 2026
  2. Birfy commented on Oct 23, 2026

    @Birfy
    Collaborator

    Triage: bug | area:ui, agent-ready. Repro and root cause are already in the body; what was missing was the acceptance, so here it is.

    Verified on main fd205c40: core/src/client/index.js:881 is a flat shadow('conversation.session.header', { priority: -10, inject: face }, HeaderPill), while additive seats elsewhere in the same file use id:/order: (:864-865 sidebar.footer.action), which is the pattern the fix should follow. The same flat shadow exists at :861 for sidebar.workspaces; that one stays out, as the body says.

    Expected behaviour, in checkable terms:

    • After the change, opening any Session renders the native ConversationSessionHeader with its declared seats (…header.lineage, .actions, .utilities, .corner) present in the tree; the FlyBot pill is one child of .utilities, not a replacement of the slot.
    • A Session with child Sessions shows the subagent catalog entry, and it opens the same child conversation the sidebar does; a Session with no children shows no entry.
    • Exactly one pill renders per Session (no double mount from keeping the old shadow alongside the new seat).
    • TeamSidebar, sidebar.workspaces and the left sidebar are untouched in this PR.

    Evidence the PR must attach, since a visual claim is not a test here: the same two artefacts the issue already used — the rendered DOM for the header (seat list) and, for a Session with children, the catalog opening — captured before and after on the same build.

    Kill conditions (each must turn a check red): keep the interrupting shadow at priority -10 → seats still missing; mount the pill in both places → the single-pill check fails; filter the catalog so it shows for childless Sessions → the "no children, no entry" check fails; change :861 as well → out of scope.

  3. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 23, 2026
  4. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 23, 2026
  5. Birfy commented on Oct 23, 2026

    @Birfy
    Collaborator

    Landed in the fork as 6f9b60c7 (#28, squash). Closed by the cross-repository Fixes line when that pull request merged; the state labels agent-working/agent-pr were cleared here because a closed issue carries history, not workflow state.

  6. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:uiWeb/desktop UI and copybugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions