Releases: looplj/axonhub
Releases · looplj/axonhub
Release list
v1.0.0-beta10
What's Changed
- fix(openai): tolerate object-shaped usage cost by @looplj in #2373
- Pass the caller's context through the v0.3.0 and v0.4.0 migrations by @omlahore in #2348
- fix(openai): preserve request contracts across transports by @techblack in #2374
- fix(openai): prevent zero-status errors from returning HTTP 200 by @Solaris-star in #2372
- fix(images): accept application/json in passthrough mode for /images/edits (#2336) by @remote-controlled-man in #2370
- fix(anthropic): preserve client cache_control breakpoints to keep prompt cache hits by @Azhc in #2342
- fix(trace): stop persisting traces for embedding requests by @trim21 in #2378
- fix(frontend): silence transient channel polling errors by @llc1123 in #2382
- fix(frontend): handle empty channel error messages by @llc1123 in #2375
- fix(api): report server stream deadlines to SSE clients by @llc1123 in #2362
- feat: add ZenMux channels and quota-aware UI by @llc1123 in #2381
- fix: window deploy scripts, close #2376 by @looplj in #2386
- fix(openai): complete cross-format request conversion by @techblack in #2377
- fix(frontend): localize model developer selector by @llc1123 in #2385
- docs: move deployment to axonhub-skills by @looplj in #2388
- fix: include hy4 models in Tencent catalog by @imzrme in #2387
- fix(openai): merge multiple system messages for strict upstreams by @itachaaa in #2384
- feat: archive personal api keys when delete user, close #2272 by @looplj in #2391
- feat: fire webhook when api key disabled, close #2380 by @looplj in #2393
- feat: remove cc billing system message for non official channel, clos… by @looplj in #2394
- feat: add Command Code channel support by @kaiwishc in #2392
- fix: propagate OpenCode sessions to custom endpoints by @imzrme in #2389
- feat: show OAuth channel quotas by @techblack in #2366
- fix(zai): support GLM-5.2+ reasoning_effort and GLM-5.3 always-on thinking by @MrLiuGangQiang in #2314
- feat(codex): support gpt-6-astra by @MrLiuGangQiang in #2399
- fix: render image-generation traces without GraphQL errors by @mvanhorn in #2297
- ci: enable manual unstable Docker image publishing by @llc1123 in #2403
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /integration_test/gemini by @dependabot[bot] in #2404
- fix(requests): keep API key filter visible without results by @MrLiuGangQiang in #2405
- chore: sync model developers data by @github-actions[bot] in #2412
- feat: add ZenMux native video generation by @llc1123 in #2410
- fix(frontend): preserve channel form focus and onboarding dismissal by @llc1123 in #2411
New Contributors
- @omlahore made their first contribution in #2348
- @Solaris-star made their first contribution in #2372
- @remote-controlled-man made their first contribution in #2370
- @Azhc made their first contribution in #2342
- @imzrme made their first contribution in #2387
- @itachaaa made their first contribution in #2384
- @kaiwishc made their first contribution in #2392
Full Changelog: v1.0.0-beta9...v1.0.0-beta10
v1.0.0-beta9
What's Changed
- feat: unify reasoning effort across protocols and add model endpoint routing by @AkaChou in #2330
- fix: dialog double scrollbar introduced in 2bfea19 by @BLumia in #2355
- feat: show codex reset details, close #2301 by @looplj in #2360
- fix(frontend): repair height-constrained scroll layout in mobile dialogs by @djdembeck in #2354
- fix(codex): strip user field from outbound requests by @llc1123 in #2352
- fix: preserve transformed Responses stream events by @MrLiuGangQiang in #2365
- fix: dockerfile compitable, close #2367 by @looplj in #2368
- fix(anthropic): reject invalid tool input on clean EOF by @llc1123 in #2363
- feat: add opencode session header, close #2361 by @looplj in #2369
Full Changelog: v1.0.0-beta8...v1.0.0-beta9
v1.0.0-beta8
What's Changed
- opt: anthropic signature recognization by @looplj in #2197
- feat: unify auto-refresh controls and stabilize list animations by @AkaChou in #2198
- fix: correct currency code example from RMB to CNY by @hanuxxx in #2202
- feat(quota): add Charm Hyper credit balance checker by @djdembeck in #2199
- fix(quota): color Codex quota bars by usage by @djdembeck in #2166
- feat(quota): track OpenCode Go quota via official usage API by @jveko in #2204
- feat: hide unroutable configured models from public lists by @CberYellowstone in #2215
- fix(trace): only persist explicitly identified traces by @MrLiuGangQiang in #2208
- fix(responses): harden stream terminal, retry, and resource boundaries by @wtj-0527 in #2196
- feat: add xai_responses channel type by @kirafishy in #2212
- fix(prompts): parse project GUIDs in prompt schema by @Likhixang in #2200
- chore(actions): upgrade workflows to node24 actions by @llc1123 in #2219
- fix(responses): preserve image tool_choice without pass-through by @llc1123 in #2218
- fix(codex): skip pass-through for unsupported response limits by @llc1123 in #2217
- feat(requests): add reusable column reordering with drag-and-drop by @djdembeck in #2222
- feat: persit chunks for failed stream request by @looplj in #2224
- feat(quota): allow exempting channels from quota filtering by @djdembeck in #2214
- feat: add xAI subscription SSO channel and Responses support for xai by @llc1123 in #2225
- feat: provider quota estimate by @looplj in #2228
- feat: add codex missing headers by @looplj in #2230
- fix(actions): derive unstable version from latest tag by @llc1123 in #2231
- fix(llm): preserve top-level reasoning tokens by @djdembeck in #2237
- fix(nanogpt): escalate quota status to exhausted at 100% by @djdembeck in #2236
- fix(codex): fix HTTP 400 missing reasoning.context all_turns by @djdembeck in #2235
- feat(frontend): add sans/serif/mono font options to theme menu by @ChancenJ in #2234
- chore: minor ui/error optimization by @looplj in #2238
- fix: image outbound & override by @looplj in #2241
- fix: restore meta muse lineup in model catalog by @djdembeck in #2258
- fix(channel): write UTC updated_at when saving model prices by @ChancenJ in #2257
- fix(frontend): grant system-level route access to owner users by @qinkangdeid in #2254
- fix(copilot): send Grok models through Responses API by @ripenedcat in #2250
- opt: gemini channel compatible by @looplj in #2259
- chore: sync model developers data by @github-actions[bot] in #2242
- feat: introduce unified opencode transformer, close #2240 by @looplj in #2260
- feat: GC 支持剥离已存储的请求/响应载荷 by @CberYellowstone in #2246
- fix(frontend): correct conversation sidebar height by @KremeCN in #2267
- fix: skip postgres monotonic updated_at cleanup by @djdembeck in #2266
- fix: use HTTP URL for WebSocket model discovery by @techblack in #2265
- fix: should reload channels after txn commited, close #2256 by @looplj in #2261
- fix: forward image parameter in /v1/images/generations by @clhey in #2251
- fix: double count reasoning token for throughput by @looplj in #2270
- fix(requests): expose personal key callers to project owners by @brynne8 in #2269
- fix: use ping for Responses WebSocket channel tests by @techblack in #2264
- fix(requests): honor effective API key scopes by @brynne8 in #2277
- fix: stabilize auto-refresh list transitions by @AkaChou in #2275
- fix(codex): accept completed JSON Responses from compatible relays by @MrLiuGangQiang in #2243
- fix(channels): map ollama_anthropic to the ollama provider by @hihanley in #2299
- chore: sync model developers data by @github-actions[bot] in #2295
- fix: i18n conversation viewer and tool_choice stat by @djdembeck in #2298
- docs(i18n): clarify storage policy and payload storage copy by @brynne8 in #2296
- fix: preserve conditional template overrides by @CBOSSX in #2287
- docs(i18n): clarify where store-chunks persists stream chunks by @trim21 in #2306
- feat: support Codex alpha search proxy by @JerryLiu369 in #2274
- fix(providers): accept boolean experimental flag by @djdembeck in #2305
- fix(gemini): preserve concrete MIME types for remote media by @llc1123 in #2205
- feat: hot-reload model catalog from upstream via backend by @CberYellowstone in #2263
- fix(channels): validate bulk ordering weight input by @JasonWenTheFox in #2335
- fix(frontend): support clipboard copy on insecure HTTP origins by @JasonWenTheFox in #2334
- feat(frontend): add 100-row pagination option by @JasonWenTheFox in #2333
- fix: skip spurious default-value changes that trigger SQLite rebuilds by @ChancenJ in #2331
- chore: sync model developers data by @github-actions[bot] in #2325
- fix(ui): add viewport height floor to DialogContent by @ronronner02 in #2328
- feat(channels): support export/import channel model prices as JSON by @ChancenJ in #2322
- fix(frontend): trim price inputs before saving channel model prices by @trim21 in #2321
- feat: auto set prompt cache key from trace id by @looplj in #2339
- fix: request performance metric accurate by @looplj in #2341
- feat: support add image in playground by @BLumia in #2340
- fix: decode snake_case OIDC claims for email linking by @imryao in #2320
- fix: classify upstream stream interruptions and keep latency metrics on failed executions by @zhaozhaozz in #2317
- fix(frontend): paginate API key selectors and filters by @suixinio in #2346
- ci: validate bundled providers.json against its schema by @trim21 in #2315
- feat: return AxonHub cost on usage.cost across API formats by @trim21 in #2300
- feat(api): support downstream Responses WebSocket by @techblack in #2255
- feat: add mine api keys tab, close #2271 by @looplj in #2349
- fix: requests db index name length & rules by @looplj in #2351
New Contributors
- @hanuxxx made their first contribution in #2202
- @jveko made their first contribution in #2204
- @kirafishy made their first contribution in #2212
- @Likhixang made their first contribution in #2200
- @ripenedcat made their first contribution in #2250
- @techblack made their first contribution in #2265
- @clhey made their first contribution in #2251
- @CBOSSX made their first contribution in #2287
- @JerryLiu369 made their first contribution in #2274
- @ronronner02 made their first contribution in #2328
- @imryao made their first contribution in #2320
Full Changelog: v1.0.0-beta7...v1.0.0-beta8
v1.0.0-beta7
What's Changed
- fix: handle moderation responses in empty response detection by @Silentely in #2099
- feat: add provider quota collection controls by @Silentely in #2103
- fix(gemini): preserve file data MIME type for Vertex by @llc1123 in #2091
- feat: backup & restore systems config, close #2101 by @looplj in #2104
- feat: response with trace headers, close #2100 by @looplj in #2107
- feat: check new beta version, close #2097 by @looplj in #2111
- fix(frontend): improve requests table mobile responsiveness by @djdembeck in #2118
- fix: reuse bundled Windows binary by @Jonesxq in #2119
- fix(analytics): support MySQL for channel stats by @ChancenJ in #2123
- fix: 修正拼写错误“oltphttp”->“otlphttp” by @bookshiyi in #2121
- fix(frontend): load theme fonts by @llc1123 in #2122
- fix(responses): keep images in tool results instead of dropping them by @GhostFlying in #2117
- feat: add configurable max_multipart_memory for backup restore by @vincentyzhj in #2126
- feat: add per-channel API key rule actions by @Lxiny-zy in #2120
- fix(transformer): 合并连续 function_call/custom_tool_call 为单条 assistant 消息 by @Snowy117 in #2114
- fix(responses): scope fallback prompt_cache_key per conversation by @Kizunad in #2031
- feat(permissions): align project roles with UI access by @brynne8 in #2095
- feat: model load balance strategy by @looplj in #2127
- chore: sync model developers data by @github-actions[bot] in #2131
- fix: admin page permission protect by @hen7777777 in #2138
- fix(responses): handle reasoning text stream events by @cesaryuan in #2151
- fix: harden MemorySize parsing and document max_multipart_memory by @vincentyzhj in #2145
- fix(openai): keep message content valid for strict upstreams by @Lxiny-zy in #2137
- fix(frontend): constrain quota popover width on mobile by @KremeCN in #2143
- fix(frontend): prevent system settings double scroll by @KremeCN in #2142
- fix(cline): align quota windows with API behavior by @KremeCN in #2141
- feat(cline): fetch recommended models dynamically by @KremeCN in #2140
- feat(channels): add Groq channel by @rupaut98 in #2144
- fix(transform): add channel switch to downgrade mid-conversation system messages by @AkaChou in #2124
- feat(requests): show final reasoning_effort in request logs by @AkaChou in #2158
- feat(channels): unified API key management dialog with bulk import by @Lxiny-zy in #2156
- fix(cline): normalize empty message content by @KremeCN in #2155
- fix(frontend): align analytics filter UX by @cesaryuan in #2154
- fix(responses): preserve function calls completed in done events by @MrLiuGangQiang in #2057
- feat(requests): redesign request log table by @brynne8 in #2162
- perf(frontend): virtualize model price dialog to fix lag with many models by @suixinio in #2163
- feat: add sse keep alive, close #2146 by @looplj in #2157
- chore: sync model developers data by @github-actions[bot] in #2176
- feat(channels): per-credential auto disable with scheduled recovery by @zhaozhaozz in #2180
- fix(responses): preserve polymorphic reasoning and Codex metadata by @MedAIerHHL in #2178
- feat(apikeys): sync and transfer profile templates by @MedAIerHHL in #2177
- fix(responses): report truncation and failure in streaming conversion by @Lxiny-zy in #2171
- fix(responses): 兼容 Responses API created_at 的浮点整数形式 by @Silentely in #2187
- fix(stream): report incomplete streams to the client by @zhaozhaozz in #2185
- request 请求体支持 对话阅览 模式,便于请求体数据查看 by @qintang in #2182
- feat: add qiniu/fenno channel by @looplj in #2188
- fix(claude-code): automate cache compatibility and OpenAI effort mapping by @AkaChou in #2172
- feat(models): add thinkingmachines as model developer by @djdembeck in #2190
- fix(sqlite-time-format-compat): 兼容 SQLite TEXT 时间戳格式并修复 backup 注册时区退化 by @Silentely in #2189
- chore: add log for chat heartbeat by @looplj in #2191
- feat: show request cache rate, close #2170 by @looplj in #2193
- fix(responses): retry incomplete streams before done by @wtj-0527 in #2192
- fix: model associate condition caused model not found, close #2183 by @looplj in #2194
New Contributors
- @Jonesxq made their first contribution in #2119
- @bookshiyi made their first contribution in #2121
- @vincentyzhj made their first contribution in #2126
- @Lxiny-zy made their first contribution in #2120
- @Snowy117 made their first contribution in #2114
- @Kizunad made their first contribution in #2031
- @rupaut98 made their first contribution in #2144
- @AkaChou made their first contribution in #2124
- @MrLiuGangQiang made their first contribution in #2057
- @qintang made their first contribution in #2182
- @wtj-0527 made their first contribution in #2192
Full Changelog: v1.0.0-beta6...v1.0.0-beta7
v1.0.0-beta6
What's Changed
- fix(dashboard): fix daily chart X-axis date display using Date.UTC by @ChancenJ in #1995
- fix: dialog ui for test channel when enable channel, close #1969 by @looplj in #1996
- fix(anthropic): synthesize terminal stream events when upstream omits finish_reason by @mvanhorn in #2000
- chore: sync model developers data by @github-actions[bot] in #2004
- feat: display last name before first name in sidebar for Chinese locale by @hihanley in #1998
- fix(apikeys): avoid double-counting cached and reasoning tokens in total by @hihanley in #1999
- feat: add IBM model developer with Granite models by @djdembeck in #2003
- feat: add analytics page with multi-dimensional filtering by @ChancenJ in #2005
- feat(traces): add span statistics to trace detail page and filter pop… by @ChancenJ in #2008
- fix: move analytics helpers out of resolvers file to prevent go generate from breaking them by @ChancenJ in #2019
- feat: support set-if-absent body overrides by @GhostFlying in #2017
- feat: expose prompt cache key to override templates by @GhostFlying in #2016
- fix(provider-quota): use official Cline quota limits by @KremeCN in #2012
- feat(channel): auto-configure model prices by @ousing9 in #1993
- feat: add Kimi Code quota tracking by @u33e in #2010
- fix(codex): preserve Responses Lite request requirements by @shay-wong in #2020
- fix(traces): normalize tool_use arguments JSON to fix span dedup by @ChancenJ in #2013
- feat: config auto reload by @looplj in #1997
- fix: embed IANA timezone database for Windows compatibility by @ChancenJ in #2024
- feat: add trace and thread status management (archive / retain) by @ChancenJ in #2023
- chore: sync model developers data by @github-actions[bot] in #2026
- feat(quota): add Minimax channel quota checker by @ChancenJ in #2029
- fix(openai): write image edit model before files by @llc1123 in #2028
- chore: sync model developers data by @github-actions[bot] in #2037
- feat(quota): add Zhipu channel quota checker by @ChancenJ in #2032
- fix(ent): align prompt project ownership by @brynne8 in #2039
- feat(models): add Tencent developer with Hunyuan models by @KtzeAbyss in #2046
- feat: add archive/retain buttons to trace and thread detail pages by @ChancenJ in #2045
- fix(channels): preserve third-party Codex base URL by @brynne8 in #2040
- feat(models): add poolside as model developer by @djdembeck in #2059
- feat(channels): add Anthropic messages API format support to the Ollama channel by @hihanley in #2058
- feat: 支持配置全局渠道测试 Prompt by @CberYellowstone in #2042
- feat:增加每次请求新连接功能,使得类似resin之类的代理池能够轮换ip by @xuyufengfei in #2060
- fix(permissions): align system settings scope by @brynne8 in #2053
- feat: add time-based pricing schedule for channel model prices by @ChancenJ in #2050
- fix: Codex Remote Compaction V2 的响应在 AxonHub 中被当作 Empty Reponse 错误 by @w568w in #2041
- fix(openai): transform Responses image results by @cesaryuan in #2071
- fix(orchestrator): detect stream completion from JSON data type and finish_reason by @trim21 in #2068
- fix(backup): stream backup JSON to prevent OOM on large datasets by @djdembeck in #2067
- fix(apikeys): make table sorting functional by @MedAIerHHL in #2063
- feat(apikeys): add allowed cidrs for api keys by @amghazanfari in #2072
- fix: pass through canceled request check by @looplj in #2030
- Import mobile UI by @nb5p in #1896
- feat: add cache write for response api by @looplj in #2074
- feat: add Inclusion AI as model developer by @djdembeck in #2078
- refactor: make sesstion sticky configurable by @looplj in #2076
- chore: sync model developers data by @github-actions[bot] in #2081
- fix(openai): normalize empty finish_reason to nil for providers that always emit it by @sleepwalkera in #2073
- fix(responses): expand namespace function tools by @525300887039 in #2079
- feat: support OpenAI-compatible /v1/moderations by @Silentely in #2082
- fix: data storage page crash by @looplj in #2085
- feat(project-users): add invitation registration by @brynne8 in #2055
- fix(frontend): keep detail page header visible when scrolling by @KremeCN in #2087
- fix(anthropic): preserve multiple Responses reasoning signatures by @RinStel in #2054
- fix(orchestrator): retry transport-level errors via channel failover by @Yuna-Celisse in #2090
New Contributors
- @mvanhorn made their first contribution in #2000
- @hihanley made their first contribution in #1998
- @ousing9 made their first contribution in #1993
- @u33e made their first contribution in #2010
- @CberYellowstone made their first contribution in #2042
- @w568w made their first contribution in #2041
- @MedAIerHHL made their first contribution in #2063
- @amghazanfari made their first contribution in #2072
- @sleepwalkera made their first contribution in #2073
- @525300887039 made their first contribution in #2079
- @RinStel made their first contribution in #2054
- @Yuna-Celisse made their first contribution in #2090
Full Changelog: v1.0.0-beta5...v1.0.0-beta6
v1.0.0-beta5
What's Changed
- opt(transformer): build image data URLs via xurl.BuildDataURL by @suixinio in #1882
- chore: sync model developers data by @github-actions[bot] in #1887
- fix: passThrough column not toggleable in column visibility settings by @Silentely in #1886
- fix:跨渠道重试成功之后将原失败渠道记入渠道面板的监控统计 by @xuyufengfei in #1891
- fix(openai): avoid stream aggregation nil panics by @luoxue03 in #1890
- feat(openapi): support querying api keys and templates by name by @suixinio in #1838
- fix: tracing document config by @looplj in #1897
- opt: admin page permission guard, close #1894 by @looplj in #1898
- fix(frontend): avoid logout on upstream auth errors by @lihaojiee in #1902
- fix(responses): preserve encrypted reasoning item boundaries by @ttttmr in #1901
- fix: test request detail nav back, close #1912 by @looplj in #1915
- feat: add scripts to cleanup sqlite, close #1905 by @looplj in #1916
- opt: auto set default test model, close #1895 by @looplj in #1917
- fix(ollama): extract token usage from final stream chunk for correct status by @myml in #1923
- feat(orchestrator): enforce strict per-channel max concurrency by @suixinio in #1920
- fix: scope-level aware RouteGuard and silent 403 handling by @brynne8 in #1909
- fix(playground): only show thinking in last assistant message by @myml in #1461
- fix: clear the previous state, close #1918 by @looplj in #1925
- chore: sync model developers data by @github-actions[bot] in #1934
- feat: add OpenCode Go provider quota tracking by @zhaozhaozz in #1926
- fix(channels): fix test API keys dialog footer buttons being hidden by @Silentely in #1942
- fix(channels): Update the Base URL of the Ollama service provider to the official address. by @Silentely in #1941
- fix: improve error reporting for /v1/models endpoint by @trim21 in #1931
- opt: reduce S3 Class A operations with native ObjectStore by @suixinio in #1939
- fix(channel): add missing optional() to modelMappings zod schema by @junjiangao in #1946
- fix: retry stream errors before first content by @lihaojiee in #1944
- feat: add round-robin load balancer strategy by @yuanhhs in #1953
- feat: add personal API key type and per-user usage statistics by @brynne8 in #1933
- fix(httpclient): cap upstream error response body at 1 MB to prevent OOM by @djdembeck in #1955
- feat: ip access control by @looplj in #1956
- chore: remove the test source filter for request, close #1913 by @looplj in #1957
- feat: show reasoning token usage by @looplj in #1960
- feat: add codex headers by @looplj in #1963
- chore: sync model developers data by @github-actions[bot] in #1964
- ci: publish Helm chart to GHCR --issue=#1965 by @zouxingyuks in #1966
- feat: openai inbound accept thinking to compatible with ds/zhipu by @looplj in #1970
- feat: add Cline channel support by @KremeCN in #1972
- fix(aggregator): skip non-standard SSE events with empty choices by @Black0416 in #1959
- fix(trace): include instruction content in system_instruction span key by @ChancenJ in #1974
- feat: add Cline provider quota support by @KremeCN in #1975
- fix(frontend): constrain API keys table scrolling by @KremeCN in #1977
- feat(codex): update models and default version by @zouxingyuks in #1985
- feat(frontend): add GPT-5.6 models and pricing by @shay-wong in #1982
- feat(ollama): add tool call support for request and response transfor… by @myml in #1967
- feat(transformer): 渠道级 reasonning effort mapping by @sycghj in #1910
- chore: sync model developers data by @github-actions[bot] in #1988
- feat: model condition with requeset header by @looplj in #1986
- ci: add nightly docker publish workflow by @trim21 in #1981
- feat(channels): add manual disable/enable API key in channel edit panel by @ChancenJ in #1990
New Contributors
- @junjiangao made their first contribution in #1946
- @yuanhhs made their first contribution in #1953
- @zouxingyuks made their first contribution in #1966
- @Black0416 made their first contribution in #1959
- @ChancenJ made their first contribution in #1974
- @shay-wong made their first contribution in #1982
- @sycghj made their first contribution in #1910
Full Changelog: v1.0.0-beta4...v1.0.0-beta5
v1.0.0-beta4
What's Changed
- fix: preserve filter state when navigating to request detail page by @MoshiCoCo in #1819
- opt: add empty tolerance for claude code read, close #1681 by @looplj in #1820
- 修复:复制渠道时同步复制模型价格 by @luoxue03 in #1811
- opt: gc & retry by @looplj in #1823
- fix(i18n): add missing translation keys for 3 anthropic channel variants by @MoshiCoCo in #1824
- chore: upgrade claude code oauth by @looplj in #1827
- fix(frontend): 允许 Codex 渠道切换协议 by @llc1123 in #1808
- feat:在渠道配置中新增“重试错误信息”规则 by @xuyufengfei in #1828
- chore: sync model developers data by @github-actions[bot] in #1830
- feat: update default models for bailian, xiaomi, volcengine, zhipu channels by @MoshiCoCo in #1829
- feat: codex image gen/edit, close #1816 by @looplj in #1831
- chore: channel action dialog minor ui by @looplj in #1832
- docs: correct dev Go version floor to 1.26 to match go.mod by @Dashsoap in #1833
- opt: openai response schema by @looplj in #1834
- feat: toggle IP ban icon by @nb5p in #1848
- feat: add GLM-5.2 to zai channel default models by @qinkangdeid in #1842
- fix(oidc): avoid privacy-deny error on every sign-in by @qinkangdeid in #1841
- fix: model circuit breakder, close #1821 by @looplj in #1854
- fix(model_fetcher): avoid duplicate /v1 for anthropic-like endpoints by @KremeCN in #1852
- feat: add array_remove override op by @cesaryuan in #1851
- feat: reset codex quota right now, close #1849 by @looplj in #1855
- fix(frontend): correct api key creator filter scope by @KremeCN in #1856
- fix: allow third-party Codex channels to edit Base URL by @brynne8 in #1835
- fix: enforce strict local channel RPM admission by @lihaojiee in #1840
- fix: openai video schema, close #1845 by @looplj in #1857
- fix(frontend): hide api key creator column without system user permission by @KremeCN in #1859
- feat: test all api keys, close #1853 by @looplj in #1858
- opt: init channel performances async, close #1861 by @looplj in #1864
- fix(frontend/dashboard): align channel success rate card height with daily overview by @lihaojiee in #1862
- fix: should drop the invalid signature for unknown openai/anthropic, … by @looplj in #1866
- fix: api key token usage scope, close #1865 by @looplj in #1867
- feat: highlight low cache hit rate, close #1837 by @looplj in #1868
- fix: hide prefixed model, close #1732 by @looplj in #1869
- fix: codex image generation by @looplj in #1870
- chore(deps-dev): bump vite from 7.3.2 to 7.3.5 in /frontend by @dependabot[bot] in #1874
- feat: add transformer for cerebras, close #1777 by @looplj in #1876
- fix: image generation bypass, close #1802 by @looplj in #1877
- feat: record request url & pass-through flag, close #1798 by @looplj in #1878
- opt: add busy timeout for sqlite dsn, close #1768 by @looplj in #1880
New Contributors
- @luoxue03 made their first contribution in #1811
- @Dashsoap made their first contribution in #1833
- @KremeCN made their first contribution in #1852
- @cesaryuan made their first contribution in #1851
- @brynne8 made their first contribution in #1835
- @lihaojiee made their first contribution in #1840
Full Changelog: v1.0.0-beta3...v1.0.0-beta4
v1.0.0-beta3
What's Changed
- chore: 调整图像输入size大小限制 by @sxueck in #1769
- feat: add modalities field to /v1/models API response by @MoshiCoCo in #1772
- feat: add IP blocklist settings by @hen7777777 in #1771
- fix(frontend): guard execution channel query by permission by @MoeMion in #1770
- opt: backup/restore usages logs seprated, close #1712 by @looplj in #1766
- chore: upgrade claude code headers by @looplj in #1774
- fix: allow users to update language preference by @evanhon0110 in #1782
- fix: cache did not refresh sometime by @looplj in #1783
- fix(datastorage): remove unbounded in-memory cache of request/response bodies (OOM) by @suixinio in #1781
- fix(llm): claude code quota check header by @looplj in #1785
- feat(openapi): add apiKeyQuotaUsages query for service-account keys by @suixinio in #1779
- fix(openai): aggregate stream choices by index to avoid nil panic by @SAY-5 in #1775
- chore: upgrade quic by @looplj in #1786
- feat: add OpenAI audio APIs (TTS / STT) with SSE streaming by @EmccK in #1784
- chore: sync model developers data by @github-actions[bot] in #1795
- fix(audio): 修复 TTS 流式 Accept、外部存储与持久化内存占用 by @EmccK in #1792
- feat(channels): adding Anthropic messages API format support to the OpenCodeGo channel (#1751) by @MoshiCoCo in #1791
- feat: support redis multi mode by @wangYX657211334 in #1788
- refactor(neuralwatt): replace current_period_start/end with kwh_reset_date by @djdembeck in #1794
- fix: preserve Responses function call namespace by @DevilSi0722 in #1797
- feat: 添加响应超时重试配置 by @xuyufengfei in #1804
- feat: add evolink provider by @EvoLinkAI in #1773
- feat(quota): add Apertis quota monitoring and refactor openai_responses handling by @djdembeck in #1793
- feat: channel retryable statu codes, close #1803 by @looplj in #1807
- feat: route with media condition, close #1729 by @looplj in #1809
New Contributors
- @MoeMion made their first contribution in #1770
- @evanhon0110 made their first contribution in #1782
- @SAY-5 made their first contribution in #1775
- @EmccK made their first contribution in #1784
- @DevilSi0722 made their first contribution in #1797
- @xuyufengfei made their first contribution in #1804
- @EvoLinkAI made their first contribution in #1773
Full Changelog: v1.0.0-beta2...v1.0.0-beta3
v1.0.0-beta2
What's Changed
- chore: sync model developers data by @github-actions[bot] in #1706
- fix: scroll for the channel rate limit dialog, close #1701 by @looplj in #1708
- feat: render structured request log content, close #1698 by @looplj in #1711
- fix: 修复了多图输入情况下转发失效的问题 by @sxueck in #1714
- feat: add advanced model route conditions, close #1670 by @looplj in #1717
- 修复 Responses 非透传模式下工具原语保真 by @deqiying in #1703
- feat: support non-stream fallback to require-stream channels by @ttttmr in #1661
- fix(llm): accept structured response item arguments by @llc1123 in #1728
- fix(channels): show real i18n label for single-variant types like opencode_go by @qinkangdeid in #1734
- chore: add claude-opus-4-7 to claudecode DefaultModels by @qinkangdeid in #1733
- feat(llm): support responses websocket sessions by @llc1123 in #1730
- Preserve request log filters on detail navigation by @zhaozhaozz in #1723
- chore: 添加了登陆后页面标题自定义配置项 by @sxueck in #1720
- fix: model settings dialog, close #1716 by @looplj in #1718
- Support case-insensitive model filter patterns by @zhaozhaozz in #1725
- chore: add claude-opus-4-8 to claudecode DefaultModels by @qinkangdeid in #1739
- feat: opencode trace, close #1740 by @looplj in #1744
- feat: reactivate api key, close #1735 by @looplj in #1745
- fix: model association page throws Invalid input for channels without endpoints by @djdembeck in #1746
- chore: sync model developers data by @github-actions[bot] in #1754
- fix(anthropic): handle server-side tool blocks without panicking by @xdqi in #1750
- opt: request detail sheet annimation, close #1749 by @looplj in #1757
- fix: should set default model type if type not present, close #1752 by @looplj in #1760
- feat: support disabling db auto migration by @wangYX657211334 in #1727
- fix(frontend): avoid leaking "{{resource}}" placeholder in NOT_FOUND errors by @qinkangdeid in #1762
- fix: auto reasoning effort for qwen max, close #1751 by @looplj in #1765
New Contributors
- @sxueck made their first contribution in #1714
- @xdqi made their first contribution in #1750
- @wangYX657211334 made their first contribution in #1727
Full Changelog: v1.0.0-beta1...v1.0.0-beta2
v1.0.0-beta1
What's Changed
- feat: 请求日志记录新增'推理强度'字段 by @deqiying in #1506
- feat: per-channel concurrency queue + admission control by @suixinio in #1503
- feat: auto reasoning effort with suffix by @looplj in #1515
- feat: add optional read-write separation for database by @lazhenyi in #1516
- feat(quota): add wafer, synthetic, and neuralwatt quota checkers by @djdembeck in #1509
- fix(dashboard): align token stats by API key/channel/model with totals by @raikyou in #1524
- feat: add Anthropic endpoints for Volcengine, AiHubMix, and Xiaomi MiMo by @banlanzs in #1521
- display token usage in channel cards via tokenStatsByChannel API by @banlanzs in #1528
- feat(quota): add provider quota enforcement with per-limit status tracking by @djdembeck in #1518
- feat: customized channel endpoints by @looplj in #1529
- fix(pipeline): prevent channels from getting stuck in processing status by @djdembeck in #1530
- chore: reformat llm package by @looplj in #1531
- fix(models): clicking Archive on a disabled model had no effect by @djdembeck in #1535
- fix(ui): show used/total in NanoGPT quota display instead of used/remaining by @djdembeck in #1543
- fix(models): resolve vision capability from modalities when explicit field is absent by @djdembeck in #1542
- opt: disable spell check for API key textarea by @BLumia in #1544
- opt: custom endpoint api format by @looplj in #1545
- feat: align endpoint i18n and prompt protection preview by @looplj in #1546
- feat(oidc): Initial OpenID Connect Support by @LazuliKao in #1091
- scheduler: centralized cron job management by @looplj in #1550
- chore: update issue template by @looplj in #1551
- fix(llm): missing anthropic thinking disabled transform by @looplj in #1552
- feat: openai/deepseek completion api, close #1458 by @looplj in #1554
- chore: change prompt content column, close #1553 by @looplj in #1580
- fix: max model association priority, close #1507 by @looplj in #1581
- opt: responses stream failed handle & request executions index, close #1473 by @looplj in #1585
- opt: openai outbound reasoning field config, close #1584 by @looplj in #1586
- chore: sync model developers data by @github-actions[bot] in #1588
- feat: global pass-through setting by @raikyou in #1591
- feat: add lowercaseModelName channel setting for cross-channel load b… by @nb5p in #1589
- feat: expose inbound request headers to override templates by @ttttmr in #1520
- feat(apikeys): add API key profile templates by @djdembeck in #1590
- feat: prefer outbound format equals to inbound format by @looplj in #1592
- 修改前端,"测试场"新增测试模型网关模型 by @zhai23 in #1597
- fix(gc): drop nil bind args so VACUUM actually runs on Postgres by @suixinio in #1602
- chore: add gpt-5.5 for codex plans by @qinkangdeid in #1605
- refactor: remove the signature prefix marker to improve pass through by @looplj in #1593
- Support image parts in Ollama chat transformer by @zhzy0077 in #1610
- feat: add Qiniu provider support by @JackChiang233 in #1612
- fix(channels): import Qiniu icon in config_channels by @suixinio in #1613
- feat(openapi): add updateAPIKeyProfiles and loadApiKeyProfileTemplate by @suixinio in #1617
- chore: sync model developers data by @github-actions[bot] in #1627
- fix: detect synthetic weekly quota exhausted state by @djdembeck in #1619
- feat: auto enable wal for sqlite by @looplj in #1633
- feat: customized channel endpoints with base url by @looplj in #1635
- fix: prevent panic when client canceled for pass-through, close #1634 by @looplj in #1637
- fix: should omit empty name for function call, close #1587 by @looplj in #1639
- fix: fetch models for codex with auth.json, close #1636 by @looplj in #1645
- feat: hide upstream error message by @LRan1028 in #1640
- feat: gc now with options, close #1618 by @looplj in #1647
- feat: backup usage stats by @henryz78 in #1632
- feat(transformer): add cross-provider search citation and annotation support by @ttttmr in #1643
- feat: add volume price mode, close #1582 by @looplj in #1651
- doc: update add channel doc by @looplj in #1653
- chore(llm): change openai default reasoning_field to content by @looplj in #1656
- fix(llm): clear ReasoningEffort when DeepSeek thinking is disabled by @Lucent-Snow in #1663
- fix: request detail preview in dark mode by @looplj in #1666
- feat: add modelBlacklistRegex system setting to filter channel-derive… by @nb5p in #1673
- chore: sync model developers data by @github-actions[bot] in #1675
- fix(llm): close text block before starting thinking block in inbound stream by @hen7777777 in #1677
- feat: opencode go channel, close #1614 by @looplj in #1682
- Add developer-level model association rules by @zhaozhaozz in #1672
- feat: auto decompress request body, close #1680 by @looplj in #1688
- fix(pipeline): expose RawRequest before llm middlewares by @ttttmr in #1687
- feat: introduce Atlas Cloud as sponsor by @looplj in #1693
- feat: add atlascloud provider by @lucaszhu-hue in #1695
- feat: rotate api key, close #1692 by @looplj in #1696
- fix: should not error if can access to api keys, close #1674 by @looplj in #1697
- fix: cache not refresh in some cache by @looplj in #1699
- fix(gc): avoid SELECT * when querying old requests/executions for cle… by @FlyLoongZ in #1700
New Contributors
- @suixinio made their first contribution in #1503
- @BLumia made their first contribution in #1544
- @ttttmr made their first contribution in #1520
- @zhai23 made their first contribution in #1597
- @zhzy0077 made their first contribution in #1610
- @JackChiang233 made their first contribution in #1612
- @LRan1028 made their first contribution in #1640
- @henryz78 made their first contribution in #1632
- @Lucent-Snow made their first contribution in #1663
- @zhaozhaozz made their first contribution in #1672
- @lucaszhu-hue made their first contribution in #1695
- @FlyLoongZ made their first contribution in #1700
Full Changelog: v0.9.38...v1.0.0-beta1