mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-16 22:21:42 +00:00
* feat(ui): redesign /btw side chat into floating multi-turn panel The inline BTW side-result card becomes a floating Side chat panel pinned to the thread column: multi-turn conversation with markdown answers, a follow-up input that carries the previous side answer as context, and header actions to clear (retires the pending run) or close (conversation and pending run survive; an arriving answer reopens the panel). * fix(ui): carry prior side question in follow-ups; display typed question structurally Review follow-ups: the /btw follow-up command now embeds both the previous side question and answer (answers alone lose the referents), and the panel shows the user's typed question via structured state (pending record correlated by runId) instead of parsing a marker out of user-controlled command text. * fix(ui): stop pending side runs on clear and keep rejected follow-up drafts Trash now sends a targeted chat.abort for the pending /btw run (the retire set still suppresses its late events if the abort races), the follow-up input is hidden while disconnected like other slash sends, and a rejected detached send restores the typed follow-up into the panel input. * test(ui): attach side-chat panel test container for restore assertion * fix(ui): block side-chat follow-ups while pending; notify rejection on pre-send exits A follow-up while a question is pending would retire the in-flight run and silently drop its answer, so the panel input is disabled until the answer lands. The rejection callback now fires on every non-accepted path of the guarded detached send (early exits, guard dedupe, rejected acks), not just rejected acknowledgements. * fix(ui): render side-chat questions verbatim Pending and turn questions are already display-ready (chat-send strips composer commands, the server echo carries no /btw prefix, panel follow-ups pass structured text); re-extracting corrupted questions that begin with a command token.