Conversation
19 tasks
Joeywrz
force-pushed
the
feat/connections-core
branch
from
September 4, 2026 19:32
8493bea to
986ca92
Compare
19 tasks
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.
What does this PR do?
Adds the generic core foundation needed by a Connections-style Desktop plugin without adding that product UI or any product-specific integration to Hermes core.
Hermes already knows which messaging platforms and MCP servers are configured, but Desktop plugins had no passive way to consume truthful MCP runtime health. The existing MCP test path is active: it can connect, probe, or enter authentication flows. Connection-health consumers also need a narrow contribution contract so the host can enforce stable provider identity, a fixed result shape, and non-executable repair kinds/routes.
This PR therefore adds two small core surfaces:
mcp.servers.status, a profile-scoped gateway RPC that projects configured servers plus cached runtime state without connecting to or probing them. This projection uses a credential-safe field whitelist and fixed failure messages.connections.health, a Desktop SDK contribution area whose provider identity, result shape, and repair intents are normalized and validated by the host. Provider-authored display strings remain provider responsibility; the SDK does not claim to inspect arbitrary text for embedded secrets.The approach keeps existing Hermes registries and configuration as the source of truth. The actual Connections UI and local API checks remain a standalone plugin, which is also the real consumer used for manual verification.
This supersedes the closed foundation draft #102567. That PR was withdrawn while the backend/SDK work was being reconsidered with the finished plugin; after product review, the scope decision changed to submit the generic core separately in three clean commits while keeping the product plugin outside this PR.
Related Issue
N/A — no issue describes this exact combination of a passive Desktop RPC and a generic connection-health contribution contract.
Related and historical work reviewed:
Type of Change
Changes Made
tools/mcp_tool_discovery.py,tools/mcp_tool_errors.py, andtools/mcp_tool_lifecycle.pyauth_required/check_failedreason across existing string, copy, and pickle consumers;tui_gateway/methods_tools.pymcp.servers.statusRPC;apps/desktop/src/contrib/connection-health.tsand SDK exportsconnections.healthprovider contract;messageor internal/...route repair forms;How to Test
Run:
scripts/run_tests.sh tests/tools/test_mcp_tool.py tests/tools/test_mcp_lazy_start.py tests/tools/test_mcp_loop_profile_override.py tests/tui_gateway/test_mcp_profile_rpcs.py tests/gateway/test_multiplex_mcp_discovery.py tests/tools/test_mcp_bridge_single_failure.py cd apps/desktop npm run typecheck npm run lint npm run test:ui npm run buildVerified after rebasing onto
main5a0b1ba766956a1a16bc2f17dc3b83eb63633402, on head986ca92e2213fb07eda11ab09c6fe178577880c6:scripts/check_compat_pointers.py,scripts/check-windows-footguns.py --diff origin/mainandgit diff --checkpassed.The implementation follows the decomposed ownership: discovery/status in
tools/mcp_tool_discovery.py, typed errors intools/mcp_tool_errors.py, scoped cleanup intools/mcp_tool_lifecycle.py. Tests import the owning modules directly. The passive RPC exposes named-profile runtime only when the multiplex runtime can scope it; it does not connect, probe, or hydrate credentials.The standalone product plugin remains outside this PR. The repository-wide Python suite and native desktop platform suite were not rerun for this revision; no fresh native UI acceptance or GitHub Actions success is claimed.
Current GitHub status
After the update GitHub reports
MERGEABLEagainstmain5a0b1ba766956a1a16bc2f17dc3b83eb63633402. Exact-head CI run isaction_required; the external-fork workflows require maintainer approval. The PR remainsBLOCKEDpending repository gates, so conflict-free and locally tested does not yet mean CI-green or merge-ready.Checklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests pass — the full repository suite is not claimed; current affected-suite evidence is listed aboveDocumentation & Housekeeping
website/docs/developer-guide/desktop-plugin-sdk.md)cli-config.yaml.exampleif I added/changed config keys — N/A, no config keys changedCONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — N/A, the SDK contract is documented in the developer guideScreenshots / Logs
N/A — this PR adds framework surfaces and deliberately does not include the standalone Connections UI. The end-to-end consumer was verified locally and remains outside this core diff.