Skip to content

feat(bedrock): 新增 Amazon Bedrock 供应商支持(双鉴权路径 + 评审修复)#1374

Open
yourlin wants to merge 1 commit into
BigPizzaV3:mainfrom
yourlin:main
Open

feat(bedrock): 新增 Amazon Bedrock 供应商支持(双鉴权路径 + 评审修复)#1374
yourlin wants to merge 1 commit into
BigPizzaV3:mainfrom
yourlin:main

Conversation

@yourlin

@yourlin yourlin commented Jul 8, 2026

Copy link
Copy Markdown

摘要

新增 Amazon Bedrock 供应商,支持 Bedrock API Key (Bearer Token)AWS Profile (SSO) 双鉴权路径。前后端各自实现生成与识别端并通过 property test 保证契约。同时把代码评审中提出的 10 项问题(P0/P1/P2/P3)一并修复。

主要改动

后端(Rust / codex-plus-core

  • 生成端:complete_bedrock_bearer_token_config / complete_bedrock_aws_profile_config
  • 识别端:bedrock_config_from_config_text(与 TS 端保持契约一致)
  • 数据模型:RelayProfile.bedrock: Option<BedrockConfig>,包含 auth_mode / provider_id / region / aws_profile / iam_user_name / iam_key_validity_days 六个字段;bedrock: None 不序列化(旧 settings.json 落盘格式不变)
  • 切换保护:relay_switch 里对 AWS Profile 模式跳过 configured 检查,避免把合法配置误判为"未检测到完整 custom provider"
  • 常量:BEDROCK_MANTLE_URL_PREFIX / BEDROCK_MANTLE_URL_SUFFIX 提取到模块顶部,供生成端与识别端共同引用

前端(TypeScript / Tauri manager)

  • BedrockRelayProfileEditor:名称、Provider 标识符、Region、API Key、IAM 用户名、AWS Profile 等字段;提供 Long-Term / Short-Term Key 与 AWS SSO 的 CLI 命令示例
  • ProviderPresetSelector:Bedrock 入口归入「第三方」分组,排在 Azure OpenAI 前面;搜索命中 aws / bedrock / amazon 时也可见
  • bedrock-config.ts:与 Rust 契约对齐的解析/校验/命令生成纯函数
  • 磁盘 config 有 Bedrock 特征时以推导结果为准;没有特征但 UI 已 patch bedrock(例如刚点入口按钮的中间态)时保留 UI 值,避免"点了 Amazon Bedrock 按钮但界面没有切换"

测试

  • proptest 覆盖 10 条属性(Bearer Token / AWS Profile 生成正确性、region 必填、保留字冲突、Base URL 一致性、生成 → 识别往返 等)
  • 新增 regression:脏字段残留、表段感知、注释行忽略、保留字冲突去重、天数校验
  • 前端 bedrock-config.test.ts / BedrockRelayProfileEditor.test.ts / ProviderPresetSelector.test.ts 用 Node --test + fast-check 属性测试

代码评审修复(P0/P1/P2/P3)

  • P0-1 保留字冲突时 inline 与底部错误提示去重(新增 bedrockValidationErrorForBottom
  • P0-2 bedrockValidationError 注释与实现对齐
  • P1-3 ensure_root_scalars_precede_tables 加入表段感知,忽略注释行;同步 property test 生成器
  • P1-4 tomlStringAssignment / tomlBoolAssignment 对 key 做 escapeRegExp
  • P2-5 Bearer Token 分支改为整表替换,避免同名旧 provider 表下的 env_key / http_headers 等杂字段残留
  • P2-6 BEDROCK_MANTLE_URL_PREFIX / SUFFIX 提取常量,Rust / TS 双端同步
  • P3-7 IAM 用户名字段 label 精简,长括号说明改到 field-hint
  • P3-8 bedrockLongTermApiKeyCommand 拒绝非法天数(非正整数、前导零、字母、负号统一 fallback 到 90
  • P3-9 require_non_empty 调用点 label 统一为中文("AWS 区域"),消除"region 不能为空"半中半英
  • UI 补齐:Bedrock 编辑器新增「名称」字段,修复原来 profile.name 无法编辑的问题

验证

  • cargo test -p codex-plus-core --lib125/125 通过(含 8 property + 3 新增 regression)
  • cargo test -p codex-plus-core --test relay_switch --test launcher60/60 通过(含 Bedrock Bearer Token / AWS Profile 两条完整写入路径的集成测试)
  • 前端 node --test --experimental-strip-types src/**/*.test.ts56/56 通过
  • tsc --noEmit:干净
  • npm run build:完整 release 构建通过(Vite + cargo build --release
  • macOS 15 上手动验证:
    • Bedrock 编辑器名称字段可编辑
    • Bearer Token / AWS Profile 两条鉴权路径 UI 切换正常
    • 保留字冲突(openai / amazon-bedrock 等)只在 Provider ID 下方展示 inline 红字,底部不再重复
    • Long-Term Key 命令区输入 abc / -5 / 090 均 fallback 到 90
    • 供应商预设「第三方」分组中 Bedrock 显示在 Azure OpenAI 前面
    • 保存/切换 profile 后 ~/.codex/config.toml 生成的 [model_providers.*] 段落干净、无脏字段残留

已知限制 / 备注

  • tauri.conf.jsonbundle.active = false,本 PR 不涉及 .app / .dmg 打包变化。
  • 前端 i18n-en.ts 未为本次新增中文串补翻译,沿用项目现状:t() 找不到映射时回落到原文。
  • macOS 侧 tests/installers.rs 有 3 项 bundle 命名相关的失败是仓库既存问题(本 PR 前后一致,与本次改动无关)。
  • 常量 BEDROCK_MANTLE_URL_PREFIX / SUFFIX 仍需 Rust / TS 两端手动同步;若未来 endpoint 模板改变,两处需同时更新。

支持双鉴权路径(Bedrock API Key / AWS Profile SSO),前后端各自实现
生成与识别端并通过 property test 保证契约;同时把评审中提出的 10 项
问题(P0/P1/P2/P3)一并修复。

主要改动:
- 生成端:complete_bedrock_bearer_token_config /
  complete_bedrock_aws_profile_config
- 识别端:bedrock_config_from_config_text(Rust/TS 双端保持契约一致)
- 前端:BedrockRelayProfileEditor(名称、Provider 标识符、Region、
  API Key、IAM 用户名、AWS Profile 等字段),并提供 Long-Term /
  Short-Term Key 与 AWS SSO 的 CLI 命令示例
- 供应商预设:ProviderPresetSelector 里 Bedrock 入口归入「第三方」
  分组、排在 Azure OpenAI 前面;搜索命中 aws / bedrock / amazon 时
  也可见
- 常量:BEDROCK_MANTLE_URL_PREFIX / SUFFIX 提取给 Rust/TS 两端参照
- 测试:proptest 覆盖 10 条属性 + regression 覆盖脏字段残留 /
  表段感知 / 保留字冲突去重 / 天数校验

评审修复清单:
- P0-1 保留字冲突时 inline 与底部错误提示去重
- P0-2 bedrockValidationError 注释与实现对齐
- P1-3 ensure_root_scalars_precede_tables 加入表段感知,忽略注释行
- P1-4 tomlStringAssignment / Bool 对 key 做 escapeRegExp
- P2-5 Bearer Token 分支改为整表替换,避免同名旧 provider 表脏字段残留
- P2-6 BEDROCK_MANTLE_URL_PREFIX / SUFFIX 提取常量,Rust/TS 同步
- P3-7 IAM 用户名字段 label 精简,长括号说明改到 field-hint
- P3-8 bedrockLongTermApiKeyCommand 拒绝非法天数(fallback 90)
- P3-9 require_non_empty label 统一中文("AWS 区域")
- UI 补齐:Bedrock 编辑器新增「名称」字段,修复无法改名的问题
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant