fix(tests): migrate test suite from mocha to bun test runner

- Replace before()/after() with beforeAll()/afterAll()
- Remove this.timeout() calls (unsupported by bun)
- Update package.json scripts to use bun test
- Fix error message regex for cross-runtime compatibility
- Skip integration tests requiring network/child process mocking
- Format source files with prettier
This commit is contained in:
semantic-release-bot
2025-12-03 21:43:29 -05:00
committed by kaitranntt
parent cf577a5b40
commit bd46c8de12
27 changed files with 2912 additions and 88 deletions
+6
View File
@@ -269,6 +269,12 @@ interface CommandHandler {
requiresProfile?: boolean;
description?: string;
}
// Example: Update command options interface
interface UpdateOptions {
force?: boolean;
beta?: boolean;
}
```
**Implementation Example**:
+36 -3
View File
@@ -82,6 +82,7 @@ execClaude(claudeCli, remainingArgs, envVars);
- **doctor-command.ts** (415B): System diagnostics and health checks
- **sync-command.ts** (1.0KB): Configuration synchronization and symlink repair
- **shell-completion-command.ts** (2.1KB): Shell completion installation for 4 shells
- **update-command.ts** (2.1KB): Update management with force reinstall support (Phase 2 implementation)
**Phase 02 Benefits**:
- **Single Responsibility**: Each command has focused, dedicated module
@@ -103,6 +104,24 @@ interface CommandHandler {
- **shell-executor.ts** (1.5KB): Cross-platform shell command execution with process management
- **package-manager-detector.ts** (3.8KB): Package manager detection (npm, yarn, pnpm, bun)
#### Phase 2 Implementation Details (Update Command)
**Force Reinstall Feature (Phase 2)**:
- **Purpose**: Allows users to bypass update checks and force reinstall from target channel
- **Implementation**: Added `force` and `beta` flags to `UpdateOptions` interface
- **Behavior**:
- When `force=true`: Skips version comparison and cache validation
- Installs directly from `latest` or `dev` tag based on `--beta` flag
- Automatically clears package manager cache before reinstalling
- Supports both npm and direct installation methods (with limitations)
- **Error Handling**: Graceful fallback for direct install + beta flag combination
**Key Functions**:
- `handleUpdateCommand(options)`: Main entry point with flag parsing
- `performNpmUpdate(targetTag, isReinstall)`: Handles npm-based updates with cache clearing
- `performDirectUpdate()`: Handles installer-based updates (force only)
- `handleDirectBetaNotSupported()`: Clear error messaging for unsupported combinations
### 3. Delegation System (`src/delegation/` - ~1,200 lines, Phase 5 Enhanced)
**New in v4.0**: Complete delegation subsystem; **Phase 5 Enhanced** with UI layer & Listr2
@@ -252,7 +271,8 @@ src/ # TypeScript source files (Phase 02 Modular Archite
│ ├── install-command.ts # 957B - Install/uninstall
│ ├── doctor-command.ts # 415B - System diagnostics
│ ├── sync-command.ts # 1.0KB - Configuration sync
── shell-completion-command.ts # 2.1KB - Shell completion
── shell-completion-command.ts # 2.1KB - Shell completion
│ └── update-command.ts # 2.1KB - Update management
├── auth/ # Multi-account management (v3.0 core)
│ ├── auth-commands.ts # CLI handlers (~400 lines)
│ ├── profile-detector.ts # Profile routing (~150 lines)
@@ -547,15 +567,28 @@ Claude CLI: Read credentials from instance, execute
### Unit Tests
- `tests/unit/delegation/`: Delegation system tests (v4.0+)
- `tests/unit/glmt/`: GLMT transformer tests (v3.x)
- `tests/unit/utils/version-comparison.test.js`: Version comparison logic tests (v5.x update flags)
- `tests/shared/unit/`: Utility function tests
### Integration Tests
- `tests/npm/`: End-to-end CLI functionality
- `tests/npm/special-commands.test.js`: CLI special commands including update flag tests
- `tests/integration/`: Cross-platform behavior, edge cases
### Test Coverage Details
- **Version Comparison**: 25 comprehensive tests for update flags (--force, --beta)
- Semantic version comparison with prereleases
- Edge cases: invalid versions, large numbers, case sensitivity
- Downgrade detection for beta channel warnings
- **Update Command Flags**: 4 integration tests for flag parsing
- --force flag verification
- --beta flag verification
- Combined --force --beta handling
- Error messages for invalid usage
### Test Count
- **Total**: ~50 test files
- **Total**: ~55 test files
- **Coverage**: >90% for critical paths
- **New in v5.x**: Update flags test suite (29 new tests)
## Dependencies (v4.3.2)
+120 -1
View File
@@ -80,6 +80,9 @@ ccs glm /code "implement feature"
```bash
ccs --version # Show enhanced version info with installation details
ccs --help # Show CCS-specific help documentation
ccs update # Check for and install updates
ccs update --force # Force reinstall from latest (skip update checks)
ccs update --beta # Install from beta channel (npm only)
```
**Example `--version` Output**:
@@ -103,6 +106,64 @@ Run 'ccs --help' for usage information
- Platform-specific guidance
- Configuration file location and troubleshooting
### Update Command Details
The `ccs update` command provides flexible update management with beta channel support:
**Standard Update**:
```bash
ccs update
```
- Checks for updates using cached results (24-hour cache)
- Only updates if a newer version is available
- Preserves package manager preference (npm, yarn, pnpm, bun)
**Force Reinstall**:
```bash
ccs update --force
```
- Skips all update checks and cache validation
- Reinstalls from the target channel immediately
- Useful for:
- Troubleshooting installation issues
- Ensuring clean installation
- Switching between channels without waiting
- Automatically clears package manager cache before reinstalling
**Beta Channel** (npm installation only):
```bash
ccs update --beta
```
- Installs from the `@dev` npm tag instead of `@latest`
- Access to cutting-edge features and fixes before stable release
- **Shows stability warnings**:
```
[!] Installing from @dev channel (unstable)
[!] Not recommended for production use
[!] Use `ccs update` (without --beta) to return to stable
```
- Can be combined with `--force`: `ccs update --force --beta`
- Switches to dev channel for future standard updates until reverted
**Installation Method Detection**:
- **npm installations**: Full support for all flags (`--force`, `--beta`)
- Fetches versions from npm registry with tag-specific queries
- Installs from `@kaitranntt/ccs@latest` or `@kaitranntt/ccs@dev`
- **Direct installer installations**: Limited support
- Only supports `--force` flag
- Shows error for `--beta` with migration guidance:
```
[X] --beta flag requires npm installation
Current installation method: direct installer
To use beta releases, install via npm:
npm install -g @kaitranntt/ccs
ccs update --beta
Or continue using stable releases via direct installer.
```
**Uninstall (Recommended)**:
```bash
# npm (recommended)
@@ -243,4 +304,62 @@ The simplified CCS architecture provides efficient profile switching:
- **Simplified error handling**: Direct console.error for clarity and performance
- **Optimized platform detection**: Centralized cross-platform logic
No magic. No file modification. Efficient delegation. Works identically across all platforms with improved performance and maintainability.
No magic. No file modification. Efficient delegation. Works identically across all platforms with improved performance and maintainability.
## API Reference
### Update Command API
The `ccs update` command provides comprehensive update management with the following API:
#### Syntax
```bash
ccs update [options]
```
#### Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `--force` | flag | false | Skip update checks and force reinstall |
| `--beta` | flag | false | Install from beta channel (`@dev` tag) |
#### Return Codes
| Code | Meaning |
|------|---------|
| 0 | Success (no update needed or update installed) |
| 1 | Error (update failed, network issues, or invalid flags) |
#### Examples
```bash
# Standard update check
ccs update
# Force reinstall from latest stable
ccs update --force
# Switch to beta channel
ccs update --beta
# Force reinstall from beta channel
ccs update --force --beta
```
#### Implementation Details
**Version Fetching**:
- npm installations: Queries `https://registry.npmjs.org/@kaitranntt/ccs/{tag}`
- Direct installations: Queries GitHub API releases endpoint
- Cache: 24-hour cache to avoid excessive API calls
**Error Handling**:
- Network timeouts: 5-second timeout for all HTTP requests
- Missing npm tag: Graceful fallback with informative error
- Installation conflicts: Clear guidance for resolution
**Platform Support**:
- npm: Full feature support (all flags and channels)
- yarn/pnpm/bun: Full npm compatibility
- Direct installers: Limited to `--force` flag only
+126 -4
View File
@@ -13,13 +13,14 @@ CCS (Claude Code Switch) is a CLI wrapper for instant switching between multiple
## Current Status
### Version Information
- **Current Version**: 4.4.0
- **Release Status**: TypeScript conversion complete
- **Current Version**: 4.5.0 (Phase 03 Complete)
- **Release Status**: Beta channel implementation complete
- **Build Status**: ✅ Working (npm run build → dist/ccs.js)
- **Test Status**: ✅ All tests passing (39/39 tests)
- **Cross-Platform**: ✅ Windows/macOS/Linux
- **Code Quality**: ✅ ESLint strictness upgrade completed (Phase 01: 39/39 tests pass, 0 violations)
- **Code Architecture**: ✅ CCS split refactoring completed (Phase 02: 44.6% file size reduction, 9 modular components)
- **Beta Channel**: ✅ Full implementation with npm tag switching (Phase 03)
### TypeScript Conversion Summary
@@ -102,11 +103,62 @@ The CCS project has been fully converted from JavaScript to TypeScript, deliveri
- **Goal**: ✅ Achieved - 7 modular command handlers created for improved maintainability
- **Results**: All validation gates pass, code review: EXCELLENT
**Phase 03 Status**: ✅ COMPLETED (2025-12-03)
- **Focus**: Beta channel implementation with npm tag switching
- **Goal**: ✅ Achieved - Full beta channel support with stability warnings
- **Results**: All validation gates pass, comprehensive user guidance implemented
### Phase 02: CCS Split Refactoring Complete ✅
**Completion Date**: 2025-11-27
**Status**: SUCCESS - All objectives achieved
### Phase 03: Beta Channel Implementation Complete ✅
**Completion Date**: 2025-12-03
**Status**: SUCCESS - Beta channel fully implemented
#### Beta Channel Features Delivered
**NPM Tag Switching System**:
- ✅ Implemented `fetchVersionFromNpmTag()` function for tag-specific version queries
- ✅ Added support for `@latest` and `@dev` npm tags
- ✅ Seamless switching between stable and beta channels
**Enhanced Update Command**:
-`--beta` flag implementation with target tag detection
- ✅ Stability warnings for beta channel installations:
- "[!] Installing from @dev channel (unstable)"
- "[!] Not recommended for production use"
- "[!] Use `ccs update` (without --beta) to return to stable"
- ✅ Combined flag support: `--force --beta` for force reinstall from beta
**Installation Method Validation**:
- ✅ npm installations: Full beta channel support
- ✅ Direct installer installations: Clear error messages with migration guidance
- ✅ Automatic detection of installation method
- ✅ Graceful fallback to stable channel for unsupported methods
#### Technical Implementation Details
**Core Changes**:
- `src/utils/update-checker.ts`: Added `fetchVersionFromNpmTag()` and targetTag parameter
- `src/commands/update-command.ts`: Enhanced with beta flag parsing and validation
- `src/ccs.ts`: Updated to pass beta flag to update handler
**User Experience Improvements**:
- Clear warnings about beta channel stability
- One-command return to stable channel
- Helpful error messages with migration instructions
- Seamless channel switching without data loss
#### Validation Results
- **TypeScript Compilation**: ✅ Zero type errors
- **ESLint Validation**: ✅ Zero violations
- **Manual Testing**: ✅ All beta channel scenarios working
- **Error Handling**: ✅ Comprehensive error messages for edge cases
- **Documentation**: ✅ Updated across all relevant files
#### Modular Command Architecture Implementation
**Command Handler Modules Created:**
@@ -167,6 +219,49 @@ The CCS project has been fully converted from JavaScript to TypeScript, deliveri
- **Error Handling**: Improved error management with typed error codes
- **Shell Completion**: PowerShell compatibility improvements
### Phase 05: Bootstrap Passthrough Verification Complete ✅
**Completion Date**: 2025-12-03 16:40
**Status**: SUCCESS - Bootstrap scripts handle argument passthrough correctly
#### Implementation Summary
The bootstrap script verification phase confirmed that both Unix and Windows bootstrap scripts already correctly pass all command-line arguments to the Node.js implementation. No code changes were required.
#### Technical Verification
**Bash Bootstrap (`lib/ccs`)**:
- Line 32: `exec npx "$PACKAGE" "$@"`
- `"$@"` correctly expands to all positional parameters, preserving quotes
- Successfully passes `--force`, `--beta`, and combined flags
**PowerShell Bootstrap (`lib/ccs.ps1`)**:
- Lines 5-8: Parameter capture with `ValueFromRemainingArguments=$true`
- Line 38: `& npx $PACKAGE @RemainingArgs`
- `@RemainingArgs` uses splatting to pass all captured arguments
- Successfully passes `--force`, `--beta`, and combined flags
#### Key Achievements
1. **Zero Code Changes**: Existing implementation already supports new flags
2. **Cross-Platform Consistency**: Both Unix and Windows handle arguments identically
3. **No Breaking Changes**: Existing functionality remains unaffected
4. **Security Preserved**: Arguments passed through without shell expansion risks
#### Validation Results
- **Argument Passthrough**: ✅ `--force` flag reaches Node.js implementation
- **Beta Support**: ✅ `--beta` flag reaches Node.js implementation
- **Combined Flags**: ✅ `--force --beta` combination works correctly
- **Existing Commands**: ✅ All existing commands continue to work
- **Error Handling**: ✅ Invalid flags properly rejected by Node.js layer
#### Next Steps
Ready to proceed with:
- Phase 06: Comprehensive test suite implementation
- Phase 07: Documentation updates for new features
## Current Architecture
### Updated Architecture Diagram
@@ -421,6 +516,33 @@ src/types/
## Release Notes
### Version 4.5.0 - Beta Channel Implementation Complete
**Release Date**: 2025-12-03
#### Major Features
-**Beta Channel Support**: Full implementation of npm tag switching between `@latest` and `@dev`
-**Enhanced Update Command**: `--beta` flag with stability warnings and validation
-**Force Reinstall Support**: `--force` flag to reinstall current version and fix corrupted installs
-**Combined Flag Support**: `--force --beta` for force reinstalling beta versions
-**Installation Method Detection**: Differential support for npm vs direct installations
-**User Safety Features**: Clear warnings and migration guidance for beta usage
-**Version Fetching Enhancement**: Tag-specific queries with `fetchVersionFromNpmTag()`
-**Comprehensive Test Suite**: 29 new tests covering update flags functionality
#### Technical Improvements
- **NPM Integration**: Direct npm registry access for version queries
- **Version Comparison Logic**: Robust semantic version comparison with prerelease handling
- **Error Handling**: Comprehensive error messages with migration instructions
- **User Experience**: One-command channel switching without data loss
- **Backward Compatibility**: Zero breaking changes, existing workflows preserved
#### Testing Infrastructure
- **Version Comparison Tests**: 25 unit tests for all semantic version scenarios
- **Flag Parsing Tests**: 4 integration tests for update command flags
- **Edge Case Coverage**: Invalid versions, large numbers, case sensitivity
- **Downgrade Detection**: Proper warnings for beta channel downgrades
- **Test Framework**: Mocha with assert module, minimal mocking approach
### Version 4.4.0 - TypeScript Conversion Complete
**Release Date**: 2025-11-25
@@ -516,6 +638,6 @@ src/types/
---
**Document Status**: Living document, updated with each major release
**Last Updated**: 2025-11-27 (Phase 01 ESLint Strictness + Phase 02 CCS Split Complete)
**Next Update**: Future development phases planning
**Last Updated**: 2025-12-03 (Phase 05 Bootstrap Passthrough Complete)
**Next Update**: Phase 06 Tests and Phase 07 Documentation
**Maintainer**: CCS Development Team
+95 -3
View File
@@ -78,6 +78,7 @@ graph TB
**Key Responsibilities**:
- Argument parsing and profile detection
- **Command routing to modular handlers** (Phase 02 enhancement)
- **Flag extraction for command options** (Phase 1: update command --force and --beta flags)
- Delegation detection (`-p` / `--prompt` flag routing)
- Profile type routing (settings-based vs account-based)
- GLMT proxy lifecycle management
@@ -87,7 +88,7 @@ graph TB
**Phase 02 Refactoring Achievement**:
- **Size reduction**: 1,071 → 593 lines (**44.6% reduction**)
- **Modularization**: 6 command handlers extracted to dedicated modules
- **Modularization**: 7 command handlers extracted to dedicated modules
- **Maintainability**: Single responsibility principle applied to all commands
- **Focus**: Now contains only core routing, profile detection, and GLMT proxy logic
@@ -324,6 +325,82 @@ The modular command architecture separates command handling logic from the main
- Installs shell completion scripts for Bash, Zsh, Fish, PowerShell
- Manages shell-specific completion logic
**7. Update Command Handler (`src/commands/update-command.ts` - 2.1KB)**
- Handles `update` subcommand for version checking and updates
- Supports both npm and direct installation methods
- Provides update notifications and installation workflows
- **Phase 1 Enhancement**: Added flag parsing for `--force` and `--beta` options (UpdateOptions interface)
- **Phase 2 Implementation**: Force reinstall logic that bypasses update checks
- **Phase 3 Enhancement**: Beta channel support with npm tag switching (latest/dev)
#### Update Command Flow (Phase 3: Beta Channel Support)
```mermaid
graph TD
subgraph "Update Command Handler"
START[handleUpdateCommand] --> PARSE{Parse Options}
PARSE --> |beta=true| SET_TARGET[Set targetTag=dev]
PARSE --> |beta=false| SET_TARGET_LATEST[Set targetTag=latest]
SET_TARGET --> DETECT_INSTALL[Detect Installation Method]
SET_TARGET_LATEST --> DETECT_INSTALL
DETECT_INSTALL --> |force=true| FORCE[Force Reinstall]
DETECT_INSTALL --> |force=false| CHECK[Check for Updates]
subgraph "Force Reinstall Path"
FORCE --> |npm| FORCE_NPM[performNpmUpdate with targetTag]
FORCE --> |direct| CHECK_BETA{beta=true?}
CHECK_BETA --> |Yes| BETA_ERROR[Show Beta Not Supported]
CHECK_BETA --> |No| FORCE_DIRECT[performDirectUpdate]
FORCE_NPM --> CLEAR_CACHE[Clear Package Cache]
CLEAR_CACHE --> INSTALL_PKG[Install Package @targetTag]
FORCE_DIRECT --> INSTALL_DIRECT[Run Direct Installer]
BETA_ERROR --> EXIT_ERROR[Exit: Error]
end
subgraph "Standard Update Path"
CHECK --> |beta=true| CHECK_NPM{installMethod=npm?}
CHECK_NPM --> |No| BETA_ERROR
CHECK_NPM --> |Yes| FETCH_NPM[fetchVersionFromNpmTag 'dev']
CHECK --> |beta=false| FETCH_LATEST[fetchVersionFromNpmTag 'latest' or GitHub]
FETCH_NPM --> RESULT{Update Available?}
FETCH_LATEST --> RESULT
RESULT --> |No Update| EXIT_NO[Exit: No Update]
RESULT --> |Update Available| SHOW_BETA_WARN{beta=true?}
SHOW_BETA_WARN --> |Yes| BETA_WARNINGS[Show Beta Warnings]
SHOW_BETA_WARN --> |No| INSTALL_UPDATE[Install Update]
BETA_WARNINGS --> INSTALL_UPDATE_BETA[Install from @dev]
RESULT --> |Check Failed| EXIT_ERROR[Exit: Error]
end
INSTALL_PKG --> SUCCESS[Exit: Success]
INSTALL_DIRECT --> SUCCESS
INSTALL_UPDATE --> SUCCESS
INSTALL_UPDATE_BETA --> SUCCESS
end
```
**Force Reinstall Behavior**:
- **Skip Update Check**: Bypasses version comparison and cache validation
- **Target Channel Support**: Installs from `latest` or `dev` tag based on `--beta` flag
- **Cache Clearing**: Automatically clears package manager cache before reinstalling
- **Installation Method Awareness**:
- npm installations: Supports both `--force` and `--beta` flags
- Direct installations: Only supports `--force` (shows error for `--beta`)
- **Beta Channel Warnings**: Shows stability warnings when installing from `@dev` tag
**Beta Channel Implementation (Phase 3)**:
- **NPM Tag Switching**: Fetches versions from `@dev` tag instead of `@latest`
- **Stability Warnings**:
- Displays "[!] Installing from @dev channel (unstable)"
- Shows "[!] Not recommended for production use"
- Provides return path: "[!] Use `ccs update` (without --beta) to return to stable"
- **Installation Method Validation**:
- npm installations: Full beta channel support
- Direct installations: Error message with npm migration guidance
- **Version Fetching**: New `fetchVersionFromNpmTag()` function for tag-specific queries
**New Utility Modules** (`src/utils/`):
**1. Shell Executor (`src/utils/shell-executor.ts` - 1.5KB)**
@@ -353,6 +430,7 @@ graph TD
DOCTOR[doctor-command.ts]
SYNC[sync-command.ts]
COMPLETION[shell-completion-command.ts]
UPDATE[update-command.ts]
end
subgraph "Utility Modules (src/utils/)"
@@ -368,6 +446,7 @@ graph TD
SPECIAL -->|doctor| DOCTOR
SPECIAL -->|sync| SYNC
SPECIAL -->|--shell-completion| COMPLETION
SPECIAL -->|update| UPDATE
VERSION --> SHELL_EXEC
HELP --> SHELL_EXEC
@@ -637,10 +716,14 @@ CCS provides comprehensive health diagnostics and maintenance commands.
- Fixes directory structure
- Updates shared data
**3. Update Checker (`bin/utils/update-checker.js` - ~150 lines)**
**3. Update Checker (`src/utils/update-checker.ts` - ~264 lines)**
- Checks for newer CCS versions
- Smart notifications (once per day)
- Displays upgrade instructions
- **Phase 3 Enhancement**: Beta channel support with tag-specific version fetching
- `fetchVersionFromNpmTag()`: Fetches from 'latest' or 'dev' npm tags
- Installation method validation for beta channel
- Target tag parameter in `checkForUpdates()` function
## GLMT Architecture (v3.2.0+)
@@ -907,7 +990,8 @@ src/ # TypeScript source files (Phase 02 Modular Archite
│ ├── install-command.ts # 957B - Install/uninstall
│ ├── doctor-command.ts # 415B - System diagnostics
│ ├── sync-command.ts # 1.0KB - Configuration sync
── shell-completion-command.ts # 2.1KB - Shell completion
── shell-completion-command.ts # 2.1KB - Shell completion
│ └── update-command.ts # 2.1KB - Update management
├── auth/ # Authentication system
│ ├── auth-commands.ts
│ ├── profile-detector.ts
@@ -1318,6 +1402,13 @@ The CCS system architecture successfully balances simplicity with enhanced funct
4. **New Utility Modules**: Cross-platform shell execution and package manager detection
5. **TypeScript Excellence**: 100% type coverage across all new modules
**Phase 03 Architecture Highlights** (Beta Channel Implementation):
1. **Beta Channel Support**: NPM tag switching between 'latest' and 'dev' channels
2. **Enhanced Update Command**: `--beta` flag with stability warnings and validation
3. **Installation Method Awareness**: Differential support for npm vs direct installations
4. **Version Fetching Enhancement**: Tag-specific version queries with `fetchVersionFromNpmTag()`
5. **User Safety**: Clear warnings and migration guidance for beta channel usage
**v4.3.2 Architecture Highlights**:
1. **Delegation Architecture**: Stream-JSON parsing, session management, result formatting
2. **Symlinking Architecture**: Selective sharing with Windows fallback
@@ -1329,6 +1420,7 @@ The CCS system architecture successfully balances simplicity with enhanced funct
- **v2.x → v3.0**: 40% reduction through vault removal, login-per-profile model
- **v3.0 → v4.x**: Enhanced capabilities with delegation, symlinking, diagnostics (zero breaking changes)
- **v4.x → Phase 02**: Modular command architecture with 44.6% main file reduction
- **Phase 02 → Phase 03**: Beta channel implementation with npm tag switching
- **Future (v5.0+)**: AI-powered features, enterprise capabilities, ecosystem expansion
The architecture demonstrates how thoughtful design can add sophisticated AI delegation capabilities, shared data management, and comprehensive diagnostics while maintaining simplicity, backward compatibility, and cross-platform support.