From 3364135ac4cbbc4272569041acbb5d1dc5968399 Mon Sep 17 00:00:00 2001 From: xiang-shen_data Date: Mon, 14 Sep 2026 20:43:52 +0000 Subject: [PATCH] Reassure users while the picker loads more rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The streaming picker footer read "⏳ loading more …" during the background walk, which can read like a hang. Reword it to "⏳ Loading more , this might take a few seconds..." so the wait reads as expected. All three pickers (skills, skill schemas, MCP services) share this footer. Co-authored-by: Isaac --- src/ucode/ui/interactive_picker.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ucode/ui/interactive_picker.py b/src/ucode/ui/interactive_picker.py index 77fdfd7b..73f9fbbc 100644 --- a/src/ucode/ui/interactive_picker.py +++ b/src/ucode/ui/interactive_picker.py @@ -134,7 +134,7 @@ def scrolling_checkbox( on screen: it's run on a daemon thread and handed an ``append(choices)`` callback that adds rows (deduped by value) and repaints, so the picker opens instantly on whatever ``choices`` are ready and fills in the rest without blocking. A footer shows a live - "loading more {loading_noun}…" count while it runs. + "Loading more {loading_noun}, this might take a few seconds..." count while it runs. ``show_description`` adds a footer previewing the highlighted row's ``Choice.description``. It's a separate window rather than questionary's inline ``show_description`` because the @@ -183,7 +183,11 @@ def is_loading() -> bool: def loading_tokens() -> list[tuple[str, str]]: return [ - ("class:instruction", f" ⏳ loading more {loading_noun}… ({loading['found']} found)") + ( + "class:instruction", + f" ⏳ Loading more {loading_noun}, this might take a few seconds..." + f" ({loading['found']} found)", + ) ] @Condition