All Claude Sonnet models (claude-sonnet-4-5, claude-sonnet-4-5-thinking,
claude-sonnet-4-6) in Antigravity default mapping now redirect to
claude-opus-4-6-thinking. Includes DB migration script for existing accounts.
Add maximum Claude Code version limit to complement the existing minimum
version check. Refactor the version cache from single-value to unified
bounds struct (min+max) with a single atomic.Value and singleflight group.
- Backend: new constant, struct field, cache refactor, validation (semver
format + cross-validation max >= min), gateway enforcement, audit diff
- Frontend: settings UI input, TypeScript types, zh/en i18n
- Add CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 to all Claude Code
tutorials on /keys page (unix/cmd/powershell/vscode settings.json)
Replace direct row rendering with @tanstack/vue-virtual. The table
now only renders visible rows (~20) via padding <tr> placeholders,
eliminating the rendering bottleneck when displaying 100+ rows with
heavy cell components.
Key changes:
- DataTable.vue: integrate useVirtualizer (always-on), virtual row
template with measureElement for variable row heights, defineExpose
virtualizer/sortedData for external access, overflow-y/flex CSS
- useSwipeSelect.ts: dual-mode support via optional
SwipeSelectVirtualContext — data-driven row index lookup and
selection range when virtualizer is present, original DOM-based
path preserved for callers that don't pass virtualContext
Introduce @tanstack/vue-virtual to DataTable with opt-in virtualScroll
prop. Only AccountsView enables it — other consumers are unaffected.
DOM renders ~20 visible rows instead of 100, eliminating the main
rendering bottleneck when switching to 100 items/page.
- DataTable: add virtualScroll/estimateRowHeight/overscan props,
virtualizer setup, padding-tr placeholders, defineExpose
- useSwipeSelect: dual-mode (DOM vs data-driven) for virtual compat
- AccountUsageCell: module-level Map cache with 5min TTL to avoid
re-fetching usage on scroll-induced mount/unmount cycles
- AccountsView: enable virtualScroll, wire up virtual context
Only shown when all selected accounts are on the antigravity platform.
Writes to extra.allow_overages via existing JSONB merge — no backend change needed.
- Batch state updates in swipe-select: 100 rows drag from 100 Set copies + 100 re-renders to 1 each
- Replace selIds.includes() with Set.has() for checkbox rendering (O(n²) → O(n))
- Add RAF throttle to mousemove handler to cap at 60fps
Move 529 overload cooldown configuration from config file to admin
settings UI. Adds an enable/disable toggle and configurable cooldown
duration (1-120 min) under /admin/settings gateway tab, stored as
JSON in the settings table.
When disabled, 529 errors are logged but accounts are no longer
paused from scheduling. Falls back to config file value when DB
is unreachable or settingService is nil.
Add a platform filter dropdown to the admin subscriptions view, allowing
filtering subscriptions by platform (Anthropic, OpenAI, Gemini, etc.)
through the group association.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show upstream model mapping (requested -> upstream) in UsageTable with arrow notation. Add requested/upstream/mapping source toggle to ModelDistributionChart with lazy loading — only fetches data when user switches tab, with per-source cache invalidation on filter changes. Include upstream_model column in Excel export and i18n for en/zh.
Make setup password requirements consistent with backend rules and show API-provided error messages so install failures are actionable. Trim admin email before validation to avoid false invalid-email rejections from surrounding whitespace.