From e2e432837ef9d1d144dc3a163233175374c7545f Mon Sep 17 00:00:00 2001 From: "Kai (Tam Nhu) Tran" <61256810+kaitranntt@users.noreply.github.com> Date: Sat, 22 Nov 2025 19:27:04 -0500 Subject: [PATCH] feat: add plugin support to shared directories (v4.3.6) (#15) * feat(shared): add plugin support to shared directories Add Claude Code plugins to the .ccs/shared/ symlink architecture, enabling plugin sharing across all CCS profiles (GLM, GLMT, Kimi, etc). Changes: - SharedManager: Add 'plugins' to sharedDirs array - Help text: Update all three implementations (Node.js, bash, PowerShell) - Postinstall: Create ~/.ccs/shared/plugins/ directory on install Architecture: ~/.claude/plugins/ <- ~/.ccs/shared/plugins/ <- instance/plugins/ This follows the existing pattern for commands/skills/agents and maintains cross-platform compatibility with Windows fallback support. * chore: bump version to 4.3.6 * docs: update CHANGELOG for v4.3.6 --- CHANGELOG.md | 8 ++++++++ VERSION | 2 +- bin/ccs.js | 3 ++- bin/management/shared-manager.js | 2 +- installers/install.ps1 | 2 +- installers/install.sh | 2 +- lib/ccs | 5 +++-- lib/ccs.ps1 | 5 +++-- package.json | 2 +- scripts/postinstall.js | 2 +- 10 files changed, 22 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 831f3666..cb2c9ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ Format: [Keep a Changelog](https://keepachangelog.com/) +## [4.3.6] - 2025-11-23 + +### Added +- **Plugin Support**: Claude Code plugins now shared across all CCS profiles via `~/.ccs/shared/plugins/` +- Symlink architecture: `~/.claude/plugins/` ← `~/.ccs/shared/plugins/` ← `instance/plugins/` +- Install plugins once, use across GLM, GLMT, Kimi, and all Claude accounts +- Cross-platform support with Windows fallback (copy mode) + ## [4.3.5] - 2025-11-22 ### Changed diff --git a/VERSION b/VERSION index e198586e..43270543 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.3.5 +4.3.6 diff --git a/bin/ccs.js b/bin/ccs.js index e4cf5778..d560f26d 100755 --- a/bin/ccs.js +++ b/bin/ccs.js @@ -207,7 +207,8 @@ function handleHelpCommand() { console.log(' Commands: ~/.ccs/shared/commands/'); console.log(' Skills: ~/.ccs/shared/skills/'); console.log(' Agents: ~/.ccs/shared/agents/'); - console.log(' Note: Commands, skills, and agents are symlinked across all profiles'); + console.log(' Plugins: ~/.ccs/shared/plugins/'); + console.log(' Note: Commands, skills, agents, and plugins are symlinked across all profiles'); console.log(''); // Examples diff --git a/bin/management/shared-manager.js b/bin/management/shared-manager.js index a6bb0ea8..2e5a26d3 100644 --- a/bin/management/shared-manager.js +++ b/bin/management/shared-manager.js @@ -17,7 +17,7 @@ class SharedManager { this.sharedDir = path.join(this.homeDir, '.ccs', 'shared'); this.claudeDir = path.join(this.homeDir, '.claude'); this.instancesDir = path.join(this.homeDir, '.ccs', 'instances'); - this.sharedDirs = ['commands', 'skills', 'agents']; + this.sharedDirs = ['commands', 'skills', 'agents', 'plugins']; } /** diff --git a/installers/install.ps1 b/installers/install.ps1 index 4ad05907..25dd8ce0 100644 --- a/installers/install.ps1 +++ b/installers/install.ps1 @@ -31,7 +31,7 @@ $InstallMethod = if ($ScriptDir -and ((Test-Path "$ScriptDir\lib\ccs.ps1") -or ( # IMPORTANT: Update this version when releasing new versions! # This hardcoded version is used for standalone installations (irm | iex) # For git installations, VERSION file is read if available -$CcsVersion = "4.3.5" +$CcsVersion = "4.3.6" # Try to read VERSION file for git installations if ($ScriptDir) { diff --git a/installers/install.sh b/installers/install.sh index 5d43a063..ae0d08b5 100755 --- a/installers/install.sh +++ b/installers/install.sh @@ -32,7 +32,7 @@ fi # IMPORTANT: Update this version when releasing new versions! # This hardcoded version is used for standalone installations (curl | bash) # For git installations, VERSION file is read if available -CCS_VERSION="4.3.5" +CCS_VERSION="4.3.6" # Try to read VERSION file for git installations if [[ -f "$SCRIPT_DIR/VERSION" ]]; then diff --git a/lib/ccs b/lib/ccs index 010343fc..a5097863 100755 --- a/lib/ccs +++ b/lib/ccs @@ -2,7 +2,7 @@ set -euo pipefail # Version (updated by scripts/bump-version.sh) -CCS_VERSION="4.3.5" +CCS_VERSION="4.3.6" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly CONFIG_FILE="${CCS_CONFIG:-$HOME/.ccs/config.json}" readonly PROFILES_JSON="$HOME/.ccs/profiles.json" @@ -222,7 +222,8 @@ show_help() { echo -e " Commands: ~/.ccs/shared/commands/" echo -e " Skills: ~/.ccs/shared/skills/" echo -e " Agents: ~/.ccs/shared/agents/" - echo -e " Note: Commands, skills, and agents are symlinked across all profiles" + echo -e " Plugins: ~/.ccs/shared/plugins/" + echo -e " Note: Commands, skills, agents, and plugins are symlinked across all profiles" echo "" echo -e "${CYAN}Examples:${RESET}" diff --git a/lib/ccs.ps1 b/lib/ccs.ps1 index 7fd7f3ce..20a1ff87 100644 --- a/lib/ccs.ps1 +++ b/lib/ccs.ps1 @@ -12,7 +12,7 @@ param( $ErrorActionPreference = "Stop" # Version (updated by scripts/bump-version.sh) -$CcsVersion = "4.3.5" +$CcsVersion = "4.3.6" $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $ConfigFile = if ($env:CCS_CONFIG) { $env:CCS_CONFIG } else { "$env:USERPROFILE\.ccs\config.json" } $ProfilesJson = "$env:USERPROFILE\.ccs\profiles.json" @@ -269,7 +269,8 @@ function Show-Help { Write-Host " Commands: ~/.ccs/shared/commands/" Write-Host " Skills: ~/.ccs/shared/skills/" Write-Host " Agents: ~/.ccs/shared/agents/" - Write-Host " Note: Commands, skills, and agents are symlinked across all profiles" + Write-Host " Plugins: ~/.ccs/shared/plugins/" + Write-Host " Note: Commands, skills, agents, and plugins are symlinked across all profiles" Write-Host "" Write-ColorLine "Examples:" "Cyan" diff --git a/package.json b/package.json index 493ac153..cce30130 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kaitranntt/ccs", - "version": "4.3.5", + "version": "4.3.6", "description": "Claude Code Switch - Instant profile switching between Claude Sonnet 4.5 and GLM 4.6", "keywords": [ "cli", diff --git a/scripts/postinstall.js b/scripts/postinstall.js index 47184c97..7d907252 100755 --- a/scripts/postinstall.js +++ b/scripts/postinstall.js @@ -81,7 +81,7 @@ function createConfigFiles() { } // Create shared subdirectories - const sharedSubdirs = ['commands', 'skills', 'agents']; + const sharedSubdirs = ['commands', 'skills', 'agents', 'plugins']; for (const subdir of sharedSubdirs) { const subdirPath = path.join(sharedDir, subdir); if (!fs.existsSync(subdirPath)) {