feat: server search/filter + test-all health column #30
Reference in New Issue
Block a user
Delete Branch "feat/server-list-ux"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #27
Closes #28
Issue #27 — Server search / filter box
bcc_core.py:server_matches_filter(entry, query)— case-insensitive substring match on server name, plus command (stdio) or url (remote). Empty/whitespace query matches everything.filter_servers(entries, query)is the list-level convenience wrapper.bcc.py: aQLineEditsearch box above the server tables (placeholder "Search servers by name, command, or url…", clear button).textChangedre-runs_refresh_tables, which now filters both the active and disabled tables viacore.server_matches_filter, skipping non-matching rows. Clearing the box restores all rows. Empty-state placeholders distinguish "no matches for this filter" from "genuinely empty section".Issue #28 — "Test all" + per-server health/status column
bcc_core.py:HealthStatus(plain string constantsUNTESTED/OK/FAILED, matching the existing plain-string status convention used bycheck_dependency) andhealth_from_spawn_result(result) -> (status, short_summary), which maps aspawn_test()result dict to that tri-state without duplicating any ofspawn_test's own subprocess/outcome logic.outcome == "ok"→ OK,"not_applicable"(remote/no command) → UNTESTED, everything else (exited/crashed/not_found) → FAILED, with the first line of stderr folded into the summary when present.bcc.py: a new "Health" column (5th column) on both server tables — a colored dot (grey untested / green ok / red failed) with a tooltip carrying the summary. A "Test all" button in the action bar spawn-tests every enabled, stdio server sequentially off the UI thread (reusingSpawnTester/spawn_test, one at a time so the app never spawns a pile of processes at once), updating each row's dot as results land and showingTesting N/total…progress. Remote servers are shown as untested with a tooltip pointing at the editor's existing "Test connection" button rather than being spawn-tested. Editing a server's fields invalidates its cached health (reverts the dot to untested) since the old result no longer reflects what's on disk. Health results are cleared on profile switch/reload.Testing
tests/test_core.pyfor both features (filter: name/command/url match, case-insensitivity, empty query, no match, list-levelfilter_servers; health mapping: ok/not_applicable/crashed/exited/not_found, plus a check that a reason with no stderr doesn't get a stray dash appended).ruff check .andruff format --check .both clean.bcc.pyGUI changes verified viaast.parse+ ruff only (no PySide6 install in this environment, per repo convention); all new pure logic lives inbcc_core.pyand is Qt-free/pytest-covered.Notes / decisions