ZheFox
d068b62966
Merge pull request #870 from dalamudx/feat/claude-code-body-mimicry
...
fix(claude-code): 补全 Claude Code 请求体特征并升级伪装版本到 2.1.284支持opus5.5
2026-09-30 09:00:37 +08:00
dalamudx
fa06e9695d
test(claude-code): 补充 Responses → claude_code 网关测试,验证上游请求体已伪装
2026-09-29 20:27:43 +08:00
dalamudx
5d5880d75e
fix(claude-code): 让 openai:responses/chat 转 claude 的路径也应用请求体伪装
...
openai:responses 与 openai:chat 的决策构建器各自构建上游 body,不经过
apply_transport_request_body_semantics,导致跨格式请求转发到 claude_code
provider 时请求体伪装没有生效,上游仍返回 429。
- responses/decision/request.rs:finalize 之后应用伪装
- chat/decision/request.rs:finalize 成功后应用伪装
- 同格式路径改为经 ai_serving::transport 门面引用,满足架构守卫
(ai_serving 不得直接依赖 crate::provider_transport)
- 更新 chat -> claude_code 用例断言为新的请求体形态
2026-09-29 20:18:03 +08:00
dalamudx
e8ee7b4ecf
fix(claude-code): 升级伪装的 Claude Code 版本到 2.1.284
...
上游按模型校验 Claude Code 最低版本,claude-opus-5-5 要求 >= 2.1.280,
而 profile 里写死的 2.1.161 会被拒绝(claude_code_version_too_old, 400),
且 Aether 会统一改写 UA,真实 Claude Code 客户端也会受影响。
将 cli_version 升级为 2.1.284,并同步 stainless 包版本 (0.112.1) 与
node 运行时版本 (v26.3.0),保持指纹一致;相关测试断言同步更新。
2026-09-29 18:47:59 +08:00
dalamudx
c1aa5d618d
feat(claude-code): 为 claude_code provider 补全 Claude Code 请求体特征
...
非 Claude Code 客户端(如 pi)经 OAuth 的 claude_code provider 转发时,
只有请求头被伪装成 Claude Code,请求体仍是客户端原样,被上游以
429 rate_limit_error 拒绝(响应无 ratelimit 额度头,并非真实限流)。
参考 sub2api 的 OAuth 请求体伪装,在传输层补齐请求体:
- system 重写为计费头 + 身份句 + 通用提示词三块(Fable 仅保留前两块)
- 原 system 迁入 messages 开头,避免丢失客户端指令
- 缺失时补 metadata.user_id,device/session id 基于 key 稳定派生
- 缺失时补 tools/temperature/max_tokens,并限制 cache_control 不超过 4 个
- 已带计费块且有 metadata.user_id 的真实 Claude Code 请求原样放行,
重复应用幂等
接入点覆盖跨格式路径(apply_transport_request_body_semantics)和
原生 claude:messages 同格式路径,仅作用于 provider_type=claude_code。
2026-09-29 18:35:23 +08:00
ZheFox
00a315e3bf
Merge pull request #868 from AAEE86/feat/batch-assign-create-model
...
feat(providers): 批量管理模型支持创建统一模型并刷新列表
2026-09-29 14:37:34 +08:00
AAEE86
f811e29f13
feat(providers): 批量管理模型支持创建统一模型并刷新列表
...
- BatchAssignModelsDialog: 在"按密钥匹配"按钮旁新增"创建模型"按钮,
复用 GlobalModelFormDialog 打开"创建统一模型"界面
- 创建成功后重新加载全局模型列表,新模型可直接勾选并保存关联
- GlobalModelFormDialog: 新增可选 zIndex 属性,用于嵌套弹窗层级
- 补充组件测试:打开创建弹窗、创建成功后列表刷新
2026-09-29 14:29:56 +08:00
ZheFox
fb7e3fc224
Merge pull request #838 from dalamudx/feat/user-group-provider-stats
...
fix(stats): scope group usage by providers and add ungrouped view
2026-09-29 12:23:27 +08:00
ZheFox
cabca22d65
Merge pull request #867 from AAEE86/lint/define-macros-order
...
fix(lint): 修正 defineProps 位置,修复 CI eslint 失败
2026-09-29 11:13:00 +08:00
AAEE86
11989e278e
fix(lint): 修正 defineProps 位置并格式化用户批量组件
...
- UserBatchResultSummary.vue: 将 defineProps 移到 <script setup> 首部,
满足 vue/define-macros-order 规则,修复 CI eslint 失败
- 自动修复 vue/max-attributes-per-line 与
vue/singleline-html-element-content-newline 格式警告
2026-09-29 10:58:40 +08:00
ZheFox
532af797bf
Merge pull request #854 from AAEE86/ci/gateway-test-slim-batch1
...
ci: fix Nightly scope detection in reusable Rust CI
2026-09-29 10:19:06 +08:00
ZheFox
cafa05c4cb
Merge pull request #859 from stabey/fix/protocol-conversion-live-fixes
...
fix(formats): repair live cross-format conversion gaps
2026-09-29 10:10:42 +08:00
ZheFox
49ec53cbd9
Merge pull request #858 from stabey/codex/fix-sse-prefetch-handoff
...
fix(stream): preserve parser state across SSE prefetch handoff
2026-09-29 10:06:04 +08:00
ZheFox
73f1d79637
Merge pull request #856 from Kayphoon/fix/manual-cleanup-buffered-body
...
fix(admin): buffer request body for manual cleanup, smtp test, and system update routes
2026-09-29 10:05:33 +08:00
ZheFox
1b8f78a992
Merge pull request #846 from RWDai/review/pr-02-user-bulk-balance
...
feat(admin): batch adjust user wallet balances
2026-09-29 10:05:01 +08:00
ZheFox
14ef19d9e1
Merge pull request #860 from stabey/fix/flaky-first-request-deadline-test
...
test(gateway): deflake first-request deadline preface test
2026-09-29 10:04:35 +08:00
RWDai
bc0e9f94e2
fix(admin): serialize wallet batches across tabs
2026-09-28 18:51:14 +08:00
RWDai
74072e5007
test(postgres): decode ledger amount as float8
2026-09-28 18:23:20 +08:00
RWDai
c96f8272f4
test(ci): run batch wallet clamp against postgres
2026-09-28 18:12:21 +08:00
RWDai
4c07d9fcfb
fix(admin): floor batch deductions at zero
2026-09-28 17:56:27 +08:00
stabey and Claude Opus 5.5
45678d9419
test(gateway): decouple first-request deadline test from hyper header timeout
...
The partial-preface test raced a 5ms first-request deadline against a
10ms hyper header_read_timeout. On a slow runner both timers expire
before the next poll and tokio::select! may pick the connection branch,
surfacing hyper's header-timeout error instead of the clean deadline
close. Push hyper's timeout out to 30s so only the deadline can fire.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected] >
2026-09-28 11:46:43 +08:00
stabey and Claude Opus 5.5
75bc32cfe9
fix(formats): repair live cross-format conversion gaps
...
Verified against a live Antigravity + xAI deployment:
- Gemini and Claude clients calling a forced-stream Responses upstream
(xAI, Codex) without streaming always failed: the aggregated body echoes
request metadata (parallel_tool_calls, tools, encrypted reasoning) that
the strict cross-format check refuses, and the gateway then wrapped the
raw SSE capture in a client error body sent with HTTP 200. Project the
validated aggregate to every client format, as the Chat path already
does, and return 502 instead of raw provider bytes when a successful
cross-format response still cannot be converted.
- Gemini stream decoding keyed tool calls by part position, so parallel
calls arriving in separate chunks (all at parts[0]) merged into one call
with concatenated arguments. Key them by arrival order; ids cannot be
used because they are optional and the Antigravity envelope synthesizes
per-chunk ids that repeat across chunks. Generated call_auto_N ids now
follow arrival order.
- Non-stream Responses output reported truncated or filtered cross-format
answers as completed; derive incomplete + incomplete_details from the
canonical stop reason.
- Gemini request parsing ignored parametersJsonSchema and
responseJsonSchema and passed OpenAPI upper-case type names (OBJECT,
STRING) through to JSON Schema targets, which xAI rejects.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected] >
2026-09-28 01:49:11 +08:00
stabey
d4bc058c2f
fix(stream): preserve parser state across SSE prefetch handoff
2026-09-27 04:02:12 +08:00
Kayphoon
3541ccfe29
perf(usage): truncate usage_body_blobs in before-now cleanup to reclaim physical disk space
2026-09-25 06:02:14 +00:00
Kayphoon
bd83cff58f
fix(admin): buffer request body for manual cleanup, smtp test, and system update routes
2026-09-24 19:19:18 +00:00
AAEE86
85c04335c6
ci: guard rust scope detection against false green
...
- changes 脚本加 set -euo pipefail,git fetch/diff 失败即中止,避免写出
rust=false/shell=false 让下游误判为“无需测试”。
- changed_paths 为空(异常事件)时保守置 rust=true/shell=true,宁可多跑不漏测。
- check 与 data_db_smoke 增加 needs.changes.result 兜底。
- 恢复 push/pull_request 的 paths 白名单,并补齐 rust-toolchain.toml、
.cargo/**、*.sql,workflow 触发规则与分类脚本对齐,避免“分类正确但
workflow 未启动”的漏测。
- nextest 删除硬编码 test-threads,改用默认 num-cpus,避免在大规格 runner
上主动压低并发;保留 slow-timeout 卡死保护。
- 补真实 TCP smoke test,覆盖管理员安全接口的监听端口与 HTTP/JSON 链路。
2026-09-24 16:50:33 +08:00
AAEE86
c08497c963
ci: make nightly rust scope explicit
2026-09-24 13:37:25 +08:00
ZheFox
d30268f80f
Merge pull request #850 from AAEE86/ci/gateway-test-slim-batch1
...
ci(gateway): reduce Test (Gateway) runtime without duplicate execution
2026-09-24 12:22:27 +08:00
ZheFox
5679375f71
Merge pull request #853 from AAEE86/feat/codex-fingerprint-help
...
feat(frontend): improve Codex fingerprint setting guidance
2026-09-24 12:22:12 +08:00
AAEE86
3465d23db3
feat(frontend): improve Codex fingerprint setting guidance
2026-09-24 11:33:41 +08:00
ZheFox
e3333f1aef
Merge pull request #852 from zhefox/main
...
fix(codex): restore recovered quota status and stabilize lifecycle tests
2026-09-24 11:16:05 +08:00
ZheFox
31d5e2d172
fix(codex): restore recovered quota status and stabilize lifecycle tests
2026-09-24 10:33:45 +08:00
AAEE86
bb9f2eed8e
ci: avoid rerunning gateway lib tests
2026-09-24 10:32:59 +08:00
AAEE86
926f5cc928
test: slim gateway startup helpers and configure nextest
2026-09-24 10:13:01 +08:00
AAEE86
27ae884759
ci: split gateway cache and tunnel integration scope
2026-09-24 09:35:44 +08:00
AAEE86
834eb9c308
ci(gateway): slim pool scheduler fixtures and backup candidates
2026-09-24 08:58:55 +08:00
RWDai
390b73d4b6
test(data): include new migration in version expectation
2026-09-23 20:34:25 +08:00
RWDai
bcd121d447
fix(admin): make bulk wallet batches idempotent
2026-09-23 19:43:18 +08:00
AAEE86
3394a51278
ci(gateway): slim Test (Gateway) batch 1 — split architecture guards, pin build fingerprint
...
第一批减负(对应 docs/operations/gateway-ci-timeout-reduction-plan.md):
A1 架构守卫迁出
- 将 src/tests/architecture/**(208 项 / 约 1.5 万行字符串断言)迁至
tests/architecture/,入口 tests/architecture_guard.rs
- 从 lib cfg(test) 巨型编译单元移除,压低 rustc 峰值与 OOM 风险
- 断言逻辑不变;helper 可见性改为 pub(crate)
A2 构建指纹统一
- test_gateway 的 mold RUSTFLAGS / RUST_MIN_STACK / sccache 上移至 job 级 env
- rust-ci.yml 全部 toolchain 钉住 1.95.0(与 rust-toolchain.toml、fmt/clippy 一致)
- Gateway 独立 cache key,避免 mold 指纹与无 mold job 互相污染
A4 补安全集成测试
- 新增 Test integration targets:cargo nextest run -p aether-gateway --tests
- 覆盖 architecture_guard + 此前未执行的 admin_unsigned_identity_headers
验证:architecture_guard + admin_unsigned 209 passed;
cargo check -p aether-gateway --lib --tests 通过;cargo fmt --check 通过。
不创建 PR,仅本地分支提交。
2026-09-23 17:51:45 +08:00
RWDai
75471ae4a4
fix(admin): classify bulk wallet adjustment failures
2026-09-23 17:27:34 +08:00
ZheFox
57f53903f5
Merge pull request #849 from AAEE86/codex-dynamic-client-profile
...
fix(codex): confine codex profile api to ai_serving root seams
2026-09-23 17:25:10 +08:00
AAEE86
81788d3a64
fix(codex): confine codex profile api to ai_serving root seams
2026-09-23 16:47:45 +08:00
RWDai
30bb0c3130
fix: harden bulk wallet balance adjustment
2026-09-23 16:29:47 +08:00
ZheFox
595b8e4e05
Merge pull request #848 from AAEE86/codex-dynamic-client-profile
...
feat(codex): add dynamic CLI client profile
2026-09-23 16:09:01 +08:00
AAEE86
7e033d0571
feat(codex): add dynamic CLI client profile
2026-09-23 15:57:37 +08:00
ZheFox
5745442ed7
Merge pull request #847 from zhefox/main
...
feat(codex): add an optional 1% quota reserve for pool scheduling
2026-09-23 15:17:31 +08:00
ZheFox
1a4eba1005
feat(codex): add optional minimum quota reserve for pool scheduling
2026-09-23 14:44:29 +08:00
ZheFox
2a9d8d3b25
Merge pull request #845 from RWDai/review/pr-01-user-api-key-ip-rules
...
fix(admin): return user API key IP rules
2026-09-23 13:31:23 +08:00
RWDai
e25e240d16
feat(admin): batch adjust user wallet balances
2026-09-23 11:30:33 +08:00
RWDai
cd765f2c2f
fix(admin): return user API key IP rules
2026-09-23 11:03:45 +08:00