3572d4bca1
Non-interactive sessions (hermes chat -q, hermes -z) snapshot the tool registry at AIAgent construction time. If background MCP discovery hasn't finished, MCP tools are invisible for the entire session — and unlike interactive mode, there is no between-turns late-binding refresh to recover. Root cause: wait_for_mcp_discovery() only joins an already-created discovery thread, so it no-ops if a direct/single-query path reaches agent construction before MCP startup created that thread. Oneshot._run_agent() didn't call it at all. Fix: - Add ensure_mcp_discovery_before_agent_build() helper to mcp_startup.py: idempotently starts discovery if needed + bounded wait. Fail-open on errors. - Add single_query parameter to _resolve_discovery_timeout/wait_for_mcp_discovery: uses mcp_single_query_discovery_timeout (default 15s) instead of the interactive mcp_discovery_timeout (1.5s) because one-shot sessions have no second turn to recover. - Wire into CLI _init_agent (single_query from _single_query_mode flag set in cli.py's single-query path) and oneshot._run_agent (single_query=True). - Interactive sessions unchanged: keep 1.5s bound (between-turns refresh covers). Closes #38448, #51316, #37013, #68137 Composite salvage of #60017 (chrishart0), #51322 (Bartok9), #38620 (buptwz), #43544 (halonke), #36882 (vanhoof).