Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

A shell OPENAI_API_KEY overrides the profile key; its 401s retry as 5xx

未关闭
#1,590 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
68/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
go

调研方向

Start with internal/config/apikey.go at the cited key-selection lines, then inspect internal/seniordev/app/solo.go:405-425 for retry classification. Reproduce the isolated-profile flow with codeaf doctor and senior-dev --json using the listed dev build. Done means the saved OpenRouter key is selected or an override warning is shown, and a 401 stops immediately without retries.

由索引模型根据 Issue 内容生成。

描述

area:provider bug sev:serious

Seen on: dev 837b2b0.

Behaviour

With OPENAI_API_KEY set in the shell, a headless senior-dev run used it over the profile's saved OpenRouter key (codeaf doctor: key set · OPENAI_API_KEY). Every call failed API error (401): Missing Authentication header and was retried as provider-5xx. Two problems: a key for another service silently wins over the profile's own key, and an auth failure is retried as a server error instead of stopping with a plain line.

Replication

  1. Build dev 837b2b0 (git checkout 837b2b0 && make build, binary bin/codeaf), or install the dev build with curl -fsSL https://agentfield.ai/get/devaf | bash.
  2. Use an isolated profile: export HOME=$(mktemp -d), export OPENROUTER_API_KEY, and keep the default model (~deepseek/deepseek-v4-flash-latest, crew on auto).
  3. On a busy machine set task.max_load to 0 (/settings, Tasks) so the busy-machine gate does not hold tasks.
  4. Save an OpenRouter key in the profile (first-run setup), then unset OPENROUTER_API_KEY; export OPENAI_API_KEY=sk-not-for-openrouter.
  5. codeaf doctor (see which key is used), then codeaf senior-dev --json "add a README.md with one line" in a small git repo.

Evidence

  • codeaf doctor: key set · OPENAI_API_KEY; calls fail API error (401): Missing Authentication header, retry class provider-5xx (quoted from the screen).
  • internal/config/apikey.go:53 and :61: firstNonEmpty(os.Getenv(APIKeyEnv), os.Getenv("OPENAI_API_KEY"), persistedAPIKey…) puts the shell's OPENAI key before the saved key.
  • internal/seniordev/app/solo.go:405-425: the retry classifier; the 401 reached the provider-5xx class, probably through a path where the status code was not set.

Guessed cause

A guess from reading the code, not a confirmed diagnosis. The key order prefers any OPENAI_API_KEY in the environment over the profile's key, and the retry classifier does not treat a 401 without a parsed status as permanent.

Acceptance

  • e2e: with the setup above, the run uses the saved OpenRouter key (or codeaf doctor warns that a shell key overrides it), and a 401 ends the run at once with a key message, no retries.

Found while writing the public docs; manual text differences are in #1545.

🤖 Generated with Claude Code

主要语言
Go
星标
115
派生
14
平均合并
9 小时 35 分钟
30 天内合并 PR
752

环境准备

我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Agent-Field/CodeAF 的其他 Issue

查看 Agent-Field/CodeAF 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。