ZheFox
9d9892be6a
fix(gateway): finalize cross-format sync JSON responses
2026-08-26 00:43:58 +08:00
ZheFox
4185ad1b1e
feat(gateway): add Codex Live transport
2026-08-20 21:59:05 +08:00
ZheFox
c8118edf36
fix(ws): harden Responses connection lifecycle
...
Revalidate control policy per turn, isolate downstream credentials, and make planner/turn ownership cancellation-safe.
Preserve opaque protocol events, align configurable timeout semantics, and extend end-to-end security and settlement coverage.
2026-08-17 18:50:29 +08:00
AAEE86
4a0775c4ea
style: apply cargo fmt across gateway and aether-ai crates
2026-08-17 14:53:53 +08:00
AAEE86
59e27524da
refactor(gateway): extract transport-neutral execution attempt lifecycle
...
评审第 4 条:responses/turn.rs 实际复制了一整套 HTTP execution lifecycle——
usage 写入、candidate 状态流转、health/adaptive 效果投射、pool key lease 释放、
body capture、账单失败判定,与 HTTP 的顺序和超时语义只能靠人工对齐。
新增 execution_runtime/attempt_lifecycle.rs,把一次 provider attempt 的记账收成
transport 中立的三段:
ExecutionAttemptLifecycle::begin pending usage 行 + Pending candidate
ExecutionAttemptLifecycle::mark_started usage stream_started + Streaming candidate(幂等)
ExecutionAttemptLifecycle::settle 终态四段,顺序不可重排:
1 usage terminal(detachable,不可丢)
2 candidate terminal
3 provider 效果 + 超时兜底释放 lease
4 execution report(作废账单不提交)
顺序、5s 分段超时常量、detachable 语义、「每个效果分支都释放 lease」「作废账单
一律不提交 report」这些不变量全部保持原样。
一并上移的辅助设施:
- AttemptStageGuard 取代 await_websocket_lifecycle_stage /
await_detachable_lifecycle_stage,把「等多久」参数化:WS 用 Bounded(5s),
HTTP 接线时用 Unbounded 即保持它现在的语义。
- AttemptBodyCapture 取代 append_capture / encode_stream_capture,把
「缓冲 + 截断标志」两个字段收成一个类型(WS 侧四个字段变两个)。捕获内容
仍然是 SSE 形状:usage runtime 按 data: 行解析被捕获的 body 来判定
StreamCapturedTerminalState,换成结构化 JSON 会让终态判定恒为 Missing。
- C2/C3 的结算表本来就不含任何 WS 类型,随之上移。效果表分支与注释逐字未改,
仅按新位置改名为 AttemptProviderEffect / classify_attempt_provider_effect。
responses/settlement.rs 只保留 WS 专属的一件事:把 relay loop 的结算信号
ResponsesWebSocketTurnOutcome 翻译成两个正交事实。
ResponsesProviderAttempt 现在只持有 WS 专有状态:lifecycle 句柄、deadline、
终态观测器、两侧 capture、准入、provider/delivery 事实。plan / trace_id /
report_kind / report_context / candidate 起始时间戳都归 lifecycle。
HTTP 侧不接线:execution_runtime/stream/execution.rs 的
DirectPassthroughFinalizerCore(38 字段)与 failover / oauth 重试 / prefetch 深度
纠缠,无法在「行为等价 + 单 commit 可验证」的前提下改动。逐调用点映射表写在
模块文档注释里作为后续 PR 的接线依据。验收:git diff 对
execution_runtime/stream/ 与 crates/aether-usage 均为零 diff。
新增 6 个测试:效果段超时后仍走兜底 lease 释放、Unbounded 会一直等、detachable
写入在调用方停止等待后仍跑完、settle 四段顺序(计数器替身)、body capture 的
SSE 形状与编码状态(并显式记录默认上限是 usize::MAX,截断分支不可达)、
candidate error_type 映射。
2026-08-17 14:53:25 +08:00
AAEE86
71b54070e8
feat(gateway): Codex/OpenAI Responses WebSocket 代理模式
...
在 /v1/responses 上支持 WebSocket 升级,把客户端帧中继到上游 Codex /
OpenAI Responses WebSocket 端点,同时保持既有的路由、鉴权、配额与用量
语义:
- 路由与准入:control/route/ai.rs 识别 WebSocket 升级请求;
websocket/ingress.rs 复用 API Key 鉴权、IP 规则与并发许可,并引入
独立的 WebSocket 连接许可
- 中继:websocket/responses/* 按 connection / session / turn 分层,
帧解析归一化、socket 写入有界、continuation 保持调度亲和性
- 配额:orchestration/codex_quota_breaker.rs 在账号配额耗尽时熔断并
自动恢复,不再直接断开客户端连接
- 用量:每个 turn 的终态用量落库,request_metadata 记录
websocket_mode / websocket_transport,管理端与 usage 视图暴露
is_websocket
- 管理端:provider 可配置 Responses WebSocket 开关
2026-08-17 14:50:33 +08:00
zhefox
810c3dfe2b
fix(codex): serve versioned dynamic model catalogs
2026-08-14 18:41:44 +08:00
elky
5b0c763086
fix(codex): fence concurrent quota updates
2026-08-14 09:28:07 +08:00
ZheFox
84022c4d48
Merge upstream/main into main
2026-07-30 19:40:39 +08:00
ZheFox
118f441029
feat(gateway): persist OpenAI Responses continuation history
2026-07-30 19:26:52 +08:00
elky
050eb77508
fix(ai): harden responses replay and failure diagnostics
2026-07-30 17:19:54 +08:00
elky
1ab4f079c9
fix(gateway): restore failover and usage diagnostics
2026-07-30 09:12:11 +08:00
elky
a04673a90d
feat(gateway): harden failover and payload handling
...
Retry pre-response transport failures across candidates with an explicit stop policy, and propagate end-to-end timing into usage records and UI diagnostics.
Remove legacy body, import, cookie, PII, and tunnel replay caps while preserving optional operator-configured gateway limits.
2026-07-30 01:03:27 +08:00
zhefox
f8000012f7
fix(ci): stabilize cross-platform workflow checks
2026-07-29 21:55:43 +08:00
ZheFox
f0f87b56a3
feat(providers): add credential-fenced OAuth key cleanup
2026-07-28 11:32:11 +08:00
elky
531cf11025
feat(gateway): harden provider request execution
...
Preserve exact request payloads and model client surface and API operation explicitly.
Add Anthropic compatibility profiles, bounded stream commitment, and scoped OAuth retry behavior across provider transports.
2026-07-27 09:36:31 +08:00
elky
10d369f59c
feat(providers): add provider transfer limits
2026-07-26 15:06:56 +08:00
elky
3606290ac8
fix(provider): harden Agent Identity OAuth lifecycle
2026-07-23 09:33:00 +08:00
ZheFox
c825375367
Merge pull request #688 from AAEE86/feat/agent-identity-support
...
feat(codex): support agent identity accounts
2026-07-22 09:20:11 +08:00
elky
fc92c4f431
perf(gateway): scale request hot paths for 20k streams
...
Shard and singleflight hot-path caches, batch and prioritize candidate and usage lifecycle persistence, and extend database and pressure-test instrumentation for 20k concurrent streams.
2026-07-22 02:11:08 +08:00
AAEE86
b61c590bdb
feat(codex): support agent identity accounts
2026-07-21 20:58:49 +08:00
elky
f8778c4a23
feat(gateway): configure cyber policy failover
2026-07-19 23:27:19 +08:00
MMEXA
4d9a648202
test(gateway): 统一流错误测试的格式层入口
2026-07-18 03:37:31 +08:00
MMEXA
405ca3e66a
fix(ci): 恢复非流式错误体边界并适配新版 Clippy
2026-07-18 03:26:53 +08:00
elky
664c063a06
feat(usage): enrich audit metadata and detail views
2026-07-17 19:20:16 +08:00
elky
9a47267545
fix(usage): bound terminal event persistence
...
Add end-to-end terminal admission, bounded database fallback, and observable overload handling. Preserve first-byte lifecycle state across asynchronous runtime and frontend updates.
2026-07-16 13:12:30 +08:00
elky
8616fe6ee2
refactor(workspace): enforce layered crate boundaries
2026-07-15 23:47:19 +08:00
elky
e58621a735
Merge PR #669 : align GPT-5.6 and Codex request protocols
2026-07-12 21:50:20 +08:00
elky
7f61bb43c7
feat(security): harden gateway request and runtime controls
2026-07-12 14:10:54 +08:00
MMEXA
2316df5c9a
feat(codex): align Search and execution protocol
2026-07-12 03:04:15 +08:00
MMEXA
0b30cc6b0f
feat(openai): unify tier authorization and settlement
2026-07-11 12:27:05 +08:00
MMEXA
dfa121dd5b
feat(openai): align GPT-5.6 and Codex request contracts
2026-07-11 07:40:12 +08:00
MMEXA
d2ea437c1c
修复 Gemini 空输出按候选重试处理
2026-07-09 23:10:30 +08:00
MMEXA
b8b89d21b7
fix: 同步提交本地 sync 错误上报
2026-07-08 23:49:18 +08:00
MMEXA
80a6579766
支持 Gemini Interactions 与 Antigravity 配额精细化
2026-07-08 22:34:29 +08:00
elky
ac93851b2a
Stabilize Gateway h2c transport test
2026-07-02 14:02:26 +08:00
elky
7c32be46ca
Mark sync usage active earlier
2026-07-01 02:21:20 +08:00
elky
f179ee72f9
chore: update gateway pressure observability
2026-06-30 17:01:39 +08:00
zhefox
f6293b6812
fix(usage): void cancelled usage and cancel dropped streams
2026-06-29 00:30:41 +08:00
elky
6f00e9fc67
Improve gateway transport and usage runtime
2026-06-25 22:36:27 +08:00
elky
d336d1a7fa
Improve gateway scheduling and runtime admission
2026-06-24 01:53:45 +08:00
elky
f75894acbb
perf: reduce gateway db pressure under load
2026-06-22 00:08:48 +08:00
elky
61bdd304b7
Handle inactive PAT owner as invalid OAuth token
2026-06-21 11:39:20 +08:00
zhefox
628a3a0d8d
fix(ai-formats): support cyber policy failover and custom tool/audio passthrough
2026-06-17 02:33:14 +08:00
ZheFox
302620cb94
Merge branch 'fawney19:main' into main
2026-06-16 12:17:28 +08:00
elky
30b545785f
feat: improve failover rules and request timeline
2026-06-11 00:49:29 +08:00
elky
0246ba93dd
fix(transport): preserve safe accept encoding
2026-06-10 19:58:57 +08:00
elky
e9b4efc2d4
fix(ai-serving): preserve explicit request encoding
2026-06-10 18:16:55 +08:00
zhefox
82040bfc21
fix(gateway): support OpenAI image edit requests
2026-06-08 13:22:08 +08:00
elky
21432911de
Merge remote-tracking branch 'origin/pr/605'
2026-06-03 00:16:22 +08:00