- Add ProjectSelectionHandler to parse and handle CLIProxy project prompts
- Integrate project selection into AuthHandler with UI-first support
- Add project selection API endpoints and WebSocket events
- Implement ProjectSelectionDialog and useProjectSelection hook in UI
- Fixes macOS OAuth timeout by handling interactive project selection via UI
When running OAuth in headless mode (SSH/remote), users now see clear
instructions about port forwarding requirement before the OAuth URL.
Previously, CLIProxyAPI's instructions were captured but not displayed.
- Show [!] PORT FORWARDING REQUIRED warning
- Explain that localhost:8085 callback must be reachable
- Show ssh -L command with <USER>@<HOST> placeholders
- Emphasize running on LOCAL machine, not remote
Change stdio from 'ignore' to 'inherit' for stdin in auth subprocess,
allowing CLIProxy to receive user input for email/alias prompts during
Qwen and other OAuth flows.
Fixes#91
- Add GitHub link button next to connection status for quick issue reporting
- Add 24H button on analytics page with hourly granularity chart
- Add /api/usage/hourly endpoint with date range filtering
- Add hourly data aggregation and caching (disk + memory)
- Fix timezone display: convert UTC hours to local time in chart
- Fix CLIProxy Stats card loading state synchronization
- Bump disk cache version to 3 (includes hourly data)
- Add renameAccount function to account-manager.ts with validation
- Support --nickname <name> to rename current default account
- Support --nickname with --auth --add to set nickname during OAuth
- Add getDefaultAccount import for nickname operations
- Filter --nickname flag from Claude CLI args
- Add `--add` flag to skip confirm prompt when adding accounts
- Add confirm prompt when accounts exist and --add not specified
- Add nickname field to AccountInfo (auto-generated from email prefix)
- Add generateNickname() and validateNickname() utility functions
- Update triggerOAuth() to accept add option
- Update registerAccountFromToken() to pass nickname
- Update help text with --add flag documentation
Add environment and OAuth port diagnostics to help troubleshoot
authentication issues reported by Windows users:
- Add ENVIRONMENT section showing platform, SSH, TTY, browser capability
- Add OAUTH READINESS section with pre-flight port availability checks
- Fix Windows headless false positive (isTTY undefined on npm wrappers)
- Add pre-flight OAuth check before auth attempt to fail fast
New files:
- src/management/environment-diagnostics.ts
- src/management/oauth-port-diagnostics.ts
Case study: Vietnamese Windows users reported "command hangs" because
Windows terminal wrappers don't set isTTY correctly, triggering
headless mode when browser should be available.
- Implement account-manager.ts for managing multiple OAuth accounts per provider
- Add account selector in UI dialog with dropdown for authenticated accounts
- Extend auth-handler.ts to support account registration and multi-account authentication
- Update web-server routes with account management endpoints (GET/POST/DELETE)
- Add account badges and management UI in cliproxy page
- Support account field in CLIProxy variant configuration
- Add Badge component from shadcn/ui for UI styling
- Enable default account selection and account removal functionality
Add iFlow as a new OAuth-based provider for CLIProxy.
Changes:
- Add config/base-iflow.settings.json with iFlow provider configuration
- Add iFlow to CLIProxyProvider type
- Add iFlow OAuth config (authUrl, scopes, authFlag)
- Add iFlow to provider display names, auth prefixes, and type values
- Update config-generator to support iFlow provider
- Update base-qwen.settings.json models (qwen3-coder-plus)
Co-authored-by: kaitranntt <kaitran.ntt@gmail.com>
- skip TTY check on Windows (process.stdin.isTTY returns undefined)
- Windows desktop environments always have browser capability
- also fix help-command version to read from package.json
Closes#42
- Updated OAuth port documentation with correct flow types per provider
- Removed Qwen from port cleanup logic (Device Code Flow has no callback)
- Fixed Qwen error messages to show Device Code Flow troubleshooting tips
Fixes#29
Add 'qwen' as new CLIProxy OAuth provider with --qwen-login flag.
Support qwen3-coder model with base config at config/base-qwen.settings.json.
Register qwen OAuth endpoints and token prefix handling.
Update help documentation across all CLI entry points.
Implements issue #29
CLIProxyAPI updated from single-dash to double-dash CLI flags.
Changed -login to --login, -codex-login to --codex-login,
-antigravity-login to --antigravity-login, -config to --config,
and -no-browser to --no-browser.
Root cause: CLIProxyAPI saves Gemini tokens without prefix
({email}-{projectID}.json), but CCS was only looking for
gemini-* files. Added content-based detection as fallback.
Changes:
- Added PROVIDER_TYPE_VALUES map for JSON type detection
- Added isTokenFileForProvider() for content-based detection
- Updated isAuthenticated() and getAuthStatus() with dual strategy
- Fixed triggerOAuth() success messaging and error hints
- Bumped patch version (3.0.8 -> 3.0.9)
Fixes critical auth bug where checking any JSON file in the auth
directory would incorrectly mark providers as authenticated. Now
validates that token files match provider-specific prefixes (gemini-,
codex-, antigravity-) to prevent OAuth skipping across providers.
Updates help command examples to use placeholder syntax and updates
CHANGELOG to reflect Qwen -> Antigravity provider name change.
- Add unified CLIProxy config supporting all providers concurrently
- Move CLIProxy files to ~/.ccs/cliproxy/ subdirectory
- Use flat auth directory structure for OAuth tokens
- Add provider-specific URL routing via /api/provider/{provider}
- Add base settings templates for gemini and codex
- Fix model registration with proper auth file discovery
Enables users to run `ccs gemini` and `ccs codex` concurrently
without config conflicts.