From 355646bbb71b1875778f9ea42ec3cc49579b2770 Mon Sep 17 00:00:00 2001 From: Lexus2016 Date: Mon, 24 Aug 2026 14:22:04 +0200 Subject: [PATCH 1/3] fix: composer hint no longer shifts; terminal panes regain focus, refresh and a send line Four defects reported against v7.6.0/7.7.0 that were never actually in a commit. 1. The interrupt pill sat UPSTREAM of the textarea in the composer's flex row, so starting a turn shoved the placeholder ~70px right and re-wrapped the hint. It now lives downstream of the textarea; the fade-in slides from the other side. 2. The textarea's height was recomputed only from restoreComposerState(), so boot, setLang(), a panel toggle, a window resize and the pill entering the row all left the wrapped second line clipped. One autosizeInput() helper now owns it and is called from every path that can change the wrap. 3. A terminal whose socket died silently kept focus in xterm's hidden textarea and swallowed every key until you switched tabs and back (showTerminalView() ends on term.focus(), which is why that worked). Reconnect and a click on the pane now refocus it, and a new header button reconnects unconditionally. 4. .center.term-mode hides the composer, so a terminal tab had no way to send a line except typing into the pane -- exactly what a stale socket takes away. A send line under the pane writes the same {type:'input'} frame term.onData() writes, so it works on an agent tab and on the engine pane, where it answers a blocking prompt. --- public/index.html | 144 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 123 insertions(+), 21 deletions(-) diff --git a/public/index.html b/public/index.html index 854a0c2a..8bbe0ce5 100644 --- a/public/index.html +++ b/public/index.html @@ -1104,6 +1104,10 @@ #termDot { width: 8px; height: 8px; border-radius: 50%; background: #8b949e; flex: none; transition: background-color .25s cubic-bezier(.2,0,0,1); } #termHost { flex: 1; min-height: 0; padding: 6px 8px; position: relative; } +.term-send { display: flex; gap: 6px; align-items: center; padding: 6px 8px 8px; border-top: 1px solid var(--border); background: #0b0b0f; } +.term-send input { flex: 1; min-width: 0; background: var(--s2); border: 1px solid var(--border); border-radius: 8px; color: var(--text); font-family: inherit; font-size: 13px; padding: 6px 10px; outline: none; } +.term-send input:focus { border-color: var(--accent); } +.term-send button { flex-shrink: 0; font-size: 13px; padding: 5px 11px; } .term-instance { width: 100%; height: 100%; } /* An engine pane keeps the geometry the subscription engine spawned it with (220x50) — resizing it would reflow a live Claude TUI mid-turn — so the viewer scrolls to @@ -1745,7 +1749,7 @@ .interrupt-pill-btn:active { transform: scale(.96); } .interrupt-pill-btn[data-mode="queue"] { color: var(--muted); background: var(--s3); border-color: var(--border); border-style: dashed; } .interrupt-pill-btn[data-mode="queue"]:hover { color: var(--text); background: rgba(122,139,170,.12); border-color: rgba(122,139,170,.35); } -@keyframes ib-fadein { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: translateX(0); } } +@keyframes ib-fadein { from { opacity: 0; transform: translateX(6px); } to { opacity: 1; transform: translateX(0); } } /* Hide message action buttons for queued messages — they are irrelevant and overlap queue controls on short texts */ .mw:has(.msg-queued) .use-btn, .mw:has(.msg-queued) .reply-btn, @@ -3502,9 +3506,23 @@

Sessions

+
+ +
+ + +
@@ -3562,15 +3580,20 @@

Claude Code Studio

-
- -
+ +
+ +