From 4c96ec177be7aafb8fec17fc53049a93ffcb42ba Mon Sep 17 00:00:00 2001 From: Andrew Chapman Date: Tue, 15 Sep 2026 21:21:00 -0800 Subject: [PATCH 1/2] blockframe-header: show frame:title in durable shell block headers Durable shell-controller blocks (used by remote/SSH terminal panes, including via wsh createblock) render their header with useTermHeader true, which skips the entire viewName/frame:title block entirely - so frame:title had no effect for these blocks even though it works for every other block type. This left every durable pane on a given connection showing an identical, generic connection-name header with no way to distinguish them (e.g. multiple tmux-attached sessions on the same host). Render frame:title inside the useTermHeader branch too, next to the connection button, so a caller (wsh setmeta / wsh createblock) can label a durable session distinctly. --- frontend/app/block/blockframe-header.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/app/block/blockframe-header.tsx b/frontend/app/block/blockframe-header.tsx index a70f323e71..c1d2d89bc0 100644 --- a/frontend/app/block/blockframe-header.tsx +++ b/frontend/app/block/blockframe-header.tsx @@ -271,6 +271,11 @@ const BlockFrame_Header = ({ isTerminalBlock={isTerminalBlock} /> )} + {useTermHeader && metaFrameTitle && ( +
+ {metaFrameTitle} +
+ )} {useTermHeader && termConfigedDurable != null && ( Date: Tue, 15 Sep 2026 21:58:56 -0800 Subject: [PATCH 2/2] blockframe-header: keep durable frame:title shrinkable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new frame:title div rendered as a direct child of block-frame-default-header (outside block-frame-default-header-iconview), so reusing the block-frame-view-type class name had no effect - that class's shrink/truncate/min-width:0 rules are scoped as a descendant selector under the iconview wrapper, which this element isn't inside. A long frame:title could therefore overflow and push the durable/status badge and end controls out of the visible header. Add a dedicated block-frame-durable-title rule with the same shrink, overflow-hidden, and ellipsis properties, scoped correctly for this element's actual position in the header. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- frontend/app/block/block.scss | 14 ++++++++++++++ frontend/app/block/blockframe-header.tsx | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/frontend/app/block/block.scss b/frontend/app/block/block.scss index 6b0fda769c..55cffb746a 100644 --- a/frontend/app/block/block.scss +++ b/frontend/app/block/block.scss @@ -115,6 +115,20 @@ } } + // Durable shell blocks (useTermHeader) render frame:title as + // a direct child of block-frame-default-header, outside + // block-frame-default-header-iconview, so it needs its own + // copy of the shrink/truncate rules rather than reusing + // block-frame-view-type - that class only has an effect + // nested under the iconview wrapper above. + .block-frame-durable-title { + overflow-x: hidden; + text-wrap: nowrap; + text-overflow: ellipsis; + flex-shrink: 1; + min-width: 0; + } + .block-frame-text { font: var(--fixed-font); font-size: 11px; diff --git a/frontend/app/block/blockframe-header.tsx b/frontend/app/block/blockframe-header.tsx index c1d2d89bc0..41c80c270b 100644 --- a/frontend/app/block/blockframe-header.tsx +++ b/frontend/app/block/blockframe-header.tsx @@ -272,7 +272,7 @@ const BlockFrame_Header = ({ /> )} {useTermHeader && metaFrameTitle && ( -
+
{metaFrameTitle}
)}