- 25 Jul, 2026 10 commits
-
-
* feat: support tencent tokenhub api key via openai-compatible protocol * fix: use tokenhub base url for tencent api key channels * test: cover tencent key-format dispatch and add TokenHub key prompt locales
feitianbubu committed -
feitianbubu committed
-
The line-number layer spans the full editor, so giving it an opaque background and raised z-index covered the highlighted content. Reverts the gutter background added in 88868002f; the horizontal-scroll gutter overlap it targeted returns as a known cosmetic issue.
CaIon committed -
CaIon committed
-
CaIon committed
-
* perf(json-editor): improve JSON editing experience - integrate Yace for syntax highlighting, history, indentation, auto-closing, and smart line breaks. - add copy support, cursor location feedback, and synchronized content and line-number scrolling. - extract JSON editor utilities and cover key interactions with unit tests. * perf(system-settings): improve JSON configuration editing - replace raw JSON textareas with the shared editor for highlighting, validation, copy, and formatting. - preserve field-specific examples and make placeholders visible through the transparent editor layer. - remove duplicate formatting controls while keeping existing form validation and save behavior. * perf(json-editor): standardize JSON inputs across admin settings - replace pure JSON textareas with the shared editor across system settings and channel workflows. - preserve form focus, validation, placeholders, and visual or JSON editing modes. - add happy-dom component coverage for form bindings, controlled updates, and formatting. * fix(json-code-editor): address accessibility review findings - Drop the unconditional aria-label that overrode every field's label-derived accessible name; add an optional ariaLabel prop and set it at call sites without an associated label - Associate standalone Labels via htmlFor/id in channel-affinity views - Hide the highlight mirror and line-number layers from the accessibility tree (aria-hidden) - Give the line-number gutter an opaque background so horizontally scrolled code no longer slides under it - Degrade to no scroll sync instead of destroying the editor when the line-number layer is not found
QuentinHsu committed -
CaIon committed
-
* fix(channel): debounce inline priority updates * fix(channel): commit spinner edits only on Enter or focus leave Blurring the inline edit input to the +/- buttons flushed the pending priority update immediately, bypassing the container focus-containment check and defeating the debounce. Commit now happens via the container blur handler or explicitly on Enter. Add unit tests for the priority update scheduler. * fix(channel): preserve row identity when priority updates reorder channels
RedwindA committed -
CaIon committed
-
* fix: prevent model create from wiping existing pricing for same name * fix(models): keep create from wiping pricing for any existing name Prefilling from the drawer's open-time model name only covered the missing-models entry point. Submit deletes the pricing entries for the name in the form, which is editable and starts empty from the toolbar "Create model" button, so both a hand-typed existing name and a renamed prefill still dropped the configured pricing. Track the name whose pricing was actually read into the form and scope the delete-then-readd to it, or to a name the user explicitly priced. Editing still clears pricing by emptying the fields, a prefilled create does too, and a name the form never loaded is left alone -- which also stops an edit that renames onto an existing name from destroying that name's pricing. Read the prefill through one shared readPricingConfig instead of duplicating the seven-map parse in both branches, and open the advanced section for ratios that are configured as 0 rather than only truthy ones.
feitianbubu committed
-
- 24 Jul, 2026 3 commits
-
-
When an upstream error response parses as valid JSON but yields no usable error message (e.g. an aggregator gateway returning {"error":{"message":""}}), RelayErrorHandler previously produced a bare "bad response status code N" error with no trace of the original body, making the failure undiagnosable. Log the body preview in that case, mirroring the existing behavior for unparseable bodies.bigsong committed -
Seefs committed
-
Seefs committed
-
- 21 Jul, 2026 1 commit
-
-
When the dashboard token refresh endpoint returned 429 (shared critical rate limit) the frontend classified it as out_of_sync, cleared local auth state, and redirected to /sign-in. The rate limit itself is working as intended; the bug is that a temporary rejection was treated as a terminal auth failure. - Treat 429 refresh responses as transient errors on the frontend, keeping the session retryable instead of clearing it. Only explicit 401 or confirmed session mismatch/race exhaustion clears auth state. - Return Retry-After on all rate-limited responses (remaining TTL on Redis, window duration on the in-memory limiter) so clients can back off. - Log the underlying error with request context when auth session errors map to 500 AUTH_INTERNAL_ERROR, and replace fmt.Println with request-scoped logging in the Redis rate limiter error paths. Fixes #6361
CaIon committed
-
- 20 Jul, 2026 9 commits
-
-
* fix: prevent duplicate suno task refunds via cas status update * fix: reconcile failed task refunds --------- Co-authored-by: CaIon <i@caion.me>
feitianbubu committed -
* fix(playground): resolve auto group model listing - merge and deduplicate available models in configured auto group order. - reuse special usable group rules and add model filtering regression coverage. * refactor: extract GetGroupsEnabledModels to dedupe group model expansion
QuentinHsu committed -
* fix(channel): improve proxy client compatibility and cache lifecycle * test(controller): use non-fatal assertions for channel tests
yyhhyyyyyy committed -
RedwindA committed
-
- apply a minimum width hint to content-sized columns to prevent wasted space. - preserve remaining table width allocation across regular data columns.
QuentinHsu committed -
* fix(playground): prevent model group option stretching - keep group options at a fixed 2rem height and align them to the top. - organize layout code in a dedicated module and cover layout and scrolling behavior. * docs(web): strengthen frontend testing requirements - require regression coverage for behavior changes, bug fixes, and UI states. - define module-scoped test organization, stable assertions, mocks, and verification rules.
QuentinHsu committed -
feitianbubu committed
-
CaIon committed
-
* refactor(auth): replace dashboard sessions with stateless tokens * feat(auth): harden session issuance and distributed enforcement * fix(proxy): preserve trusted proxy compatibility defaults * refactor: address dashboard auth review feedback * refactor: remove classic frontend and flatten web app
Calcium-Ion committed
-
- 18 Jul, 2026 4 commits
-
-
CaIon committed
-
* feat: support upstream model fetch for advanced custom channels * fix: add advanced custom routes as separate groups * fix: select advanced custom route entry before adding --------- Co-authored-by: CaIon <i@caion.me>
Seefs committed -
* fix(i18n): clarify Go regex and field passthrough copy * feat(channel): support Codex upstream model discovery * Revert "fix(i18n): clarify Go regex and field passthrough copy" This reverts commit d63d7975db3e34ff44e189112d3c15ad8c24ad88.
Seefs committed -
When a function call was already registered under its output_index key via response.output_item.added, the synthetic events built from the terminal response.completed output carry no output_index and resolve to a different item-based key. ensureToolForEvent then created a second tool index and resent the full arguments, so Chat Completions clients received the same tool call twice. Reuse the tool registered under itemIDToKey/callIDToKey before creating a new one, and alias the new key to the existing tool. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Niku committed
-
- 17 Jul, 2026 3 commits
-
-
CaIon committed
-
DataTableRow's React.memo did not depend on columnVisibility. TanStack row references stay stable when visible columns change, so the table body did not refresh after View -> Toggle columns until another action rebuilt the column definitions. Capture a visible column id signature (visibleColumnIds) outside the memo and compare it, matching the existing isSelected snapshot pattern. All tables that use DataTableRow pick up the fix.
DawnMoon1542 committed -
* fix: add server-side sorting to user list, prevent client-side sort on paged data The user management table applied client-side sorting to the current page slice while pagination was handled server-side, causing ID-asc views to show pages out of order (e.g. 23-42, 3-22, 1-2). Backend: add sort_by/sort_order query params to GetAllUsers and SearchUsers with a column whitelist for safe ORDER BY generation. Frontend: pass sorting state to the API and reset to page 1 on sort change. Generic useDataTable hook now disables client-side sorted row model and sort UI for tables with manual pagination but no server-side sort handler. * fix: add id tie-breaker to non-unique sort columns, remove side effect from state updater Append secondary ORDER BY id DESC when sorting by non-unique columns (quota, created_at, etc.) to prevent row duplication/skipping across OFFSET pages. Move onPaginationChange out of setSorting updater to avoid side effects inside a pure function (React Strict Mode double-invocation safety).
DawnMoon1542 committed
-
- 14 Jul, 2026 3 commits
-
-
* fix: infer MiniMax vendor for MiniMax models * Delete model/pricing_default_test.go --------- Co-authored-by: duanxufu <duanxufu@rededa.com>
fuxdev committed -
- widen the quota column and add consistent spacing between remaining and total values. - extract quota rendering into a dedicated component and truncate oversized text within the cell. - preserve full-value tooltips, progress indicators, and the zero-quota state.
QuentinHsu committed -
* fix: purge authentication data on hard user deletion * fix: fail closed when 2FA status lookup fails * fix: reject stale Telegram login callbacks * fix(twofa): prevent concurrent backup code and lockout bypasses * fix(auth): harden user deletion and Telegram verification
Seefs committed
-
- 11 Jul, 2026 7 commits
-
-
Merge pull request #6126 from feitianbubu/fix/unset-tab-channel-models-only
同語 committed -
feitianbubu committed
-
Persist committed editor drafts to the source model during batch copy so targets never carry pricing the source would lose, surface loading/error states for the enabled-models query, and compare saved* props in the visual editor memo so rows leave the unset list reliably after save.
CaIon committed -
* feat: add unset price models tab to model pricing settings * feat: add unset price models tab translations
feitianbubu committed -
CaIon committed
-
CaIon committed
-
Parse OpenAI's native cache_write_tokens (chat prompt_tokens_details / responses input_tokens_details), bill it at the cache-creation ratio, and clamp the uncached prompt remainder at zero since cached + cache-write can exceed prompt_tokens. Propagate the field through chat/responses/claude format conversions and tiered expression billing (cc variable).
CaIon committed
-