diff --git a/docs/screenshots/model-footer-floating-tooltip.png b/docs/screenshots/model-footer-floating-tooltip.png new file mode 100644 index 000000000..a059360b8 Binary files /dev/null and b/docs/screenshots/model-footer-floating-tooltip.png differ diff --git a/src/toad/conversation_kind.py b/src/toad/conversation_kind.py index fdc6ab9b0..6c37c1778 100644 --- a/src/toad/conversation_kind.py +++ b/src/toad/conversation_kind.py @@ -295,7 +295,7 @@ def prompt(cls, target): @classmethod async def agent_info(cls, comms, target): - return await asyncio.to_thread(comms.agents.agent_info_of, target) + return await asyncio.to_thread(comms.configuration.answer, target) @classmethod def seen_page(cls, history, seen): diff --git a/src/toad/screens/main.tcss b/src/toad/screens/main.tcss index 6477e01a1..76fcfd78f 100644 --- a/src/toad/screens/main.tcss +++ b/src/toad/screens/main.tcss @@ -1,4 +1,10 @@ +WorkspaceScreen { + /* Float sidebars above session content while keeping Screen's tooltip + layer front-most. */ + layers: default comms-sidebar; +} + Note,MarkdownNote { padding: 0 1 0 0; &.-error { diff --git a/src/toad/widgets/comms_chat.py b/src/toad/widgets/comms_chat.py index a1617135d..e13f7b824 100644 --- a/src/toad/widgets/comms_chat.py +++ b/src/toad/widgets/comms_chat.py @@ -374,7 +374,10 @@ async def _refresh_labels(self, comms, changed: bool, newly_announced: bool, rea elif info is not None: self.status = " ยท ".join( value - for value in (info.model or "", info.context_label) + for value in ( + info.model or "", + info.context_usage.label if info.context_usage is not None else "", + ) if value ) else: diff --git a/src/toad/widgets/prompt.py b/src/toad/widgets/prompt.py index b729567cb..710de0fea 100644 --- a/src/toad/widgets/prompt.py +++ b/src/toad/widgets/prompt.py @@ -806,10 +806,12 @@ def compose(self) -> ComposeResult: for kind in InfoPopup.members_with(InfoPopup): if (popup := kind.for_prompt(self)) is not None: yield popup - with containers.HorizontalGroup(id="info-container"): + with containers.HorizontalGroup(id="info-container"): + if not self.simple_input: yield AgentInfo() yield CondensedPath().data_bind(path=Prompt.display_directory) - yield StatusLine(markup=False).data_bind(status=Prompt.status) + yield StatusLine(markup=False).data_bind(status=Prompt.status) + if not self.simple_input: yield ModeSwitcher() yield ModeInfo("mode") diff --git a/src/toad/widgets/side_bar.py b/src/toad/widgets/side_bar.py index eb759f8c0..749a8d4c0 100644 --- a/src/toad/widgets/side_bar.py +++ b/src/toad/widgets/side_bar.py @@ -752,7 +752,8 @@ def _apply_layout(self, resolved) -> bool: geometry.x + width - self.screen.size.width) self.set_styles(width=width, min_width=width, max_width=width, dock=placement.side if not shared else "none", - position="absolute", overlay="screen", offset=(offset_x, 0)) + position="absolute", overlay="none", layer="comms-sidebar", + offset=(offset_x, 0)) if handle := self.query_one_optional(SidebarResizeHandle): handle.display = not self.collapsed if self._panels_loaded and (controls := self.query_one_optional("#sidebar-controls")):