 SavitarCandClaude Opus 5.5
|
eefa7dd9dc
|
refactor(platform): 平台白名单由数据库约束改为应用层校验
新增迁移 242 删除 user_platform_quotas_platform_check 与
composite_model_routes_target_platform_check(DROP ... IF EXISTS,可重入)。
此后新增平台只需在平台清单中登记,不再需要改约束的迁移;此前 Grok、国产
厂商、MiniMax、OpenCode 共写过 5 次。
平台合法性改由应用层保证,与原约束的拒绝范围相同:
- user_platform_quotas 用原生 SQL 写入,不经过 ent Validate,repository 在
BulkInsertInitial / UpsertForUser 写入前校验平台,非法值在发出任何 SQL 前
返回错误(此前由数据库拒绝并回滚);
- ent schema 的 platform / target_platform 校验改查平台清单,组合路由新增
target_platform 校验(service 层与 admin 接口的原有校验保留)。
渠道监控的 provider 约束表示已实现的探测能力,不属于平台清单,保留不动。
集成测试(真实 PostgreSQL):在还原旧约束的库上重复执行迁移、约束被移除、
渠道监控约束保留、数据库层可写入未来的新平台值;repository 拒绝未登记平台
且不产生副作用(去掉校验后该测试失败)。全部仓储集成测试通过。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 10:10:33 +08:00 |
|
 SavitarCandClaude Opus 5.5
|
3b89cc08dd
|
refactor(platform): 后端平台列表改由平台清单派生
新增 domain/platforms.go 作为具体平台的单一数据来源:每个平台一条登记,
写明展示名、所走网关(anthropic / openai / gemini / antigravity)、是否国产
单一厂商、定价目录 provider 名,顺序即展示顺序。
以下列表与判断改为查平台清单:
- "全部具体平台":用户平台额度白名单、错误透传规则平台列表、组合路由目标
校验、上游计费探测资格、调度快照遍历、组合分组的定价 / 模型映射回退、
组合分组默认模型列表;
- "OpenAI 网关族":IsOpenAICompatible、NormalizeOpenAICompatiblePlatform、
Responses 兼容路由判断、count_tokens 分发、组合分组的 OpenAI 文本目标;
- 国产厂商判断、渠道定价同步的 provider 映射;
- 多协议 API Key 供应商相关的请求头覆盖资格、凭证测试、OpenAI 基址回退改用
IsMultiProtocolAPIKeyProvider;
- 分组平台与组合路由目标的请求校验改为自定义校验标签 group_platform /
concrete_platform,拒绝规则不变(大小写、首尾空格、别名一律拒绝)。
组合分组的逐平台回退是先命中者生效,CompositePrecedencePlatformIDs 保持
原有顺序 anthropic、gemini、openai,其余按登记顺序追加。依赖具体实现的
能力(OAuth、渠道监控、调度阈值、余额 / 用量窗口、Codex 模型目录等)仍在
各自代码中显式列出。
等价性测试把改动前的每个列表与 switch 原样保留为基准,逐一比较派生结果
(含顺序),谓词覆盖全部平台、composite 与非法值 × 全部账号类型。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 10:10:33 +08:00 |
|
 SavitarCandClaude Opus 5.5
|
105c955c88
|
fix(gateway): /v1/responses 转 Anthropic 时统一以去空白的请求模型兜底映射
forwardResponsesViaNativeAnthropic 的 defaultMappedModel 是账号 model_mapping
未命中时的兜底模型。此前按模型分流的账号(OpenCode)传空串、其余账号传
reqModel,源自两处分支各自实现。映射未命中且请求模型带首尾空白时,前者的
计费模型名保留空白(上游模型名因 normalizeOpenAIModelForUpstream 已去空白,
两者不一致,定价查找可能落空),后者为去空白的名字。
统一传 reqModel,并移除入口里最后一处 routesByModel 分支。仅影响按模型
分流账号收到带首尾空白模型名的请求:计费模型名改为去空白后的名字;发往
上游的请求不变。新增测试覆盖 OpenCode 与 Kimi 两类账号。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 10:10:32 +08:00 |
|
 SavitarCandClaude Opus 5.5
|
8ac2936a3d
|
refactor(gateway): 三个入站入口的上游协议分流收敛为 resolveUpstreamProtocol
此前 /v1/responses、/v1/chat/completions、/v1/messages 各自用一串 if 决定
上游协议:OpenCode 按模型规则、国产 adaptive 按入站、显式 api_protocol、
Responses 探针四个来源的优先级靠语句先后隐式决定,且每个入口都有
IsOpenCodeGo 特判。
- provider profile 新增 Routing(by_inbound / by_model),OpenCode 登记为
by_model;routesByModel 取代转发路径与 GetAPIProtocol 默认值中的
IsOpenCodeGo 判断。
- 新增 upstream_protocol_routing.go:resolveUpstreamProtocol 以单一函数给出
上游协议(按模型分流 → adaptive 按入站 → 显式 anthropic → CC 直转条件
→ Responses),resolveModelRoutedProtocol 以 profile 规则泛化 OpenCode
的规则解析;三个入口改为 switch 该结果选择既有转换路径,Responses 形状
请求体的转换合并为 convertResponsesShapedChatBody。
转换函数本身不变。新增分流矩阵测试经真实入口遍历 平台 × api_protocol ×
探针 × 账号类型 × 接入模式 × protocol_rules × 入站 × 模型(2045 组),
与改动前逐条 diff 仅 6 条不同:智谱 adaptive 的非 API Key 账号(UI 无法
创建)在 /v1/responses 入站时由 Responses 改为回落 CC,与
/v1/chat/completions 入口一致;这 6 组前后都在发出上游请求前报错。
协议规则与映射模型相关的类型、函数已被所有按模型分流的供应商共用,同时去掉
OpenCode 前缀(OpenCodeGoProtocolRule → ProtocolRule、matchOpenCodeGoProtocolRules
→ matchProtocolRules、NormalizeOpenCodeGoProtocolRulesCredentials →
NormalizeProtocolRulesCredentials、resolveOpenCodeGoMappedModel →
resolveMappedUpstreamModel 等),并删除收敛后已无调用方的
defaultOpenCodeProtocolRules。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 10:10:32 +08:00 |
|
 SavitarCandClaude Opus 5.5
|
3f8eea0807
|
refactor(provider): profile 端点改为按协议登记,Responses 路径约定并入 profile
ProviderEndpoints 由 ChatBaseURL + AnthropicBaseURL 改为以协议为键的
BaseURLs(chat_completions / responses / anthropic),与账号凭证
api_base_urls、前端 defaultCNAdaptiveBaseUrls 的结构一致:
- 某协议没有条目即表示不提供该原生端点,SupportsNativeCNResponses 改为
由 responses 条目推导,去掉单独的 NativeResponses 布尔值;
- DeepSeek 的 Responses 路径例外(/responses,无 /v1)从
buildOpenAIResponsesURLForPlatform 的平台硬编码移入 profile.ResponsesPath。
运行时行为不变。唯一的函数级差异:智谱 adaptive 账号的
GetCNProtocolBaseURL(responses) 默认值由 CC 基址变为空串;所有运行时调用方
均先经 UsesNativeCNResponses / SupportsNativeCNResponses 守卫,智谱不会走到,
TestAdaptiveProtocolBaseURLs 的对应期望随之更新。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 09:17:41 +08:00 |
|
 SavitarCandClaude Opus 5.5
|
c063a4016e
|
refactor(provider): 以 provider profile 收敛多协议供应商默认端点表
多协议 API Key 供应商(kimi/zhipu/deepseek/minimax/opencode_go)的默认端点
此前在 account.go 的 GetOpenAIBaseURL / defaultCNProtocolBaseURL /
GetAnthropicProtocolBaseURL / GetOpenAIFormatBaseURL 中按平台 switch 重复了
四遍,Responses 能力与 OpenCode 内置分流表也各自散落。
新增 provider_profile.go 作为单一数据来源:每个供应商登记各接入模式的
Chat/Anthropic 默认基址、内置 protocol_rules 与原生 Responses 能力;
上述函数、SupportsNativeCNResponses、IsMultiProtocolAPIKeyProvider 与
defaultOpenCodeProtocolRules 改为查表。纯重构,行为不变:新增测试以旧
switch 逻辑为基准,逐一核对平台 × account_mode × 协议的全部组合。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 09:17:41 +08:00 |
|
Wesley Liddick
|
5fc0e486c3
|
Merge pull request #7916 from wucm667/fix/issue-7914-monitor-request-sample
fix(channel-monitor): require request samples before health scoring
|
2026-10-08 13:52:34 +08:00 |
|
Wesley Liddick
|
3e69643392
|
Merge pull request #7721 from ouchihao/codex/bug-fractional-byte-rate
fix(ops): retain byte units for sub-byte throughput
|
2026-10-08 13:51:52 +08:00 |
|
Wesley Liddick
|
3a012ac0ce
|
Merge pull request #7725 from ouchihao/codex/bug-select-disabled-open
fix(ui): close selectors when they become disabled
|
2026-10-08 13:51:40 +08:00 |
|
Wesley Liddick
|
80dd7288a6
|
Merge pull request #7728 from ouchihao/codex/bug-oauth-code-unmount
fix(auth): avoid starting OAuth code cooldowns after unmount
|
2026-10-08 13:51:30 +08:00 |
|
Wesley Liddick
|
5a6e826f83
|
Merge pull request #7716 from ouchihao/codex/bug-scaled-price-exponent
fix(pricing): preserve exponents when trimming scaled prices
|
2026-10-08 13:51:19 +08:00 |
|
Wesley Liddick
|
d068b866f3
|
Merge pull request #7718 from ouchihao/codex/bug-bulk-user-error-message
fix(users): show normalized errors when bulk updating limits
|
2026-10-08 13:51:05 +08:00 |
|
Wesley Liddick
|
a618338987
|
Merge pull request #7719 from ouchihao/codex/bug-notify-email-timers
fix(profile): ignore obsolete notification email code responses
|
2026-10-08 13:50:54 +08:00 |
|
Wesley Liddick
|
b0c2c4d623
|
Merge pull request #7720 from ouchihao/codex/bug-usage-zero-rate
fix(usage): preserve zero user multipliers in cost details
|
2026-10-08 13:50:39 +08:00 |
|
Wesley Liddick
|
9663b5ccf0
|
Merge pull request #7722 from ouchihao/codex/bug-announcement-read-failure
fix(announcements): report failed read confirmations accurately
|
2026-10-08 13:50:19 +08:00 |
|
Wesley Liddick
|
6cfa0f4ef8
|
Merge pull request #7723 from ouchihao/codex/bug-batch-image-access-retry
fix(batch-image): allow access lookup retries after request failures
|
2026-10-08 13:50:08 +08:00 |
|
Wesley Liddick
|
3149d62851
|
Merge pull request #7724 from ouchihao/codex/bug-cleanup-task-race
fix(usage): ignore obsolete cleanup task list responses
|
2026-10-08 13:49:58 +08:00 |
|
Wesley Liddick
|
0b51cbe15d
|
Merge pull request #7729 from ouchihao/codex/bug-backup-polling-unmount
fix(backup): prevent polling from restarting after navigation
|
2026-10-08 13:49:48 +08:00 |
|
Wesley Liddick
|
3dc2a9c371
|
Merge pull request #7731 from ouchihao/codex/bug-dialog-escape-stack
fix(ui): limit Escape to the most recently opened dialog
|
2026-10-08 13:49:34 +08:00 |
|
Wesley Liddick
|
2c13fb595e
|
Merge pull request #7764 from ouchihao/codex/bug-plugin-config-session-race
fix(plugins): ignore obsolete configuration UI sessions
|
2026-10-08 13:49:23 +08:00 |
|
Wesley Liddick
|
068239305e
|
Merge pull request #7765 from ouchihao/codex/bug-compliance-reset-race
fix(auth): keep cleared compliance state isolated from pending requests
|
2026-10-08 13:49:13 +08:00 |
|
Wesley Liddick
|
9e46f2d77e
|
Merge pull request #7732 from ouchihao/codex/bug-step-up-concurrent-prompts
fix(auth): share pending step-up verification prompts
|
2026-10-08 13:48:52 +08:00 |
|
Wesley Liddick
|
2eb7ccb6d2
|
Merge pull request #7703 from wucm667/fix/issue-7700-thinking-signature
fix(openai): recover rejected encrypted reasoning signatures
|
2026-10-08 13:48:33 +08:00 |
|
Wesley Liddick
|
745ff1d3ca
|
Merge pull request #7911 from lyy0709/codex/usage-output-tps
feat(usage): add output TPS to usage logs and ops dashboard
|
2026-10-08 11:40:15 +08:00 |
|
Wesley Liddick
|
8e2c4fad32
|
Merge pull request #7793 from wucm667/fix/issue-7784-composite-route-model-list
fix(models): list composite exact route aliases
|
2026-10-08 11:39:51 +08:00 |
|
Wesley Liddick
|
0ac774e378
|
Merge pull request #7853 from wucm667/feat/issue-7847-compact-account-filters
feat(accounts): compact account search and filters
|
2026-10-08 11:39:40 +08:00 |
|
Wesley Liddick
|
ba3af61251
|
Merge pull request #7897 from wucm667/fix/issue-7894-long-context-marker
fix(usage): replace misleading long-context multiplier badge
|
2026-10-08 11:37:40 +08:00 |
|
Wesley Liddick
|
48c647b5d2
|
Merge pull request #7833 from ShanYi-Hui/fix/preserve-email-binding-draft
fix(profile): preserve email binding draft during user refresh
|
2026-10-08 11:37:25 +08:00 |
|
Wesley Liddick
|
b94974467b
|
Merge pull request #7818 from ouchihao/codex/bug-custom-page-request-race
fix(custom-pages): ignore obsolete Markdown responses
|
2026-10-08 11:37:11 +08:00 |
|
Wesley Liddick
|
4747827e35
|
Merge pull request #7819 from ouchihao/codex/bug-stripe-payment-unmount
fix(payment): stop late Stripe callbacks after leaving the page
|
2026-10-08 11:36:59 +08:00 |
|
Wesley Liddick
|
f3bcad3c33
|
Merge pull request #7839 from ouchihao/codex/bug-scheduled-results-race
fix(admin): keep scheduled test results scoped to the expanded plan
|
2026-10-08 11:36:33 +08:00 |
|
Wesley Liddick
|
2c6bd63de9
|
Merge pull request #7840 from ouchihao/codex/bug-monitor-template-list-race
fix(monitor): ignore obsolete template manager list responses
|
2026-10-08 11:36:19 +08:00 |
|
Wesley Liddick
|
02aad478f3
|
Merge pull request #7841 from ouchihao/codex/bug-alert-events-pagination-race
fix(ops): discard stale alert event pages after filter changes
|
2026-10-08 11:36:07 +08:00 |
|
Wesley Liddick
|
486b226b69
|
Merge pull request #7842 from ouchihao/codex/bug-ops-settings-load-guard
fix(ops): require loaded settings before saving
|
2026-10-08 11:35:56 +08:00 |
|
Wesley Liddick
|
d1202bea5f
|
Merge pull request #7843 from ouchihao/codex/bug-alert-rule-integer-duration
fix(ops): validate alert rule durations as whole minutes
|
2026-10-08 11:35:42 +08:00 |
|
Wesley Liddick
|
1865f28469
|
Merge pull request #7900 from ouchihao/codex/bug-rpm-edit-number
fix(groups): preserve numeric values when editing RPM overrides
|
2026-10-08 11:35:27 +08:00 |
|
Wesley Liddick
|
c2f0edc137
|
Merge pull request #7901 from ouchihao/codex/bug-airwallex-navigation
fix(payment): stop Airwallex checkout after leaving the page
|
2026-10-08 11:35:15 +08:00 |
|
Wesley Liddick
|
cdbf1d6f4d
|
Merge pull request #7902 from ouchihao/codex/bug-passthrough-toggle-state
fix(admin): use the saved passthrough rule enabled state
|
2026-10-08 11:35:01 +08:00 |
|
Wesley Liddick
|
b126b94525
|
Merge pull request #7903 from ouchihao/codex/bug-profile-username-draft
fix(profile): preserve username edits made during save
|
2026-10-08 11:34:49 +08:00 |
|
Wesley Liddick
|
7fc5332b45
|
Merge pull request #7904 from ouchihao/codex/bug-group-rate-load-race
fix(groups): ignore stale rate multiplier loads
|
2026-10-08 11:34:38 +08:00 |
|
Wesley Liddick
|
4bcad0657b
|
Merge pull request #7800 from duckducktw/fix/pricing-entry-autofill-append
fix(channels): 追加模型时不再改写条目已留空的价格
|
2026-10-08 11:34:17 +08:00 |
|
Wesley Liddick
|
7ff5cff1bb
|
Merge pull request #7822 from neotan/fix/issue-7670-bare-api-alias-bypass
fix(web): bypass bare API aliases from embedded frontend fallback
|
2026-10-08 11:33:58 +08:00 |
|
Wesley Liddick
|
bc63bd2874
|
Merge pull request #7782 from lyy0709/codex/fix-remote-model-catalog
fix(models): enforce account mappings for remote Codex discovery
|
2026-10-08 11:33:27 +08:00 |
|
Wesley Liddick
|
458865ed1b
|
Merge pull request #7878 from Achordchan/fix/account-test-log-context
fix(accounts): attribute connectivity test failure logs
|
2026-10-08 11:33:14 +08:00 |
|
Wesley Liddick
|
3a7fd4ae78
|
Merge pull request #7837 from yJader/fix/antigravity-account-test-models
fix: use account mapping keys for Antigravity connectivity tests
|
2026-10-08 11:32:59 +08:00 |
|
Wesley Liddick
|
4b8c557705
|
Merge pull request #7877 from hezhaoqian1/fix/upstream-channel-monitor-zhipu-path
fix(channel-monitor): build zhipu probe URL from the configured endpoint
|
2026-10-08 11:32:38 +08:00 |
|
Wesley Liddick
|
bb0d4a53c9
|
Merge pull request #7887 from whhphd/fix/grok-sso-consent
fix(grok): include consent token and origin in SSO device approval
|
2026-10-08 11:32:25 +08:00 |
|
Wesley Liddick
|
3c274768c1
|
Merge pull request #7889 from aishangwuji/fix/opencode-zen-routing-and-unsupported-models
fix(opencode): correct Zen qwen3.8-max endpoint and reject unsupported models
|
2026-10-08 11:32:11 +08:00 |
|
Wesley Liddick
|
bbf1d37783
|
Merge pull request #7891 from aishangwuji/fix/opencode-go-usage-retry-after-and-403
fix(opencode): cap Retry-After backoff at 24h and report neutral 403
|
2026-10-08 11:31:40 +08:00 |
|
Wesley Liddick
|
90afaf120e
|
Merge pull request #7854 from wucm667/fix/issue-7852-chat-stream-heartbeats
fix(streaming): preserve chat stream heartbeat comments
|
2026-10-08 11:28:38 +08:00 |
|