fix(qwen): un-exempt opencode, and keep the Qwen key in a secret
Two findings this round contradicted each other — one asked me to extend the engine-spec exemption to a bare "opencode", the other said opencode should not be exempt at all. The code settles it: that engine drives an ollama-cloud model through the bundled CLI and authenticates with OLLAMA_API_KEY, so it needs exactly the key the pre-flight checks. Exempting it, which I did last round, switched the check off for the one engine it could still help. Only claude-code is exempt now — it carries CLAUDE_CODE_OAUTH_TOKEN and needs no Ollama key — and opencode/open-code get table rows so both spellings are covered. The README told operators to embed the Qwen key in a GADFLY_ENDPOINT_* var, while the workflow that forwards those vars warns in its own comments that vars are NOT masked. Rather than only rewording the docs, a keyless kimi/qwen endpoint now falls back to its own QWEN_API_KEY / KIMI_API_KEY — the same vendor's key, so the no-cross-vendor rule is untouched — which lets the URL live in a var and the credential in a secret. Break-checked by pointing that fallback at OPENAI_API_KEY: the leak test catches it. Smaller: isBuiltinCompatProvider mirrors isOpenAICompatProvider instead of an inline slices.Contains, with a test that every builtin is also in the compat list (a builtin missing from it would never reach the branch that protects it); the preflight.sh rationale is stated once rather than in two comment blocks; the Go test locates the shell script relative to its own source file; and the gofmt step takes GOPROXY=off like its neighbours. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
+13
-15
@@ -26,12 +26,18 @@
|
||||
gadfly_preflight_key() {
|
||||
local provider="$1" model="${2:-}" key_env="" key_hint=""
|
||||
|
||||
# Engine specs are not majordomo providers and carry their own auth. A bare
|
||||
# "claude-code" has no "/" so the caller's provider falls back to
|
||||
# ollama-cloud, which would skip a reviewer that authenticates with
|
||||
# CLAUDE_CODE_OAUTH_TOKEN and needs no Ollama key at all.
|
||||
# claude-code carries its OWN auth (CLAUDE_CODE_OAUTH_TOKEN, else
|
||||
# ANTHROPIC_API_KEY) and needs no Ollama key. A bare "claude-code" has no "/",
|
||||
# so the caller's provider falls back to ollama-cloud and the table below
|
||||
# would skip a perfectly configured reviewer.
|
||||
#
|
||||
# opencode is deliberately NOT exempt: that engine drives an ollama-cloud
|
||||
# model through the bundled CLI and authenticates with OLLAMA_API_KEY, so it
|
||||
# needs exactly the key the table checks. Exempting it — which an earlier
|
||||
# version of this guard did — turns the pre-flight off for the one engine
|
||||
# whose missing key it could still catch.
|
||||
case "$model" in
|
||||
claude-code|claude-code/*|opencode/*) echo ""; return 0 ;;
|
||||
claude-code|claude-code/*) echo ""; return 0 ;;
|
||||
esac
|
||||
|
||||
# Only the registry path has knowable credential rules — see above.
|
||||
@@ -46,16 +52,6 @@ gadfly_preflight_key() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
# A provider is absent from this table for one of TWO different reasons — do
|
||||
# not assume the first one and add an arm:
|
||||
# 1. It needs no key, or carries it in its endpoint/DSN: local ollama,
|
||||
# llama-swap, foreman.
|
||||
# 2. It needs a key but accepts more than one variable, so a single-name
|
||||
# check would skip a correctly-configured run. **google** is this case:
|
||||
# GOOGLE_API_KEY *or* GEMINI_API_KEY. Adding
|
||||
# `google) key_env="GOOGLE_API_KEY"` would silently skip every reviewer
|
||||
# configured with GEMINI_API_KEY. Pre-flighting google needs an
|
||||
# either-variable check, not this table's one-name shape.
|
||||
# ollama-cloud is checked on OLLAMA_API_KEY but hinted as OLLAMA_CLOUD_API_KEY:
|
||||
# run.sh copies the consumer-facing OLLAMA_CLOUD_API_KEY secret into the
|
||||
# OLLAMA_API_KEY the provider reads, BEFORE calling this. The hint names the
|
||||
@@ -102,6 +98,8 @@ gadfly_preflight_key() {
|
||||
_gadfly_preflight_table() {
|
||||
printf '%s\n' \
|
||||
'ollama-cloud:OLLAMA_API_KEY:OLLAMA_CLOUD_API_KEY' \
|
||||
'opencode:OLLAMA_API_KEY:OLLAMA_CLOUD_API_KEY' \
|
||||
'open-code:OLLAMA_API_KEY:OLLAMA_CLOUD_API_KEY' \
|
||||
'qwen:QWEN_API_KEY:' \
|
||||
'kimi:KIMI_API_KEY:' \
|
||||
'openai:OPENAI_API_KEY:' \
|
||||
|
||||
@@ -90,7 +90,12 @@ echo "== engine specs carry their own auth and are never pre-flighted =="
|
||||
# CLAUDE_CODE_OAUTH_TOKEN, which needs no Ollama key.
|
||||
check "bare claude-code, no ollama key" "" "$(GADFLY_TEST_MODEL=claude-code probe ollama-cloud)"
|
||||
check "claude-code/opus, no ollama key" "" "$(GADFLY_TEST_MODEL=claude-code/opus probe ollama-cloud)"
|
||||
check "opencode/x, no ollama key" "" "$(GADFLY_TEST_MODEL=opencode/x probe ollama-cloud)"
|
||||
# opencode is NOT exempt: it drives an ollama-cloud model and needs that key,
|
||||
# so skipping it would disable the pre-flight for the one engine it can help.
|
||||
check "opencode/x, no ollama key" "OLLAMA_CLOUD_API_KEY" "$(GADFLY_TEST_MODEL=opencode/x probe opencode)"
|
||||
check "bare opencode, no ollama key" "OLLAMA_CLOUD_API_KEY" "$(GADFLY_TEST_MODEL=opencode probe ollama-cloud)"
|
||||
check "open-code/x, no ollama key" "OLLAMA_CLOUD_API_KEY" "$(GADFLY_TEST_MODEL=open-code/x probe open-code)"
|
||||
check "opencode/x, keyed" "" "$(GADFLY_TEST_MODEL=opencode/x probe opencode OLLAMA_API_KEY=k)"
|
||||
# ...but a genuine ollama-cloud model still is.
|
||||
check "ollama-cloud model, no key" "OLLAMA_CLOUD_API_KEY" "$(GADFLY_TEST_MODEL=glm-5.2:cloud probe ollama-cloud)"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user