feat(tui): surface MCP and plugin boot as a session set - #5658
Conversation
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @Hmbown's task in 6m 9s —— View job Claude is reviewing this PR
|
|
Claude finished @Hmbown's task in 3m 13s —— View job Claude is reviewing this PR
|
87603c1 to
3636825
Compare
|
Claude finished @Hmbown's task in 2m 49s —— View job Todo list
Review of
|
Plugin discovery and every enabled MCP server now boot as session-owned state: the activity strip shows `MCP · N connecting` with named chips, and a compact receipt keeps per-server outcomes (connected, failed, needs login, disabled) until retry. Failures are Event::McpSessionBoot, not toast-only Status. connect_all is concurrent; optional servers do not block the first LLM call. Never tell users `/mcp auth`. Co-authored-by: Codewhale Agent <codewhale-agent@hmbown.local>
Enabled servers now appear as connecting from configured names at session start (`MCP · N connecting · alpha · beta · …`), not after the engine snapshot. Failures stay on the session receipt with `/mcp retry` / `/mcp login`; a late boot event cannot overwrite a newer `/mcp` mutation. Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: Codewhale Agent <codewhale-agent@hmbown.local>
`/mcp` Show now snapshots the engine-owned pool via bootstrap_mcp so the handle method and BootstrapMcp op are live production paths, not lib-only dead code. Collapse identical disabled-row action branches and name the pending-connect return type so clippy is quiet. Signed-off-by: CodeWhale Bot <bot@codewhale.net>
connect_all must only handshake configured servers, matching the sequential loop: dynamic runtime entries stay registered and connect via get_or_connect. An empty session must not emit McpSessionBoot, which had raced ChangeMode and idle host-managed engines. Signed-off-by: CodeWhale Bot <bot@codewhale.net>
3636825 to
a557065
Compare
|
Closing this stale PR as superseded by #5677. The replacement retained the original four implementation commits and their author/co-author metadata, then added the focused correctness repair for plugin-authority auth errors and post- Merged replacement: #5677 Thank you for carrying this work through the rescue and repair path. |

Summary
Hunter’s first turn sat on
working · 22s · 0 stepswhile plugin discovery and every enabled MCP server booted invisibly.connect_allwas sequential, the UI stored onlymcp_configured_count, and failures were toast-onlyEvent::status("Failed to connect MCP server 'X'"). Slack is one server in that set — this PR treats MCP + plugins as session-owned state.mcp_connecting, so the activity strip showsMCP · N connecting · alpha · beta · gamma · docsbefore the engine snapshot. Narrow width sheds names and keepsMCP · N connecting./mcp): one row per server once settled (connected | failed | needs login | disabled) with next action (/mcp retry <name>,/mcp login <name>,/mcp doctor). Failures stay on the page until retry. No toast-only UX. Never/mcp auth.Plugins · 12 loaded · 1 invalid · 2 duplicate.mcp-session-boot). A late boot event cannot overwrite a newer/mcpmutation.No-Issue: session-boot visibility surface; settings recovery remains PR #5655.
Session UI naming
MCP · N connecting · alpha · beta · …(names shed on a narrow row)MCP · 3 connected · 1 failedMCP · 3 connectedplus one row per failed / needs login / disabled, capped at 6 with+N more · /mcpMCP · 0 connected · 1 failedalpha · failed · /mcp retry alphagamma · needs login · /mcp login gammaTests use
alpha/beta/gamma/docs, never a Slack special-case.Testing
cargo fmt --all -- --check(changed files formatted)cargo clippy --workspace --all-targets --all-features --locked(not run; focused lib tests used)cargo test --workspace --all-features --locked(not run)Focused
codewhale-tui --libevidence:tui::session_boot::tests::*(0 / 1 / N, first-frame names, count fallback, retry/login rows, overflow+N more, plugin line)tui::ui::event_loop::session_boot_event_tests::*tui::phase_strip::tests::activity_band_names_connecting_mcp_serverscore::engine::tests::bootstrap_and_retry_mcp_use_the_engine_owned_poolcommands::groups::utility::mcp::tests::*(retry action)python3 scripts/check-coauthor-trailers.py --range 018d32811..HEADpassed.Checklist