erio
|
1b6b3cf2fa
|
feat(ui): 渠道表单模型标签和映射输入框显示平台对应颜色
- PricingEntryCard 折叠态模型 tag 按平台着色
- ModelTagInput 模型标签按平台着色
- 模型映射输入框边框按平台着色
|
2026-03-31 21:27:32 +08:00 |
|
erio
|
5631c5f20c
|
feat(ui): 渠道列表状态列改为 Toggle 开关,支持直接启用/禁用
|
2026-03-31 21:21:03 +08:00 |
|
erio
|
963c3b5dd6
|
fix(ui): 渠道定价折叠态模型名完整展示,不再截断
去掉 max-w-[120px] truncate 限制,改用 flex-wrap 允许换行,
充分利用空白区域展示完整模型名。
|
2026-03-31 20:48:18 +08:00 |
|
erio
|
9311ca31fc
|
fix(channel): 前端重复模型校验改为按平台检查
后端 validateNoDuplicateModels 使用 platform:model 复合键,
前端之前跨平台扁平化检查导致不同平台下的同名模型误报重复。
|
2026-03-31 19:40:07 +08:00 |
|
erio
|
da72cf670a
|
fix(channel): 渠道表单校验增强 — 空模型定价报错 + 必填标记
- 保存时校验:定价条目有但模型列表为空时报错并跳转到对应平台 tab,
不再静默跳过导致数据丢失
- 保存时校验:启用的平台必须至少选择一个分组
- 分组关联标签增加红色 * 必填标记
|
2026-03-31 19:22:48 +08:00 |
|
erio
|
b4514501dd
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 02:11:52 +08:00 |
|
erio
|
d1791f43f8
|
refactor(channel): 抽取渠道映射公共函数 + OpenAI映射到body + 空响应修复 + 清理日志
- 抽取 ResolveChannelMappingAndRestrict 统一入口(5处→1个方法)
- 抽取 BuildModelMappingChain 到 ChannelMappingResult 方法(5处→1行调用)
- OpenAI 三入口 Forward 前应用渠道映射到请求体
- OpenAI Responses/Messages 限制检查添加错误响应
- 清理前端 3 处 console.log 调试日志
|
2026-03-31 02:11:24 +08:00 |
|
erio
|
8741864b79
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 01:34:37 +08:00 |
|
erio
|
946180ef0d
|
fix(channel): 模型限制用映射后模型检查 + 平台开关保留配置不删除
- OpenAI 网关三处 IsModelRestricted 改用 channelMapping.MappedModel
- 前端平台勾选改为 enabled 开关,取消勾选不清空配置数据
- formToAPI/校验只处理 enabled 的平台
|
2026-03-31 01:34:16 +08:00 |
|
erio
|
f27f1254ae
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 00:24:22 +08:00 |
|
erio
|
a65a8bcd93
|
feat(channel): 通配符定价匹配 + OpenAI BillingModelSource + 按次价格校验 + 用户端计费模式展示
- 定价查找支持通配符(suffix *),最长前缀优先匹配
- 模型限制(restrict_models)同样支持通配符匹配
- OpenAI 网关接入渠道映射/BillingModelSource/模型限制
- 按次/图片计费模式创建时强制要求价格或层级(前后端)
- 用户使用记录列表增加计费模式 badge 列
|
2026-03-31 00:23:45 +08:00 |
|
erio
|
54976c77ce
|
merge: feature/channel → release (v0.1.105.14) — 使用记录计费模式
|
2026-03-30 22:14:24 +08:00 |
|
erio
|
9e848ec2f0
|
feat(usage): 使用记录增加计费模式字段 — 记录/展示/筛选 token/按次/图片
- DB: usage_logs 表新增 billing_mode VARCHAR(20) 列
- 后端: RecordUsage 写入时根据 image_count 判定计费模式
- 前端: 使用记录表格新增计费模式 badge 列 + 筛选下拉
|
2026-03-30 22:13:16 +08:00 |
|
erio
|
a0d15fe784
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:47:21 +08:00 |
|
erio
|
bef6728ada
|
fix(channel): splice替换model_pricing条目 + 增强调试日志
|
2026-03-30 21:47:06 +08:00 |
|
erio
|
465ec9a9f3
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:37:57 +08:00 |
|
erio
|
79c3f4481a
|
debug(channel): 添加 formToAPI 调试日志 + 移除 Sora 平台
|
2026-03-30 21:37:27 +08:00 |
|
erio
|
b42b2a7491
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:06:55 +08:00 |
|
erio
|
47d52a971e
|
feat(channel): 平台配置改为勾选式,勾选后出现 Tab 但不自动跳转
|
2026-03-30 21:06:38 +08:00 |
|
erio
|
4e966d2331
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 19:06:28 +08:00 |
|
erio
|
6f6365e2c0
|
feat(channel): 对话框 Tab 布局 — 基础设置 + 平台独立 Tab + 固定高度
|
2026-03-30 19:06:03 +08:00 |
|
erio
|
a77eb1dc21
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 17:51:18 +08:00 |
|
erio
|
ed4a4f95f6
|
fix(channel): 分组加载时序修复 — 预加载 + await 确保分组数据就绪
|
2026-03-30 17:50:48 +08:00 |
|
erio
|
467bba161c
|
merge: feature/channel → release/custom-0.1.105 (v0.1.105.8)
|
2026-03-30 17:27:12 +08:00 |
|
erio
|
2f9f7de19d
|
fix(i18n): 渠道管理页面标题国际化
|
2026-03-30 17:26:16 +08:00 |
|
erio
|
2f1168a126
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
# Conflicts:
# backend/cmd/server/wire_gen.go
|
2026-03-30 16:13:52 +08:00 |
|
erio
|
c74c6f3f1f
|
feat(channel): 模型价格自动填充 + 默认定价 API
- 新增 GET /admin/channels/model-pricing?model=xxx API
- 从 BillingService 查询 LiteLLM/Fallback 默认定价
- 前端添加模型时自动查询并填充价格($/MTok)
- 仅在所有价格字段为空时才自动填充,不覆盖手动配置
|
2026-03-30 16:11:49 +08:00 |
|
erio
|
b80361e57a
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 15:04:48 +08:00 |
|
erio
|
c67e5a9cd9
|
feat(channel): 缓存扁平化 + 网关映射集成 + 计费模式统一 + 模型限制
- 缓存按 (groupID, platform, model) 三维 key 扁平化,避免跨平台同名模型冲突
- buildCache 批量查询 group platform,按平台过滤展开定价和映射
- model_mapping 改为嵌套格式 {platform: {src: dst}}
- channel_model_pricing 新增 platform 列
- 前端按平台维度重构:每个平台独立配置分组/映射/定价
- 迁移 086: platform 列 + model_mapping 嵌套格式迁移
|
2026-03-30 15:04:30 +08:00 |
|
erio
|
0924ef3c36
|
Merge branch 'feature/channel' into release/custom-0.1.105
|
2026-03-30 13:40:52 +08:00 |
|
erio
|
204da5c455
|
fix(channel): 分组紧凑布局+平台颜色名称+计费基准重命名+表单排序调整
|
2026-03-30 13:40:29 +08:00 |
|
erio
|
6b68152540
|
Merge branch 'feature/channel' into release/custom-0.1.105
# Conflicts:
# backend/cmd/server/VERSION
# backend/internal/handler/admin/channel_handler.go
# backend/internal/service/channel.go
|
2026-03-30 13:27:26 +08:00 |
|
erio
|
19d1a28e23
|
feat(channel): 缓存扁平化 + 网关映射集成 + 计费模式统一 + 模型限制
- 缓存重构为 O(1) 哈希结构 (pricingByGroupModel, mappingByGroupModel)
- 渠道模型映射接入网关流程 (Forward 前应用, a→b→c 映射链)
- 新增 billing_model_source 配置 (请求模型/最终模型计费)
- usage_logs 新增 channel_id, model_mapping_chain, billing_tier 字段
- 每种计费模式统一支持默认价格 + 区间定价
- 渠道模型限制开关 (restrict_models)
- 分组按平台分类展示 + 彩色图标
- 必填字段红色星号 + 模型映射 UI
- 去除模型通配符支持
|
2026-03-30 13:26:05 +08:00 |
|
erio
|
151ea48b87
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
# Conflicts:
# backend/internal/handler/admin/channel_handler.go
|
2026-03-30 02:38:18 +08:00 |
|
erio
|
e2f0df78ce
|
feat(channel): 模型映射 + 分组搜索 + 卡片折叠 + 冲突校验
- 渠道模型映射:新增 model_mapping JSONB 字段,在账号映射之前执行
- 分组选择:添加搜索过滤 + 平台图标
- 定价卡片:支持折叠/展开,已有数据默认折叠
- 模型冲突校验:前后端均禁止同一渠道内重复模型
- 迁移 083: channels 表添加 model_mapping 列
|
2026-03-30 02:36:04 +08:00 |
|
erio
|
755bf44e4d
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 02:25:12 +08:00 |
|
erio
|
e4814e4c77
|
feat(channel): 模型标签输入 + $/MTok 价格单位 + 左开右闭区间 + i18n
- 模型输入改为标签列表(输入回车添加,支持粘贴批量导入)
- 价格显示单位改为 $/MTok(每百万 token),提交时自动转换
- Token 模式增加图片输出价格字段(适配 Gemini 图片模型按 token 计费)
- 区间边界改为左开右闭 (min, max],右边界包含
- 默认价格作为未命中区间时的回退价格
- 添加完整中英文 i18n 翻译
|
2026-03-30 02:24:54 +08:00 |
|
erio
|
9e9285c25a
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
# Conflicts:
# backend/cmd/server/wire_gen.go
# backend/internal/handler/handler.go
# backend/internal/handler/wire.go
|
2026-03-30 02:05:59 +08:00 |
|
erio
|
a9117600a5
|
feat(channel): 渠道管理系统 — 多模式定价 + 统一计费解析
新增渠道管理功能,支持三种计费模式(Token 区间/按次/图片),
统一定价解析链(Channel → LiteLLM → Fallback),
无渠道配置时保持原有计费逻辑不变。
Backend:
- 新增 channels/channel_groups/channel_model_pricing/channel_pricing_intervals 表
- ChannelService: atomic.Value + singleflight 缓存,通配符模型匹配
- ModelPricingResolver: 统一定价解析器
- BillingService: CalculateCostUnified 统一计费入口
- 完整输入验证(BillingMode/价格非负/名称长度)
- 33 个单元测试覆盖核心路径
Frontend:
- ChannelsView.vue: 渠道 CRUD 列表页
- PricingEntryCard.vue + IntervalRow.vue: 定价编辑组件
- 支持三种计费模式切换 + 区间编辑
|
2026-03-30 02:03:06 +08:00 |
|
erio
|
0393981397
|
merge: integrate upstream v0.1.105 into release/custom-0.1.105
Merge upstream v0.1.105 (94 commits) with our customizations from
release/custom-0.1.104. Key upstream additions:
- TLS fingerprint profile management
- OpenAI→Anthropic endpoint compatibility routing
- Privacy mode for OpenAI/Antigravity accounts
- Requested model tracking in usage logs
- Error observability enhancements
- Various bug fixes
Conflict resolutions (all "keep both sides"):
- handler.go/wire.go: added both TLSFingerprintProfile and GDriveOAuth
- wire_gen.go: combined internal500CounterCache with TLS fingerprint objects
- accounts.ts: kept setPrivacy + affinity functions
- BulkEditAccountModal.vue: kept OpenAI WS mode + Allow Overages sections
Additional fixes:
- gateway_handler_chat_completions.go, gateway_handler_responses.go:
added missing sub2apiUserID parameter to SelectAccountWithLoadAwareness
- antigravity_internal500_penalty.go: gofmt fix
|
2026-03-27 18:23:39 +08:00 |
|
 QTomandClaude Opus 4.6
|
c13c81f09d
|
feat(privacy): 为 OpenAI OAuth 账号添加前端手动设置隐私按钮
复用已有的 set-privacy API 端点,Handler 通过 platform 分发到
ForceOpenAIPrivacy / ForceAntigravityPrivacy,前端 AccountActionMenu
扩展隐私按钮支持 OpenAI OAuth 账号。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-27 14:51:36 +08:00 |
|
shaw
|
1854050df3
|
feat(tls-fingerprint): 新增 TLS 指纹 Profile 数据库管理及代码质量优化
新增功能:
- 新增 TLS 指纹 Profile CRUD 管理(Ent schema + 迁移 + Admin API + 前端管理界面)
- 支持账号绑定数据库中的自定义 TLS Profile,或随机选择(profile_id=-1)
- HTTPUpstream.DoWithTLS 接口从 bool 改为 *tlsfingerprint.Profile,支持按账号指定 Profile
- AccountUsageService 注入 TLSFingerprintProfileService,统一 usage 场景与网关的 Profile 解析逻辑
代码优化:
- 删除已被 TLSFingerprintProfileService 完全取代的 registry.go 死代码(418 行)
- 提取 3 个 dialer 的重复 TLS 握手逻辑为 performTLSHandshake() 共用函数
- 修复 GetTLSFingerprintProfileID 缺少 json.Number 处理的 bug
- gateway_service.Forward 中 ResolveTLSProfile 从重试循环内重复调用改为预解析局部变量
- 删除冗余的 buildClientHelloSpec() 单行 wrapper 和 int64(e.ID) 无效转换
- tls_fingerprint_profile_cache.go 日志从 log.Printf 改为 slog 结构化日志
- dialer_capture_test.go 添加 //go:build integration 标签,防止 CI 失败
- 去重 TestProfileExpectation 类型至共享 test_types_test.go
- 修复 9 个测试文件缺少 tlsfingerprint import 的编译错误
- 修复 error_policy_integration_test.go 中 handleError 回调签名被错误替换的问题
|
2026-03-27 14:33:05 +08:00 |
|
Wesley Liddick
|
ef5c8e6839
|
Merge pull request #1231 from LvyuanW/bulk-openai-passthrough-worktree
Support bulk editing for OpenAI passthrough
|
2026-03-26 16:47:49 +08:00 |
|
shaw
|
d571f300e5
|
feat(rectifier): 请求整流器增加 API Key 账号签名整流支持
新增独立开关控制 API Key 账号的签名整流功能,支持配置自定义
匹配关键词以捕获不同格式的上游错误响应。
- 新增 apikey_signature_enabled 开关(默认关闭)
- 新增 apikey_signature_patterns 自定义关键词配置
- 内置签名检测规则对 API Key 账号同样生效
- 自定义关键词对完整响应体做不区分大小写匹配
- 重试二阶段检测仅做模式匹配,不重复校验开关
- Handler 层校验关键词数量(≤50)和长度(≤500)
- API 响应 nil patterns 统一序列化为空数组
- OAuth/SetupToken/Upstream/Bedrock 账号行为不变
|
2026-03-26 16:43:38 +08:00 |
|
Wesley Liddick
|
f8b8b53985
|
Merge pull request #1299 from DaydreamCoding/feat/antigravity-privacy-and-subscription
feat(antigravity): 自动隐私设置 + 订阅状态检测
|
2026-03-26 11:30:24 +08:00 |
|
shaw
|
b20e142249
|
feat: 网关请求头 wire casing 保持、转发行为开关、调试日志增强及 accept-encoding 恢复
- 新增 header_util.go,通过 setHeaderRaw/getHeaderRaw/addHeaderRaw 绕过
Go 的 canonical-case 规范化,保持真实 Claude CLI 抓包的请求头大小写
(如 "x-app" 而非 "X-App","X-Stainless-OS" 而非 "X-Stainless-Os")
- 新增管理后台开关:指纹统一化(默认开启)和 metadata 透传(默认关闭),
使用 atomic.Value + singleflight 缓存模式,60s TTL
- 调试日志从控制台 body 打印升级为文件级完整快照
(按真实 wire 顺序输出 headers + 格式化 JSON body + 上下文元数据)
- 恢复 accept-encoding 到白名单,在 http_upstream.go 新增 decompressResponseBody
处理 gzip/brotli/deflate 解压(Go 显式设置 Accept-Encoding 时不会自动解压)
- OAuth 服务 axios UA 从 1.8.4 更新至 1.13.6
- 测试断言改用 getHeaderRaw 适配 raw header 存储方式
|
2026-03-26 11:17:25 +08:00 |
|
QTom
|
f6fd7c83e3
|
feat(antigravity): 从 LoadCodeAssist 复用 TierInfo 提取 plan_type
复用已有 GetTier() 返回的 tier ID(free-tier / g1-pro-tier /
g1-ultra-tier),通过 TierIDToPlanType 映射为 Free / Pro / Ultra,
在 loadProjectIDWithRetry 中顺带提取并写入 credentials.plan_type;
前端增加 Abnormal 异常套餐红色标记。
Made-with: Cursor
|
2026-03-25 17:38:41 +08:00 |
|
QTom
|
c2965c0fb0
|
feat(antigravity): 自动设置隐私并支持后台手动重试
新增 Antigravity OAuth 隐私设置能力,在账号创建、刷新、导入和后台
Token 刷新路径自动调用 setUserSettings + fetchUserInfo 关闭遥测;
持久化后同步内存 Extra,错误处理改为日志记录。
Made-with: Cursor
|
2026-03-25 17:38:41 +08:00 |
|
Wang Lvyuan
|
bb399e56b0
|
merge: resolve upstream main conflicts for bulk OpenAI passthrough
|
2026-03-24 19:27:51 +08:00 |
|
Wesley Liddick
|
0f03393010
|
Merge pull request #1234 from Zqysl/qingyu/fix-ops-runtime-log-controls-layout
fix(ops): prevent runtime log controls UI overflow
|
2026-03-24 19:13:47 +08:00 |
|