ZheFox
976c3feca6
Merge pull request #880 from xiaoli0412/fix/issue-817-audit-checkin-tunnel
...
fix(tunnel): unquote WorkingDirectory in generated systemd unit (proxy node setup fails)
2026-10-05 12:02:48 +08:00
李昊桐
12d58327a1
fix(tunnel): stop quoting WorkingDirectory in generated systemd unit
...
systemd (verified on Ubuntu 20.04 / systemd 245 with systemd-analyze
verify) treats the quoted value as part of the path and rejects the
unit with: WorkingDirectory= path is not absolute: "/etc/aether-tunnel".
This made aether-tunnel setup fail after a seemingly successful
one-line install, so remote proxy nodes never came online.
WorkingDirectory= takes the rest of the line as the path, so spaces in
the working directory stay intact unquoted; newline/specifier injection
is already rejected by validate_service_unit_path. ExecStart= and
Environment= keep their existing quoting.
Updates #817 (proxy node section; reproduced there with the full
systemd-analyze verify output).
2026-10-04 23:25:56 +08:00
MMEXA
e1dadf5b06
修复 Codex 记忆协议的 formats 入口边界与 CI 架构检查
2026-10-02 00:25:07 +08:00
MMEXA
9f829450d8
移除失败测试产生的临时二进制样例
2026-10-01 18:55:36 +08:00
MMEXA
65f43a7aef
同步完整网关回归的画像与目录契约并说明测试环境
2026-10-01 18:39:17 +08:00
MMEXA
ea6b739fd6
保留官方公开压缩兼容标记并明确原生错误测试策略
2026-10-01 18:16:13 +08:00
MMEXA
14befeda2c
对齐 Codex CLI 0.159.3 的通用画像、模型能力与原生协议
2026-10-01 17:54:04 +08:00
ZheFox
54fbcc25a1
Merge pull request #871 from dalamudx/feat/claude-code-usage-quota
...
feat(claude-code): 支持查询 Claude Code 账号 5H/周额度并在号池和提供商详情展示
2026-09-30 09:00:53 +08:00
dalamudx
017d08d45e
test(claude-code): 批量授权测试兼容授权后异步额度刷新
2026-09-30 02:19:15 +08:00
dalamudx
7f45617f79
fix(claude-code): 修复 clippy needless_borrow 并更新不再受支持的 claude_code 额度刷新测试
2026-09-30 01:43:22 +08:00
dalamudx
b49f5c0fd7
feat(claude-code): 只读展示重置机会(cedar_ember)并补齐额度文案国际化
2026-09-29 23:55:27 +08:00
dalamudx
125cd40aa5
feat(claude-code): 被动采样 anthropic-ratelimit-unified 响应头更新额度
2026-09-29 22:57:39 +08:00
dalamudx
8093899b5a
feat(claude-code): 支持通过 /api/oauth/usage 查询账号 5H/周额度并在号池展示
2026-09-29 22:40:44 +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
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
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
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
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
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
31d5e2d172
fix(codex): restore recovered quota status and stabilize lifecycle tests
2026-09-24 10:33:45 +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
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
1a4eba1005
feat(codex): add optional minimum quota reserve for pool scheduling
2026-09-23 14:44:29 +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
ZheFox
7f5e1a64fe
merge: integrate usage response models with service tier badges
...
Merge upstream PR #837 , preserving its original commits and resolving the UsageModelDisplay layout conflict after #841 . Cover response models alongside dynamic service-tier badges in detail tests.
2026-09-22 23:31:22 +08:00
ZheFox
69930a6059
fix(codex): preserve explicit service tiers and adapt usage badges
2026-09-22 22:19:52 +08:00
wangpengxiang
a9a7c64e5d
fix(stats): scope group usage by providers and add ungrouped view
2026-09-21 12:49:48 +08:00
ZheFox
0b7c7f94ac
Merge pull request #833 from AAEE86/feat/usage-skipped-candidates
...
feat(usage): 展示调度跳过候选及原因并补齐手机端提示
2026-09-21 10:36:48 +08:00
AAEE86
f960bbd2c8
feat: expose upstream response model in usage records
2026-09-21 09:51:33 +08:00