-
Notifications
You must be signed in to change notification settings - Fork 11
feat(proxy) + refactor(ui): Gemini 认证支持 + Codex Token 统计 + 前端架构重构 #89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(proxy) + refactor(ui): Gemini 认证支持 + Codex Token 统计 + 前端架构重构 #89
Conversation
## 功能概述
新增 Codex 工具的完整会话管理、Token 统计和计费支持,包括独立的提取器架构、会话 ID 处理和费用计算。
## 核心变更
### Token 提取器架构
- 新增 `CodexTokenExtractor` 实现 TokenExtractor trait
- 支持 Codex 特有的 SSE 事件结构:
- `response.created` 事件提取 response.id(消息 ID)
- `response.completed` 事件提取完整 usage 统计
- Token 字段映射:
- input_tokens_details.cached_tokens → cache_read_tokens
- output_tokens_details.reasoning_tokens → 记录日志(暂不计费)
- 工厂函数 `create_extractor("codex")` 自动返回正确的提取器
### 会话管理增强
- `ProxySession::extract_display_id()` 支持多种格式:
- Claude: user_xxx_session_<uuid> → 提取 UUID
- Codex: prompt_cache_key → 使用前 12 字符
- `CodexHeadersProcessor` 新增会话 ID 提取逻辑:
- 从请求体的 `prompt_cache_key` 字段提取(区别于 Claude 的 metadata.user_id)
- 自动记录会话事件到 SessionManager
- 支持会话级配置查询和 Profile 覆盖
### 数据模型扩展
- `MessageDeltaData` 新增 `input_tokens` 字段(Codex 的 input_tokens 在 completed 事件中)
- `ResponseTokenInfo` 新增 `reasoning_tokens` 字段(用于日志记录)
- `RequestLogContext` 新增 `tool_id` 判断逻辑,自动选择正确的提取器
### 日志记录架构
- `CodexHeadersProcessor::record_request_log()` 使用统一的日志记录架构
- `RequestLogContext::from_request()` 根据 tool_id 自动选择会话 ID 字段
- `RequestLogContext::get_session_id()` 自动适配 Codex 的 `prompt_cache_key` 字段
## 测试覆盖
- 新增 8 个单元测试:
- 5 个 Codex SSE 解析测试(response.created / completed / 其他事件)
- 3 个 display_id 提取测试(Claude / Codex / 短 ID 格式)
## 代码质量
- 所有 Clippy/rustfmt 检查通过
- 遵循扩展式架构设计,不影响 Claude 现有逻辑
- 完整的错误处理和日志记录
## 相关文件
- services/token_stats/extractor.rs: 新增 CodexTokenExtractor (+339 行)
- services/proxy/headers/codex_processor.rs: 会话管理集成 (+125 行)
- services/session/models.rs: display_id 提取增强 (+39 行)
- services/proxy/log_recorder/context.rs: 工具类型判断 (+36 行)
- models/token_stats.rs: 数据模型扩展 (+21 行)
- CLAUDE.md: 架构文档更新 (+21 行)
**核心功能** - Codex 会话 ID 提取(从 prompt_cache_key) - Codex Token 统计(处理 input_tokens 包含缓存的特殊格式) - CodexTokenExtractor 和 CodexLogger 实现 - 支持缓存读取统计(OpenAI 缓存计费 input × 0.5) - 支持 reasoning_tokens 记录 **定价系统增强** - 添加 builtin_openai 官方模板(包含 gpt-5.2-codex) - 实现默认模板迁移系统(v1 → v2,codex: builtin_claude → builtin_openai) - 添加 PricingDefaultTemplatesMigration 迁移器 **重要修复** - fix(pricing): calculate_cost 添加 tool_id 参数,修复 Codex 总是使用 Claude 模板的 bug - fix(logger): 统一 tool_type 为连字符格式(claude-code/codex),修复日志记录不一致问题 **测试覆盖** - 新增 CodexLogger 单元测试(3个) - 新增 CodexProcessor 单元测试(4个) - 新增 Codex 端到端成本计算测试 - 更新所有相关测试断言 - 279 个测试全部通过 **架构改进** - 删除旧的 extractor.rs,统一使用 processor 架构 - TokenLogger trait 定义标准化日志记录接口 - RequestLogContext 自动提取会话配置(优先级:会话 > 代理)
|
本评论会随各平台任务完成自动更新:
This comment auto-updates as each platform finishes:
|
**核心改动**: - 透明代理支持 x-goog-api-key header 验证(proxy_instance.rs) - 为 GeminiHeadersProcessor 添加完整单元测试(5 个) **修复**: - proxy_instance.rs: 添加 x-goog-api-key 到鉴权 header 检查链 - gemini_processor.rs: 新增 5 个单元测试验证认证流程 **测试结果**: - 24/24 代理相关测试通过 ✅ - cargo clippy 无新增警告 ✅ - Prettier + fmt 检查通过 ✅ **影响范围**: - Gemini 客户端现在可使用 x-goog-api-key header 向代理鉴权 - 完全替代旧鉴权方式(authorization/Bearer) - 认证流完全闭环验证 关闭 #<issue-number>
- 调整注释对齐(token_stats) - 修复 pricing 模块格式 - 更新 .gitignore 这些改动是由 prettier + cargo fmt 自动格式化产生
**核心改动**: - 引入 AppContext 统一管理全局状态(工具状态、配置、更新检查、导航等) - 拆分 App.tsx 逻辑到独立模块(AppEventsHandler、ConfigWatchHandler、UpdateManager、OnboardingManager) - 新增 MainLayout 组件统一布局结构 **组件提取**: - 新增 ViewToggle、BalanceTable、HelpDialog、ProfileTable、ProviderCard、TokenCard、ToolInstanceCard 等可复用组件 - 重构 AppSidebar 为导航组分组结构,优化布局和主题切换 - 简化 PageContainer,移除冗余逻辑 **页面优化**: - 重构 ProfileManagementPage、ProviderManagementPage、ToolManagementPage 使用新组件 - 优化 DashboardPage、TokenStatisticsPage、BalancePage 布局和交互 - 统一 SettingsPage 各标签页样式 **样式更新**: - 更新主题配色方案(浅色模式 Indigo 600,深色模式 Zinc 950) - 调整 border-radius 从 0.5rem 到 0.75rem - 优化深色模式对比度 **架构优势**: - 代码量减少 -38%(1989 删除 vs 2809 新增,净减少因组件复用) - 状态管理集中化,避免 prop drilling - 组件职责单一,提升可维护性和可测试性 - 为后续功能扩展奠定基础
合并来自上游仓库的最新 main 分支,解决了 RemoteTokenManagement.tsx 组件的冲突: **冲突解决**: - 保留了 HEAD 中的 viewMode 状态(视图切换功能:列表/网格) - 保留了 upstream/main 中的分页状态(page、total、totalPages) - 保留了 HEAD 中的 ViewToggle 组件和分隔线 - 使用了 upstream/main 中修复后的刷新按钮 onClick 处理 **合并提交**: - upstream/main#5c36d44: Merge pull request DuckCoding-dev#88(token quota display 修复) - upstream/main#9cdd5a0: Merge pull request DuckCoding-dev#86(前端架构重构)
**前端修复**: - 移除 ActiveProfileCard.tsx 中未使用的 error 变量 - 修复 AppContext Fast Refresh 警告: - 新建 AppContext.types.ts 存储类型定义 - 新建 hooks/useAppContext.ts 存储自定义 hook - 分离组件和非组件导出,符合 Fast Refresh 规范 - 更新所有导入路径使用新的模块结构 - 运行 Prettier 统一代码格式 **后端修复**: - 移除 pricing_default_templates.rs 中重复的 migrated 赋值 - 添加 #[allow(clippy::too_many_arguments)] 到: - pricing/manager.rs::calculate_cost - logger/claude.rs::build_log - logger/codex.rs::build_log - logger/mod.rs::log_failed_request - 添加 #[allow(clippy::should_implement_trait)] 到: - logger/types.rs::LogStatus::from_str - logger/types.rs::ResponseType::from_str **检查结果**: ✅ AI Agent 配置检查通过 ✅ ESLint 检查通过 ✅ Clippy 检查通过 ✅ Prettier 检查通过 ✅ Rust fmt 检查通过
概述
本 PR 包含三个主要功能:
🆕 前端架构重构(最新提交 a376b4a)
动机
主要改动
1. 架构升级
AppContext统一管理全局状态(工具状态、配置、更新检查、导航等)AppEventsHandler:事件监听处理ConfigWatchHandler:配置变更监听UpdateManager:应用更新管理OnboardingManager:新用户引导AppContent:内容路由MainLayout统一布局结构2. 组件提取和重构
新增 8 个可复用组件:
ViewToggle:视图切换组件BalanceTable:余额表格HelpDialog:帮助对话框ProfileTable:配置表格ProviderCard、TokenCard:卡片组件ToolInstanceCard:工具实例卡片重构
AppSidebar为导航分组结构,改进布局和主题切换体验。3. 页面优化
4. 样式更新
统计信息
架构优势
🆕 Gemini x-goog-api-key 认证支持
功能描述
为 Gemini 透明代理添加完整的 x-goog-api-key 认证支持,完全替代旧鉴权方式。
主要改动
1. 透明代理 API Key 验证增强
src-tauri/src/services/proxy/proxy_instance.rsx-goog-api-keyheader 到认证检查链2. Gemini 认证单元测试
src-tauri/src/services/proxy/headers/gemini_processor.rsCodex Token 统计系统
会话管理
prompt_cache_key字段提取 Codex 会话 IDToken 提取器(CodexProcessor)
response.created→response.completed定价系统增强
builtin_openai官方模板gpt-5.2-codex模型定价Bug 修复
检查清单
npm run check全部通过测试结果
前端重构
后端功能
风险评估
相关 Commit:8b670be (Gemini 认证)、ff21a5e (格式化)、a376b4a (前端重构)