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
This commit is contained in:
Kai (Tam Nhu) Tran
2025-11-22 19:27:04 -05:00
committed by GitHub
parent ebb33b7843
commit e2e432837e
10 changed files with 22 additions and 11 deletions
+8
View File
@@ -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
+1 -1
View File
@@ -1 +1 @@
4.3.5
4.3.6
+2 -1
View File
@@ -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
+1 -1
View File
@@ -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'];
}
/**
+1 -1
View File
@@ -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) {
+1 -1
View File
@@ -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
+3 -2
View File
@@ -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}"
+3 -2
View File
@@ -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"
+1 -1
View File
@@ -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",
+1 -1
View File
@@ -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)) {