Commit Graph

72 Commits

Author SHA1 Message Date
Badri Narayanan S
02f8e2e323 Merge main into PR #221 to resolve conflicts
Resolved merge conflicts in public/views/settings.html:
- Fixed HTML entity escaping for quote characters in presetHint text
- Fixed HTML entity escaping for pendingPresetName text
2026-02-01 16:20:55 +05:30
Badri Narayanan S
793b20db59 Merge pull request #210 from IrvanFza/feat/version-display
feat: display version prominently in CLI banner and WebUI navbar
2026-02-01 16:14:40 +05:30
JEEL TILVA
7985524d49 feat: Implement API and UI for toggling Claude CLI between proxy and paid modes 2026-01-30 13:45:16 +05:30
Irvan Fauziansyah
aae4dc69d2 feat: add version to navbar and improve footer styling
- Add version display next to "CLAUDE PROXY SYSTEM" in navbar
- Replace version with GitHub icon link in footer
- Update footer styling with larger text and better visibility
2026-01-29 16:31:33 +07:00
jgor20
43d0818c3f fix(settings): resolve 4 console errors in settings.html
- Fix escaped quotes in presetHint fallback using " instead of \"
- Fix escaped quotes in load preset confirmation modal
- Fix component name mismatch: modelManager() → models()
- Add missing editing state/methods to models component
2026-01-28 22:30:12 +00:00
Badri Narayanan S
dba0c66f6f Merge pull request #188 from quocthai0404/fix/issue-183-console-warnings-ui
fix: Reduce console warnings and errors in web UI (#183)
2026-01-26 14:09:26 +05:30
Haxe18
4a9bb3440f fix(webui): exclude disabled accounts from quota stats and charts
- Update data-store.js to filter out disabled accounts in computeQuotaRows()
- Update data-store.js to filter out disabled accounts in getUnfilteredQuotaData()
- Ensures Global Quota average and Account Distribution only reflect active accounts

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-25 20:00:27 +01:00
Badri Narayanan S
5a85f0cfcc feat: comprehensive rate limit handling overhaul (inspired by opencode-antigravity-auth)
This commit addresses "Max retries exceeded" errors during stress testing where
all accounts would become exhausted simultaneously due to short per-second rate
limits triggering cascading failures.

## Rate Limit Parser (`rate-limit-parser.js`)
- Remove 2s buffer enforcement that caused cascading failures when API returned
  short reset times (200-600ms). Now adds 200ms buffer for sub-500ms resets
- Add `parseRateLimitReason()` for smart backoff based on error type:
  QUOTA_EXHAUSTED, RATE_LIMIT_EXCEEDED, MODEL_CAPACITY_EXHAUSTED, SERVER_ERROR

## Message/Streaming Handlers
- Add per-account+model rate limit state tracking with exponential backoff
- For short rate limits (< 1 second), wait and retry on same account instead
  of switching - prevents thundering herd when all accounts hit per-second limits
- Add throttle wait support for fallback modes (emergency/lastResort)
- Add `calculateSmartBackoff()` with progressive tiers by error type

## HybridStrategy (`hybrid-strategy.js`)
- Refactor `#getCandidates()` to return 4 fallback levels:
  - `normal`: All filters pass (health, tokens, quota)
  - `quota`: Bypass critical quota check
  - `emergency`: Bypass health check when ALL accounts unhealthy
  - `lastResort`: Bypass BOTH health AND token bucket checks
- Add throttle wait times: 500ms for lastResort, 250ms for emergency
- Fix LRU calculation to use seconds (matches opencode-antigravity-auth)

## Health Tracker
- Increase `recoveryPerHour` from 2 to 10 for faster recovery (1 hour vs 5 hours)

## Account Manager
- Add consecutive failure tracking: `getConsecutiveFailures()`,
  `incrementConsecutiveFailures()`, `resetConsecutiveFailures()`
- Add cooldown mechanism separate from rate limits with `CooldownReason`
- Reset consecutive failures on successful request

## Base Strategy
- Add `isAccountCoolingDown()` check in `isAccountUsable()`

## Constants
- Replace fixed `CAPACITY_RETRY_DELAY_MS` with progressive `CAPACITY_BACKOFF_TIERS_MS`
- Add `BACKOFF_BY_ERROR_TYPE` for smart backoff
- Add `QUOTA_EXHAUSTED_BACKOFF_TIERS_MS` for progressive quota backoff
- Add `MIN_BACKOFF_MS` floor to prevent "Available in 0s" loops
- Increase `MAX_CAPACITY_RETRIES` from 3 to 5
- Reduce `RATE_LIMIT_DEDUP_WINDOW_MS` from 5s to 2s

## Frontend
- Remove `capacityRetryDelayMs` config (replaced by progressive tiers)
- Update default `maxCapacityRetries` display from 3 to 5

## Testing
- Add `tests/stress-test.cjs` for concurrent request stress testing

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-24 22:43:53 +05:30
quocthai0404
cd44b2bc9d fix: reduce console warnings and errors in web UI (#183)
- Add UILogger utility for conditional debug logging
- Replace verbose console.log/warn with UILogger.debug in charts.js
- Suppress non-critical cache and preference warnings in data-store.js
- Use debug level for log stream reconnection messages
- Add ?debug=true URL param or localStorage ag_debug=true to enable debug output

Closes #183
2026-01-24 14:43:01 +07:00
董飞祥
9992c4ab27 feat: Add manual OAuth authorization mode for WebUI (#131)
* feat: add manual OAuth flow support in WebUI

* fix: reset add account modal state on close

* feat: display custom API key in startup banner

* fix: move translations to separate files and optimize import API

* fix: remove orphaned model-manager.js and cleanup callback server on manual auth

---------

Co-authored-by: Badri Narayanan S <59133612+badrisnarayanan@users.noreply.github.com>
2026-01-23 18:53:29 +05:30
Badri Narayanan S
1f43c32260 fix: load maxAccounts from config on frontend init
The data store's fetchVersion() was never called, so maxAccounts stayed
at the default value of 10. Consolidated into the global store's
fetchVersion() which is called on init.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-21 21:06:39 +05:30
jgor20
e51e3ff56a feat(config): add configurable max accounts limit (#156)
Adds `maxAccounts` configuration parameter to control the maximum number of Google accounts.

**Changes:**
- New config field `maxAccounts` (default: 10, range: 1-100)
- Settings page: slider control for adjusting limit
- Accounts page: counter badge (e.g., "8/10") with visual feedback
- Add button disabled when limit reached
- Server-side validation on account creation

**Breaking Changes:** None
2026-01-21 04:34:57 +08:00
Badri Narayanan S
c6a93ec66d fix: fetch version from API on init instead of using hardcoded value
The version was stuck at "1.0.0" because fetchVersion() was only called
when initialLoad was true, but loadFromCache() set initialLoad to false
before fetchData() ran. Now version is fetched unconditionally in the
global store's init().

Fixes #144

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-20 21:42:45 +05:30
Badri Narayanan S
5ae19a5b72 feat: add configurable account selection strategies
Refactor account selection into a strategy pattern with three options:
- Sticky: cache-optimized, stays on same account until rate-limited
- Round-robin: load-balanced, rotates every request
- Hybrid (default): smart distribution using health scores, token buckets, and LRU

The hybrid strategy uses multiple signals for optimal account selection:
health tracking for reliability, client-side token buckets for rate limiting,
and LRU freshness to prefer rested accounts.

Includes WebUI settings for strategy selection and unit tests.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-18 03:48:43 +05:30
Badri Narayanan S
973234372b chore: remove unused code and suppress noisy Claude Code logs
- Delete unused files: retry.js, app-init.js, model-manager.js
- Remove duplicate error helpers from helpers.js (exist in errors.js)
- Remove unused exports from signature-cache.js, logger.js
- Remove unused frontend code: ErrorHandler methods, validators, canDelete, destroy
- Make internal functions private in thinking-utils.js
- Remove commented-out code from constants.js
- Remove deprecated .glass-panel CSS class
- Add silent handler for Claude Code event logging (/api/event_logging/batch)
- Suppress logging for /v1/messages/count_tokens (501 responses)
- Fix catch-all to use originalUrl (wildcard strips req.path)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-18 01:36:24 +05:30
Wha1eChai
f86a0f07c9 feat: add Portuguese (PT-BR) translation (#132)
- Add pt.js translation file with complete PT-BR translations
- Add Portuguese option to language selector in settings
- Load pt.js translation file in index.html

Based on PR #108

Co-authored-by: Pedro Farias <feliperodriguesf62@gmail.com>
Co-authored-by: Wha1eChai <whaleora@gmail.com>
2026-01-16 00:18:37 +08:00
Irvan Fauziansyah
e2d03f9b25 feat: add i18n framework with Indonesian translation support (#124)
* feat: add i18n support with separate translation files

- Extract translations from store.js to separate files for easier management
- Add translation files for English (en.js), Indonesian (id.js), Turkish (tr.js), and Chinese (zh.js)
- Load translations via window.translations object before Alpine store initialization
- Add Bahasa Indonesia option to language selector

* feat: translate remaining hardcoded UI strings

- Update index.html to use t() for Menu and GitHub labels
- Update views to translate Tier, Quota, Live, tier badges, and close button
- Update components to use translated error messages and confirmation dialogs
- Update utils to use translated validation and error messages
- Update app-init.js to use translated OAuth success/error messages
2026-01-15 23:33:38 +08:00
Yasin Köse
cc64b93f32 Merge pull request #107 from YasinKose/main
Feat(ui): add Turkish language support and UI enhancements

Introduces Turkish language support and several UI/UX improvements to the web management interface.
2026-01-14 16:08:50 +08:00
simon-ami
f201df4718 fix: resolve save preset modal scope issue
- Remove nested x-data from save preset modal to fix scope access
- Add newPresetName to parent component state
- Ensure savingPreset state is correctly accessed from the button
- Clear input field on modal open and after successful save
2026-01-13 16:28:34 +01:00
Badri Narayanan S
632536e2d7 fix: use configured cooldown as cap for rate limit wait times
- Cooldown now caps API-provided reset times instead of being a fallback
- Fixed misleading UI descriptions for cooldown settings
- Removed unused cooldownDurationMs from settings object
- Updated default fallback values in frontend to 10s

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-13 18:28:52 +05:30
simon-ami
e24dff279c feat(webui): add configuration presets for Claude CLI
- Add backend storage logic in `src/utils/claude-config.js` to save/load/delete presets
- Add API endpoints (`GET`, `POST`, `DELETE`) for presets in `src/webui/index.js`
- Update `public/views/settings.html` with new Presets UI card and modals
- Update `public/js/components/claude-config.js` with auto-load logic and unsaved changes protection
- Add translations (EN/ZH) for new UI elements in `public/js/store.js`
- Add integration tests in `tests/frontend/test-frontend-settings.cjs`
- Update compiled CSS

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-12 11:59:32 +01:00
Badri Narayanan S
08b332b694 Merge pull request #101 from jgor20/overall-enhancements-to-web-ui
feat(webui): Comprehensive UI enhancements, responsive design, and routing improvements
2026-01-12 12:12:57 +05:30
jgor20
29acb34ee3 refactor(ui): consolidate filter control button styles and remove overflow from dropdowns 2026-01-11 17:19:20 +00:00
simon-ami
097accd64f Merge branch 'pr-1' 2026-01-11 16:45:23 +01:00
simon-ami
f3b494ebe8 Add confirmation dialog for restoring default config
- Add Restore Default confirmation modal to settings.html
- Add translation strings to store.js
- Update claude-config.js to trigger modal instead of immediate restore

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-11 16:43:25 +01:00
jgor20
dde2910a1d perf(ui): optimize dashboard chart updates and rendering
Add debouncing to chart updates to prevent rapid flickering, implement checks to avoid redundant history processing and double renders, and disable quota chart animations to fix visual glitches.
2026-01-11 15:34:51 +00:00
Simon Benedict
e041afae6e Merge branch 'badrisnarayanan:main' into main 2026-01-11 16:15:22 +01:00
jgor20
a76c364921 refactor(ui): enhance chart destruction and instance management
Improve robustness of chart updates in dashboard components by adding
force destroy checks across canvas properties, component state, and
Chart.js registry to prevent memory leaks and instance conflicts.
Save new chart instances to both canvas and component for better tracking.
2026-01-11 15:12:41 +00:00
jgor20
fc35b71c2b feat(ui): add filter control styles for time range dropdown
Introduce new CSS classes for filter controls and apply them to the time range dropdown in the dashboard view, improving consistency and hover effects.
2026-01-11 15:06:20 +00:00
jgor20
5993456620 refactor(ui): simplify quota info handling in data store
Remove conditional check for empty quotaInfo and always include the row,
treating missing quota info as 0% or unknown for chart display consistency.
2026-01-11 15:01:10 +00:00
jgor20
85381f60a0 fix(ui): add TTL check for cache expiration
Add a 24-hour time-to-live check to the data cache restoration logic to prevent using stale cached data. This ensures data freshness by expiring and removing outdated cache entries before restoration. Also corrected a minor typo in the validity check comment.
2026-01-11 15:01:00 +00:00
jgor20
aa1a72dc62 refactor(ui): make sidebar width conditional on open state
Update class bindings in sidebar to apply width only when sidebar is open,
improving responsive behavior and preventing layout issues.
2026-01-11 14:58:37 +00:00
jgor20
ba24568bff refactor(components): structure model priority tiers in array
Extract hardcoded priority logic into a DEAD_THRESHOLD constant and MODEL_TIERS array for better maintainability and readability. This refactoring improves code organization without altering functionality.
2026-01-11 14:58:09 +00:00
jgor20
10cbe2125a perf(ui): debounce window resize event for sidebar responsiveness
Debounce the window resize event listener with a 150ms timeout to prevent excessive executions, improving performance during window resizing.
2026-01-11 14:51:07 +00:00
jgor20
dd7bfe724e refactor(ui): update sidebar collapsed selector for better specificity 2026-01-11 14:50:47 +00:00
jgor20
15e812c1fb fix(ui): add null check for remainingFraction in dashboard stats 2026-01-11 14:47:25 +00:00
jgor20
eb4cbc0ce5 refactor(components): enhance model identification precision
Switch from substring includes to regex word boundary tests for model names like opus, sonnet, and gemini variants, improving accuracy in the account manager's prioritization logic.
2026-01-11 14:46:41 +00:00
jgor20
de283a9ac8 merge: sync with upstream/main and resolve conflicts 2026-01-11 14:32:56 +00:00
jgor20
c17daf3948 feat(ui): enhance dashboard responsiveness for large screens
Improve layout and styling of dashboard filters and charts to better adapt to larger viewports, including updated flex directions, button sizes, and hover effects for lg breakpoints.
2026-01-11 14:21:26 +00:00
Badri Narayanan S
1142f3e452 Merge pull request #94 from jgor20/feat/webui-refresh-improvements
feat(webui): Improve connection health checks and monitoring
2026-01-11 19:46:29 +05:30
jgor20
f53195bd34 feat(ui): enhance header subtitles with badge styling
Refactor subtitle elements in accounts, dashboard, and models views to use styled badge containers with rounded backgrounds, borders, and improved typography for better visual consistency.
2026-01-11 13:56:11 +00:00
jgor20
0a0e3e2851 feat(ui): add data caching and hash-based routing
- Implement localStorage-based caching in data-store to restore accounts, models, and usage data on load, improving initial render performance
- Add hash-based routing in global store to sync active tab with URL, enabling browser back/forward navigation and direct linking to tabs
2026-01-11 13:47:15 +00:00
jgor20
11e256ac70 feat(ui): add sortable columns to models table
Add sorting functionality to the models table with clickable headers for columns like Stat, Model Identity, Global Quota, Next Reset, and Account Distribution. Includes dynamic sort icons and logic to handle ascending/descending order with appropriate defaults.
2026-01-11 13:40:31 +00:00
jgor20
58f32ebef9 fix(ui): improve subscription labels in dashboard
Change abbreviated subscription plan names (U, P, F) to full words (Ultra, Pro, Free) for better readability.
2026-01-11 13:14:51 +00:00
jgor20
52c3fa5669 refactor(ui): improve model quota selection logic
Introduce a priority-based system for selecting the main model quota, considering model tiers (e.g., opus, sonnet, pro) and availability status. This enhances accuracy by treating models with less than 1% remaining quota as "dead" for prioritization, ensuring users see the most relevant and active model in the dashboard.
2026-01-11 13:12:14 +00:00
jgor20
ab77db5a90 fix(ui): enhance dashboard quota chart responsiveness and layout 2026-01-11 12:43:45 +00:00
jgor20
aafa636ee5 fix(ui): improve dashboard responsiveness and layout
Adjust grid gaps, padding, and font sizes for better mobile and desktop display; add responsive classes and truncate text for improved usability.
2026-01-11 12:02:31 +00:00
copilot-swe-agent[bot]
8eba68e47a Add Restore Default Claude CLI button to settings page
Co-authored-by: simon-ami <102378134+simon-ami@users.noreply.github.com>
2026-01-11 11:54:13 +00:00
jgor20
f9dd71f411 feat(ui): add responsive sidebar with mobile toggle and overlay
Implement responsive sidebar functionality that auto-opens on desktop (≥1024px) and auto-closes on mobile, with a toggle button for mobile users. Added overlay for mobile sidebar dismissal and CSS for collapsed state on desktop. Minor adjustments to dashboard chart borders and grid layouts.
2026-01-11 11:26:37 +00:00
jgor20
ed4231310b Refactor dashboard layout, quota logic, and connection status pill 2026-01-11 10:53:58 +00:00