Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
2.9 KiB
JSON

{"repo": "acard0s0/missioncontrol", "files": {"applications/mission-control-server/src/main/java/io/hermes/missioncontrol/hermes/ModelProviderRegistry.java": {"ca3c7fb8216d804eee73f24c801d6925eae45301": {"t": 1786068305.8996313, "n": 2544, "h": "fb52d43c67b12153", "c": "package io.hermes.missioncontrol.hermes;\n\nimport java.util.List;\nimport java.util.Locale;\n\n/**\n * The model providers offered in the create-agent / template UIs and the single\n * source of truth for provider → API-key env var mapping. Keys and env vars\n * mirror hermes' own provider records (hermes_cli/auth.py); ollama instances are\n * handled separately (registered per-container, not listed here).\n *\n * <p>{@code hasCatalog} marks the providers Mission Control can list models for\n * ({@link io.hermes.missioncontrol.models.ModelCatalogService}); the rest take a\n * free-text model id in the UI. {@code oauth} providers (Nous Portal) need no API\n * key — they authenticate out-of-band via {@code hermes portal}.\n */\npublic final class ModelProviderRegistry {\n\n public record Provider(String key, String label, String envVar, boolean oauth, boolean hasCatalog) {\n /** True when the UI must collect an API key (key-based, non-OAuth providers). */\n public boolean needsKey() {\n return envVar != null && !oauth;\n }\n }\n\n private ModelProviderRegistry() {}\n\n /** Ordered for the picker — Nous first (the default account). */\n public static final List<Provider> PROVIDERS = List.of(\n new Provider(\"nous\", \"Nous (account)\", null, true, true),\n new Provider(\"openrouter\", \"OpenRouter\", \"OPENROUTER_API_KEY\", false, true),\n new Provider(\"anthropic\", \"Anthropic\", \"ANTHROPIC_API_KEY\", false, true),\n new Provider(\"openai\", \"OpenAI\", \"OPENAI_API_KEY\", false, true),\n new Provider(\"gemini\", \"Google AI Studio\", \"GOOGLE_API_KEY\", false, false),\n new Provider(\"xai\", \"xAI / Grok\", \"XAI_API_KEY\", false, false),\n new Provider(\"deepseek\", \"DeepSeek\", \"DEEPSEEK_API_KEY\", false, false),\n new Provider(\"nvidia\", \"NVIDIA NIM\", \"NVIDIA_API_KEY\", false, false),\n new Provider(\"zai\", \"Z.AI / GLM\", \"GLM_API_KEY\", false, false),\n new Provider(\"kimi-coding\", \"Kimi / Moonshot\", \"KIMI_API_KEY\", false, false),\n new Provider(\"minimax\", \"MiniMax\", \"MINIMAX_API_KEY\", false, false),\n new Provider(\"stepfun\", \"StepFun\", \"STEPFUN_API_KEY\", false, false));\n\n public static Provider byKey(String key) {\n if (key == null) return null;\n String k = key.trim().toLowerCase(Locale.ROOT);\n for (Provider p : PROVIDERS) {\n if (p.key().equals(k)) return p;\n }\n return null;\n }\n\n /** The API-key env var for a provider, or null for OAuth/unknown/keyless. */\n public static String envVar(String key) {\n Provider p = byKey(key);\n return p == null ? null : p.envVar();\n }\n}\n"}}}}