Skip to content

Session card: side chats and subagents - #895

Open
jsgrrchg wants to merge 18 commits into
zeronsh:mainfrom
jsgrrchg:feat/session-card-lanes
Open

jsgrrchg wants to merge 18 commits into
zeronsh:mainfrom
jsgrrchg:feat/session-card-lanes

Conversation

@jsgrrchg

@jsgrrchg jsgrrchg commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Moves the explorer's Subagents / Chats footer into a lanes card stacked under the session card, shown and hidden with it.

  • Side chats: session-card rows with status, harness mark, PR badge and time; New side chat and Fork chat close the section. Click opens, the context menu renames.
  • Subagents: running ones listed plainly; settled ones fold into a "N finished" row that calls out failures.
  • Layout: the lanes card stops at half the window and scrolls with the file tree's floating rail (popover::rail_for, for views that already host a ScrollRailHost). The session card above keeps its height.
  • Toggle: the session card's titlebar button carries a static count of running side chats and subagents, replacing the explorer button's mark.
  • The explorer footer, its FilesEvent variants and the rename handoff to the files surface are removed.

Screenshots

image image image

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

The explorer's Subagents / Chats footer moves into a card of its own,
stacked under the session card and shown with it. It lists the open
chat's side chats and subagents in session-card rows, each lane's status
marks joined by one thin track. New side chat and Fork chat close the
side-chat lane; settled subagents fold into one "finished" row.

- The two cards share the height below the titlebar, each scrolling
  inside what it gets.
- Renaming a side chat in place now shows the card and pages its lane
  to the row, instead of needing the explorer open.
- Running subagents badge the session card's toggle while the card is
  closed, with no breathing glow, in place of the explorer button's mark.
- The explorer footer, its `FilesEvent` variants and the rename handoff
  to the files surface are gone.
The lane's own spinners show what runs, and the session card's toggle
keeps the count while the card is closed.
The count now adds working side chats to running subagents, and stays on
the toggle with the card open or closed until nothing runs.
However much runs, the lanes card stops at half the window and scrolls
past it. The session card above keeps its height; only the lanes give.
Renaming a side chat goes through its context menu; a second click no
longer turns its row into a title field.
The mock harness answers a `/fanout [N]` prompt (40 when bare, at most
200) by spawning N subagents at once and settling them one by one,
oldest first, every seventh failing — the only data-side way to fill the
session card's subagent lane, scroll it, and watch it drain into its
finished fold. They settle `ZERON_MOCK_DELAY_MS` apart, 2.5s by default.

scripts/dev-demo.sh seeds "Fan Out Forty Scouts" with three side chats
and fans it out again on each launch. It also lists each demo folder
once (a second space on the same folder was never created, so seeding
failed with "no such space") and falls back to /tmp/zeron-demo-projects
when ~/github is missing.
Each side chat leads its title with its harness's brand mark, as the
sidebar's session rows do.
Once the lanes outgrow the card and scroll, the card shows the file
tree's floating scrollbar: it appears on scroll, lingers, fades, holds
under the pointer, and drags. `popover::rail_for` gives a view that
already hosts a rail through `ScrollRailHost` (the shell, for the
projects menu) the same treatment for another scroller.

Subagents now list plainly, with no track between their marks; side
chats keep theirs.
ZERON_DEMO_DIR and ZERON_DEMO_PORT run the demo beside one already open
from another worktree; unset, it keeps /tmp/zeron-demo-* and :27921.
@jsgrrchg jsgrrchg changed the title Session card: side chats and subagents move into a lanes card Session card: side chats and subagents Oct 14, 2026
@jsgrrchg
jsgrrchg marked this pull request as draft October 14, 2026 01:59
@jsgrrchg
jsgrrchg marked this pull request as ready for review October 14, 2026 16:15
jsgrrchg added a commit to jsgrrchg/comet that referenced this pull request Oct 15, 2026
jsgrrchg added a commit to jsgrrchg/comet that referenced this pull request Oct 15, 2026
…ide chats or main threads

Conflict resolution:
- crates/ui/src/files/sections.rs: keep the deletion from PR zeronsh#895.
- Add the new `native_fork_point: None` field to SessionMessageEntry
  literals introduced by already-merged PRs (zeronsh#895, zeronsh#899/zeronsh#906).
jsgrrchg added a commit to jsgrrchg/comet that referenced this pull request Oct 15, 2026
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