li
e687ca3e9d
fix(ops): 系统日志落库失败后退避重试,避免拖垮数据库连接池
...
OpsSystemLogSink 的 flush 没有任何失败退避:ticker 每 1 秒触发一次,每次都
带 5 秒超时打一批 COPY,失败后立刻在下一个 tick 再来一次。远程 PostgreSQL 上
COPY 被 context 取消会导致协议失步、连接被服务端 FATAL 终止,于是这条循环
变成持续的「占用连接 → 超时取消 → 销毁重建」;在 max_open 较小的连接池里,
日志通道会长期占满连接,业务侧最终报 Billing 503。
改为连续失败后指数退避(2s 起,翻倍,封顶 60s):
- 退避窗口内直接丢弃当前批次并计入 dropped_count,不再触达数据库;
- 任意一次成功立即清空失败计数与抑制窗口;
- 失败日志随退避天然收敛为每个窗口至多一条,并附带 failures/backoff。
Fixes #5265
2026-08-07 18:45:05 +08:00
IanShaw027
8f5657b91c
fix(grok): 收窄 free 推断 — 仅月度探测,勿把周度 OK 当 free
...
- isKnownGrokFreeAccount 不再因 weekly StatusOK 推断 free
- 修复周度付费快照被 media soft-block 的回归
- 外部 OpenAI token 对比测试在 401 时 skip
2026-08-07 18:34:55 +08:00
IanShaw027
3a415e6d04
fix(grok): 五轮评审 — messages SearchCount 与 OpenAI free-gate
...
- /v1/messages Grok:SSE/buffered 路径累计 SearchCount
- OpenAI 遗留 sticky/list 应用 free soft-gate(advanced 关闭时)
- 单测:OpenAI getSchedulableAccount free-gate + messages 计数器
2026-08-07 18:23:28 +08:00
IanShaw027
3ae94df72b
fix(grok): 四轮评审 — SearchCount 接线与 sticky free-gate
...
- forwardGrokResponses 传播 stream/JSON 的 SearchCount 与 ImageCount
- Chat 桥接 SSE/buffered 对 Grok 累计 SearchCount(附加费)
- getSchedulableAccount sticky 应用 free soft-gate
- 无 call_id 时用合成 key 去重,避免 SSE ~2× 超扣
- 单测:JSON/SSE 接线、sticky free-gate、no-id dedup
2026-08-07 18:15:08 +08:00
IanShaw027
d7c9e7167b
fix(grok): 三轮评审 — 流式 Search 去重与调度/计费加固
...
- P0: 直播 SSE SearchCount 跨事件 call_id 去重,避免 ~2× 附加费
- SearchCount/Audio/WebSearchCalls 走 mandatory usage task
- web_search:uuid 等 forced request_id 优先于 client/local
- Sanitize 始终剥离 cookie;ApplyOAuth 清 grok_needs_reauth_at
- free 判定:paid 证据压过陈旧 free 凭据
- Gateway 列表应用 free soft-gate;token/body-read 可 failover
- web_search 重试支持 WaitPlan 获取;周 PeriodEnd 不再回填月 end
2026-08-07 17:58:23 +08:00
shaw
99b357083e
fix(subscription): restore midnight daily quota reset
...
日额度窗口恢复日历日语义(配置时区每天 0 点刷新),修复 v0.1.170 引入的回归:
- 手动重置配额后日窗口锚点漂移到重置时刻,此后 0 点不再刷新
- 新建/续费订阅日窗口按购买或首用时刻滚动,而非 0 点刷新
日窗口三处锚点(激活/手动重置/续期)统一写入当天 0 点,自动重置改为跨日历日
边界触发;存量非 0 点锚点在下一个 0 点自愈,无需数据库迁移。周/月窗口保持
期限对齐滚动语义(含到期约束)不变,不回归 issue #5051 的月额度翻倍问题。
日卡一次性额度豁免逻辑保留。
2026-08-07 17:42:51 +08:00
IanShaw027
245d069602
fix(grok): 二轮评审残留 — Search 叠加计费与 fail-closed 安全
...
- SearchCost 叠加 token(openai/gateway),未定价 warn
- Token URL 校验失败回落 DefaultTokenURL,禁止 Effective 旁路
- free 判定收窄 paidSignal(仅 plan/月额度),usage% 不否决 free
- web_search: mandatory 计费、uuid request_id、上游 failover 重选账号
- 调度阈值:7d/30d 不跨期 until + 48h stale 可选跳过
- SanitizeStoredCredentials 接入 create/update/bulk/SSO/ApplyOAuth
- ApplyOAuth 成功清除 grok_needs_reauth;SSO 允许 header_override_enabled
- VideoModelPrices 视为媒体定价完整;realtime 正常关闭仍计费
2026-08-07 17:40:21 +08:00
IanShaw027
ccf7ba3ba7
fix(grok): P2 分层清理、主对话 SearchCount 与调度 7d/30d
...
- DoGrokNativeResponsesJSON 去 gin.Context,UA 固定 CLI 身份
- GrokOAuthService 去掉 redis 直依赖,session store 由 wire 注入
- 主对话/流式响应统计 web_search_call/x_search/tool_search 写入 SearchCount
- Grok 调度阈值候选并入官方 weekly/monthly billing %
2026-08-07 17:21:01 +08:00
IanShaw027
7a81468282
fix(grok): 按 review 优先级修复计费漏扣、auth 投影与 free 门禁
...
P0: content 与 status 共用 claim 计费;稳定 grok-video request_id;
auth 热路径投影 video_model_prices。
P1: claim 失败释放可重试;视频绑定 TTL≥24h;SSO 凭据白名单与脱敏;
Token URL 校验;free soft-gate 默认 1M 并统一 free 判定;
Voice 预检余额;STT 抗低报;Realtime 失败不计费;search 未定价告警。
2026-08-07 17:15:43 +08:00
IanShaw027
93a04567d4
style(grok): 清理搜索处理器末尾空行
2026-08-07 17:03:48 +08:00
IanShaw027
918b121878
docs(grok): 补充 personal-dev 能力覆盖矩阵
2026-08-07 17:02:33 +08:00
IanShaw027
be5e4226d4
test(grok): 补齐模型映射与调度设置契约
2026-08-07 17:01:20 +08:00
IanShaw027
5bb206ee99
test(grok): 补齐音频与搜索计价接口契约
2026-08-07 16:56:53 +08:00
IanShaw027
856a96a217
test(grok): 对齐配额模型同步与 CLI 身份断言
2026-08-07 16:55:36 +08:00
IanShaw027
7b93f4a689
docs(grok): 更新完整整合审查与排除清单
2026-08-07 16:47:25 +08:00
IanShaw027
61b975b5dd
test(grok): 对齐跨客户端映射与路由审计契约
2026-08-07 16:45:25 +08:00
IanShaw027
769f1c2def
fix(grok): 防止 OAuth 客户端缺失导致崩溃
2026-08-07 16:38:26 +08:00
IanShaw027
21d0905c78
fix(grok): 按官方 status=done + video.url 计费并对齐字段
...
官方完成响应为 status=done、video.url、video.duration、顶层 model;
分辨率仅在创建请求中声明,status 无此字段故回退 create 快照/默认 480p。
拒绝 completed 等非官方状态与仅 URL 的宽松判定。
2026-08-07 16:36:15 +08:00
IanShaw027
962da308cc
fix(grok): 限制导入探测队列并去重任务
2026-08-07 16:36:12 +08:00
IanShaw027
a3aae134ee
fix(grok): 加固 SSO 凭证与 Cookie 隔离
2026-08-07 16:34:47 +08:00
IanShaw027
e549931cf4
fix(grok): 避免刷新时无效清理重认证标记
2026-08-07 16:31:12 +08:00
IanShaw027
5199a610af
test(grok): 恢复媒体资格失败关闭契约
2026-08-07 16:30:55 +08:00
IanShaw027
b59a3df5b5
fix(grok): 视频在 status 返回 video.url 后再按上游参数计费
...
创建/generations 仅绑定账号并缓存 create-time 定价快照;轮询到
video.url / download_url 等成功 URL 时一次性扣费。时长/分辨率/模型
优先取上游 status 字段,缺失则回退创建快照,再套默认 8s/480p。
Redis SetNX + request_id 去重,避免重复轮询双扣。
2026-08-07 16:29:57 +08:00
IanShaw027
25d2b03e90
fix(grok): 加固 OAuth 会话共享与一次性消费
2026-08-07 16:29:48 +08:00
Wesley Liddick
32e4de7942
Merge pull request #5231 from fengshao1227/fix/upstream-dial-timeout
...
fix(upstream): set explicit TCP dial timeout on upstream transports
2026-08-07 16:24:53 +08:00
wucm667
9b54b46b06
fix(admin): enable image generation permission for Composite groups
...
- Add 'composite' to imagePricingPlatforms set in groupsImagePricing.ts
- Allow Composite groups to toggle allow_image_generation in admin UI
- Backend already supports allow_image_generation field for all platforms
- Add test case to verify Composite platform is included
Fixes #5369
2026-08-07 16:22:37 +08:00
Wesley Liddick
8f55e0a7cd
Merge pull request #5267 from wucm667/fix/issue-5264-model-plaza-composite
...
fix(model-plaza): show Composite group models
2026-08-07 16:17:52 +08:00
Wesley Liddick
5ec11885d1
Merge pull request #5307 from lenzhang/fix/ws-prewarm-continuation
...
fix(ws): allow Codex prewarm continuation
2026-08-07 16:15:11 +08:00
Wesley Liddick
c8af48d769
Merge pull request #5315 from wucm667/fix/issue-5312-ops-custom-error-range
...
fix(ops): preserve custom range in error lists
2026-08-07 16:15:00 +08:00
Wesley Liddick
dce0f6b4e3
Merge pull request #5337 from wucm667/fix/issue-5331-oauth-count-tokens-fallback
...
fix: avoid cooling OAuth accounts for HTML count token errors
2026-08-07 16:14:48 +08:00
Wesley Liddick
22ef761c27
Merge pull request #5309 from wucm667/fix/issue-5308-antigravity-gemini36
...
fix(antigravity): support Gemini 3.6 Flash models
2026-08-07 16:14:37 +08:00
Wesley Liddick
865002fd2c
Merge pull request #5317 from wucm667/fix/issue-5314-grok-video-task-id
...
fix(grok): bind video owners for task_id receipts
2026-08-07 16:14:25 +08:00
IanShaw027
a061a758f4
fix(grok): 修复调度阈值初始化与刷新测试回归
2026-08-07 16:10:31 +08:00
IanShaw027
2a256150f7
docs: 补充 channel-monitor v2 摘要并忽略根目录 .vite 缓存
...
落地运维向 CHANNEL_MONITOR_V2_DESIGN.md(完整设计稿仍在 gitignore 的 docs/* 中);
将仓库根 .vite/ 加入忽略,避免 vitest 结果误提交。
2026-08-07 15:56:49 +08:00
IanShaw027
79df1647d4
feat(grok): 账单绝对金额、调度阈值 UI、搜索/Voice 计费与 /v1/web_search
...
- BillingSummary 输出 prepaid/monthly_used/on_demand 绝对金额,并映射官方 7d/30d 进度条
- 账号编辑页支持 credentials.account_scheduling_threshold 覆盖;Settings 文案细化
- groups.search_price_per_1k + 管理端/缓存全链路;SearchCount/AudioUsage 请求级计费
- Voice TTS/STT/Realtime 成功路径 RecordUsage;独立 /v1/web_search 原生 Grok 搜索
2026-08-07 15:52:55 +08:00
IanShaw027
99ad01f6de
feat(grok): 网关 Voice TTS/STT/Realtime 与分组音频定价
...
- 中继 xAI Voice HTTP(/tts /stt /custom-voices)与 Realtime WS(/realtime)
仅 Grok 分组可用;账号选调度沿用 chat 能力,不依赖创作中心
- Voice URL 固定走 api.x.ai(CLI proxy base 自动回落)
- 分组级 audio_realtime / TTS / STT 单价:schema + migration 218 +
admin API + GroupsView 表单与 i18n(无创作中心 UI)
2026-08-07 15:08:39 +08:00
IanShaw027
a397724f69
refactor(grok): 移除未接入的免费恢复状态
2026-08-07 15:03:04 +08:00
IanShaw027
2e20ea4c87
fix(grok): 保持模型级免费额度隔离
2026-08-07 14:55:41 +08:00
IanShaw027
7c62382d04
feat(grok): 吸收调度阈值、配额解析、批量用量与 CLI 身份
...
从 personal-dev 取优并接线到 feat/grok-complete-integration:
- 调度阈值:grok_sched_* 写入、ApplyAccountSchedulingThreshold、
account_scheduling_thresholds 设置与 Settings UI、网关过滤
- 配额头:x-rate-limit 别名、相对秒 reset、tier/entitlement 扩展
- 批量 usage:GetUsageBatch + POST /usage/batch + AccountsView 合并加载
- CLI 身份:xai.cli_identity 统一 pin/UA;service 层 applyGrokCLIHeaders
与 transport 最终改写对齐;media eligibility 模块落地
- UsageCell:月度 cents→USD 与 30d 进度条展示
保留既有 failure taxonomy / sticky / free recovery 等 HEAD cools。
2026-08-07 14:53:18 +08:00
IanShaw027
0316994c52
fix(grok): 修正授权与模型映射边界
2026-08-07 14:50:02 +08:00
IanShaw027
2c8836e40b
fix(grok): 完善按模型视频价格矩阵
2026-08-07 14:42:00 +08:00
IanShaw027
eb2e73df3d
feat(grok): 补齐管理端模型映射设置
2026-08-07 14:22:15 +08:00
IanShaw027
ff4bb3bd2c
fix(grok): 修复授权文案的i18n占位符
2026-08-07 14:18:06 +08:00
IanShaw027
d0930c4bdb
fix(grok): 完善密码与SSO授权能力控制
2026-08-07 14:13:07 +08:00
IanShaw027
2413441b5f
feat(grok): P2 模型额度软封、spending reauth、粘连分轨与观测模型
...
- free-usage 带模型名时按账号+模型软封,其它模型仍可调度
- spending-limit 使用 24h 冷却并标记 needs_reauth(extra + SetError)
- sticky affinity 与 upstream prompt_cache_key 分轨,按 model 隔离粘连
- free-usage recovery 轻量提示窗口;配额查询后异步同步 /v1/models 快照
2026-08-07 14:06:21 +08:00
IanShaw027
cda6de44da
fix(grok): 运行时映射设置即时失效账号缓存
2026-08-07 13:59:32 +08:00
IanShaw027
ec9e733606
feat(grok): stream idle 换号、team+model 冷却与 RT 刷新打散
...
- Grok 流默认启用上游读空闲超时,首包前返回可 failover 错误并短冷却
- 同 team_id 账号在 429/free-usage 后对同模型共享进程内冷却,粘连与选号均过滤
- TokenRefreshService 已覆盖 Grok;NeedsRefresh 增加按账号稳定 jitter 防 stampede
2026-08-07 13:56:38 +08:00
IanShaw027
dfca6246eb
refactor(grok): 将视频模型价纳入 Ent 持久化
2026-08-07 13:55:58 +08:00
IanShaw027
e12e0dc1a6
feat(grok): 对齐 free-usage/empty 失败分类与 sticky/ReAuth 体验
...
从 grokcli 吸收 body-first 失败分类(free-usage/empty/billing),
接到现有 temp_unsched 与 failover,保留 content-policy 与 pool_mode。
Grok 粘连/缓存在无显式 session 时可用 previous_response_id;
ReAuth 预填 email---- 并默认密码 tab(密码不落库)。
2026-08-07 13:47:09 +08:00
IanShaw027
9bc99e8b6e
fix(grok): 防止加权粘连回退绕过免费额度门禁
2026-08-07 13:44:56 +08:00