feat(providers): add CommandCode provider (GOAT/Pro/Max/Provider plans, salvage of #32909) - #88308
Merged
Conversation
Add first-class CommandCode provider with dual API mode support: profile commandcode (chat_completions): 20+ models via OpenAI-compatible endpoint DeepSeek, Qwen, Kimi, GLM, MiniMax, StepFun, Mimo, Gemini, GPT Default: deepseek/deepseek-v4-pro (1M context) profile commandcode-anthropic (anthropic_messages): Claude models via Anthropic Messages-compatible endpoint Default: claude-sonnet-4-6 (1M context) Changes: - plugins/model-providers/commandcode/ — provider plugin - __init__.py: dual ProviderProfile classes with fetch_models - plugin.yaml: manifest - agent/anthropic_adapter.py: recognize api.commandcode.ai as Bearer auth - tests/plugins/model_providers/test_commandcode_profile.py: 28 tests - tests/providers/test_plugin_discovery.py: bump profile count 34→36 171 provider tests pass (28 new, 0 regressions)
Follow-ups on top of the salvaged CommandCode provider plugin (PR #32909): - hermes_cli/config_defaults.py: COMMANDCODE_API_KEY setup-wizard entry - hermes_cli/doctor.py: add key to the doctor env-var scan list (health check comes free via the pluggable-profile loop) - hermes_cli/dump.py: include commandcode in debug-dump api_keys - docs: provider table row, fallback-provider table + supported lists - tests: doctor dedicated-skip test now uses exact-name checks so Bearer-authed Anthropic-COMPATIBLE gateways (CommandCode (Anthropic)) are allowed in the generic loop while native anthropic stays skipped E2E verified with real imports: profile registration, aliases, PROVIDER_REGISTRY auto-extension, bearer-auth host match (positive + negative), live /models fetch (55 models).
…r desktop parity The provider-parity contract requires every CANONICAL provider to render a card on the desktop Keys tab. /api/env rows are keyed by env var, and both CommandCode profiles shared the single COMMANDCODE_API_KEY — so the commandcode-anthropic profile had no row of its own and test_provider_parity failed on CI (slice 6/12). Fix: both profiles keep the shared API key, but each declares its own base-URL override var (COMMANDCODE_BASE_URL / COMMANDCODE_ANTHROPIC_BASE_URL), matching the sibling-provider pattern, so each renders its own card. Verified: test_provider_parity.py + commandcode + providers suites green locally (86 passed); PROVIDER_REGISTRY splits key vs base-URL vars correctly for both profiles.
13 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.
Summary
CommandCode (commandcode.ai) is now a first-class provider —
commandcode(OpenAI chat completions) andcommandcode-anthropic(Anthropic Messages, Bearer auth) profiles behind oneCOMMANDCODE_API_KEY, covering their GOAT/Pro/Max/Provider subscription plans (~30+ open and closed models, live model discovery from the public/provider/v1/modelsendpoint).Salvages PR #32909 by @ousiaresearch (closed as part of the May mega-PR cleanup, not on merit) — commit cherry-picked onto current main with authorship preserved, plus integration follow-ups.
Changes
plugins/model-providers/commandcode/(salvaged): two provider profiles + manifest, livefetch_models, 28 unit testsagent/anthropic_adapter.py(salvaged, tightened):api.commandcode.airecognized as a Bearer-auth Anthropic endpoint — upgraded from substring match tobase_url_host_matches()soevil.com/api.commandcode.aipaths don't trigger Bearer authhermes_cli/config_defaults.py:COMMANDCODE_API_KEYsetup-wizard entryhermes_cli/doctor.py/hermes_cli/dump.py: key added to doctor scan list and debug-dump api_keystests/hermes_cli/test_doctor_dedicated_provider_skip.py: exact-name check instead of substring, so Bearer-authed Anthropic-compatible gateways are allowed in the generic health-check loop while nativeanthropicstays skippedValidation
/provider/v1/modelsfetchInfographic