a83c3915a3
Builds on @Lesnak1's #85619 (issue #85589): - New opencode_provider_family() single-owner predicate in hermes_cli/models.py — resolves built-in AND custom family providers (opencode-go-bridge, OpenCode-Zen-Custom, ...) case-insensitively. Migrated all 8 inlined family checks (models.py x3, runtime_provider.py x4 from the salvaged commits) plus 4 sibling sites the PR missed: cli.py api_mode sync, agent_runtime_helpers.py double-/v1 guard, model_normalize.py flat-namespace strip, model_switch.py base_url normalization. - Responses transport: alias OpenCode-reserved function names (web_search, search_files -> hermes_*) on the wire and map them back on dispatch — same pattern as the xAI web_search collision fix. Matches family providers and any base_url on opencode.ai. Fixes the HTTP 400 'custom function name X is reserved' half of #85589. - Tests: custom-provider routing assertions + 5 new transport alias tests.