feat(tui): add read-only settings view and transcript search - #6246
Merged
Conversation
Add a read-only Panel::Settings view (S key / command-palette entry) listing configured LLM providers, MCP servers, and sub-agent definitions across three tabs, sourced live from MetricsSnapshot. ProviderSummary is built via explicit whitelist field-copy so secret fields can never leak into the view even if ProviderEntry gains a new secret field later. Metrics are populated from three dedicated sites (startup, provider switch, config reload) rather than piggybacked on MCP lifecycle events, so the view stays live instead of stale/empty. Add a Ctrl+F transcript search overlay mirroring the existing Ctrl+R reverse-search interaction pattern: case-insensitive substring match against message content and tool names, highlight-and-scroll (not filter), next/prev match cycling, Esc restores the pre-search scroll position, Enter accepts. Routed at the top-level key decoder for deterministic mutual exclusion with Ctrl+R/command-palette/file-picker. Scroll-to-match derives from the live-rendered line layout so matches inside collapsed tool-output blocks scroll to a visible anchor rather than an assumed-expanded position, and the render cache is bypassed only for actually-matched messages to avoid a transcript-wide reparse on every keystroke while search is open. Both features are zeph-tui only, read-only, and introduce no new background task (MCP status already flows through the existing metrics channel; tool-output text is already inline in message content) and no new config.toml keys. Closes #6024 Closes #6023
bug-ops
enabled auto-merge (squash)
July 13, 2026 20:10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Skey / command-palette entry) with Providers, MCP, and Agents tabs, sourced live fromMetricsSnapshot. Provider fields are whitelist-copied so secret values (API keys, Cocoon access hash, Candle HF token) can never reach the view. Edit-in-place is explicitly out of scope for this PR (spec's own recommended v1 boundary).Ctrl+Fin-transcript search overlay mirroring the existingCtrl+Rreverse-search pattern: substring match against message content and tool names, highlight-and-scroll, next/prev cycling,Escrestores prior scroll position,Enteraccepts. A match inside a collapsed tool-output block scrolls to a visible anchor. The transcript render cache is bypassed only for actually-matched messages to avoid a full reparse on every keystroke.zeph-tui-only, read-only, add no new background task, and require no newconfig.tomlkeys.Closes #6024
Closes #6023
Test plan
cargo +nightly fmt --checkcargo clippy --profile ci --workspace --all-targets --features "desktop,ide,server,chat,pdf,scheduler,testing" -- -D warningscargo nextest run --config-file .github/nextest.toml --workspace --features "desktop,ide,server,chat,pdf,scheduler" --lib --bins(13527/13527 passed)RUSTFLAGS="-D warnings" RUSTDOCFLAGS="--deny rustdoc::broken_intra_doc_links" cargo doc --no-deps --workspace --features "desktop,ide,server,chat,pdf,scheduler"RUSTFLAGS="-D warnings" cargo check --workspace --all-targets --features desktop,ide,server,chat,pdf,scheduler --lockedcargo test --doc --workspace --features "desktop,ide,server,chat,pdf,scheduler"gitleaks protect --staged --no-banner --redact(no leaks)Actionvariants (scroll-to-match, Esc-restore, Accept-leaves-scroll, tab/selection navigation), a collapsed-tool-output-block scroll test,apply_provider_switch_metrics/with_settings_metrics/reload_configpopulation tests,ProviderSummarysecret-exclusion test, Ctrl+F/Ctrl+R decode-key + mutual-exclusion regression tests.local/testing/playbooks/tui.mdand.local/testing/coverage-status.mdupdated (main repo)