Repository navigation
Conversation
Sessions with side chats get a toolbar button that lists them in a sheet; picking one opens it on top of its parent. Subagent spawn cards in the transcript are now links to a read-only transcript: finished subagents read their frozen blob, running ones dial the doc's chat2 room on the parent's host. Session rows show a "● N" pill while subagents run. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
chat-veil already has a side chat; its CJK turn now spawns a finished subagent (with its own transcript), so one demo session exercises both. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The session menu and the side chats sheet offer "New Side Chat" and "Fork into Side Chat", as on the desktop. A new side chat is a composer pushed over the session: it runs in the parent's checkout and host (sandbox included) but may pick any harness and model until its first send mints the row, then hands over to the chat in place. A fork asks the source's host to copy its history through the last completed reply. From a side chat, both make a sibling. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The side chats sheet becomes "Side Chats & Agents": subagents the session's agent is running (status glyph, live tail, model), its side chats, and the subagents that finished. The toolbar badge shows "● N" while subagents run. SessionSnapshot::subagents() reads them off the transcript's spawn chips. The demo's chat-veil gets four of each. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Running, Side chats and Finished agents fold under the session list's section headers (count, chevron, a spinner on Running while folded). The fold state persists on this device. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A subagent opened finished keeps a frozen core in the warm cache, and that core never dials. Reopening it live (it resumed) returned the stale copy with no room. A live open now replaces a cached frozen core with the live doc. The mock edge serves /blob/ so a live test covers it. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
set_status rewrote running_subagents to 0 on every turn transition, so chat-veil's "● 4" vanished as soon as its live turn finished. It now keeps the row's count, and the heartbeat also refreshes rows with running subagents so the pill doesn't go stale. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A session row's "● N" pill now shows its running subagents plus its side chats that are Working (unarchived, fresh session), on desktop and iOS. working_side_chats in proto does the count; SessionRow carries it apart from running_subagents and iOS VoiceOver names both parts. The tab strip still counts subagents only. In the demo, chat-side-2 is Working, so chat-veil reads "● 5".
jsgrrchg
marked this pull request as ready for review
October 14, 2026 23:23
…nd-sidechats-implementation # Conflicts: # apps/ios/Zeron/Core/Generated/zeron_core.swift # apps/ios/Zeron/Transcript/RowView.swift # apps/ios/Zeron/Transcript/TranscriptListView.swift
…s-implementation' into zeron/side-chats-in-running-pill
jsgrrchg
added a commit
to jsgrrchg/comet
that referenced
this pull request
Oct 15, 2026
…ncludes PR zeronsh#899: iOS: side chats and subagents)
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).
…nd-sidechats-implementation # Conflicts: # apps/ios/Zeron/Session/NewSessionViewController.swift
…s-implementation' into zeron/side-chats-in-running-pill
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A session row's "● N" pill now counts the chat's side chats that are Working, not just its running subagents, on both desktop and iOS.
zeron_proto::view::working_side_chatscounts a parent's unarchived side chats whose effective indicator is Working, so a side chat that's awaiting input, errored, idle or stale adds nothing. The parent's own run isn't counted (that's its spinner).AppState::running_pill_count_forsums subagents and working side chats for the sidebar pill. The tab strip still counts subagents only.SessionRowgetsworking_side_chats, kept separate fromrunning_subagentsand passed through the FFI.derive()indexes side chats by parent so each row counts its own without a scan.chat-side-2is Working, sochat-veilreads "● 5".Tests
working_side_chats_count_only_fresh_working_children_of_the_parent(proto)running_pill_sums_subagents_and_working_side_chats(ui)crates/client/tests/demo.rsNeed help on this PR? Tag
@codesmith-botwith what you need.