Commit Graph
1131 Commits
Author SHA1 Message Date
github-actions[bot] f2d9073b0d chore(release): 7.13.1-dev.5 [skip ci] 2026-01-05 21:59:28 +00:00
Kai (Tam Nhu) TranandGitHub 916ed9ed19 Merge pull request #272 from kaitranntt/fix/cliproxyapi-downgrade
fix(cliproxy): cap auto-update to v80 due to v81+ context bugs
2026-01-05 13:58:28 -08:00
kaitranntt 4fd4d6c264 fix(ui): add missing isStable and maxStableVersion to type 2026-01-05 14:54:27 -05:00
kaitranntt 4f69abbe88 fix(ui): clean up ProxyStatusWidget layout spacing
- Separate header row (title + icon buttons) from version row
- Compact update badge: h-4, px-1.5, gap-0.5
- Slightly more margin between rows (mt-1.5)
- Fix badge conditional rendering
2026-01-05 14:31:55 -05:00
github-actions[bot] d743e50489 chore(release): 7.13.1-dev.4 [skip ci] 2026-01-05 19:31:17 +00:00
Kai (Tam Nhu) TranandGitHub 0a1aa414b5 Merge pull request #275 from kaitranntt/kai/feat/antigravity-failover
feat(agy): add preflight quota check with auto-failover
2026-01-05 11:30:21 -08:00
kaitranntt 8072b93b3b refactor(ui): redesign ProxyStatusWidget with two-state UX
- Replace 4-button row with 3 icon buttons (restart, stop, settings)
- Add tooltips to all icon buttons via TooltipProvider
- Move version display to header next to title
- Implement collapsed/expanded two-state design
- Remove manual version input field (use dropdown only)
- Add clickable update/downgrade badge showing target version
- Add "Version Management" section header in expanded view
- Increase control sizes (h-8) for better touch targets
- Settings icon toggles to X when expanded
2026-01-05 13:49:24 -05:00
kaitranntt 8ea1e333bc docs(agy): add quota management and failover documentation
- Add ccs cliproxy doctor command to help text
- Document Antigravity auto-failover in README
2026-01-05 13:31:34 -05:00
kaitranntt 5b58bd35c9 fix(agy): edge case handling for quota failover
- Fix formatQuotaBar crash on percentage > 100 or < 0 (clamp to 0-100)
- Fix shared project accounts excluded from failover (same GCP project = pooled quota)
- Fix division by zero in avgQuota when models array empty
- Fix null account label fallback to 'Unknown Account'
2026-01-05 13:27:54 -05:00
kaitranntt 48d4a96a62 fix(ui): update/downgrade button now installs correct version
The button was incorrectly calling handleRestart (pure restart) instead
of triggering version install. Now correctly installs latestVersion for
updates or maxStableVersion for downgrades.
2026-01-05 13:21:31 -05:00
kaitranntt 6628be58e3 Merge remote-tracking branch 'origin/dev' into kai/feat/antigravity-failover 2026-01-05 13:13:41 -05:00
kaitranntt a69b2e9d10 feat(cliproxy): add version management UI with install/restart controls
Implements comprehensive version management for CLIProxyAPI Plus:

Backend APIs:
- GET /versions: fetch available versions from GitHub releases
- POST /install: install specific version with force flag for unstable
- POST /restart: restart proxy without version change

Frontend:
- 4-button layout: Restart, Update/Downgrade, Stop, Settings gear
- Collapsible version picker with dropdown + manual input
- Confirmation dialog for unstable versions (>6.6.80)
- Progressive disclosure (version picker hidden by default)

Ref: plans/260105-1250-cliproxy-version-management/
2026-01-05 13:12:46 -05:00
kaitranntt 8a56a43989 feat(ui): add stability warning to ProxyStatusWidget
- Show amber warning indicator when installed version is unstable (v81+)
- Version display now shows "(unstable)" suffix with amber styling
- "Downgrade" button replaces "Update" when version is unstable
- Tooltip explains restart will downgrade to stable version
2026-01-05 12:46:35 -05:00
github-actions[bot] 6ff5c79fe1 chore(release): 7.13.1-dev.3 [skip ci] 2026-01-05 17:41:00 +00:00
Kai (Tam Nhu) TranandGitHub 23fea65329 Merge pull request #274 from kaitranntt/fix/websearch-hook-windows-compat
fix(websearch): use 'where' command on Windows for CLI detection
2026-01-05 09:40:05 -08:00
kaitranntt e03d9b7743 fix(websearch): use 'where' command on Windows for CLI detection
Fixes #273

The websearch-transformer hook used hardcoded 'which' command which doesn't
exist on Windows. Now uses process.platform detection to choose 'where' on
Windows and 'which' on Unix systems.
2026-01-05 12:38:01 -05:00
kaitranntt c5621dab51 feat(cliproxy): add dashboard UI parity for version stability
Add version stability warnings to Dashboard API and UI:
- Extend /api/cliproxy/update-check with isStable, maxStableVersion, stabilityMessage
- Health check shows warning status for v81+ installations
- UI header displays version badge with amber warning for unstable

Closes: relates to #269
2026-01-05 12:10:32 -05:00
kaitranntt 212aef81bc fix(cliproxy): add edge case handling for version capping
- Add isAboveMaxStable() helper for version stability checks
- Add null/empty guard in clampToMaxStable() function
- Warn users on unstable v81+ without forcing downgrade
- Add context note showing latest version when it's unstable
- Clamp fallback version on GitHub API failure
2026-01-05 11:50:06 -05:00
github-actions[bot] 96ef62f4ce chore(release): 7.13.1-dev.2 [skip ci] 2026-01-05 16:44:50 +00:00
Kai (Tam Nhu) TranandGitHub 26a7537962 Merge pull request #271 from kaitranntt/feat/promote-haiku-model
feat(agy): promote gemini-claude-sonnet-4-5 as default Haiku model
2026-01-05 08:43:54 -08:00
kaitranntt 869ab3eecd fix(cliproxy): cap auto-update to v80 due to v81+ context bugs
CLIProxyAPIPlus v81+ has context cancellation bugs causing:
- Intermittent 500 errors
- "context canceled" errors during streaming
- Broken token refresh handling

Root cause: v81 commit 7a77b23 changed refreshToken to use
detached context.Background() causing race conditions.

Solution: Add CLIPROXY_MAX_STABLE_VERSION constant (6.6.80-0)
and clamp auto-update to this version until upstream fixes.

Closes #269
2026-01-05 11:41:52 -05:00
kaitranntt c9cdfd9879 feat(agy): promote gemini-claude-sonnet-4-5 as default Haiku model
Closes #270
2026-01-05 11:40:32 -05:00
github-actions[bot] 3a40a0d015 chore(release): 7.13.1-dev.1 [skip ci] 2026-01-05 07:47:13 +00:00
Kai (Tam Nhu) TranandGitHub 6857f8e012 Merge pull request #261 from jellydn/feat/dev-symlink-setup
feat(dev): add symlink setup for testing dev version
2026-01-04 23:46:13 -08:00
semantic-release-botandkaitranntt 981cef8211 feat(dev): add symlink setup for testing dev version
Add dev:symlink and dev:unlink scripts to enable seamless testing of
development changes using the global 'ccs' command without needing to
pack/install globally each time.

- scripts/dev-symlink.sh: New script that safely creates symlinks from
  global ccs to dev dist/ccs.js with backup/restore functionality
- package.json: Added dev:symlink and dev:unlink npm scripts
- CONTRIBUTING.md: Updated development setup documentation with
  symlink workflow option

This improves developer experience by allowing immediate testing of
changes with 'ccs <command>' instead of './dist/ccs.js <command>'.
2026-01-05 02:45:01 -05:00
semantic-release-bot 42e6ed72da chore(release): 7.13.1 [skip ci]
## [7.13.1](https://github.com/kaitranntt/ccs/compare/v7.13.0...v7.13.1) (2026-01-05)

### Bug Fixes

* **cliproxy:** add management_key support for remote proxy auth separation ([0e58d0e](https://github.com/kaitranntt/ccs/commit/0e58d0e8b7fd07004990e99fbdc6a080380c0304))
* **cliproxy:** add missing kiro/ghcp provider mappings in remote-auth-fetcher ([dea0e87](https://github.com/kaitranntt/ccs/commit/dea0e872bd529b2c6f825dc1d9e901d0896b7f41))
* **cliproxy:** extract unique accountId from token filename for Kiro/GHCP ([7bb7ccc](https://github.com/kaitranntt/ccs/commit/7bb7ccc27fe0d9885c4dd7f23de664e2c8b4866f)), closes [#258](https://github.com/kaitranntt/ccs/issues/258)
* **cliproxy:** proactive token refresh to prevent UND_ERR_SOCKET ([a6a653f](https://github.com/kaitranntt/ccs/commit/a6a653f14580888bcdccbf6b83b90d41b6b52136)), closes [#256](https://github.com/kaitranntt/ccs/issues/256)
* **validation:** add Windows reserved name validation and version format edge cases ([ae1847d](https://github.com/kaitranntt/ccs/commit/ae1847d9011c8bff9caff206cf1d7082c61faf40))
2026-01-05 05:09:23 +00:00
Kai (Tam Nhu) TranandGitHub 3c01d04749 Merge pull request #263 from kaitranntt/dev
feat: cliproxy improvements and validation enhancements
2026-01-04 21:08:21 -08:00
github-actions[bot] 001a1890ca chore(release): 7.13.0-dev.4 [skip ci] 2026-01-05 05:02:06 +00:00
kaitranntt ae1847d901 fix(validation): add Windows reserved name validation and version format edge cases
- Fixed version regex to accept -N suffix (e.g., 6.6.80-0)
- Added .trim() to version input for whitespace handling
- Added Windows reserved device names (CON, PRN, AUX, NUL, COM1-9, LPT1-9) validation
- Updated binary-service, variant-service, and validation-service with checks
2026-01-05 00:00:58 -05:00
kaitranntt c85ff74f3c feat(agy): add preflight quota check with auto-switch
Before launching Claude CLI for Antigravity, check if current account
has remaining quota. If exhausted, auto-switch to alternative account
with available quota. Prevents session failures mid-use.
2026-01-03 16:44:25 -05:00
kaitranntt 944f5c0fb0 feat(cliproxy): add doctor subcommand for quota diagnostics
Add `ccs cliproxy doctor` command that:
- Fetches quota for all Antigravity accounts in parallel
- Shows per-account quota status with visual bars
- Detects shared GCP projects (critical failover limitation)
- Warns when accounts share same quota pool

Part of #252 antigravity failover enhancement.
2026-01-03 16:34:49 -05:00
kaitranntt 24847f5804 feat(quota): add fetchAllProviderQuotas and findAvailableAccount
Add functions for multi-account quota fetching and auto-failover support:
- fetchAllProviderQuotas: Fetch quota for all accounts with project grouping
- findAvailableAccount: Find account with remaining quota for auto-switch
- readProjectIdFromAuthFile: Quick project ID read without API call

Detects accounts sharing same GCP project (failover won't help).
Part of #252 antigravity failover enhancement.
2026-01-03 16:31:20 -05:00
github-actions[bot] 3cdf42c2be chore(release): 7.13.0-dev.3 [skip ci] 2026-01-03 17:50:24 +00:00
Kai (Tam Nhu) TranandGitHub e95c2cdf4c Merge pull request #260 from kaitranntt/fix/api-socket-connection
fix(cliproxy): proactive token refresh to prevent UND_ERR_SOCKET
2026-01-03 09:49:25 -08:00
kaitranntt a6a653f145 fix(cliproxy): proactive token refresh to prevent UND_ERR_SOCKET
When Gemini OAuth tokens expire, CLIProxyAPI attempts synchronous
refresh during API calls. If this fails or times out, the socket
connection closes abruptly causing Claude CLI's undici to report
UND_ERR_SOCKET errors.

This fix adds proactive token validation before spawning Claude CLI:
- New gemini-token-refresh.ts module handles Gemini OAuth refresh
- ensureTokenValid() in token-manager.ts checks expiry with 5min lead
- cliproxy-executor.ts calls ensureTokenValid() after auth check

The token is now refreshed BEFORE Claude CLI connects, eliminating
the race condition that caused socket errors.

Fixes #256
2026-01-03 12:47:50 -05:00
github-actions[bot] cd1c4081b2 chore(release): 7.13.0-dev.2 [skip ci] 2026-01-03 16:54:16 +00:00
Kai (Tam Nhu) TranandGitHub 0a09959979 Merge pull request #259 from kaitranntt/fix/kiro-ghcp-account-id
fix(cliproxy): extract unique accountId from token filename for Kiro/GHCP
2026-01-03 08:53:16 -08:00
kaitranntt 7bb7ccc27f fix(cliproxy): extract unique accountId from token filename for Kiro/GHCP
When OAuth accounts have empty email fields (Kiro/GHCP), the accountId
was defaulting to 'default', causing multiple accounts to overwrite
each other. Now extracts unique ID from filename pattern:
- kiro-github-<PROFILE_ID>.json → github-<PROFILE_ID>
- ghcp-amazon-<PROFILE_ID>.json → amazon-<PROFILE_ID>

Fixes #258
2026-01-03 11:51:26 -05:00
github-actions[bot] 9fdf437ace chore(release): 7.13.0-dev.1 [skip ci] 2026-01-03 16:30:21 +00:00
Kai (Tam Nhu) TranandGitHub dbb3ea51cf Merge pull request #257 from kaitranntt/fix/cliproxy-dashboard-providers
fix(cliproxy): add management_key support for remote proxy auth separation
2026-01-03 08:29:22 -08:00
kaitranntt 0e58d0e8b7 fix(cliproxy): add management_key support for remote proxy auth separation
- Add management_key field to CliproxyServerConfig for separate management API auth
- Update proxy-target-resolver with buildManagementHeaders() for /v0/management/* endpoints
- Update stats-fetcher and remote-auth-fetcher to use management headers
- Add management_key input field to dashboard remote proxy settings
- Disable quota UI in remote mode (tokens on remote server)
- Fix preset application to use dynamic API key from config instead of hardcoded placeholder
2026-01-02 22:31:28 -05:00
kaitranntt dea0e872bd fix(cliproxy): add missing kiro/ghcp provider mappings in remote-auth-fetcher
Remote mode was silently skipping kiro and ghcp providers because
PROVIDER_MAP and PROVIDER_DISPLAY_NAMES were incomplete. Added:
- kiro, codewhisperer -> kiro
- ghcp, github-copilot, copilot -> ghcp

Fixes dashboard showing '0 providers' when using Remote Proxy.
2026-01-02 20:42:14 -05:00
semantic-release-bot b549bb433c chore(release): 7.13.0 [skip ci]
## [7.13.0](https://github.com/kaitranntt/ccs/compare/v7.12.2...v7.13.0) (2026-01-03)

### Features

* **minimax:** Add full MiniMax M2.1 support ([bd5c9a0](https://github.com/kaitranntt/ccs/commit/bd5c9a0033e1c4df8aef90db194a768f55e9eab8))
* **minimax:** Add mm profile and migration support ([267599d](https://github.com/kaitranntt/ccs/commit/267599d09d691cb38b7a9f3b201ce1e3761bfe08))

### Bug Fixes

* **accounts:** integrate CLIProxy OAuth accounts into API endpoint ([eebcb7b](https://github.com/kaitranntt/ccs/commit/eebcb7b10351ce9c939ffcc769d354bc463a8ee1))
* **migrate:** Add rename-profile flag handling ([4dace51](https://github.com/kaitranntt/ccs/commit/4dace513eab3ffc28cf67fc1db652f5908403973))
* **minimax:** Add MiniMax placeholder to DEFAULT_PLACEHOLDERS ([46e0995](https://github.com/kaitranntt/ccs/commit/46e09950e8f9f612ce819e6191e63279b2fb3b1f))
* **minimax:** prevent double-resolve race condition and align placeholder ([a59ad0e](https://github.com/kaitranntt/ccs/commit/a59ad0e8c63b4159a35558dcae03ed4a7ca42c6f))
* **minimax:** restore migrate-command, remove broken migration file, fix validator typo ([c48f798](https://github.com/kaitranntt/ccs/commit/c48f798f3e375a25cf012f7b6f9c1853c8f99836))

### Documentation

* **minimax:** Update review_pr.md with fix status ([5d34bd6](https://github.com/kaitranntt/ccs/commit/5d34bd6ec2cd6a1a43fa3c62af820edb29442325))

### Code Refactoring

* **api-key-validator:** extract shared validation logic, remove unnecessary comments ([a00cf36](https://github.com/kaitranntt/ccs/commit/a00cf3691ef551f24dcac149c4473d9fdcf28043))
* **minimax:** Rename to 'mm' for brevity ([2b549f5](https://github.com/kaitranntt/ccs/commit/2b549f5b3dddbd17f40ef987badf4715d89297c7))
2026-01-03 01:09:49 +00:00
Kai (Tam Nhu) TranandGitHub 95d8b28691 Merge pull request #255 from kaitranntt/dev
feat(minimax): add MiniMax M2.1 support and fix accounts display
2026-01-02 17:08:47 -08:00
github-actions[bot] fb0cd59bee chore(release): 7.12.2-dev.2 [skip ci] 2026-01-03 01:07:50 +00:00
Kai (Tam Nhu) TranandGitHub 32fe4553e3 Merge pull request #250 from jellydn/feat/minimax-full-support
feat(minimax): Add full MiniMax M2.1 support
2026-01-02 17:06:48 -08:00
kaitranntt a59ad0e8c6 fix(minimax): prevent double-resolve race condition and align placeholder
- Add resolved flag + safeResolve() wrapper to prevent timeout/response race
- Align apiKeyPlaceholder to YOUR_MINIMAX_API_KEY_HERE across presets
2026-01-02 20:06:17 -05:00
github-actions[bot] b1b7f8ff93 chore(release): 7.12.2-dev.1 [skip ci] 2026-01-03 00:55:54 +00:00
Kai (Tam Nhu) TranandGitHub cd4ef52808 Merge pull request #254 from kaitranntt/fix/proxy-accounts-not-shown
fix(accounts): integrate CLIProxy OAuth accounts into API endpoint
2026-01-02 16:54:56 -08:00
kaitranntt eebcb7b103 fix(accounts): integrate CLIProxy OAuth accounts into API endpoint
- Add CLIProxy accounts to GET /api/accounts (was only showing legacy/unified)
- Use unique ID for key to prevent collision between accounts with same nickname
- Skip accounts with missing identifier
- Route set-default to CLIProxy account manager for provider:id format
- Route delete to CLIProxy account manager for provider:id format
2026-01-02 19:51:50 -05:00