chore: promote staging to staging-promote/be0b33b2-24451653982 (2026-04-15 13:31 UTC)#2501
Conversation
* feat(tui): add multiline support & minor fixes This commit introduces: - Support for multi-line messagess (input and rendering) - A UX improvement: ctrl+c first clears the screen, then exits Now, users can create multi-line messages by inserting new lines using (Shift+Enter) or (Alt+Enter) or (Ctrl+J) - all terminal standards to handle multi-line input. The input area grows with content (3..=12 rows) based on logical line count. Pastes with CR or CRLF line endings are normalized so multi-line pastes from terminals like macOS Terminal.app render as real newlines User messages in the conversation panel now render each logical line on its own row instead of collapsing newlines into whitespace - Ctrl+C on a non-empty input clears it; Ctrl+C on an empty input quits - History recall (Up/Down) lands the cursor on the first line of the recalled entry, and returning to the saved draft also lands at (0,0), so long multi-line drafts are immediately re-navigable - Down within a recalled multi-line message now moves the cursor instead of snapping back to the draft - Tests added for all of the above (176 passing) * fix: height calculation and missing history As Gemini code assistant pointed, there were two errors with the code. First, we were for some reason getting ride of the history_index when inserting a new line, which makes no sense. We are now simply adding the new line. Second, we had an off-by-one error on counting the number of displayed lines to the user, for which we were showing one less than expected. * chore: undo unnecesary change on comment * fix: remove unnecesary pub(crate) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: address reviewer comments - Renamed Quit action to ClearOrQuite to better reflect its behaviour. - Added a cast to u16 on clamping text_rows * fix: better separate history content on lines * chore: cargo fmt * chore: apply minor reviews from copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: update input overlay on /model as suggested by copilot * chore: rename test function Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Guillermo Alejandro Gallardo Diez <gagdiez@iR2.local> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Code reviewFound 6 issues:
Ratatui's Span::raw(" ") // &str, already Into<String>
A pathologically large paste (>1GB with CR line breaks) allocates and blocks the async event loop. Add a size guard like
Total visible input height ranges 3-12 rows depending on attachments. The comment should clarify:
The implementation now does ClearOrQuit (clears non-empty input on first press, quits on second/empty), which is a UX improvement but documentation should reflect this.
The test
This is harmless but slightly inefficient. Consider consolidating if both are always called together. |
Auto-promotion from staging CI
Batch range:
a53eac5c2dec6b6cd5c08189086093fde64aa9cb..62bb007b57e18281ba09195329a2f30f6db81c83Promotion branch:
staging-promote/62bb007b-24457402179Base:
staging-promote/be0b33b2-24451653982Triggered by: Staging CI batch at 2026-04-15 13:31 UTC
Commits in this batch (47):
ironclaw profile listsubcommand (feat(cli): addironclaw profile listsubcommand #2288)reasoning_contentfields in chat completions response (fix: duplicatereasoning_contentfields in chat completions response #2493)Current commits in this promotion (0)
Current base:
mainCurrent head:
staging-promote/62bb007b-24457402179Current range:
origin/main..origin/staging-promote/62bb007b-24457402179Auto-updated by staging promotion metadata workflow
Waiting for gates:
Auto-created by staging-ci workflow