feat: 上游合并 + 计费修复 + Group 显示名称#504
Closed
mashoushan1989 wants to merge 86 commits intolabring:mainfrom
Closed
Conversation
Add enterprise product planning document covering Feishu SSO integration, progressive quota tiers, department analytics, and upstream compatibility assessment. Add CLAUDE.md for Claude Code with build commands, architecture overview, and codebase guidance. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…quota, notifications, and analytics Implement the full enterprise extension module behind the `enterprise` build tag. All enterprise code lives in core/enterprise/ and is injected into the core via hook variables (zero modification to existing function signatures). Modules: - models: FeishuUser, FeishuDepartment, QuotaPolicy, GroupQuotaPolicy - feishu: OAuth login/callback, org sync (webhook + scheduled), admin APIs - quota: progressive tier checking with Redis cache, CRUD APIs, distributor hook - notify: Feishu P2P messaging, quota alert templates, enterprise notifier - analytics: department aggregation, user/dept ranking, Excel export Build: `go build -tags enterprise ./...` Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增企业版前端模块,包括: - 企业 Dashboard(部门汇总卡片 + 饼图) - 员工排行榜(部门筛选 + 导出报表) - 部门趋势详情页(ECharts 趋势图) - EnterpriseLayout 侧边栏布局 - 飞书 OAuth 回调中转页 - 登录页新增飞书登录按钮 - 管理后台侧边栏新增企业分析入口 后端新增 EnterpriseAuth 中间件,支持 AdminKey 和飞书用户双路径认证, 角色分三级:viewer / analyst / admin。 修复代码审查发现的 8 项问题(P0-P3): - P0: 飞书用户无法访问分析接口、setToken 接口缺失 - P1: blob 响应被拦截器破坏、feishu-callback 重复执行、ECharts 清理顺序 - P2: 粒子动画闪烁、侧边栏导出按钮缺少时间上下文 - P3: 三个页面重复工具函数提取到 lib/enterprise.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
后端: - 新增模型用量分布接口 (model/distribution) - 新增环比对比接口 (comparison),支持日/周/月维度 - 新增部门排行接口 (department/ranking) - 部门汇总增加活跃用户、成功率、平均成本、模型数字段 - 用户排行增加排名、输入/输出 Token、成功率、模型数字段 - 导出 Excel 重构为 4 Sheet(汇总、部门明细、用户排行、模型分布) - 清理未使用的辅助函数 前端: - Dashboard 指标卡片增加环比变化指示器 - Dashboard 新增模型用量分布图表和表格 - 部门汇总表新增成功率列 - 排行榜新增输入/输出 Token 和模型数列 - 修复部门趋势页时间戳类型 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增功能: - 额度策略管理页面 (/enterprise/quota) - 支持创建/编辑/删除渐进式额度策略 - 三级阈值配置 (tier1/tier2/tier3 RPM/TPM 倍率) - 侧边栏添加额度策略菜单项 - 完整的中英文翻译支持 问题修复: - 修复 SQL 字段名错误 (status_2xx_count → status2xx_count) - 修复 i18n zh-CN 加载警告 (添加 supportedLngs 和 load: languageOnly) - 修复 vite proxy 端口配置 (3000 → 3001) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
额度策略页面修复: - TierIndicator ratio 钳制到 0-1 范围,防止溢出 - tier ratio 输入添加 0-100 边界验证 - handleSave 验证增强为 0 < tier1 < tier2 <= 1 - multiplier 输入最小值改为 0.01,防止无效值 - 删除按钮添加 isPending 禁用状态 - dialog 关闭时重置 formData 到默认值 - 添加 common.deleting 翻译键 飞书 OAuth 流程优化: - HandleCallback 支持两种模式:API JSON 响应和浏览器重定向 - 添加 GetFrontendURL() 配置函数(环境变量 FEISHU_FRONTEND_URL) - 前端 feishu-callback 页面支持直接从 URL 参数获取认证信息 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 新增 ChannelTypePPIO (53) 渠道类型 - 创建 ppio adaptor,继承 OpenAI 兼容接口 - API 基地址: https://api.ppinfra.com/v3/openai - 支持模型: DeepSeek R1/V3、Qwen、MiniMax、Llama、BGE-M3 等 文档: https://ppinfra.com/docs/get-started/quickstart.html Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- oauth.go: 修复 Accept header 判断,避免 */* 被误判为 JSON - router.go: 将 quota 路由从 admin-only 移至 enterprise-auth (允许企业版用户和管理员都能访问额度策略) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
企业版(Feishu Token)和管理后台(AdminKey)使用不同认证体系, 从企业版侧边栏直接跳转管理后台会触发 401 → logout 死循环。 改为 target="_blank" 在新标签页打开,两边 session 互不干扰。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 时间筛选:增加自定义日期范围选择(DateRangePicker) - 部门筛选:从单选改为多选(Popover + Checkbox),支持全选/清除 - 排名数量:增加自定义数量输入和"显示全部"选项 - 添加相关中英文翻译 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 新增列可见性控制:用户可自定义显示/隐藏表格列 - 新增排序功能:点击列头可按升序/降序排列数据 - 修复标题冗余显示问题:将"员工排行榜 (N)"改为统计信息展示 - 添加自定义报表页面占位符(Coming soon) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 隐藏列时重置排序状态,避免排序指示器不可见的困惑 - department_name 排序时使用 department_id 作为 fallback,与显示逻辑一致 - unique_models 列添加数字格式化 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 新增 FEISHU_ALLOWED_TENANTS 环境变量,支持多租户白名单(逗号分隔) - OAuth 回调时校验用户 TenantID,非白名单用户返回 403 - 浏览器流程被拒绝时重定向到前端显示友好错误信息 - FeishuUser 模型新增 TenantID 字段,记录用户所属企业 - 白名单为空时允许所有用户登录(向后兼容) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
后端: - 新增 custom_report.go,支持灵活的维度/度量组合查询 - handler.go/register.go 注册自定义报表路由和字段目录接口 前端: - 自定义报表页面完整实现(维度/度量选择、表格/图表/透视表视图) - 透视表模式:选 2 维度时行列交叉展示,支持切换展示指标 - 时间维度自动折线图:选 time_* 维度时自动切换折线图视图 - 5 个预设报表模板(部门费用、模型趋势、用户排行、交叉分析、每日性能) - 筛选器 UI:部门多选 Popover、模型/用户名 Tag 输入 - CSV 导出功能 - 修复 viewMode 在维度变化时卡在 pivot 的 bug - 修复 handleGenerate useCallback 依赖不稳定的 bug(mutateRef 模式) - 路由、导航、i18n(中/英)配置 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- enterprise/docs/progress.md: 企业版开发进度(7 个阶段已完成) - enterprise/docs/architecture.md: 企业版架构文档(后端模块、API 路由、前端结构、数据流) - enterprise/enterprise-frontend-plan.md: 前端规划文档 - .claude/settings.json: Claude Code hooks(gofmt 自动格式化、飞书通知) - .gitignore: 排除编译产物和本地配置 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 修正 enterprise 目录说明:core/enterprise/ 为代码,enterprise/ 为文档 - 更新 Enterprise 章节:从 planned 改为实际模块描述,指向 enterprise/docs/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
核心修复: - 修复用户排行榜只显示一个用户的 bug(从 group_id 改为 token_name 聚合) - 修复企业模块初始化时 Feishu 同步导致的 nil pointer 崩溃 新增功能: - 飞书企业租户白名单校验(tenant_whitelist) - 访问控制管理页面(/enterprise/access-control) - 员工管理页面(/enterprise/users) 功能增强: - 完善配额系统:缓存、处理器、钩子函数 - 增强飞书 OAuth:错误处理、回调优化、注册路由 - 优化企业 Dashboard:部门统计、指标展示 - 改进企业布局组件:导航菜单、权限控制 技术改进: - 企业模块数据库迁移优化 - 前端 i18n 翻译完善(中英文) - API 接口增强(企业分析、配额管理) - Vite 配置优化 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增功能: - 用户列表支持多字段排序(姓名、角色、部门、分组、创建时间) - 添加部门层级筛选器(一级部门、二级部门级联筛选) - 部门列显示完整层级路径(一级部门 > 二级部门 > 三级部门) - 递归查询子部门,筛选时包含所有后代部门的用户 技术实现: - 新增 department.go:实现部门层级遍历(GetDepartmentPath、GetLevel1/2Departments) - register.go:添加部门筛选和排序参数,SQL 注入防护,递归查询子部门 - 前端:级联 Select 组件,防空值过滤,动态加载二级部门 - API:GET /feishu/department-levels 返回层级化部门数据 修复: - 修复 Radix UI Select 组件不允许空字符串 value 的问题 - 过滤数据源中的空 department_id,避免渲染错误 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
核心修复: - syncDepartmentsRecursive 返回实际从飞书 API 拉到的部门 ID 列表 - SyncAll 不再 db.Find 全量部门,避免对 mock 数据调用飞书 API - syncDepartmentUsers 权限不足时 DepartmentID fallback 到当前遍历部门 - ListDepartmentUsers 错误日志增加 department_id 信息 同步状态功能: - 新增 SyncStatus 内存全局变量,记录同步状态/统计/错误 - 新增 GET /api/enterprise/feishu/sync-status API - 前端用户管理页顶部添加同步状态卡片(badge/时间/统计/权限警告) - 同步触发后自动轮询状态直到完成 其他改动(之前已完成): - client.go 添加 DepartmentIdType/UserIdType 参数 - FeishuUser 模型新增部门层级字段 - 用户管理页面部门层级显示和筛选 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 修复 PPIO Sync 页面暗黑模式完全不可用:替换硬编码颜色为语义化类名,改用 shadcn 组件 - 修复用户管理排序闪屏:添加 keepPreviousData 保持旧数据显示 - 修复硬编码中文文本:motion-data-table 和 users 页面改用 i18n - ECharts 暗黑模式适配:新增 useDarkMode hook,dashboard/department/custom-report 图表响应主题切换 - 企业侧边栏添加中英文切换按钮,设置 useSuspense: false 修复语言切换不生效问题 - 飞书部门数据去重优化,修复同步时重复记录导致的显示异常 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 修复 zh/translation.json 第 314 行全角引号破坏 JSON 格式的问题 - 图表组件硬编码英文改用 t() 翻译调用(dashboard/department) - i18n 默认 fallback 改为中文,添加图表翻译 key Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
主要变更: - 新增被拒绝租户登录自动记录(OAuth 拒绝时写入 rejected_tenant_logins 表) - 访问控制页面改为租户总览视图,聚合白名单/成员数/拒绝次数,支持一键加白和忽略 - 配额系统新增部门绑定、用户覆盖、批量绑定功能 - 自定义报告拆分为多组件架构,新增一级/二级部门维度 - 飞书同步补全 tenant_id(API + DB fallback + force-update) - PPIO 模型同步模块(完整 CRUD + 诊断面板) - 消除冗余 DB 查询(batchResolveDeptNames)、修复 O(n²) prepend - 提取 ALL_FILTER 常量替代 11 处魔术字符串 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 提取 withUserToken/bindUserPolicyCore/forEachDepartmentUserWithoutOverride 消除重复逻辑 - 用 utils.ParsePageParams 替换本地重复的 parsePageParams - ListDepartmentPolicyBindings 改用内存 BFS 计算子部门,消除 N 次递归 DB 查询 - 前端 bindingList.find() O(N*M) 改为 Map.get() O(1) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
三个根因: 1. 阶梯定价边界重叠:PPIO API 用闭区间 [0,128000],[128000,∞], aiproxy 校验拒绝重叠,调整非首阶梯 MinTokens+1 并跳过退化阶梯 2. sonic 序列化 key 不排序:改用 sonic.ConfigStd.Marshal 双向归一化 3. 诊断中阶梯计数未过滤退化阶梯:复用 countEffectiveTiers 代码简化: - 泛型 filterModelIDs[T] + endpointModel 接口统一 V1/V2 过滤 - ensurePPIOChannelsWithFilter 消除渠道同步重复,改用 Update 并处理错误 - toModelConfigKeys 替代 4 处 marshal/unmarshal 键类型转换 - adjustTierBounds/countEffectiveTiers 提取共享阶梯边界逻辑 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. 修复重复点击生成报表数据变化问题: - 排除当前未完成小时数据(end=nowHour-1),只查询已完成时段 - SQL 加 ORDER BY 确保数据库返回顺序确定 - sortResults 增加按维度的兜底排序,消除 Go map 遍历随机性 2. 自定义报表 UI 优化: - 维度/指标使用不同颜色(青绿 vs 紫色)差异化展示 - 维度按身份/时间分组,标注"同组互斥"提示 - 图表图例自动换行,动态计算 grid.top 避免覆盖数据区域 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 修复 ConfigPanel 中 Tailwind JIT 无法解析动态插值类名的 bug, 改用 style 属性设置非激活态边框颜色 - 提取 ReportChart 中重复 3 次的图例配置为 wrapLegend() 工具函数 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
将 8 个单一权限模块拆分为 16 个 view/manage 双层权限,支持细粒度访问控制: - 后端:新增 role_permission 模型、HasPermission manage→view 隐含逻辑、V1→V2 自动迁移 - 路由:所有子模块(analytics/quota/ppio/feishu/whitelist)按 view/manage 分离中间件 - 前端:侧边栏按 _view 权限过滤、页面写操作按 _manage 权限控制 - 权限配置 UI:改为模块×角色 view/manage 双列 Switch 矩阵,支持联动 - 新增「我的接入」页面(API Key 管理、可用模型列表) - 代码简化:提取 userListContent 消除重复、useMemo→useEffect 修复副作用、去除冗余 dept ID 拼接 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- access_info.go: 新增 supported_endpoints 字段,按模型类型返回支持的 API 端点路径 - ppio/types.go: 修正 V1 模型价格字段注释(CNY 元,非 厘) - ppio-sync.tsx: 诊断页面展示端点徽章和端点说明;端点图例改为从 ENDPOINT_LABELS 读取标签,消除硬编码;ModelRow 改用 ModelDiff 类型 - my-access.tsx: 我的接入页面用彩色端点徽章替换模型类型列;新增 Anthropic SDK 示例代码;端点路径可点击复制 - RequirePermission.tsx: 新增 RequireAdmin 组件,区分 AdminKey 登录和飞书登录的管理权限 - EnterpriseLayout.tsx: 侧边栏支持 adminOnly 属性,监控页仅管理员可见 - routes/config.tsx: 标准管理后台路由用 RequireAdmin 包裹 - feishu/register.go: 用户列表 API 支持 role 筛选参数 - enterprise.ts: 修正 formatAmount 货币符号(¥)并增加小额精度处理 - dashboard.tsx: 饼图 tooltip 金额前缀改为 ¥ - i18n: 新增端点说明、Anthropic SDK 注意事项等翻译 key Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PPIO 已将 API 域名从 api.ppio.com 迁移至 api.ppinfra.com,旧域名不可用。 同时将 PreviewHandler 从 V1 API 升级到 V2(与 Diagnostic 保持一致), 并将未使用的导出常量 DefaultTimeout 改为未导出的 defaultPPIOTimeout。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DEPLOYMENT.md: 双域名架构部署文档(CLB/Nginx/Systemd/飞书SSO/安全加固/更新流程/易错点汇总) - USER-GUIDE.md: 面向企业员工的 AI 工具配置指南(Cherry Studio/Claude Code/Cursor + 推荐模型) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Base URL 旁复制按钮文案从"复制 Key"改为"复制 URL" - Novita 在可用模型列表中显示为首字母大写 "Novita" - 模型分组排序调整:PPIO → Novita → 其他(原为纯字母序) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PPIO Anthropic base_url 改为 api.ppio.com/anthropic(ppinfra.com/v3/anthropic 端点不可用) - PPIO/Novita 同步创建 Anthropic 渠道时使用 ChannelTypeAnthropic(14) 而非各自的 OpenAI adaptor type - 修复根因:OpenAI adaptor 处理 Anthropic 请求时拼接 /chat/completions 导致上游 404 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 提取 ppioChannelWhere/ppioChannelArgs 统一查询条件 - 匹配 type=ChannelTypePPIO 或 base_url 含 ppio/ppinfra - 修复 ppinfra.com 域名的 OpenAI 渠道无法在同步页面显示的问题 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PPIO/Novita 同步时,当模型 endpoints 仅包含 "responses" 而不含 "chat/completions" 或 "completions" 时,自动将 Type 设为 mode.Responses,使 IsResponsesOnlyModel 正确识别,openai adaptor 自动路由到 /responses 端点。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PPIO 等第三方 Anthropic 端点的 max_tokens 限制低于原版 Claude API。 新增 GetMaxTokens 优先读取同步时存入的 max_output_tokens(准确的 provider 限制),不再硬编码原版值导致请求被拒绝。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
model_type 为 "chat" 但 endpoints 仅含 "responses" 的模型(如 pa/gpt-5-codex)被错误分类为 ChatCompletions。将 responses-only 检测提到 ModelTypeToMode 之前,确保端点声明优先于宽泛的类型分类。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
compareModelConfigsV2 之前只比较 price 和 config,不检测 Type 变化, 导致 responses-only 模型的 Type 修正无法在 re-sync 时触发更新。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. getModelSupportedEndpoints: 分离 chat-base 与 responses 端点分类 - responses-only 模型不再错误展开为 4 个 chat-family 端点 - chat-base slugs 正确展开为 3 个协议转换端点 - "responses" slug 独立添加,不与 chat-base 混淆 2. getSupportedEndpoints: mode.Responses fallback 返回 endpointsResponsesOnly 3. Novita diagnostic compareModelConfigsV2: 补全阶梯计费和缓存价格对比 - 新增 tiered_billing_count 变更检测 - 新增 cache_read_price 变更检测(含汇率转换) - 新增 countEffectiveTiers 辅助函数 4. 重命名: endpointsChatFamilyBase→endpointsChatFamily, ppioSlugToPath→endpointSlugToPath Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
飞书登录后签发独立的 JWT 作为 Web Session 凭证,不再依赖 tokens 表的 API Key。 禁用/删除任何 API Key 不再影响企业 Dashboard 的登录状态。 后端:新增 session 子包(jwt.go);auth.go 提取共享鉴权helpers, 三路径鉴权(AdminKey→JWT→Legacy token);oauth.go 返回 session_token。 前端:auth store 新增 sessionToken;请求拦截器自动 Bearer 前缀; 响应拦截器处理 X-New-Token 滑动续期;callback 页面优先读取 session_token。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DEPLOYMENT.md: 新增远程服务器操作手册(登录、编译、部署、数据库、日志排查等), 补充仅后端快速部署流程和两个部署易错点(二进制复制、Text file busy)。 USER-GUIDE.md: 全面改版——新增系统功能介绍(我的接入/企业概览/员工排行 ASCII 图解), 更新推荐模型至最新版本(Claude 4.6、GPT-5.4、DeepSeek-V3.2、Kimi K2.5 等), 增加端点标签说明和 Responses 格式故障排查。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
问题: 1. (P0) 用户离职时 webhook 只禁用 token_id 指向的 1 个 Key, 用户手动创建的其他 Key 不受影响,离职后仍可调用 AI API 2. (P1) 定时全量同步 (SyncAll) 没有离职检测逻辑, 如果 webhook 漏收(网络故障/服务重启),离职用户永远不会被清理 修复: - 新增 DisableAllGroupTokens() 批量禁用 Group 下所有 Token 并清缓存 - 提取 deactivateFeishuUser() 作为统一下线路径(webhook + sync 共用) - SyncAll 增加离职检测:对比飞书 API 返回的 open_id 集与 DB 活跃用户, 差集执行 deactivate(含 50% 安全阈值防止 API 异常导致误杀) - DEPLOYMENT.md 补充前端构建路径易错点 labring#21 和完整部署方案 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DisableAllGroupTokens: SELECT 只取 key 列(无需加载完整 Token 结构) - deactivateFeishuUser: 检查 db.Delete 错误(之前静默忽略) - deactivateDepartedUsers: 移除冗余 "detected N departed" 日志行 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
修复策略只同步到 feishu_user.token_id 单个 Key 的漏洞,用户自建 Key 可绕过额度限制: - withUserToken → withGroupTokens,策略同步/清除覆盖 group 下所有 Key - 请求路径检测到未同步 Token 时,实时使用 policy 值限流 + 异步自愈写入 - sync.Map 防止热路径重复 spawn goroutine - PeriodType 转换增加显式匹配 + unknown 值告警日志 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
解决 Claude Code 通过 PPIO 等 Anthropic 兼容渠道时因 beta header/body 不同步 导致的 400 "Extra inputs are not permitted" 错误。改为透传客户端 Anthropic-Beta header,由上游自行判断支持情况。AWS Bedrock/VertexAI 在各自适配器中独立过滤。 同时包含: - 转发上游速率限制响应头,支持客户端自适应 backoff - 新增 skip_image_conversion / strip_cache_ttl 配置项 - 添加 Claude 3.7/4/4.5 系列模型定义 - 流式 model 替换仅对 message_start 事件执行 - 修复 MultiplierInput 默认 min/max 与原始行为不一致 - 文档补充 CLB/Nginx 超时配置说明 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- PPIO/Novita 模型同步时从 features 和 input_modalities 推导 tool_choice、vision 能力标记,前端模型表格可正确显示徽章 - Anthropic 渠道同步时自动设置 skip_image_conversion 和 disable_context_management,避免 400 错误(已有渠道也会补全) - PPIO Anthropic 默认 base_url 统一为 api.ppinfra.com/anthropic - 补充 RPM/TPM 限流和额度策略文档(DEPLOYMENT.md、USER-GUIDE.md) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 默认列:姓名、部门、总Token(倒序)、请求数、模型数、成功率、千Token成本 - 可选列:平均Token/请求、平均费用/请求、输出/输入比、费用、输入/输出Token - 派生指标在客户端从后端原始数据计算,无需后端改动 - 使用设计系统 Table 组件替代原生 table,Skeleton 加载态 - 成功率 Tooltip 显示精确值 + 颜色区分(≥99%绿/<90%红) - 列选择器按"默认列"/"可选列"分组,pinned 列不可隐藏 - 提取 formatRate 到 lib/enterprise.ts,dashboard 复用 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
后端按 used_amount DESC 分配 rank,但前端默认按 total_tokens DESC 排序, 导致金牌/银牌/铜牌徽章与显示顺序不一致。现在排序后重新分配 rank, 使徽章始终对应当前可见的前三名。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
前端 MultiplierInput 默认 min=0.01/max=2/step=0.1 导致三个问题: - 不能设为 0(被截断为 0.01),但 multiplier=0 在后端语义是"不限制" - 不能输入 3 等大于 2 的值(被截断),但放大限额是合理的 VIP 场景 - 箭头递增到 1.91 后因浮点精度无法到达 2.0 修正为 min=0, max=10, step=0.01,与后端 float64 无约束字段对齐。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. 我的接入页面重设计: - 配额状态独立为顶部卡片,不再受时间筛选影响 - 个人用量扩展至 8 个指标(新增平均单次消耗、成功率、响应时间、首 Token 时间) - 每个指标新增部门/企业活跃用户均值对比 2. 配额数据链路修复: - 修复周期重置检查缺失导致配额显示为旧周期数据的 bug - 统一 tier 计算口径,复用 quota.ComputeTier 避免 access_info 与 hook 不一致 - 前端 block 警告覆盖 tier 3 和 tier 4 3. 飞书同步历史: - 新增 FeishuSyncHistory 模型持久化同步记录 - 冷启动时从 DB 恢复最后同步状态 - 用户管理页新增可折叠同步历史表格 4. 通知告警模块: - 新增 QuotaAlertHistory 模型记录通知发送历史 - 新增告警历史 API 及前端通知配置/历史页面 - 企业侧边栏新增通知告警入口 5. 其他改进: - 自定义报告查询增加 30s 超时 + 1000 行上限 - 部门趋势查询增加 744 行安全上限 - group_summaries 新增 hour_timestamp 索引 - 删除重复的 formatPercent,统一使用 formatRate - 导出 analytics 包的 GetGroupIDsForDepartments/GetAllFeishuGroupIDs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
主要变更: - feat: Fake Adaptor 用于测试/mock (labring#503) - feat: Channel ProxyURL 代理支持 (labring#495) - feat: 消耗排行榜 consumption-ranking (labring#494, labring#501) - feat: 运行时监控指标 runtime metrics (labring#498, labring#499) - feat: ModelConfig 请求/响应体存储大小限制 (labring#500) - fix: Azure 图片模型 modelname 转换 (labring#492) - fix: Channel 状态更新 / 测试修复 (labring#496, labring#497) - refactor: Adaptor Registry 自注册模式 (labring#503) - chore: Go 依赖升级 (labring#502) 冲突解决: - chtype.go: PPIO ChannelType 从 53 改为 54(避免与 Fake=53 冲突) - register.go: PPIO adaptor 适配新 registry.Register() 自注册模式 - routes: 保留两边路由(上游 consumption-ranking + 企业版路由) - go.mod/sum: 接受上游版本后 go mod tidy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CLAUDE.md: 更新 Adaptor Registry 自注册模式说明、Channel/ModelConfig 新字段 - progress.md: 第 8/9 阶段标记完成、页面清单补全、上游同步记录 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
上游合并后 PPIO type 从 53 改为 54(Fake 占用 53), 已有 PPIO channel 需要在部署前执行此 SQL 迁移。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
修复 CalculateAmountDetail 中 ThinkingModeOutputPrice 错误覆盖所有输出 token 价格的问题。 当配置了 ThinkingModeOutputPrice 且存在 ReasoningTokens 时,现在正确拆分: - 推理 token → ThinkingModeOutputPrice 定价 - 普通输出 token → OutputPrice 定价 变更: - consume.go: 拆分 reasoning/output token 独立计价 - usage.go: 新增 ReasoningAmount 字段 + GetThinkingModeOutputPriceUnit() - consume_test.go: 新增 4 个拆分计价测试 + 修正已有测试期望值 - 前端: 日志详情展示推理输出消费明细 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
新增 Group.Name 字段作为可选显示名称,日志页面和企业版用户页面 自动解析 Group ID 对应的显示名称。 后端: - Group 模型新增 Name 字段,搜索支持按名称匹配 - 新增 GET /api/groups/names 批量查询接口 - 飞书 OAuth/Sync 代码整理 前端: - CreateGroupDialog 新增显示名称输入 - LogTable 和 LogPage 展示 Group 显示名称 - 企业版用户页面展示 Group 显示名称 - i18n: Group 表单字段名称调整(ID vs 名称) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
cd core && go test -v ./common/consume/...— 计费拆分测试(30+ 用例)cd core && go test -v ./model/...— 模型与 Usage 测试cd core && go build -trimpath -ldflags "-s -w" -o aiproxy— 后端编译cd core && go build -tags enterprise -trimpath -ldflags "-s -w" -o aiproxy— 企业版编译cd web && pnpm run build— 前端编译🤖 Generated with Claude Code