diff --git a/.DS_Store b/.DS_Store index 5868e780..e6184751 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index fe4b9286..3700ce09 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Syncable CLI skills for AI coding agents — project analysis, security, vulnerabilities, dependencies, IaC validation, and cloud deployment.", - "version": "0.1.13" + "version": "0.1.14" }, "plugins": [ { "name": "syncable-cli-skills", "source": "./installer/plugins/syncable-cli-skills", "description": "Syncable CLI skills for project analysis, security scanning, vulnerability detection, dependency auditing, IaC validation, Kubernetes optimization, and cloud deployment.", - "version": "0.1.13", + "version": "0.1.14", "author": { "name": "Syncable", "email": "support@syncable.dev" diff --git a/installer/.claude-plugin/marketplace.json b/installer/.claude-plugin/marketplace.json deleted file mode 100644 index 4e810e0a..00000000 --- a/installer/.claude-plugin/marketplace.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "syncable", - "owner": { - "name": "Syncable", - "email": "support@syncable.dev" - }, - "metadata": { - "description": "Syncable CLI skills for AI coding agents — project analysis, security, vulnerabilities, dependencies, IaC validation, and cloud deployment.", - "version": "0.1.0" - }, - "plugins": [ - { - "name": "syncable-cli-skills", - "source": "./plugins/syncable-cli-skills", - "description": "Syncable CLI skills for project analysis, security scanning, vulnerability detection, dependency auditing, IaC validation, Kubernetes optimization, and cloud deployment.", - "version": "0.1.0", - "author": { - "name": "Syncable", - "email": "support@syncable.dev" - }, - "homepage": "https://syncable.dev", - "repository": "https://github.com/syncable-dev/syncable-cli", - "license": "MIT", - "keywords": ["syncable", "devops", "security", "deployment", "kubernetes", "docker", "iac"] - } - ] -} diff --git a/installer/package.json b/installer/package.json index b1482042..583d40eb 100644 --- a/installer/package.json +++ b/installer/package.json @@ -1,6 +1,6 @@ { "name": "syncable-cli-skills", - "version": "0.1.13", + "version": "0.1.14", "type": "module", "description": "Install Syncable CLI skills for AI coding agents (Claude Code, Cursor, Windsurf, Codex, Gemini CLI)", "license": "GPL-3.0", diff --git a/installer/plugins/syncable-cli-skills/.claude-plugin/plugin.json b/installer/plugins/syncable-cli-skills/.claude-plugin/plugin.json index 9f1a6fbe..d0f1fac2 100644 --- a/installer/plugins/syncable-cli-skills/.claude-plugin/plugin.json +++ b/installer/plugins/syncable-cli-skills/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "syncable-cli-skills", "description": "Syncable CLI skills for project analysis, security scanning, vulnerability detection, dependency auditing, IaC validation, Kubernetes optimization, and cloud deployment.", - "version": "0.1.13", + "version": "0.1.14", "author": { "name": "Syncable", "email": "support@syncable.dev" diff --git a/installer/src/transformers/claude.ts b/installer/src/transformers/claude.ts index 176633a9..5058536e 100644 --- a/installer/src/transformers/claude.ts +++ b/installer/src/transformers/claude.ts @@ -213,7 +213,19 @@ export async function installClaudePlugin(skills: Skill[]): Promise<{ cacheDir: cacheDir = getClaudePluginCacheDir(); } - // Step 3: Clear and rewrite skills so the cache is always fresh. + // Step 3: Remove ALL other version directories. Previous installs may have + // created directories at different versions that are now stale/orphaned. + const pluginRoot = getPluginCacheRoot(); + if (fs.existsSync(pluginRoot)) { + const activeDirName = path.basename(cacheDir); + for (const entry of fs.readdirSync(pluginRoot)) { + if (entry !== activeDirName && entry !== '.DS_Store') { + fs.rmSync(path.join(pluginRoot, entry), { recursive: true, force: true }); + } + } + } + + // Step 4: Clear and rewrite skills so the cache is always fresh. const skillsDir = path.join(cacheDir, 'skills'); if (fs.existsSync(skillsDir)) { fs.rmSync(skillsDir, { recursive: true });