Repository navigation
简化配置方式并添加 Claude 4.6 模型支持 - #2
Conversation
主要改动: 1. 简化配置方式 - 新增根目录 .env.example 统一配置模板 - docker-compose.yml 改为从根目录 .env 读取配置 - 用户只需配置一个文件:ADMIN_PASSWORD 和 INTERNAL_API_KEY - 移除 kiro-gateway 单独配置的需求(账号凭证由 kiro-go 通过 HTTP 头转发) 2. 添加 Claude 4.6 模型支持 - kiro-gateway/kiro/config.py: 在 FALLBACK_MODELS 中添加 claude-sonnet-4.6 和 claude-opus-4.6 - 修复用户报告的 504 错误(模型不在缓存列表中) 3. 更新文档 - README.md: 简化为"三步启动",添加 4.6 模型说明,更新配置说明 - 新增 CLAUDE.md: 为 Claude Code 提供项目架构和开发指南 - kiro-gateway/.env.example: 添加警告说明(kiro-stack 用户无需配置此文件) 4. 其他优化 - .gitignore: 添加根目录 .env 文件忽略规则 - 统一环境变量命名:INTERNAL_API_KEY(替代分散的 API_KEY 配置) 修复问题: - 修复 claude-sonnet-4.6 请求 504 超时错误 - 解决用户困惑:为什么 gateway 还需要配置 .env(现在不需要了)
|
@copilot 进行审查 |
- docker-compose.yml: kiro-gateway 新增 SKIP_STARTUP_CREDENTIAL_CHECK=true 解决集成部署时 gateway 因找不到本地凭证而无法启动的问题 (凭证由 kiro-go 通过 X-Kiro-* 请求头动态传入,无需启动时校验) - kiro-gateway/main.py: validate_configuration() 识别 SKIP_STARTUP_CREDENTIAL_CHECK 为 true 时跳过凭证校验,记录 INFO 日志说明原因 - kiro-gateway/kiro/http_client.py: 429 错误日志附带响应体 便于区分真正的限流与模型无权限(Kiro API 对两者均返回 429) - README.md: 新增 feature 分支改动说明 新增 claude-sonnet-4.6/opus-4.6 无法使用的原因说明(账号权限问题,非代码 Bug)
There was a problem hiding this comment.
Pull request overview
该 PR 旨在简化 kiro-stack 的整体配置/启动方式(统一用根目录 .env 驱动 Compose 注入配置),并在 kiro-gateway 中补齐 Claude 4.6 系列模型的 fallback 支持,从而避免模型列表缓存缺失导致的 504/不可用问题。
Changes:
- 新增根目录
.env.example,并调整docker-compose.yml从根目录.env注入ADMIN_PASSWORD与INTERNAL_API_KEY等变量 - kiro-gateway:增加集成模式启动开关
SKIP_STARTUP_CREDENTIAL_CHECK,并在FALLBACK_MODELS中加入 Claude 4.6 模型 - 文档与示例更新:README 三步启动、模型说明、并新增
CLAUDE.md
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| kiro-gateway/main.py | 增加集成模式下跳过启动凭证校验的开关逻辑 |
| kiro-gateway/kiro/http_client.py | 429 重试日志附带响应体片段,便于区分限流/无权限 |
| kiro-gateway/kiro/config.py | fallback 模型列表加入 claude-*-4.6 |
| kiro-gateway/.env.example | 明确该文件仅用于 gateway 独立部署,kiro-stack 集成部署可忽略 |
| docker-compose.yml | 改为通过根目录 .env 插值注入环境变量,并预设集成模式开关 |
| README.md | 更新为三步启动流程、补充 4.6 模型说明与排查指引、更新配置说明 |
| CLAUDE.md | 新增面向 Claude Code 的仓库架构与开发指引 |
| .gitignore | 忽略根目录 .env/.env.local,并标注 gateway .env 已非集成部署必需 |
| .env.example | 新增统一配置模板(ADMIN_PASSWORD / INTERNAL_API_KEY 等) |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # 集成模式:凭证由 kiro-go 通过 X-Kiro-* 请求头动态传入,无需启动时校验 | ||
| if os.getenv("SKIP_STARTUP_CREDENTIAL_CHECK", "").lower() in ("true", "1", "yes"): | ||
| logger.info("SKIP_STARTUP_CREDENTIAL_CHECK=true,跳过凭证校验(集成模式:凭证由请求头传入)") | ||
| return |
There was a problem hiding this comment.
SKIP_STARTUP_CREDENTIAL_CHECK 当前通过 return 直接跳过整个 validate_configuration()。现在函数里只做凭证校验所以能工作,但这会让后续如果在该函数里增加其他关键校验时被意外绕过。建议仅条件化跳过“凭证存在性”那一段校验,而不是提前返回整个函数(例如保留其它校验仍然执行)。
| environment: | ||
| - PROXY_API_KEY=${INTERNAL_API_KEY} | ||
| - VPN_PROXY_URL=${VPN_PROXY_URL:-} | ||
| - DEBUG_MODE=${DEBUG_MODE:-off} | ||
| - SKIP_STARTUP_CREDENTIAL_CHECK=true |
There was a problem hiding this comment.
这里依赖 ${INTERNAL_API_KEY} 注入到 gateway 的 PROXY_API_KEY,但如果用户忘了在根目录 .env 里设置该变量,Compose 会把它展开为空字符串,导致 gateway 实际上没有鉴权密钥。建议用 Compose 的必填语法(如 ${INTERNAL_API_KEY:?INTERNAL_API_KEY is required})来让启动时直接报错。
| - CONFIG_PATH=/app/data/config.json | ||
| - ADMIN_PASSWORD=change_this_password | ||
| - ADMIN_PASSWORD=${ADMIN_PASSWORD} | ||
| - KIRO_GATEWAY_BASE=http://kiro-gateway:8000 | ||
| - KIRO_GATEWAY_API_KEY=change_this_api_key | ||
| - KIRO_GATEWAY_API_KEY=${INTERNAL_API_KEY} |
There was a problem hiding this comment.
同上:ADMIN_PASSWORD/INTERNAL_API_KEY 如果未在根目录 .env 设置会被展开为空字符串,容器仍会启动但运行时行为异常(管理面板无法登录 / gateway 鉴权失败)。建议对这两项使用必填展开语法,让 docker compose up 在缺失配置时快速失败。
| **新增模型支持:** | ||
| - 在 gateway 内置 fallback 模型列表中添加 `claude-sonnet-4.6`、`claude-opus-4.6`、`claude-opus-4.6-1m` | ||
|
|
There was a problem hiding this comment.
README 更新日志里提到 fallback 模型列表新增 claude-opus-4.6-1m,但本次代码改动里 FALLBACK_MODELS 只加入了 claude-sonnet-4.6 和 claude-opus-4.6,没有 claude-opus-4.6-1m。需要在文档与代码之间保持一致:要么补充该模型到 fallback 列表,要么从 README 里移除该条。
| await response.aread() | ||
| _body = response.text[:500] | ||
| except Exception: | ||
| _body = "<无法读取响应体>" | ||
| logger.warning(f"Received 429, waiting {delay}s (attempt {attempt + 1}/{MAX_RETRIES}) | body: {_body}") |
There was a problem hiding this comment.
在 429 重试分支里读取响应体后没有显式关闭响应对象;当 stream=True 时如果读取/解码过程中抛异常,连接可能无法及时释放回连接池。建议在读取响应体后(无论成功与否)调用 await response.aclose()(或在 finally 中关闭),并考虑在其它会 continue 重试的分支里同样确保关闭响应。
| # 集成模式:凭证由 kiro-go 通过 X-Kiro-* 请求头动态传入,无需启动时校验 | ||
| if os.getenv("SKIP_STARTUP_CREDENTIAL_CHECK", "").lower() in ("true", "1", "yes"): | ||
| logger.info("SKIP_STARTUP_CREDENTIAL_CHECK=true,跳过凭证校验(集成模式:凭证由请求头传入)") | ||
| return |
There was a problem hiding this comment.
SKIP_STARTUP_CREDENTIAL_CHECK 引入了新的启动分支逻辑,但当前 tests/unit/test_main_cli.py 只覆盖 CLI 相关函数,没有覆盖 validate_configuration() 的行为。建议补充单测:在未配置任何凭证时,设置该环境变量应不退出进程;未设置时应按原逻辑报错退出。
主要改动:
简化配置方式
添加 Claude 4.6 模型支持
更新文档
其他优化
修复问题: