mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 18:16:08 +00:00
* fix(cliproxy): use double-dash flags for cliproxyapi auth (#24) 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. * chore(release): 5.1.1-beta.1 [skip ci] ## [5.1.1-beta.1](https://github.com/kaitranntt/ccs/compare/v5.1.0...v5.1.1-beta.1) (2025-12-01) ### Bug Fixes * **cliproxy:** use double-dash flags for cliproxyapi auth ([#24](https://github.com/kaitranntt/ccs/issues/24)) ([4c81f28](https://github.com/kaitranntt/ccs/commit/4c81f28f0b67ef92cf74d0f5c13a5943ff0a7f00)) * chore(release): 5.1.1-beta.2 [skip ci] ## [5.1.1-beta.2](https://github.com/kaitranntt/ccs/compare/v5.1.1-beta.1...v5.1.1-beta.2) (2025-12-01) ### Bug Fixes * **cliproxy:** use double-dash flags for cliproxyapi auth ([9489884](https://github.com/kaitranntt/ccs/commit/94898848ea4533dcfc142e1b6c9bf939ba655537)) * fix(glmt): handle 401 errors and headers-already-sent exception (#30) - add res.headersSent check before writing error headers - write error as SSE event when headers already sent (streaming mode) - add parseUpstreamError() for user-friendly error messages - return proper HTTP status codes (401, 403, 429, 502, 504) - clear auth error: check ANTHROPIC_AUTH_TOKEN in config Fixes #26 * chore(release): 5.1.1-beta.3 [skip ci] ## [5.1.1-beta.3](https://github.com/kaitranntt/ccs/compare/v5.1.1-beta.2...v5.1.1-beta.3) (2025-12-01) ### Bug Fixes * **glmt:** handle 401 errors and headers-already-sent exception ([#30](https://github.com/kaitranntt/ccs/issues/30)) ([c953382](https://github.com/kaitranntt/ccs/commit/c95338232a37981b95b785b47185ce18d6d94b7a)), closes [#26](https://github.com/kaitranntt/ccs/issues/26) * chore(release): enable success comments and released labels in semantic-release * feat(cliproxy): add qwen code oauth provider support (#31) 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 * chore(release): 5.2.0-beta.1 [skip ci] # [5.2.0-beta.1](https://github.com/kaitranntt/ccs/compare/v5.1.1-beta.3...v5.2.0-beta.1) (2025-12-01) ### Features * **cliproxy:** add qwen code oauth provider support ([#31](https://github.com/kaitranntt/ccs/issues/31)) ([a3f1e52](https://github.com/kaitranntt/ccs/commit/a3f1e52ac68600ba0806d67aacceb6477ffa3543)), closes [#29](https://github.com/kaitranntt/ccs/issues/29) * feat(cliproxy): auto-update cliproxyapi to latest release on startup - add github api integration to fetch latest release version - check for updates on every startup (cached for 1 hour) - auto-download newer versions when available - rename CLIPROXY_VERSION to CLIPROXY_FALLBACK_VERSION (safety net) - add version tracking (.version file) and caching (.version-cache.json) - non-blocking: startup continues if update check fails * chore(release): 5.2.0-beta.2 [skip ci] # [5.2.0-beta.2](https://github.com/kaitranntt/ccs/compare/v5.2.0-beta.1...v5.2.0-beta.2) (2025-12-01) ### Features * **cliproxy:** auto-update cliproxyapi to latest release on startup ([8873ccd](https://github.com/kaitranntt/ccs/commit/8873ccd981679e8acff8965accdc22215c6e4aa2)) * chore(release): 5.3.0-beta.1 [skip ci] # [5.3.0-beta.1](https://github.com/kaitranntt/ccs/compare/v5.2.0...v5.3.0-beta.1) (2025-12-01) ### Bug Fixes * **cliproxy:** use double-dash flags for cliproxyapi auth ([#24](https://github.com/kaitranntt/ccs/issues/24)) ([4c81f28](https://github.com/kaitranntt/ccs/commit/4c81f28f0b67ef92cf74d0f5c13a5943ff0a7f00)) * **glmt:** handle 401 errors and headers-already-sent exception ([#30](https://github.com/kaitranntt/ccs/issues/30)) ([c953382](https://github.com/kaitranntt/ccs/commit/c95338232a37981b95b785b47185ce18d6d94b7a)), closes [#26](https://github.com/kaitranntt/ccs/issues/26) ### Features * **cliproxy:** add qwen code oauth provider support ([#31](https://github.com/kaitranntt/ccs/issues/31)) ([a3f1e52](https://github.com/kaitranntt/ccs/commit/a3f1e52ac68600ba0806d67aacceb6477ffa3543)), closes [#29](https://github.com/kaitranntt/ccs/issues/29) * **cliproxy:** auto-update cliproxyapi to latest release on startup ([8873ccd](https://github.com/kaitranntt/ccs/commit/8873ccd981679e8acff8965accdc22215c6e4aa2)) * fix(cliproxy): improve qwen oauth error handling - 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 * chore(release): 5.3.0-beta.2 [skip ci] # [5.3.0-beta.2](https://github.com/kaitranntt/ccs/compare/v5.3.0-beta.1...v5.3.0-beta.2) (2025-12-01) ### Bug Fixes * **cliproxy:** improve qwen oauth error handling ([7e0b0fe](https://github.com/kaitranntt/ccs/commit/7e0b0feca8ce2ed5d505c5bf6c84e54c6df8839e)), closes [#29](https://github.com/kaitranntt/ccs/issues/29) * feat(profile): add profile command with configuration display * feat(shell-completion): add --force flag and fix zsh profile coloring * fix(prompt): improve password input handling with raw mode and buffer support * chore(release): 5.3.0-beta.3 [skip ci] # [5.3.0-beta.3](https://github.com/kaitranntt/ccs/compare/v5.3.0-beta.2...v5.3.0-beta.3) (2025-12-01) ### Bug Fixes * **prompt:** improve password input handling with raw mode and buffer support ([bc56d2e](https://github.com/kaitranntt/ccs/commit/bc56d2e135532b2ae443144dd42217b26bcba951)) ### Features * **profile:** add profile command with configuration display ([53d7a15](https://github.com/kaitranntt/ccs/commit/53d7a15c047e760723e051dc0f7be3c0dd42d087)) * **shell-completion:** add --force flag and fix zsh profile coloring ([7faed1d](https://github.com/kaitranntt/ccs/commit/7faed1d84ba29ba02bf687bae5b3458617512e67)) * chore(release): 5.3.0-beta.4 [skip ci] # [5.3.0-beta.4](https://github.com/kaitranntt/ccs/compare/v5.3.0-beta.3...v5.3.0-beta.4) (2025-12-01) ### Bug Fixes * **cliproxy:** improve qwen oauth error handling ([#33](https://github.com/kaitranntt/ccs/issues/33)) ([1c3374f](https://github.com/kaitranntt/ccs/commit/1c3374f6a7e4440e299d49b58808c6454b4547c2)), closes [#29](https://github.com/kaitranntt/ccs/issues/29) --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
230 lines
8.4 KiB
PowerShell
230 lines
8.4 KiB
PowerShell
# PowerShell completion for CCS (Claude Code Switch)
|
|
# Compatible with PowerShell 5.1+
|
|
#
|
|
# Installation:
|
|
# Add to your PowerShell profile ($PROFILE):
|
|
# . /path/to/ccs/scripts/completion/ccs.ps1
|
|
#
|
|
# Or install for current user:
|
|
# Copy-Item scripts/completion/ccs.ps1 ~\Documents\PowerShell\Scripts\
|
|
# Add to profile: . ~\Documents\PowerShell\Scripts\ccs.ps1
|
|
|
|
Register-ArgumentCompleter -CommandName ccs -ScriptBlock {
|
|
param($commandName, $wordToComplete, $commandAst, $fakeBoundParameters)
|
|
|
|
$commands = @('auth', 'profile', 'doctor', 'sync', 'update', '--help', '--version', '--shell-completion', '-h', '-v', '-sc')
|
|
$authCommands = @('create', 'list', 'show', 'remove', 'default', '--help', '-h')
|
|
$profileCommands = @('create', 'list', 'remove', '--help', '-h')
|
|
$profileCreateFlags = @('--base-url', '--api-key', '--model', '--force', '--yes', '-y')
|
|
$shellCompletionFlags = @('--bash', '--zsh', '--fish', '--powershell')
|
|
$listFlags = @('--verbose', '--json')
|
|
$removeFlags = @('--yes', '-y')
|
|
$showFlags = @('--json')
|
|
|
|
# Get current position in command
|
|
$words = $commandAst.ToString() -split '\s+' | Where-Object { $_ -ne '' }
|
|
$position = $words.Count
|
|
|
|
# Helper function to get profiles
|
|
function Get-CcsProfiles {
|
|
param([string]$Type = 'all')
|
|
|
|
$profiles = @()
|
|
|
|
# Settings-based profiles
|
|
if ($Type -in @('all', 'settings')) {
|
|
$configPath = "$env:USERPROFILE\.ccs\config.json"
|
|
if (Test-Path $configPath) {
|
|
try {
|
|
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
|
$profiles += $config.profiles.PSObject.Properties.Name
|
|
} catch {}
|
|
}
|
|
}
|
|
|
|
# Account-based profiles
|
|
if ($Type -in @('all', 'account')) {
|
|
$profilesPath = "$env:USERPROFILE\.ccs\profiles.json"
|
|
if (Test-Path $profilesPath) {
|
|
try {
|
|
$data = Get-Content $profilesPath -Raw | ConvertFrom-Json
|
|
$profiles += $data.profiles.PSObject.Properties.Name
|
|
} catch {}
|
|
}
|
|
}
|
|
|
|
return $profiles | Sort-Object -Unique
|
|
}
|
|
|
|
# Top-level completion
|
|
if ($position -eq 2) {
|
|
$allOptions = $commands + (Get-CcsProfiles)
|
|
$allOptions | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
return
|
|
}
|
|
|
|
# shell-completion flag completion
|
|
if ($words[1] -eq '--shell-completion' -or $words[1] -eq '-sc') {
|
|
if ($position -eq 3) {
|
|
$shellCompletionFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
# auth subcommand completion
|
|
if ($words[1] -eq 'auth') {
|
|
if ($position -eq 3) {
|
|
# auth subcommands
|
|
$authCommands | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
} elseif ($position -eq 4) {
|
|
# Profile names or flags for auth subcommands
|
|
switch ($words[2]) {
|
|
'show' {
|
|
$options = (Get-CcsProfiles -Type account) + $showFlags
|
|
$options | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'remove' {
|
|
$options = (Get-CcsProfiles -Type account) + $removeFlags
|
|
$options | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'default' {
|
|
Get-CcsProfiles -Type account | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'list' {
|
|
$listFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'create' {
|
|
# No completion for create (user types new name)
|
|
}
|
|
}
|
|
} elseif ($position -eq 5) {
|
|
# Flags after profile name
|
|
switch ($words[2]) {
|
|
'show' {
|
|
$showFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'remove' {
|
|
$removeFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# profile subcommand completion
|
|
if ($words[1] -eq 'profile') {
|
|
if ($position -eq 3) {
|
|
# profile subcommands
|
|
$profileCommands | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
} elseif ($position -eq 4) {
|
|
# Profile names or flags for profile subcommands
|
|
switch ($words[2]) {
|
|
'remove' {
|
|
$options = (Get-CcsProfiles -Type settings) + $removeFlags
|
|
$options | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
'create' {
|
|
$profileCreateFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} elseif ($position -eq 5) {
|
|
# Flags after profile name
|
|
switch ($words[2]) {
|
|
'remove' {
|
|
$removeFlags | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
[System.Management.Automation.CompletionResult]::new(
|
|
$_,
|
|
$_,
|
|
'ParameterValue',
|
|
$_
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|