TUI agent construction missing provider/credential resolution

NousResearch/hermes-agent · cluster 11884

Data as of

Nothing open on GitHub. Fix merged in #11887. Check it covers your case.

The short answer

0open issues
0open PRs
5items grouped
Known?
Yes. 5 related items grouped here, 2 issues already closed.
Fix event
A fix was merged to main in PR #11887. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this partially resolved, deciding PR #11887. That is separate from the fix event.
Still open
Nothing open on GitHub.

A cluster of bug reports and fixes around the TUI's _make_agent function failing to resolve provider, api_mode, and credentials before constructing AIAgent, causing setup errors or wrong API calls.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #11887 fix(tui): resolve runtime provider in _make_agent

    merged to main

    files: tests/tui_gateway/test_make_agent_provider.py, tui_gateway/server.py

    Show the diff
    • tests/tui_gateway/test_make_agent_provider.py
      @@ -0,0 +1,48 @@
      +"""Regression test for #11884: _make_agent must resolve runtime provider.
      +
      +Without resolve_runtime_provider(), bare-slug models in config
      +(e.g. ``claude-opus-4-6`` with ``model.provider: anthropic``) leave
      +provider/base_url/api_key empty in AIAgent, causing HTTP 404.
      +"""
      +
      +from unittest.mock import MagicMock, patch
      +
      +
      +def test_make_agent_passes_resolved_provider():
      +    """_make_agent forwards provider/base_url/api_key/api_mode from
      +    resolve_runtime_provider to AIAgent."""
      +
      +    fake_runtime = {
      +        "provider": "anthropic",
      +        "base_url": "https://api.anthropic.com",
      +        "api_key": "sk-test-key",
      +        "api_mode": "anthropic_messages",
      +        "command": None,
      +        "args": None,
      +        "credential_pool": None,
      +    }
      +
      +    fake_cfg = {
      +        "model": {"default": "claude-opus-4-6", "provider": "anthropic"},
      +        "agent": {"system_prompt": "test"},
      +    }
      +
      +    with patch("tui_gateway.server._load_cfg", return_value=fake_cfg), \
      +         patch("tui_gateway.server._get_db", return_value=MagicMock()), \
      +         patch("tui_gateway.server._load_tool_progress_mode", return_value="compact"), \
      +         patch("tui_gateway.server._load_reasoning_config", return_value=None), \
      +         patch("tui_gateway.server._load_service_tier", return_value=None), \
      +         patch("tui_gateway.server._load_enabled_toolsets", return_value=None), \
      +         patch("hermes_cli.runtime_provider.resolve_runtime_provider", return_value=fake_runtime) as mock_resolve, \
      +         patch("run_agent.AIAgent") as mock_agent:
      +
      +        from tui_gateway.server import _make_agent
      +        _make_agent("sid-1", "key-1")
      +
      +        mock_resolve.assert_called_once_with(requested=None)
      +
      +        call_kwargs = mock_agent.call_args
      +        assert call_kwargs.kwargs["provider"] == "anthropic"
      +        assert call_kwargs.kwargs["base_url"] == "https://api.anthropic.com"
      +        assert call_kwargs.kwargs["api_key"] == "sk-test-key"
      +        assert call_kwargs.kwargs["api_mode"] == "anthropic_messages"
    • tui_gateway/server.py
      @@ -1113,13 +1113,22 @@ def _reset_session_agent(sid: str, session: dict) -> dict:
       
       def _make_agent(sid: str, key: str, session_id: str | None = None):
           from run_agent import AIAgent
      +    from hermes_cli.runtime_provider import resolve_runtime_provider
       
           cfg = _load_cfg()
           system_prompt = cfg.get("agent", {}).get("system_prompt", "") or ""
           if not system_prompt:
               system_prompt = _resolve_personality_prompt(cfg)
      +    runtime = resolve_runtime_provider(requested=None)
           return AIAgent(
               model=_resolve_model(),
      +        provider=runtime.get("provider"),
      +        base_url=runtime.get("base_url"),
      +        api_key=[redacted:secret-assignment]"api_key"),
      +        api_mode=runtime.get("api_mode"),
      +        acp_command=runtime.get("command"),
      +        acp_args=runtime.get("args"),
      +        credential_pool=[redacted:secret-assignment]"credential_pool"),
               quiet_mode=True,
               verbose_logging=_load_tool_progress_mode() == "verbose",
               reasoning_config=_load_reasoning_config(),

2 PRs closed without merging

From the close comments: duplicate 1 · superseded by another PR 1

  • #11952 fix(tui): call resolve_runtime_provider() before constructing AIAgent · duplicate
  • #13163 fix(tui): pass provider credentials explicitly to AIAgent · superseded by another PR → #11887
Closed issues · 2
  • Closed#11884[Bug]: Ink TUI: bare-slug model + provider in config yields HTTP 404 at api.anthropic.com
  • Closed#12381TUI: `hermes --tui` shows "Setup Required" for bedrock/anthropic-native configs — `_make_agent` drops provider/api_mode
How this cluster was grouped
  • Link evidence (partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
  • Members outside that structural core may belong to a different underlying problem.
  • Pairwise link density 0.34: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. 1.00 means every pair is linked.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Merged PRs
#11887
Closed issues
2
Attempts
2 PRs closed without merging
Fix link checked
23 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.