ZheFox
64e5725331
fix(formats): sanitize Gemini tool schemas
2026-08-28 16:11:16 +08:00
ZheFox
5b6fce1a77
fix(formats): degrade Responses reasoning summaries for Chat
2026-08-28 14:05:48 +08:00
ZheFox
5687dad177
fix(formats): scope signature helper to tests
2026-08-28 13:21:35 +08:00
ZheFox
c4b4dfa996
fix(formats): preserve Gemini tool thought signatures
2026-08-28 12:47:34 +08:00
ZheFox
8cdfa338e5
fix(gemini): pair idless tool history
2026-08-28 02:15:00 +08:00
ZheFox
4da8c57fe3
fix(ai): align Gemini and Responses compatibility
2026-08-27 22:13:20 +08:00
ZheFox
e2b003af24
fix(formats): preserve Responses namespace tools through Chat
2026-08-26 00:43:50 +08:00
ZheFox
2cd20da1ec
fix(gateway): support current Codex Realtime live routes
2026-08-23 02:51:49 +08:00
ZheFox
2c89202001
feat(gateway): add Codex Live and OpenAI Realtime
...
Implement preflighted Live/Realtime WebSocket transports, protocol-aware authentication, usage auditing, UI filtering, and legacy Codex permission migration.
2026-08-21 04:27:34 +08:00
ZheFox
4185ad1b1e
feat(gateway): add Codex Live transport
2026-08-20 21:59:05 +08:00
ZheFox
654f798d25
fix(ws): harden Responses continuation state
2026-08-20 08:51:16 +08:00
ZheFox
bef282cfee
fix(responses): replay DeepSeek opaque reasoning state
2026-08-20 00:40:48 +08:00
ZheFox
d21d8ce9f5
fix(codex): avoid replaying static config on websocket continuations
2026-08-20 00:40:40 +08:00
AAEE86
4a0775c4ea
style: apply cargo fmt across gateway and aether-ai crates
2026-08-17 14:53:53 +08:00
AAEE86
1d3051cb89
refactor(ws): structured terminal observation without SSE text round-trips
...
评审第 5 条:Responses WebSocket 收到的本来就是结构化协议事件,但为了复用面向
SSE 的 push_line,观测路径要先把每个事件序列化成 data: {json}\n\n,解析器再
decode 回 Value——一次纯粹的往返。这个「伪 SSE」形状是随手拼的,一旦拼装函数
以后被加上换行或分块逻辑,观测结果就会和真实事件悄悄分叉。
aether-ai-formats:
- OpenAIResponsesProviderState::push_line 机械拆成 decode + push_event,
push_line 现在只做解码。协议状态机一行未动,diff 里除函数签名外只有
&value → value(value 从拥有改成借用,持有结构化事件的传输不必为了调用它
先克隆一份)。
- StreamingStandardTerminalObserver::push_event 走 TerminalStreamParser::Standard,
service tier 的记录方式与 push_line 完全相同。openai:image 的终态状态机按 SSE
行做增量解析、没有结构化入口,返回 AiSurfaceFinalizeError 让调用方
disable_with_error 标记 parser_error,而不是静默丢事件、把摘要留成「未观察到
终态」。ProviderStreamParser 的其余三个格式同样返回 Err:机械拆分随时可做,
但不建无调用方的接口。
WS 侧:
- 新增 responses/observation.rs 的 ResponsesStructuredTerminalObserver,直接消费
frame.protocol_events() 借出的事件。包一层的意义是让「不再拼 SSE」成为类型层面
的事实——这个类型没有任何接受字节的方法,改回 push_line 不可能悄悄发生。
finish() 里的 Ok(None) / Err → disable_with_error 兜底也一并收进来。
- body capture 不动,仍然是 SSE 形状(data: 开头、\n\n 结尾):
aether_usage_runtime::report 用 line.strip_prefix("data:") 解析被捕获的 body
判定 StreamCapturedTerminalState,而它是 stream_report_represents_failure 的一个
OR 项,换成结构化 JSON 会让终态判定恒为 Missing。capture_sse_event /
capture_client_frame / websocket_event_as_sse_line 全部保留,原因写在模块文档
注释里。这一层只换观测,不换捕获。
差分测试(8 个,aether-ai-formats):同一组事件序列分别走 push_line 与
push_event,断言 ExecutionStreamTerminalSummary 完全相等——批量 delta 序列、
completed 带 usage、合法 incomplete、error、response.failed、未知事件、
service tier、缺终态;外加 openai:image 拒绝结构化入口。两条入口不可能有
过滤差异:任何 Value 序列化出来都不会命中 decode_json_data_line 的 empty /
":" / "event:" / [DONE] 四个过滤条件。
turn.rs 里三个既有的 WS 观测测试改走结构化入口;SSE 形状的断言留在 capture 一侧。
验收:crates/aether-usage 零 diff。
2026-08-17 14:53:33 +08:00
zhefox
810c3dfe2b
fix(codex): serve versioned dynamic model catalogs
2026-08-14 18:41:44 +08:00
elky
f3a12c1008
fix(ai): preserve Codex image edit validation
2026-08-13 11:31:17 +08:00
elky
ca35e09eaa
Merge pull request #718 from zjm54321/fix/custom-image-edit-json
2026-08-13 11:00:15 +08:00
zjm54321
41e93858e1
refactor(ai): simplify image edit serialization
2026-08-11 00:36:33 +08:00
zjm54321
8d918d0459
fix(ai): serialize image edits with images array
2026-08-11 00:30:00 +08:00
zhefox
669f4bddc5
fix: align Responses routing and model permissions
2026-08-03 18:48:01 +08:00
ZheFox
ef5f36cc2b
fix(ai): satisfy response history clippy checks
2026-07-30 20:13:36 +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
20399b004d
Merge PR #700 : fix admin pool batch update body buffering
...
Preserve main's failover and usage metadata fixes, restore default tunnel regression coverage, and satisfy current Clippy.
2026-07-30 17:56:37 +08:00
elky
050eb77508
fix(ai): harden responses replay and failure diagnostics
2026-07-30 17:19:54 +08:00
zhefox
f8000012f7
fix(ci): stabilize cross-platform workflow checks
2026-07-29 21:55:43 +08:00
ZheFox
581897ee74
fix(formats): ignore responses client metadata across targets
2026-07-28 17:40:41 +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
ZheFox
615ac99ad7
fix(formats): ignore Responses client transport metadata
2026-07-23 12:16:44 +08:00
elky
856605defa
fix(model-directives): harden suffix configuration
2026-07-22 14:19:09 +08:00
AAEE86
b61c590bdb
feat(codex): support agent identity accounts
2026-07-21 20:58:49 +08:00
MMEXA
e31df5989a
merge(main): 解决 usage 展示与生命周期同步冲突
2026-07-18 05:38:38 +08:00
fawney19
6c33b8d8fb
Merge pull request #682 from MMEXA/codex/codex-prompt-cache-identity-20260717
...
fix(codex): 统一通用缓存键与原生会话身份
2026-07-18 00:33:20 +08:00
elky
664c063a06
feat(usage): enrich audit metadata and detail views
2026-07-17 19:20:16 +08:00
MMEXA
5b332da7d7
fix(codex): 补齐缓存身份终态请求头
2026-07-17 08:11:16 +08:00
MMEXA
d9796d502b
fix(codex): 统一通用缓存键与原生会话身份
2026-07-17 06:13:09 +08:00
MMEXA
427030c5de
Merge remote-tracking branch 'origin/main' into codex/usage-pending-reasoning-reset-expiry-20260712
...
# Conflicts:
# crates/aether-ai-formats/src/formats/openai/responses/mod.rs
# crates/aether-usage/runtime/src/runtime.rs
# frontend/src/features/usage/components/UsageRecordsTable.vue
# frontend/src/features/usage/components/__tests__/UsageRecordsTable.spec.ts
2026-07-16 23:41:58 +08:00
fawney19
33f49ea9b0
Merge pull request #678 from AAEE86/fix
...
fix: map Developer role to "system" in OpenAI Chat Completions output
2026-07-16 23:29:55 +08:00
fawney19
470cef17cf
Merge pull request #676 from MMEXA/codex/sync-capture-envelope-finalize-20260716
...
修复同步 finalize 的 Responses 流聚合与转换
2026-07-16 23:29:38 +08:00
elky
e369e4aab1
fix(formats): preserve chat-backed Responses metadata
2026-07-16 16:38:30 +08:00
AAEE86
cd8de1aa13
fix: map Developer role to "system" in OpenAI Chat Completions output
2026-07-16 14:29:08 +08:00
MMEXA
7851503fbc
fix(finalize): 严格聚合并投影同步 Responses 流
2026-07-16 12:50:00 +08:00
ZheFox
71fcb9c168
fix(codex): 服务端压缩使用标准 Responses 合约
2026-07-16 12:02:33 +08:00
ZheFox
3976652942
fix(codex): 移除 Responses Lite 请求中的 context_management
2026-07-16 11:25:11 +08:00
MMEXA
7b56546e21
fix(finalize): 聚合同步流捕获包装
2026-07-16 10:24:32 +08:00
MMEXA
20b27a13b2
feat(codex): 按操作语义路由 Responses V2 压缩
...
(cherry picked from commit 2fc604e047 )
2026-07-16 00:34:42 +08:00
MMEXA
598b2fb374
fix(auth): 授权 Responses Compact 伴随端点
...
(cherry picked from commit e8afa03e45 )
2026-07-16 00:32:14 +08:00
MMEXA
ff7988430d
fix(openai): encode tool errors in Responses output
...
(cherry picked from commit f127b67e73 )
2026-07-16 00:31:23 +08:00
elky
8616fe6ee2
refactor(workspace): enforce layered crate boundaries
2026-07-15 23:47:19 +08:00