cursor-kit-cli 1.2.0-beta.2 → 1.2.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/templates.ts","../src/utils/constants.ts","../src/commands/add.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/instance.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { defineCommand, runMain } from \"citty\";\nimport { createRequire } from \"node:module\";\nimport { printBanner, printVersion } from \"./utils/branding\";\nimport { initCommand } from \"./commands/init\";\nimport { addCommand } from \"./commands/add\";\nimport { pullCommand } from \"./commands/pull\";\nimport { listCommand } from \"./commands/list\";\nimport { removeCommand } from \"./commands/remove\";\nimport { instanceCommand } from \"./commands/instance\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\n\nconst main = defineCommand({\n meta: {\n name: \"cursor-kit\",\n version: pkg.version,\n description: \"CLI toolkit to manage Cursor IDE rules and commands\",\n },\n setup() {\n printBanner();\n printVersion(pkg.version);\n },\n subCommands: {\n init: initCommand,\n add: addCommand,\n pull: pullCommand,\n list: listCommand,\n remove: removeCommand,\n instance: instanceCommand,\n },\n});\n\nrunMain(main);\n\n","import figlet from \"figlet\";\nimport gradient from \"gradient-string\";\nimport pc from \"picocolors\";\n\nconst cursorGradient = gradient([\"#00DC82\", \"#36E4DA\", \"#0047E1\"]);\n\nexport function printBanner(): void {\n const banner = figlet.textSync(\"Cursor Kit\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"fitted\",\n });\n\n console.log(cursorGradient.multiline(banner));\n console.log();\n console.log(\n pc.dim(\" \") +\n pc.bold(pc.cyan(\"✦\")) +\n pc.dim(\" Supercharge your Cursor IDE with rules & commands\")\n );\n console.log();\n}\n\nexport function printSuccess(message: string): void {\n console.log(pc.green(\"✓\") + pc.dim(\" \") + message);\n}\n\nexport function printError(message: string): void {\n console.log(pc.red(\"✗\") + pc.dim(\" \") + message);\n}\n\nexport function printInfo(message: string): void {\n console.log(pc.cyan(\"ℹ\") + pc.dim(\" \") + message);\n}\n\nexport function printWarning(message: string): void {\n console.log(pc.yellow(\"⚠\") + pc.dim(\" \") + message);\n}\n\nexport function printDivider(): void {\n console.log(pc.dim(\"─\".repeat(50)));\n}\n\nexport function printVersion(version: string): void {\n console.log(\n pc.dim(\" \") + cursorGradient(`v${version}`) + pc.dim(\" • Made with ♥\")\n );\n console.log();\n}\n\nexport function highlight(text: string): string {\n return pc.cyan(text);\n}\n\nexport function dim(text: string): string {\n return pc.dim(text);\n}\n\nexport function bold(text: string): string {\n return pc.bold(text);\n}\n\nexport function gradientText(text: string): string {\n return cursorGradient(text);\n}\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join } from \"node:path\";\nimport {\n ensureDir,\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n getConflictingFiles,\n getConflictingDirs,\n writeFile,\n} from \"../utils/fs\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\nimport {\n fetchTemplateManifest,\n fetchMultipleTemplates,\n getTemplateLabel,\n getSkillLabel,\n copyLocalSkill,\n type TemplateManifest,\n type TemplateType,\n} from \"../utils/templates\";\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface InitResult {\n added: string[];\n skipped: string[];\n}\n\nasync function selectTemplates(\n type: TemplateType,\n availableTemplates: string[]\n): Promise<string[] | symbol> {\n const labelFn = type === \"skills\" ? getSkillLabel : getTemplateLabel;\n\n const selectionMode = await p.select({\n message: `How would you like to add ${type}?`,\n options: [\n {\n value: \"all\",\n label: `Add all ${availableTemplates.length} ${type}`,\n hint: \"Install everything\",\n },\n {\n value: \"select\",\n label: \"Select specific items\",\n hint: \"Choose which ones to install\",\n },\n ],\n });\n\n if (p.isCancel(selectionMode)) return selectionMode;\n\n if (selectionMode === \"all\") {\n return availableTemplates;\n }\n\n const selectedTemplates = await p.multiselect({\n message: `Select ${type} to add:`,\n options: availableTemplates.map((template) => ({\n value: template,\n label: labelFn(template),\n hint: template,\n })),\n required: true,\n });\n\n return selectedTemplates as string[] | symbol;\n}\n\nasync function handleConflicts(\n type: TemplateType,\n conflictingFiles: string[]\n): Promise<ConflictStrategy | symbol> {\n console.log();\n console.log(\n pc.yellow(`⚠ ${conflictingFiles.length} existing ${type} found:`)\n );\n for (const file of conflictingFiles) {\n console.log(pc.dim(` └─ ${file}`));\n }\n console.log();\n\n const strategy = await p.select({\n message: \"How would you like to handle conflicts?\",\n options: [\n {\n value: \"overwrite\" as ConflictStrategy,\n label: \"Overwrite existing files\",\n hint: \"Replace all conflicting files\",\n },\n {\n value: \"merge\" as ConflictStrategy,\n label: \"Merge (keep existing, add new only)\",\n hint: \"Skip files that already exist\",\n },\n {\n value: \"cancel\" as ConflictStrategy,\n label: \"Cancel\",\n hint: \"Abort the operation\",\n },\n ],\n });\n\n return strategy as ConflictStrategy | symbol;\n}\n\nasync function installTemplates(\n type: TemplateType,\n targetDir: string,\n selectedTemplates: string[],\n conflictStrategy: ConflictStrategy\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n const conflictingFiles = getConflictingFiles(targetDir, selectedTemplates);\n\n let templatesToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n templatesToInstall = selectedTemplates.filter(\n (t) => !conflictingFiles.includes(t)\n );\n result.skipped = conflictingFiles.filter((f) =>\n selectedTemplates.includes(f)\n );\n } else {\n templatesToInstall = selectedTemplates;\n }\n\n if (templatesToInstall.length === 0) {\n return result;\n }\n\n const templates = await fetchMultipleTemplates(type, templatesToInstall);\n\n ensureDir(targetDir);\n\n for (const [filename, content] of templates) {\n const filePath = join(targetDir, filename);\n writeFile(filePath, content);\n result.added.push(filename);\n }\n\n return result;\n}\n\nasync function installSkills(\n targetDir: string,\n selectedSkills: string[],\n conflictStrategy: ConflictStrategy\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n const conflictingDirs = getConflictingDirs(targetDir, selectedSkills);\n\n let skillsToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n skillsToInstall = selectedSkills.filter(\n (s) => !conflictingDirs.includes(s)\n );\n result.skipped = conflictingDirs.filter((d) =>\n selectedSkills.includes(d)\n );\n } else {\n skillsToInstall = selectedSkills;\n }\n\n if (skillsToInstall.length === 0) {\n return result;\n }\n\n ensureDir(targetDir);\n\n for (const skillName of skillsToInstall) {\n const success = copyLocalSkill(skillName, targetDir);\n if (success) {\n result.added.push(skillName);\n }\n }\n\n return result;\n}\n\nexport const initCommand = defineCommand({\n meta: {\n name: \"init\",\n description:\n \"Initialize .cursor/commands, .cursor/rules, and .cursor/skills in your project\",\n },\n args: {\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Overwrite existing files without prompting\",\n default: false,\n },\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only initialize commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only initialize rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only initialize skills\",\n default: false,\n },\n all: {\n type: \"boolean\",\n alias: \"a\",\n description: \"Install all templates without selection prompts\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const cursorDir = getCursorDir(cwd);\n const commandsDir = getCommandsDir(cwd);\n const rulesDir = getRulesDir(cwd);\n const skillsDir = getSkillsDir(cwd);\n\n const initAll = !args.commands && !args.rules && !args.skills;\n const shouldInitCommands = initAll || args.commands;\n const shouldInitRules = initAll || args.rules;\n const shouldInitSkills = initAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit init \")));\n\n const s = p.spinner();\n\n let manifest: TemplateManifest;\n\n try {\n s.start(\"Fetching template manifest...\");\n manifest = await fetchTemplateManifest();\n s.stop(\"Template manifest loaded\");\n } catch (error) {\n s.stop(\"Failed to fetch manifest\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n\n const results: {\n commands?: InitResult;\n rules?: InitResult;\n skills?: InitResult;\n } = {};\n\n try {\n ensureDir(cursorDir);\n\n if (shouldInitCommands) {\n let selectedCommands: string[];\n\n if (args.all) {\n selectedCommands = manifest.commands;\n } else {\n const selection = await selectTemplates(\"commands\", manifest.commands);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedCommands = selection;\n }\n\n const conflictingCommands = getConflictingFiles(\n commandsDir,\n selectedCommands\n );\n let commandStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingCommands.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"commands\", conflictingCommands);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n commandStrategy = strategy;\n }\n\n s.start(\"Installing commands...\");\n results.commands = await installTemplates(\n \"commands\",\n commandsDir,\n selectedCommands,\n commandStrategy\n );\n s.stop(\"Commands installed\");\n }\n\n if (shouldInitRules) {\n let selectedRules: string[];\n\n if (args.all) {\n selectedRules = manifest.rules;\n } else {\n const selection = await selectTemplates(\"rules\", manifest.rules);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedRules = selection;\n }\n\n const conflictingRules = getConflictingFiles(rulesDir, selectedRules);\n let ruleStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingRules.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"rules\", conflictingRules);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n ruleStrategy = strategy;\n }\n\n s.start(\"Installing rules...\");\n results.rules = await installTemplates(\n \"rules\",\n rulesDir,\n selectedRules,\n ruleStrategy\n );\n s.stop(\"Rules installed\");\n }\n\n if (shouldInitSkills) {\n let selectedSkills: string[];\n\n if (args.all) {\n selectedSkills = manifest.skills;\n } else {\n const selection = await selectTemplates(\"skills\", manifest.skills);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedSkills = selection;\n }\n\n const conflictingSkills = getConflictingDirs(skillsDir, selectedSkills);\n let skillStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingSkills.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"skills\", conflictingSkills);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n skillStrategy = strategy;\n }\n\n s.start(\"Installing skills...\");\n results.skills = await installSkills(\n skillsDir,\n selectedSkills,\n skillStrategy\n );\n s.stop(\"Skills installed\");\n }\n\n printDivider();\n console.log();\n\n if (results.commands) {\n const { added, skipped } = results.commands;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Commands: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n if (results.rules) {\n const { added, skipped } = results.rules;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Rules: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n if (results.skills) {\n const { added, skipped } = results.skills;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Skills: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n const totalAdded =\n (results.commands?.added.length ?? 0) +\n (results.rules?.added.length ?? 0) +\n (results.skills?.added.length ?? 0);\n const totalSkipped =\n (results.commands?.skipped.length ?? 0) +\n (results.rules?.skipped.length ?? 0) +\n (results.skills?.skipped.length ?? 0);\n\n if (totalAdded === 0 && totalSkipped > 0) {\n console.log();\n p.outro(pc.yellow(\"No new templates added (all selected files already exist)\"));\n } else {\n console.log();\n p.outro(pc.green(\"✨ Cursor Kit initialized successfully!\"));\n }\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n },\n});\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync, cpSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n if (!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function dirExists(path: string): boolean {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nexport function readFile(path: string): string {\n return readFileSync(path, \"utf-8\");\n}\n\nexport function writeFile(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content, \"utf-8\");\n}\n\nexport function removeFile(path: string): void {\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n}\n\nexport function copyDir(src: string, dest: string): void {\n cpSync(src, dest, { recursive: true });\n}\n\nexport function listFiles(dir: string, extension?: string): string[] {\n if (!dirExists(dir)) return [];\n \n const files = readdirSync(dir);\n if (extension) {\n return files.filter((f) => f.endsWith(extension));\n }\n return files;\n}\n\nexport function listDirs(dir: string): string[] {\n if (!dirExists(dir)) return [];\n \n return readdirSync(dir).filter((item) => {\n const itemPath = join(dir, item);\n return statSync(itemPath).isDirectory();\n });\n}\n\nexport function getCursorDir(cwd: string = process.cwd()): string {\n return join(cwd, \".cursor\");\n}\n\nexport function getCommandsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"commands\");\n}\n\nexport function getRulesDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"rules\");\n}\n\nexport function getSkillsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"skills\");\n}\n\nexport function resolveFromCwd(...paths: string[]): string {\n return resolve(process.cwd(), ...paths);\n}\n\nexport function getPackageJson(cwd: string = process.cwd()): Record<string, unknown> | null {\n const pkgPath = join(cwd, \"package.json\");\n if (!fileExists(pkgPath)) return null;\n \n try {\n return JSON.parse(readFile(pkgPath));\n } catch {\n return null;\n }\n}\n\nexport function getConflictingFiles(dir: string, files: string[]): string[] {\n if (!dirExists(dir)) return [];\n return files.filter((file) => fileExists(join(dir, file)));\n}\n\nexport function getConflictingDirs(dir: string, dirs: string[]): string[] {\n if (!dirExists(dir)) return [];\n return dirs.filter((d) => dirExists(join(dir, d)));\n}\n\nexport function getNonConflictingFiles(dir: string, files: string[]): string[] {\n if (!dirExists(dir)) return files;\n return files.filter((file) => !fileExists(join(dir, file)));\n}\n\nexport function getNonConflictingDirs(dir: string, dirs: string[]): string[] {\n if (!dirExists(dir)) return dirs;\n return dirs.filter((d) => !dirExists(join(dir, d)));\n}\n","import { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { REPO_RAW_URL, TEMPLATE_PATHS } from \"./constants\";\nimport { fileExists, readFile, dirExists, listFiles, listDirs, copyDir, ensureDir } from \"./fs\";\n\nexport interface TemplateManifest {\n commands: string[];\n rules: string[];\n skills: string[];\n}\n\nexport type TemplateType = \"commands\" | \"rules\" | \"skills\";\n\nexport interface TemplateItem {\n name: string;\n type: TemplateType;\n}\n\nfunction getLocalTemplatesDir(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n return join(currentDir, \"..\", \"templates\");\n}\n\nfunction getLocalManifest(): TemplateManifest | null {\n const templatesDir = getLocalTemplatesDir();\n const manifestPath = join(templatesDir, \"manifest.json\");\n\n if (fileExists(manifestPath)) {\n try {\n return JSON.parse(readFile(manifestPath)) as TemplateManifest;\n } catch {\n return null;\n }\n }\n\n const commandsDir = join(templatesDir, \"commands\");\n const rulesDir = join(templatesDir, \"rules\");\n const skillsDir = join(templatesDir, \"skills\");\n\n if (!dirExists(commandsDir) && !dirExists(rulesDir) && !dirExists(skillsDir)) {\n return null;\n }\n\n return {\n commands: dirExists(commandsDir) ? listFiles(commandsDir, \".md\") : [],\n rules: dirExists(rulesDir) ? listFiles(rulesDir, \".mdc\") : [],\n skills: dirExists(skillsDir) ? listDirs(skillsDir) : [],\n };\n}\n\nfunction getLocalTemplateContent(type: TemplateType, filename: string): string | null {\n const templatesDir = getLocalTemplatesDir();\n const filePath = join(templatesDir, type, filename);\n\n if (fileExists(filePath)) {\n return readFile(filePath);\n }\n\n return null;\n}\n\nexport function getLocalSkillDir(skillName: string): string | null {\n const templatesDir = getLocalTemplatesDir();\n const skillPath = join(templatesDir, \"skills\", skillName);\n\n if (dirExists(skillPath)) {\n return skillPath;\n }\n\n return null;\n}\n\nexport function copyLocalSkill(skillName: string, targetDir: string): boolean {\n const sourcePath = getLocalSkillDir(skillName);\n if (!sourcePath) return false;\n\n const destPath = join(targetDir, skillName);\n ensureDir(destPath);\n copyDir(sourcePath, destPath);\n return true;\n}\n\nexport async function fetchTemplateManifest(): Promise<TemplateManifest> {\n const localManifest = getLocalManifest();\n if (localManifest) {\n return localManifest;\n }\n\n const url = `${REPO_RAW_URL}/templates/manifest.json`;\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch template manifest: ${response.statusText}`);\n }\n\n return response.json() as Promise<TemplateManifest>;\n}\n\nexport async function fetchTemplateContent(\n type: TemplateType,\n filename: string\n): Promise<string> {\n const localContent = getLocalTemplateContent(type, filename);\n if (localContent !== null) {\n return localContent;\n }\n\n const templatePath = TEMPLATE_PATHS[type];\n const url = `${REPO_RAW_URL}/${templatePath}/${filename}`;\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch template ${filename}: ${response.statusText}`);\n }\n\n return response.text();\n}\n\nexport async function fetchMultipleTemplates(\n type: TemplateType,\n filenames: string[]\n): Promise<Map<string, string>> {\n const results = new Map<string, string>();\n\n const fetchPromises = filenames.map(async (filename) => {\n const content = await fetchTemplateContent(type, filename);\n return { filename, content };\n });\n\n const settled = await Promise.allSettled(fetchPromises);\n\n for (const result of settled) {\n if (result.status === \"fulfilled\") {\n results.set(result.value.filename, result.value.content);\n }\n }\n\n return results;\n}\n\nexport function getTemplateLabel(filename: string): string {\n const nameWithoutExt = filename.replace(/\\.(md|mdc)$/, \"\");\n return nameWithoutExt\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function getSkillLabel(skillName: string): string {\n return skillName\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n","export const REPO_URL = \"github:duongductrong/cursor-kit\";\nexport const REPO_REF = \"master\";\nexport const REPO_RAW_URL = \"https://raw.githubusercontent.com/duongductrong/cursor-kit/master\";\n\nexport const CURSOR_DIR = \".cursor\";\nexport const COMMANDS_DIR = \"commands\";\nexport const RULES_DIR = \"rules\";\nexport const SKILLS_DIR = \"skills\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\nexport const SKILL_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n skills: \"templates/skills\",\n} as const;\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { highlight } from \"../utils/branding\";\nimport {\n dirExists,\n ensureDir,\n fileExists,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n writeFile,\n} from \"../utils/fs\";\n\ntype ItemType = \"command\" | \"rule\" | \"skill\";\n\nconst COMMAND_TEMPLATE = `You are a helpful assistant. Describe what this command does.\n\n## Instructions\n- Step 1: ...\n- Step 2: ...\n\n## Rules\n- Be concise\n- Focus on the task\n\nSTART: Wait for user input.\n`;\n\nconst RULE_TEMPLATE = `---\ndescription: Describe when this rule should apply\nglobs: \nalwaysApply: false\n---\n\n# Rule Title\n\nDescribe the rule behavior here.\n\n## Guidelines\n- Guideline 1\n- Guideline 2\n`;\n\nconst SKILL_TEMPLATE = `---\ndescription: Describe when this skill should be activated\nglobs:\nalwaysApply: false\n---\n\n# Skill Name\n\nBrief description of what this skill enables.\n\n## Core Capabilities\n\n- Capability 1\n- Capability 2\n\n## When to Use\n\nUse this skill when:\n- Condition 1\n- Condition 2\n\n## References\n\nFor detailed guidance, see the references folder:\n- [Reference 1](./references/example.md) - Description\n`;\n\nconst SKILL_REFERENCE_TEMPLATE = `# Reference Title\n\nDetailed reference content goes here.\n\n## Section 1\n\nContent...\n\n## Section 2\n\nContent...\n`;\n\nfunction generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\")\n .trim();\n}\n\nexport const addCommand = defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a new command, rule, or skill\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command', 'rule', or 'skill'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command, rule, or skill\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\", \"skill\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeResult = await p.select({\n message: \"What do you want to add?\",\n options: [\n {\n value: \"command\",\n label: \"Command\",\n hint: \"A reusable prompt template\",\n },\n {\n value: \"rule\",\n label: \"Rule\",\n hint: \"Project-specific AI behavior rules\",\n },\n {\n value: \"skill\",\n label: \"Skill\",\n hint: \"Comprehensive guide with references\",\n },\n ],\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemType} name:`,\n placeholder: itemType === \"command\" ? \"my-command\" : itemType === \"rule\" ? \"my-rule\" : \"my-skill\",\n validate: (value) => {\n if (!value.trim()) return \"Name is required\";\n if (value.length < 2) return \"Name must be at least 2 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult;\n }\n\n const slug = generateSlug(itemName);\n const isCommand = itemType === \"command\";\n // const isRule = itemType === \"rule\";\n const isSkill = itemType === \"skill\";\n\n let targetPath: string;\n let displayPath: string;\n\n if (isSkill) {\n const skillsDir = getSkillsDir();\n targetPath = join(skillsDir, slug);\n displayPath = targetPath;\n } else {\n const targetDir = isCommand ? getCommandsDir() : getRulesDir();\n const extension = isCommand ? \".md\" : \".mdc\";\n targetPath = join(targetDir, `${slug}${extension}`);\n displayPath = targetPath;\n }\n\n if (isSkill ? dirExists(targetPath) : fileExists(targetPath)) {\n const shouldOverwrite = await p.confirm({\n message: `${highlight(isSkill ? slug : slug + (isCommand ? \".md\" : \".mdc\"))} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start(`Creating ${itemType}...`);\n\n try {\n if (isSkill) {\n ensureDir(targetPath);\n ensureDir(join(targetPath, \"references\"));\n writeFile(join(targetPath, \"SKILL.mdc\"), SKILL_TEMPLATE);\n writeFile(join(targetPath, \"references\", \"example.md\"), SKILL_REFERENCE_TEMPLATE);\n } else {\n const targetDir = isCommand ? getCommandsDir() : getRulesDir();\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n writeFile(targetPath, template);\n }\n\n s.stop(`${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created`);\n\n console.log();\n if (isSkill) {\n console.log(pc.dim(\" Directory: \") + highlight(displayPath));\n console.log(pc.dim(\" Main file: \") + highlight(join(displayPath, \"SKILL.mdc\")));\n } else {\n console.log(pc.dim(\" File: \") + highlight(displayPath));\n }\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created! Edit the file to customize it.`)\n );\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listFiles,\n listDirs,\n getCursorDir,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull latest updates from cursor-kit repository\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only pull commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only pull rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only pull skills\",\n default: false,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Force overwrite without confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const pullAll = !args.commands && !args.rules && !args.skills;\n const shouldPullCommands = pullAll || args.commands;\n const shouldPullRules = pullAll || args.rules;\n const shouldPullSkills = pullAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit pull \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, \".mdc\");\n const existingSkills = listDirs(skillsDir);\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0 || existingSkills.length > 0;\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` Commands: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` Rules: ${existingRules.length} files`));\n }\n if (existingSkills.length > 0) {\n console.log(pc.dim(` Skills: ${existingSkills.length} directories`));\n }\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"This will merge with existing files. Continue?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(getCursorDir());\n\n if (shouldPullCommands) {\n s.start(\"Pulling commands...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands updated\");\n }\n\n if (shouldPullRules) {\n s.start(\"Pulling rules...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules updated\");\n }\n\n if (shouldPullSkills) {\n s.start(\"Pulling skills...\");\n await downloadTemplate(`${REPO_URL}/templates/skills#${REPO_REF}`, {\n dir: skillsDir,\n force: true,\n });\n s.stop(\"Skills updated\");\n }\n\n printDivider();\n console.log();\n\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, \".mdc\");\n const newSkills = listDirs(skillsDir);\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `Commands: ${highlight(newCommands.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullRules) {\n const added = newRules.length - existingRules.length;\n printSuccess(\n `Rules: ${highlight(newRules.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullSkills) {\n const added = newSkills.length - existingSkills.length;\n printSuccess(\n `Skills: ${highlight(newSkills.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n console.log();\n p.outro(pc.green(\"✨ Successfully pulled latest updates!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { highlight, printDivider } from \"../utils/branding\";\nimport {\n fileExists,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listDirs,\n listFiles,\n readFile,\n} from \"../utils/fs\";\n\ninterface ItemInfo {\n name: string;\n path: string;\n description?: string;\n}\n\nfunction extractDescription(\n content: string,\n isCommand: boolean\n): string | undefined {\n if (isCommand) {\n const firstLine = content.trim().split(\"\\n\")[0];\n if (\n firstLine &&\n !firstLine.startsWith(\"#\") &&\n !firstLine.startsWith(\"---\")\n ) {\n return firstLine.slice(0, 60) + (firstLine.length > 60 ? \"...\" : \"\");\n }\n } else {\n const match = content.match(/description:\\s*(.+)/);\n if (match) {\n return match[1].trim().slice(0, 60) + (match[1].length > 60 ? \"...\" : \"\");\n }\n }\n return undefined;\n}\n\nfunction getItems(\n dir: string,\n extension: string,\n isCommand: boolean\n): ItemInfo[] {\n const files = listFiles(dir, extension);\n return files.map((file) => {\n const filePath = join(dir, file);\n const content = fileExists(filePath) ? readFile(filePath) : \"\";\n return {\n name: file.replace(extension, \"\"),\n path: filePath,\n description: extractDescription(content, isCommand),\n };\n });\n}\n\nfunction getSkills(dir: string): ItemInfo[] {\n const skillDirs = listDirs(dir);\n return skillDirs.map((skillName) => {\n const skillPath = join(dir, skillName);\n const skillFile = join(skillPath, \"SKILL.mdc\");\n const altSkillFile = join(skillPath, \"SKILL.md\");\n\n let description: string | undefined;\n\n if (fileExists(skillFile)) {\n const content = readFile(skillFile);\n description = extractDescription(content, false);\n } else if (fileExists(altSkillFile)) {\n const content = readFile(altSkillFile);\n description = extractDescription(content, false);\n }\n\n return {\n name: skillName,\n path: skillPath,\n description,\n };\n });\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all commands, rules, and skills\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only list commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only list rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only list skills\",\n default: false,\n },\n verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show full file paths\",\n default: false,\n },\n },\n async run({ args }) {\n const listAll = !args.commands && !args.rules && !args.skills;\n const shouldListCommands = listAll || args.commands;\n const shouldListRules = listAll || args.rules;\n const shouldListSkills = listAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit list \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const commands = shouldListCommands\n ? getItems(commandsDir, \".md\", true)\n : [];\n const rules = shouldListRules ? getItems(rulesDir, \".mdc\", false) : [];\n const skills = shouldListSkills ? getSkills(skillsDir) : [];\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands, rules, or skills found.\"));\n console.log(\n pc.dim(\" Run \") +\n highlight(\"cursor-kit init\") +\n pc.dim(\" to get started.\")\n );\n console.log();\n p.outro(pc.dim(\"Nothing to show\"));\n return;\n }\n\n printDivider();\n\n if (shouldListCommands && commands.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 📜 Commands\")) + pc.dim(` (${commands.length})`)\n );\n console.log();\n\n commands.forEach((cmd) => {\n console.log(` ${pc.green(\"●\")} ${highlight(cmd.name)}`);\n if (cmd.description) {\n console.log(pc.dim(` ${cmd.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${cmd.path}`));\n }\n });\n }\n\n if (shouldListRules && rules.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 📋 Rules\")) + pc.dim(` (${rules.length})`)\n );\n console.log();\n\n rules.forEach((rule) => {\n console.log(` ${pc.green(\"●\")} ${highlight(rule.name)}`);\n if (rule.description) {\n console.log(pc.dim(` ${rule.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${rule.path}`));\n }\n });\n }\n\n if (shouldListSkills && skills.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 🎯 Skills\")) + pc.dim(` (${skills.length})`)\n );\n console.log();\n\n skills.forEach((skill) => {\n console.log(` ${pc.green(\"●\")} ${highlight(skill.name)}`);\n if (skill.description) {\n console.log(pc.dim(` ${skill.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${skill.path}`));\n }\n });\n }\n\n console.log();\n printDivider();\n\n const total = commands.length + rules.length + skills.length;\n p.outro(pc.dim(`Total: ${total} item${total !== 1 ? \"s\" : \"\"}`));\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listFiles,\n listDirs,\n removeFile,\n fileExists,\n dirExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\" | \"skill\";\n\ninterface SelectOption {\n value: string;\n label: string;\n hint?: string;\n}\n\nexport const removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: \"Remove a command, rule, or skill\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command', 'rule', or 'skill'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command, rule, or skill to remove\",\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, \".mdc\").map((f) => f.replace(\".mdc\", \"\"));\n const skills = listDirs(skillsDir);\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands, rules, or skills to remove.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\", \"skill\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeOptions: SelectOption[] = [];\n\n if (commands.length > 0) {\n typeOptions.push({\n value: \"command\",\n label: \"Command\",\n hint: `${commands.length} available`,\n });\n }\n\n if (rules.length > 0) {\n typeOptions.push({\n value: \"rule\",\n label: \"Rule\",\n hint: `${rules.length} available`,\n });\n }\n\n if (skills.length > 0) {\n typeOptions.push({\n value: \"skill\",\n label: \"Skill\",\n hint: `${skills.length} available`,\n });\n }\n\n const typeResult = await p.select({\n message: \"What do you want to remove?\",\n options: typeOptions,\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n const isCommand = itemType === \"command\";\n const isRule = itemType === \"rule\";\n const isSkill = itemType === \"skill\";\n const items = isCommand ? commands : isRule ? rules : skills;\n const dir = isCommand ? commandsDir : isRule ? rulesDir : skillsDir;\n const extension = isCommand ? \".md\" : isRule ? \".mdc\" : \"\";\n\n if (items.length === 0) {\n p.cancel(`No ${itemType}s found`);\n process.exit(0);\n }\n\n if (args.name && items.includes(args.name)) {\n itemName = args.name;\n } else {\n const itemOptions: SelectOption[] = items.map((item) => ({\n value: item,\n label: item,\n }));\n\n const nameResult = await p.select({\n message: `Select ${itemType} to remove:`,\n options: itemOptions,\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult as string;\n }\n\n const targetPath = isSkill\n ? join(dir, itemName)\n : join(dir, `${itemName}${extension}`);\n\n const exists = isSkill ? dirExists(targetPath) : fileExists(targetPath);\n\n if (!exists) {\n p.cancel(`${itemType} '${itemName}' not found`);\n process.exit(1);\n }\n\n if (!args.force) {\n const displayName = isSkill ? itemName : itemName + extension;\n const shouldDelete = await p.confirm({\n message: `Are you sure you want to delete ${highlight(displayName)}?${isSkill ? \" (This will remove the entire skill directory)\" : \"\"}`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldDelete) || !shouldDelete) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n try {\n removeFile(targetPath);\n const displayName = isSkill ? itemName : itemName + extension;\n console.log();\n printSuccess(`Removed ${highlight(displayName)}`);\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } catch (error) {\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { spawn } from \"node:child_process\";\nimport { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync, chmodSync, readdirSync } from \"node:fs\";\nimport { highlight, printDivider, printSuccess, printInfo, printWarning } from \"../utils/branding\";\n\ntype InstanceAction = \"create\" | \"remove\";\n\ninterface InstanceInfo {\n name: string;\n path: string;\n}\n\nfunction getBinPath(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const possiblePaths = [\n join(currentDir, \"..\", \"..\", \"bin\"),\n join(currentDir, \"..\", \"bin\"),\n ];\n\n for (const binPath of possiblePaths) {\n if (existsSync(binPath)) {\n return binPath;\n }\n }\n\n return possiblePaths[0];\n}\n\nfunction ensureExecutable(scriptPath: string): void {\n try {\n chmodSync(scriptPath, 0o755);\n } catch {\n // Ignore permission errors\n }\n}\n\nfunction getExistingInstances(): InstanceInfo[] {\n const userAppsDir = join(process.env.HOME ?? \"\", \"Applications\");\n if (!existsSync(userAppsDir)) return [];\n\n try {\n const apps = readdirSync(userAppsDir);\n return apps\n .filter((app) => app.startsWith(\"Cursor\") && app.endsWith(\".app\") && app !== \"Cursor.app\")\n .map((app) => ({\n name: app.replace(\".app\", \"\"),\n path: join(userAppsDir, app),\n }));\n } catch {\n return [];\n }\n}\n\nfunction runScript(scriptPath: string, args: string[]): Promise<number> {\n return new Promise((resolve) => {\n ensureExecutable(scriptPath);\n\n const child = spawn(scriptPath, args, {\n stdio: \"inherit\",\n });\n\n child.on(\"close\", (code) => {\n resolve(code ?? 1);\n });\n\n child.on(\"error\", () => {\n resolve(1);\n });\n });\n}\n\nexport const instanceCommand = defineCommand({\n meta: {\n name: \"instance\",\n description: \"Manage Cursor IDE instances for multi-account login (macOS only)\",\n },\n args: {\n action: {\n type: \"string\",\n alias: \"a\",\n description: \"Action: 'create' or 'remove'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the instance (e.g. 'Cursor Enterprise')\",\n },\n list: {\n type: \"boolean\",\n alias: \"l\",\n description: \"List existing Cursor instances\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit instance \")));\n\n // OS check\n if (process.platform !== \"darwin\") {\n console.log();\n printWarning(\"This command only works on macOS.\");\n console.log(pc.dim(\" Cursor instance management requires macOS-specific features.\"));\n console.log();\n p.outro(pc.dim(\"Exiting\"));\n process.exit(1);\n }\n\n // List mode\n if (args.list) {\n const instances = getExistingInstances();\n printDivider();\n console.log();\n\n if (instances.length === 0) {\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Run \") + highlight(\"cursor-kit instance\") + pc.dim(\" to create one.\"));\n } else {\n console.log(pc.bold(pc.cyan(\" 🖥 Cursor Instances\")) + pc.dim(` (${instances.length})`));\n console.log();\n for (const instance of instances) {\n console.log(` ${pc.green(\"●\")} ${highlight(instance.name)}`);\n console.log(pc.dim(` └─ ${instance.path}`));\n }\n }\n\n console.log();\n printDivider();\n p.outro(pc.dim(`Total: ${instances.length} instance${instances.length !== 1 ? \"s\" : \"\"}`));\n return;\n }\n\n const s = p.spinner();\n\n // Check prerequisites\n s.start(\"Checking prerequisites...\");\n const binPath = getBinPath();\n const createScript = join(binPath, \"cursor-new-instance\");\n const removeScript = join(binPath, \"cursor-remove-instance\");\n\n const scriptsExist = existsSync(createScript) && existsSync(removeScript);\n if (!scriptsExist) {\n s.stop(\"Prerequisites check failed\");\n console.log();\n printWarning(\"Required scripts not found.\");\n console.log(pc.dim(` Expected at: ${binPath}`));\n console.log();\n p.outro(pc.red(\"Installation may be corrupted\"));\n process.exit(1);\n }\n\n const originalCursor = \"/Applications/Cursor.app\";\n if (!existsSync(originalCursor)) {\n s.stop(\"Prerequisites check failed\");\n console.log();\n printWarning(\"Cursor.app not found in /Applications\");\n console.log(pc.dim(\" Please install Cursor IDE first.\"));\n console.log();\n p.outro(pc.red(\"Cursor IDE required\"));\n process.exit(1);\n }\n\n s.stop(\"Prerequisites verified\");\n\n // Get existing instances for context\n const existingInstances = getExistingInstances();\n\n let action: InstanceAction;\n let instanceName: string;\n\n // Determine action\n if (args.action && [\"create\", \"remove\"].includes(args.action)) {\n action = args.action as InstanceAction;\n } else {\n const actionResult = await p.select({\n message: \"What would you like to do?\",\n options: [\n {\n value: \"create\",\n label: \"Create new instance\",\n hint: \"Clone Cursor with separate identity\",\n },\n {\n value: \"remove\",\n label: \"Remove instance\",\n hint: existingInstances.length > 0\n ? `${existingInstances.length} instance${existingInstances.length !== 1 ? \"s\" : \"\"} available`\n : \"No instances to remove\",\n },\n ],\n });\n\n if (p.isCancel(actionResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n action = actionResult as InstanceAction;\n }\n\n // Get instance name\n if (args.name) {\n instanceName = args.name;\n } else if (action === \"remove\" && existingInstances.length > 0) {\n // For remove action, show existing instances to select from\n const instanceResult = await p.select({\n message: \"Select instance to remove:\",\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.name,\n hint: inst.path,\n })),\n });\n\n if (p.isCancel(instanceResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n instanceName = instanceResult as string;\n } else if (action === \"remove\" && existingInstances.length === 0) {\n console.log();\n printInfo(\"No custom Cursor instances found to remove.\");\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n } else {\n // For create action, prompt for name\n const nameResult = await p.text({\n message: \"Enter a name for the new instance:\",\n placeholder: \"Cursor Enterprise\",\n validate: (value) => {\n if (!value.trim()) return \"Instance name is required\";\n if (value.length < 2) return \"Name must be at least 2 characters\";\n const existing = existingInstances.find(\n (i) => i.name.toLowerCase() === value.toLowerCase()\n );\n if (existing) return `Instance \"${value}\" already exists`;\n return undefined;\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n instanceName = nameResult;\n }\n\n // Show summary\n printDivider();\n console.log();\n console.log(pc.bold(pc.cyan(\" 📋 Summary\")));\n console.log();\n console.log(` ${pc.dim(\"Action:\")} ${action === \"create\" ? pc.green(\"Create\") : pc.yellow(\"Remove\")}`);\n console.log(` ${pc.dim(\"Instance:\")} ${highlight(instanceName)}`);\n\n if (action === \"create\") {\n const slug = instanceName.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n console.log(` ${pc.dim(\"Bundle ID:\")} ${pc.dim(\"com.cursor.\")}${highlight(slug)}`);\n console.log(` ${pc.dim(\"Location:\")} ${pc.dim(\"~/Applications/\")}${highlight(instanceName + \".app\")}`);\n } else {\n const targetPath = join(process.env.HOME ?? \"\", \"Applications\", `${instanceName}.app`);\n console.log(` ${pc.dim(\"Path:\")} ${pc.dim(targetPath)}`);\n }\n\n console.log();\n printDivider();\n console.log();\n\n const shouldContinue = await p.confirm({\n message: action === \"create\"\n ? \"Create this Cursor instance?\"\n : \"Remove this Cursor instance? This cannot be undone.\",\n initialValue: action === \"create\",\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n // Execute script\n console.log();\n printDivider();\n console.log();\n\n const scriptPath = action === \"create\" ? createScript : removeScript;\n // Pass --yes to remove script since we already confirmed in the CLI\n const scriptArgs = action === \"remove\" ? [\"--yes\", instanceName] : [instanceName];\n const exitCode = await runScript(scriptPath, scriptArgs);\n\n console.log();\n printDivider();\n console.log();\n\n if (exitCode === 0) {\n if (action === \"create\") {\n printSuccess(`Instance ${highlight(instanceName)} created successfully!`);\n console.log();\n console.log(pc.dim(\" Next steps:\"));\n console.log(pc.dim(\" • The new instance should launch automatically\"));\n console.log(pc.dim(\" • Sign in with a different Cursor account\"));\n console.log(pc.dim(\" • Find it in ~/Applications/\"));\n } else {\n printSuccess(`Instance ${highlight(instanceName)} removed successfully!`);\n }\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n printWarning(`Operation completed with exit code ${exitCode}`);\n console.log();\n p.outro(pc.yellow(\"Check the output above for details\"));\n process.exit(exitCode);\n }\n },\n});\n"],"mappings":"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","names":["import_citty","gradient","figlet","pc","pc","text","import_picocolors","import_node_path","import_node_path","pc","p","import_citty","import_node_path","import_picocolors","pc","import_citty","p","import_picocolors","pc","p","import_citty","import_node_path","import_picocolors","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","import_node_path","import_node_url","import_node_fs","resolve","pc","require"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/templates.ts","../src/utils/constants.ts","../src/commands/add.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/instance.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { defineCommand, runMain } from \"citty\";\nimport { createRequire } from \"node:module\";\nimport { printBanner, printVersion } from \"./utils/branding\";\nimport { initCommand } from \"./commands/init\";\nimport { addCommand } from \"./commands/add\";\nimport { pullCommand } from \"./commands/pull\";\nimport { listCommand } from \"./commands/list\";\nimport { removeCommand } from \"./commands/remove\";\nimport { instanceCommand } from \"./commands/instance\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { version: string };\n\nconst main = defineCommand({\n meta: {\n name: \"cursor-kit\",\n version: pkg.version,\n description: \"CLI toolkit to manage Cursor IDE rules and commands\",\n },\n setup() {\n printBanner();\n printVersion(pkg.version);\n },\n subCommands: {\n init: initCommand,\n add: addCommand,\n pull: pullCommand,\n list: listCommand,\n remove: removeCommand,\n instance: instanceCommand,\n },\n});\n\nrunMain(main);\n\n","import figlet from \"figlet\";\nimport gradient from \"gradient-string\";\nimport pc from \"picocolors\";\n\nconst cursorGradient = gradient([\"#00DC82\", \"#36E4DA\", \"#0047E1\"]);\n\nexport function printBanner(): void {\n const banner = figlet.textSync(\"Cursor Kit\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"fitted\",\n });\n\n console.log(cursorGradient.multiline(banner));\n console.log();\n console.log(\n pc.dim(\" \") +\n pc.bold(pc.cyan(\"✦\")) +\n pc.dim(\" Supercharge your Cursor IDE with rules & commands\")\n );\n console.log();\n}\n\nexport function printSuccess(message: string): void {\n console.log(pc.green(\"✓\") + pc.dim(\" \") + message);\n}\n\nexport function printError(message: string): void {\n console.log(pc.red(\"✗\") + pc.dim(\" \") + message);\n}\n\nexport function printInfo(message: string): void {\n console.log(pc.cyan(\"ℹ\") + pc.dim(\" \") + message);\n}\n\nexport function printWarning(message: string): void {\n console.log(pc.yellow(\"⚠\") + pc.dim(\" \") + message);\n}\n\nexport function printDivider(): void {\n console.log(pc.dim(\"─\".repeat(50)));\n}\n\nexport function printVersion(version: string): void {\n console.log(\n pc.dim(\" \") + cursorGradient(`v${version}`) + pc.dim(\" • Made with ♥\")\n );\n console.log();\n}\n\nexport function highlight(text: string): string {\n return pc.cyan(text);\n}\n\nexport function dim(text: string): string {\n return pc.dim(text);\n}\n\nexport function bold(text: string): string {\n return pc.bold(text);\n}\n\nexport function gradientText(text: string): string {\n return cursorGradient(text);\n}\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join } from \"node:path\";\nimport {\n ensureDir,\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n getConflictingFiles,\n getConflictingDirs,\n writeFile,\n} from \"../utils/fs\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\nimport {\n fetchTemplateManifest,\n fetchMultipleTemplates,\n getTemplateLabel,\n getSkillLabel,\n copyLocalSkill,\n type TemplateManifest,\n type TemplateType,\n} from \"../utils/templates\";\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface InitResult {\n added: string[];\n skipped: string[];\n}\n\nasync function selectTemplates(\n type: TemplateType,\n availableTemplates: string[]\n): Promise<string[] | symbol> {\n const labelFn = type === \"skills\" ? getSkillLabel : getTemplateLabel;\n\n const selectionMode = await p.select({\n message: `How would you like to add ${type}?`,\n options: [\n {\n value: \"all\",\n label: `Add all ${availableTemplates.length} ${type}`,\n hint: \"Install everything\",\n },\n {\n value: \"select\",\n label: \"Select specific items\",\n hint: \"Choose which ones to install\",\n },\n ],\n });\n\n if (p.isCancel(selectionMode)) return selectionMode;\n\n if (selectionMode === \"all\") {\n return availableTemplates;\n }\n\n const selectedTemplates = await p.multiselect({\n message: `Select ${type} to add:`,\n options: availableTemplates.map((template) => ({\n value: template,\n label: labelFn(template),\n hint: template,\n })),\n required: true,\n });\n\n return selectedTemplates as string[] | symbol;\n}\n\nasync function handleConflicts(\n type: TemplateType,\n conflictingFiles: string[]\n): Promise<ConflictStrategy | symbol> {\n console.log();\n console.log(\n pc.yellow(`⚠ ${conflictingFiles.length} existing ${type} found:`)\n );\n for (const file of conflictingFiles) {\n console.log(pc.dim(` └─ ${file}`));\n }\n console.log();\n\n const strategy = await p.select({\n message: \"How would you like to handle conflicts?\",\n options: [\n {\n value: \"overwrite\" as ConflictStrategy,\n label: \"Overwrite existing files\",\n hint: \"Replace all conflicting files\",\n },\n {\n value: \"merge\" as ConflictStrategy,\n label: \"Merge (keep existing, add new only)\",\n hint: \"Skip files that already exist\",\n },\n {\n value: \"cancel\" as ConflictStrategy,\n label: \"Cancel\",\n hint: \"Abort the operation\",\n },\n ],\n });\n\n return strategy as ConflictStrategy | symbol;\n}\n\nasync function installTemplates(\n type: TemplateType,\n targetDir: string,\n selectedTemplates: string[],\n conflictStrategy: ConflictStrategy\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n const conflictingFiles = getConflictingFiles(targetDir, selectedTemplates);\n\n let templatesToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n templatesToInstall = selectedTemplates.filter(\n (t) => !conflictingFiles.includes(t)\n );\n result.skipped = conflictingFiles.filter((f) =>\n selectedTemplates.includes(f)\n );\n } else {\n templatesToInstall = selectedTemplates;\n }\n\n if (templatesToInstall.length === 0) {\n return result;\n }\n\n const templates = await fetchMultipleTemplates(type, templatesToInstall);\n\n ensureDir(targetDir);\n\n for (const [filename, content] of templates) {\n const filePath = join(targetDir, filename);\n writeFile(filePath, content);\n result.added.push(filename);\n }\n\n return result;\n}\n\nasync function installSkills(\n targetDir: string,\n selectedSkills: string[],\n conflictStrategy: ConflictStrategy\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n const conflictingDirs = getConflictingDirs(targetDir, selectedSkills);\n\n let skillsToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n skillsToInstall = selectedSkills.filter(\n (s) => !conflictingDirs.includes(s)\n );\n result.skipped = conflictingDirs.filter((d) =>\n selectedSkills.includes(d)\n );\n } else {\n skillsToInstall = selectedSkills;\n }\n\n if (skillsToInstall.length === 0) {\n return result;\n }\n\n ensureDir(targetDir);\n\n for (const skillName of skillsToInstall) {\n const success = copyLocalSkill(skillName, targetDir);\n if (success) {\n result.added.push(skillName);\n }\n }\n\n return result;\n}\n\nexport const initCommand = defineCommand({\n meta: {\n name: \"init\",\n description:\n \"Initialize .cursor/commands, .cursor/rules, and .cursor/skills in your project\",\n },\n args: {\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Overwrite existing files without prompting\",\n default: false,\n },\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only initialize commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only initialize rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only initialize skills\",\n default: false,\n },\n all: {\n type: \"boolean\",\n alias: \"a\",\n description: \"Install all templates without selection prompts\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const cursorDir = getCursorDir(cwd);\n const commandsDir = getCommandsDir(cwd);\n const rulesDir = getRulesDir(cwd);\n const skillsDir = getSkillsDir(cwd);\n\n const initAll = !args.commands && !args.rules && !args.skills;\n const shouldInitCommands = initAll || args.commands;\n const shouldInitRules = initAll || args.rules;\n const shouldInitSkills = initAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit init \")));\n\n const s = p.spinner();\n\n let manifest: TemplateManifest;\n\n try {\n s.start(\"Fetching template manifest...\");\n manifest = await fetchTemplateManifest();\n s.stop(\"Template manifest loaded\");\n } catch (error) {\n s.stop(\"Failed to fetch manifest\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n\n const results: {\n commands?: InitResult;\n rules?: InitResult;\n skills?: InitResult;\n } = {};\n\n try {\n ensureDir(cursorDir);\n\n if (shouldInitCommands) {\n let selectedCommands: string[];\n\n if (args.all) {\n selectedCommands = manifest.commands;\n } else {\n const selection = await selectTemplates(\"commands\", manifest.commands);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedCommands = selection;\n }\n\n const conflictingCommands = getConflictingFiles(\n commandsDir,\n selectedCommands\n );\n let commandStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingCommands.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"commands\", conflictingCommands);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n commandStrategy = strategy;\n }\n\n s.start(\"Installing commands...\");\n results.commands = await installTemplates(\n \"commands\",\n commandsDir,\n selectedCommands,\n commandStrategy\n );\n s.stop(\"Commands installed\");\n }\n\n if (shouldInitRules) {\n let selectedRules: string[];\n\n if (args.all) {\n selectedRules = manifest.rules;\n } else {\n const selection = await selectTemplates(\"rules\", manifest.rules);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedRules = selection;\n }\n\n const conflictingRules = getConflictingFiles(rulesDir, selectedRules);\n let ruleStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingRules.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"rules\", conflictingRules);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n ruleStrategy = strategy;\n }\n\n s.start(\"Installing rules...\");\n results.rules = await installTemplates(\n \"rules\",\n rulesDir,\n selectedRules,\n ruleStrategy\n );\n s.stop(\"Rules installed\");\n }\n\n if (shouldInitSkills) {\n let selectedSkills: string[];\n\n if (args.all) {\n selectedSkills = manifest.skills;\n } else {\n const selection = await selectTemplates(\"skills\", manifest.skills);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedSkills = selection;\n }\n\n const conflictingSkills = getConflictingDirs(skillsDir, selectedSkills);\n let skillStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingSkills.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"skills\", conflictingSkills);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n skillStrategy = strategy;\n }\n\n s.start(\"Installing skills...\");\n results.skills = await installSkills(\n skillsDir,\n selectedSkills,\n skillStrategy\n );\n s.stop(\"Skills installed\");\n }\n\n printDivider();\n console.log();\n\n if (results.commands) {\n const { added, skipped } = results.commands;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Commands: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n if (results.rules) {\n const { added, skipped } = results.rules;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Rules: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n if (results.skills) {\n const { added, skipped } = results.skills;\n if (added.length > 0 || skipped.length > 0) {\n printSuccess(\n `Skills: ${highlight(added.length.toString())} added${skipped.length > 0 ? `, ${pc.yellow(skipped.length.toString())} skipped` : \"\"}`\n );\n for (const f of added) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${f}`));\n }\n for (const f of skipped) {\n console.log(pc.dim(` └─ ${pc.yellow(\"○\")} ${f} (kept existing)`));\n }\n }\n }\n\n const totalAdded =\n (results.commands?.added.length ?? 0) +\n (results.rules?.added.length ?? 0) +\n (results.skills?.added.length ?? 0);\n const totalSkipped =\n (results.commands?.skipped.length ?? 0) +\n (results.rules?.skipped.length ?? 0) +\n (results.skills?.skipped.length ?? 0);\n\n if (totalAdded === 0 && totalSkipped > 0) {\n console.log();\n p.outro(pc.yellow(\"No new templates added (all selected files already exist)\"));\n } else {\n console.log();\n p.outro(pc.green(\"✨ Cursor Kit initialized successfully!\"));\n }\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n },\n});\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync, cpSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport function ensureDir(path: string): void {\n if (!existsSync(path)) {\n mkdirSync(path, { recursive: true });\n }\n}\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function dirExists(path: string): boolean {\n return existsSync(path) && statSync(path).isDirectory();\n}\n\nexport function readFile(path: string): string {\n return readFileSync(path, \"utf-8\");\n}\n\nexport function writeFile(path: string, content: string): void {\n ensureDir(dirname(path));\n writeFileSync(path, content, \"utf-8\");\n}\n\nexport function removeFile(path: string): void {\n if (existsSync(path)) {\n rmSync(path, { recursive: true });\n }\n}\n\nexport function copyDir(src: string, dest: string): void {\n cpSync(src, dest, { recursive: true });\n}\n\nexport function listFiles(dir: string, extension?: string): string[] {\n if (!dirExists(dir)) return [];\n \n const files = readdirSync(dir);\n if (extension) {\n return files.filter((f) => f.endsWith(extension));\n }\n return files;\n}\n\nexport function listDirs(dir: string): string[] {\n if (!dirExists(dir)) return [];\n \n return readdirSync(dir).filter((item) => {\n const itemPath = join(dir, item);\n return statSync(itemPath).isDirectory();\n });\n}\n\nexport function getCursorDir(cwd: string = process.cwd()): string {\n return join(cwd, \".cursor\");\n}\n\nexport function getCommandsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"commands\");\n}\n\nexport function getRulesDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"rules\");\n}\n\nexport function getSkillsDir(cwd: string = process.cwd()): string {\n return join(getCursorDir(cwd), \"skills\");\n}\n\nexport function resolveFromCwd(...paths: string[]): string {\n return resolve(process.cwd(), ...paths);\n}\n\nexport function getPackageJson(cwd: string = process.cwd()): Record<string, unknown> | null {\n const pkgPath = join(cwd, \"package.json\");\n if (!fileExists(pkgPath)) return null;\n \n try {\n return JSON.parse(readFile(pkgPath));\n } catch {\n return null;\n }\n}\n\nexport function getConflictingFiles(dir: string, files: string[]): string[] {\n if (!dirExists(dir)) return [];\n return files.filter((file) => fileExists(join(dir, file)));\n}\n\nexport function getConflictingDirs(dir: string, dirs: string[]): string[] {\n if (!dirExists(dir)) return [];\n return dirs.filter((d) => dirExists(join(dir, d)));\n}\n\nexport function getNonConflictingFiles(dir: string, files: string[]): string[] {\n if (!dirExists(dir)) return files;\n return files.filter((file) => !fileExists(join(dir, file)));\n}\n\nexport function getNonConflictingDirs(dir: string, dirs: string[]): string[] {\n if (!dirExists(dir)) return dirs;\n return dirs.filter((d) => !dirExists(join(dir, d)));\n}\n","import { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { REPO_RAW_URL, TEMPLATE_PATHS } from \"./constants\";\nimport { fileExists, readFile, dirExists, listFiles, listDirs, copyDir, ensureDir } from \"./fs\";\n\nexport interface TemplateManifest {\n commands: string[];\n rules: string[];\n skills: string[];\n}\n\nexport type TemplateType = \"commands\" | \"rules\" | \"skills\";\n\nexport interface TemplateItem {\n name: string;\n type: TemplateType;\n}\n\nfunction getLocalTemplatesDir(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n return join(currentDir, \"..\", \"templates\");\n}\n\nfunction getLocalManifest(): TemplateManifest | null {\n const templatesDir = getLocalTemplatesDir();\n const manifestPath = join(templatesDir, \"manifest.json\");\n\n if (fileExists(manifestPath)) {\n try {\n return JSON.parse(readFile(manifestPath)) as TemplateManifest;\n } catch {\n return null;\n }\n }\n\n const commandsDir = join(templatesDir, \"commands\");\n const rulesDir = join(templatesDir, \"rules\");\n const skillsDir = join(templatesDir, \"skills\");\n\n if (!dirExists(commandsDir) && !dirExists(rulesDir) && !dirExists(skillsDir)) {\n return null;\n }\n\n return {\n commands: dirExists(commandsDir) ? listFiles(commandsDir, \".md\") : [],\n rules: dirExists(rulesDir) ? listFiles(rulesDir, \".mdc\") : [],\n skills: dirExists(skillsDir) ? listDirs(skillsDir) : [],\n };\n}\n\nfunction getLocalTemplateContent(type: TemplateType, filename: string): string | null {\n const templatesDir = getLocalTemplatesDir();\n const filePath = join(templatesDir, type, filename);\n\n if (fileExists(filePath)) {\n return readFile(filePath);\n }\n\n return null;\n}\n\nexport function getLocalSkillDir(skillName: string): string | null {\n const templatesDir = getLocalTemplatesDir();\n const skillPath = join(templatesDir, \"skills\", skillName);\n\n if (dirExists(skillPath)) {\n return skillPath;\n }\n\n return null;\n}\n\nexport function copyLocalSkill(skillName: string, targetDir: string): boolean {\n const sourcePath = getLocalSkillDir(skillName);\n if (!sourcePath) return false;\n\n const destPath = join(targetDir, skillName);\n ensureDir(destPath);\n copyDir(sourcePath, destPath);\n return true;\n}\n\nexport async function fetchTemplateManifest(): Promise<TemplateManifest> {\n const localManifest = getLocalManifest();\n if (localManifest) {\n return localManifest;\n }\n\n const url = `${REPO_RAW_URL}/templates/manifest.json`;\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch template manifest: ${response.statusText}`);\n }\n\n return response.json() as Promise<TemplateManifest>;\n}\n\nexport async function fetchTemplateContent(\n type: TemplateType,\n filename: string\n): Promise<string> {\n const localContent = getLocalTemplateContent(type, filename);\n if (localContent !== null) {\n return localContent;\n }\n\n const templatePath = TEMPLATE_PATHS[type];\n const url = `${REPO_RAW_URL}/${templatePath}/${filename}`;\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch template ${filename}: ${response.statusText}`);\n }\n\n return response.text();\n}\n\nexport async function fetchMultipleTemplates(\n type: TemplateType,\n filenames: string[]\n): Promise<Map<string, string>> {\n const results = new Map<string, string>();\n\n const fetchPromises = filenames.map(async (filename) => {\n const content = await fetchTemplateContent(type, filename);\n return { filename, content };\n });\n\n const settled = await Promise.allSettled(fetchPromises);\n\n for (const result of settled) {\n if (result.status === \"fulfilled\") {\n results.set(result.value.filename, result.value.content);\n }\n }\n\n return results;\n}\n\nexport function getTemplateLabel(filename: string): string {\n const nameWithoutExt = filename.replace(/\\.(md|mdc)$/, \"\");\n return nameWithoutExt\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function getSkillLabel(skillName: string): string {\n return skillName\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n","export const REPO_URL = \"github:duongductrong/cursor-kit\";\nexport const REPO_REF = \"master\";\nexport const REPO_RAW_URL = \"https://raw.githubusercontent.com/duongductrong/cursor-kit/master\";\n\nexport const CURSOR_DIR = \".cursor\";\nexport const COMMANDS_DIR = \"commands\";\nexport const RULES_DIR = \"rules\";\nexport const SKILLS_DIR = \"skills\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\nexport const SKILL_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n skills: \"templates/skills\",\n} as const;\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { highlight } from \"../utils/branding\";\nimport {\n dirExists,\n ensureDir,\n fileExists,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n writeFile,\n} from \"../utils/fs\";\n\ntype ItemType = \"command\" | \"rule\" | \"skill\";\n\nconst COMMAND_TEMPLATE = `You are a helpful assistant. Describe what this command does.\n\n## Instructions\n- Step 1: ...\n- Step 2: ...\n\n## Rules\n- Be concise\n- Focus on the task\n\nSTART: Wait for user input.\n`;\n\nconst RULE_TEMPLATE = `---\ndescription: Describe when this rule should apply\nglobs: \nalwaysApply: false\n---\n\n# Rule Title\n\nDescribe the rule behavior here.\n\n## Guidelines\n- Guideline 1\n- Guideline 2\n`;\n\nconst SKILL_TEMPLATE = `---\ndescription: Describe when this skill should be activated\nglobs:\nalwaysApply: false\n---\n\n# Skill Name\n\nBrief description of what this skill enables.\n\n## Core Capabilities\n\n- Capability 1\n- Capability 2\n\n## When to Use\n\nUse this skill when:\n- Condition 1\n- Condition 2\n\n## References\n\nFor detailed guidance, see the references folder:\n- [Reference 1](./references/example.md) - Description\n`;\n\nconst SKILL_REFERENCE_TEMPLATE = `# Reference Title\n\nDetailed reference content goes here.\n\n## Section 1\n\nContent...\n\n## Section 2\n\nContent...\n`;\n\nfunction generateSlug(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\")\n .trim();\n}\n\nexport const addCommand = defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a new command, rule, or skill\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command', 'rule', or 'skill'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command, rule, or skill\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\", \"skill\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeResult = await p.select({\n message: \"What do you want to add?\",\n options: [\n {\n value: \"command\",\n label: \"Command\",\n hint: \"A reusable prompt template\",\n },\n {\n value: \"rule\",\n label: \"Rule\",\n hint: \"Project-specific AI behavior rules\",\n },\n {\n value: \"skill\",\n label: \"Skill\",\n hint: \"Comprehensive guide with references\",\n },\n ],\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemType} name:`,\n placeholder: itemType === \"command\" ? \"my-command\" : itemType === \"rule\" ? \"my-rule\" : \"my-skill\",\n validate: (value) => {\n if (!value.trim()) return \"Name is required\";\n if (value.length < 2) return \"Name must be at least 2 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult;\n }\n\n const slug = generateSlug(itemName);\n const isCommand = itemType === \"command\";\n // const isRule = itemType === \"rule\";\n const isSkill = itemType === \"skill\";\n\n let targetPath: string;\n let displayPath: string;\n\n if (isSkill) {\n const skillsDir = getSkillsDir();\n targetPath = join(skillsDir, slug);\n displayPath = targetPath;\n } else {\n const targetDir = isCommand ? getCommandsDir() : getRulesDir();\n const extension = isCommand ? \".md\" : \".mdc\";\n targetPath = join(targetDir, `${slug}${extension}`);\n displayPath = targetPath;\n }\n\n if (isSkill ? dirExists(targetPath) : fileExists(targetPath)) {\n const shouldOverwrite = await p.confirm({\n message: `${highlight(isSkill ? slug : slug + (isCommand ? \".md\" : \".mdc\"))} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start(`Creating ${itemType}...`);\n\n try {\n if (isSkill) {\n ensureDir(targetPath);\n ensureDir(join(targetPath, \"references\"));\n writeFile(join(targetPath, \"SKILL.mdc\"), SKILL_TEMPLATE);\n writeFile(join(targetPath, \"references\", \"example.md\"), SKILL_REFERENCE_TEMPLATE);\n } else {\n const targetDir = isCommand ? getCommandsDir() : getRulesDir();\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n writeFile(targetPath, template);\n }\n\n s.stop(`${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created`);\n\n console.log();\n if (isSkill) {\n console.log(pc.dim(\" Directory: \") + highlight(displayPath));\n console.log(pc.dim(\" Main file: \") + highlight(join(displayPath, \"SKILL.mdc\")));\n } else {\n console.log(pc.dim(\" File: \") + highlight(displayPath));\n }\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created! Edit the file to customize it.`)\n );\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listFiles,\n listDirs,\n getCursorDir,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull latest updates from cursor-kit repository\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only pull commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only pull rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only pull skills\",\n default: false,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Force overwrite without confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const pullAll = !args.commands && !args.rules && !args.skills;\n const shouldPullCommands = pullAll || args.commands;\n const shouldPullRules = pullAll || args.rules;\n const shouldPullSkills = pullAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit pull \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, \".mdc\");\n const existingSkills = listDirs(skillsDir);\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0 || existingSkills.length > 0;\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` Commands: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` Rules: ${existingRules.length} files`));\n }\n if (existingSkills.length > 0) {\n console.log(pc.dim(` Skills: ${existingSkills.length} directories`));\n }\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"This will merge with existing files. Continue?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(getCursorDir());\n\n if (shouldPullCommands) {\n s.start(\"Pulling commands...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands updated\");\n }\n\n if (shouldPullRules) {\n s.start(\"Pulling rules...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules updated\");\n }\n\n if (shouldPullSkills) {\n s.start(\"Pulling skills...\");\n await downloadTemplate(`${REPO_URL}/templates/skills#${REPO_REF}`, {\n dir: skillsDir,\n force: true,\n });\n s.stop(\"Skills updated\");\n }\n\n printDivider();\n console.log();\n\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, \".mdc\");\n const newSkills = listDirs(skillsDir);\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `Commands: ${highlight(newCommands.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullRules) {\n const added = newRules.length - existingRules.length;\n printSuccess(\n `Rules: ${highlight(newRules.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullSkills) {\n const added = newSkills.length - existingSkills.length;\n printSuccess(\n `Skills: ${highlight(newSkills.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n console.log();\n p.outro(pc.green(\"✨ Successfully pulled latest updates!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { highlight, printDivider } from \"../utils/branding\";\nimport {\n fileExists,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listDirs,\n listFiles,\n readFile,\n} from \"../utils/fs\";\n\ninterface ItemInfo {\n name: string;\n path: string;\n description?: string;\n}\n\nfunction extractDescription(\n content: string,\n isCommand: boolean\n): string | undefined {\n if (isCommand) {\n const firstLine = content.trim().split(\"\\n\")[0];\n if (\n firstLine &&\n !firstLine.startsWith(\"#\") &&\n !firstLine.startsWith(\"---\")\n ) {\n return firstLine.slice(0, 60) + (firstLine.length > 60 ? \"...\" : \"\");\n }\n } else {\n const match = content.match(/description:\\s*(.+)/);\n if (match) {\n return match[1].trim().slice(0, 60) + (match[1].length > 60 ? \"...\" : \"\");\n }\n }\n return undefined;\n}\n\nfunction getItems(\n dir: string,\n extension: string,\n isCommand: boolean\n): ItemInfo[] {\n const files = listFiles(dir, extension);\n return files.map((file) => {\n const filePath = join(dir, file);\n const content = fileExists(filePath) ? readFile(filePath) : \"\";\n return {\n name: file.replace(extension, \"\"),\n path: filePath,\n description: extractDescription(content, isCommand),\n };\n });\n}\n\nfunction getSkills(dir: string): ItemInfo[] {\n const skillDirs = listDirs(dir);\n return skillDirs.map((skillName) => {\n const skillPath = join(dir, skillName);\n const skillFile = join(skillPath, \"SKILL.mdc\");\n const altSkillFile = join(skillPath, \"SKILL.md\");\n\n let description: string | undefined;\n\n if (fileExists(skillFile)) {\n const content = readFile(skillFile);\n description = extractDescription(content, false);\n } else if (fileExists(altSkillFile)) {\n const content = readFile(altSkillFile);\n description = extractDescription(content, false);\n }\n\n return {\n name: skillName,\n path: skillPath,\n description,\n };\n });\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all commands, rules, and skills\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only list commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only list rules\",\n default: false,\n },\n skills: {\n type: \"boolean\",\n alias: \"s\",\n description: \"Only list skills\",\n default: false,\n },\n verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show full file paths\",\n default: false,\n },\n },\n async run({ args }) {\n const listAll = !args.commands && !args.rules && !args.skills;\n const shouldListCommands = listAll || args.commands;\n const shouldListRules = listAll || args.rules;\n const shouldListSkills = listAll || args.skills;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit list \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const commands = shouldListCommands\n ? getItems(commandsDir, \".md\", true)\n : [];\n const rules = shouldListRules ? getItems(rulesDir, \".mdc\", false) : [];\n const skills = shouldListSkills ? getSkills(skillsDir) : [];\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands, rules, or skills found.\"));\n console.log(\n pc.dim(\" Run \") +\n highlight(\"cursor-kit init\") +\n pc.dim(\" to get started.\")\n );\n console.log();\n p.outro(pc.dim(\"Nothing to show\"));\n return;\n }\n\n printDivider();\n\n if (shouldListCommands && commands.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 📜 Commands\")) + pc.dim(` (${commands.length})`)\n );\n console.log();\n\n commands.forEach((cmd) => {\n console.log(` ${pc.green(\"●\")} ${highlight(cmd.name)}`);\n if (cmd.description) {\n console.log(pc.dim(` ${cmd.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${cmd.path}`));\n }\n });\n }\n\n if (shouldListRules && rules.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 📋 Rules\")) + pc.dim(` (${rules.length})`)\n );\n console.log();\n\n rules.forEach((rule) => {\n console.log(` ${pc.green(\"●\")} ${highlight(rule.name)}`);\n if (rule.description) {\n console.log(pc.dim(` ${rule.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${rule.path}`));\n }\n });\n }\n\n if (shouldListSkills && skills.length > 0) {\n console.log();\n console.log(\n pc.bold(pc.cyan(\" 🎯 Skills\")) + pc.dim(` (${skills.length})`)\n );\n console.log();\n\n skills.forEach((skill) => {\n console.log(` ${pc.green(\"●\")} ${highlight(skill.name)}`);\n if (skill.description) {\n console.log(pc.dim(` ${skill.description}`));\n }\n if (args.verbose) {\n console.log(pc.dim(` ${skill.path}`));\n }\n });\n }\n\n console.log();\n printDivider();\n\n const total = commands.length + rules.length + skills.length;\n p.outro(pc.dim(`Total: ${total} item${total !== 1 ? \"s\" : \"\"}`));\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n listFiles,\n listDirs,\n removeFile,\n fileExists,\n dirExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\" | \"skill\";\n\ninterface SelectOption {\n value: string;\n label: string;\n hint?: string;\n}\n\nexport const removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: \"Remove a command, rule, or skill\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command', 'rule', or 'skill'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command, rule, or skill to remove\",\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n const skillsDir = getSkillsDir();\n\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, \".mdc\").map((f) => f.replace(\".mdc\", \"\"));\n const skills = listDirs(skillsDir);\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands, rules, or skills to remove.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\", \"skill\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeOptions: SelectOption[] = [];\n\n if (commands.length > 0) {\n typeOptions.push({\n value: \"command\",\n label: \"Command\",\n hint: `${commands.length} available`,\n });\n }\n\n if (rules.length > 0) {\n typeOptions.push({\n value: \"rule\",\n label: \"Rule\",\n hint: `${rules.length} available`,\n });\n }\n\n if (skills.length > 0) {\n typeOptions.push({\n value: \"skill\",\n label: \"Skill\",\n hint: `${skills.length} available`,\n });\n }\n\n const typeResult = await p.select({\n message: \"What do you want to remove?\",\n options: typeOptions,\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n const isCommand = itemType === \"command\";\n const isRule = itemType === \"rule\";\n const isSkill = itemType === \"skill\";\n const items = isCommand ? commands : isRule ? rules : skills;\n const dir = isCommand ? commandsDir : isRule ? rulesDir : skillsDir;\n const extension = isCommand ? \".md\" : isRule ? \".mdc\" : \"\";\n\n if (items.length === 0) {\n p.cancel(`No ${itemType}s found`);\n process.exit(0);\n }\n\n if (args.name && items.includes(args.name)) {\n itemName = args.name;\n } else {\n const itemOptions: SelectOption[] = items.map((item) => ({\n value: item,\n label: item,\n }));\n\n const nameResult = await p.select({\n message: `Select ${itemType} to remove:`,\n options: itemOptions,\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult as string;\n }\n\n const targetPath = isSkill\n ? join(dir, itemName)\n : join(dir, `${itemName}${extension}`);\n\n const exists = isSkill ? dirExists(targetPath) : fileExists(targetPath);\n\n if (!exists) {\n p.cancel(`${itemType} '${itemName}' not found`);\n process.exit(1);\n }\n\n if (!args.force) {\n const displayName = isSkill ? itemName : itemName + extension;\n const shouldDelete = await p.confirm({\n message: `Are you sure you want to delete ${highlight(displayName)}?${isSkill ? \" (This will remove the entire skill directory)\" : \"\"}`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldDelete) || !shouldDelete) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n try {\n removeFile(targetPath);\n const displayName = isSkill ? itemName : itemName + extension;\n console.log();\n printSuccess(`Removed ${highlight(displayName)}`);\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } catch (error) {\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { spawn } from \"node:child_process\";\nimport { join, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync, chmodSync, readdirSync } from \"node:fs\";\nimport { highlight, printDivider, printSuccess, printInfo, printWarning } from \"../utils/branding\";\n\ntype InstanceAction = \"create\" | \"remove\" | \"reinstall\";\n\ninterface InstanceInfo {\n name: string;\n path: string;\n}\n\nfunction getBinPath(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const possiblePaths = [\n join(currentDir, \"..\", \"..\", \"bin\"),\n join(currentDir, \"..\", \"bin\"),\n ];\n\n for (const binPath of possiblePaths) {\n if (existsSync(binPath)) {\n return binPath;\n }\n }\n\n return possiblePaths[0];\n}\n\nfunction ensureExecutable(scriptPath: string): void {\n try {\n chmodSync(scriptPath, 0o755);\n } catch {\n // Ignore permission errors\n }\n}\n\nfunction getExistingInstances(): InstanceInfo[] {\n const userAppsDir = join(process.env.HOME ?? \"\", \"Applications\");\n if (!existsSync(userAppsDir)) return [];\n\n try {\n const apps = readdirSync(userAppsDir);\n return apps\n .filter((app) => app.startsWith(\"Cursor\") && app.endsWith(\".app\") && app !== \"Cursor.app\")\n .map((app) => ({\n name: app.replace(\".app\", \"\"),\n path: join(userAppsDir, app),\n }));\n } catch {\n return [];\n }\n}\n\nfunction runScript(scriptPath: string, args: string[]): Promise<number> {\n return new Promise((resolve) => {\n ensureExecutable(scriptPath);\n\n const child = spawn(scriptPath, args, {\n stdio: \"inherit\",\n });\n\n child.on(\"close\", (code) => {\n resolve(code ?? 1);\n });\n\n child.on(\"error\", () => {\n resolve(1);\n });\n });\n}\n\nexport const instanceCommand = defineCommand({\n meta: {\n name: \"instance\",\n description: \"Manage Cursor IDE instances for multi-account login (macOS only)\",\n },\n args: {\n action: {\n type: \"string\",\n alias: \"a\",\n description: \"Action: 'create', 'reinstall', or 'remove'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the instance (e.g. 'Cursor Enterprise')\",\n },\n list: {\n type: \"boolean\",\n alias: \"l\",\n description: \"List existing Cursor instances\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit instance \")));\n\n // OS check\n if (process.platform !== \"darwin\") {\n console.log();\n printWarning(\"This command only works on macOS.\");\n console.log(pc.dim(\" Cursor instance management requires macOS-specific features.\"));\n console.log();\n p.outro(pc.dim(\"Exiting\"));\n process.exit(1);\n }\n\n // List mode\n if (args.list) {\n const instances = getExistingInstances();\n printDivider();\n console.log();\n\n if (instances.length === 0) {\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Run \") + highlight(\"cursor-kit instance\") + pc.dim(\" to create one.\"));\n } else {\n console.log(pc.bold(pc.cyan(\" 🖥 Cursor Instances\")) + pc.dim(` (${instances.length})`));\n console.log();\n for (const instance of instances) {\n console.log(` ${pc.green(\"●\")} ${highlight(instance.name)}`);\n console.log(pc.dim(` └─ ${instance.path}`));\n }\n }\n\n console.log();\n printDivider();\n p.outro(pc.dim(`Total: ${instances.length} instance${instances.length !== 1 ? \"s\" : \"\"}`));\n return;\n }\n\n const s = p.spinner();\n\n // Check prerequisites\n s.start(\"Checking prerequisites...\");\n const binPath = getBinPath();\n const createScript = join(binPath, \"cursor-new-instance\");\n const removeScript = join(binPath, \"cursor-remove-instance\");\n const reinstallScript = join(binPath, \"cursor-reinstall-instance.sh\");\n\n const scriptsExist = existsSync(createScript) && existsSync(removeScript) && existsSync(reinstallScript);\n if (!scriptsExist) {\n s.stop(\"Prerequisites check failed\");\n console.log();\n printWarning(\"Required scripts not found.\");\n console.log(pc.dim(` Expected at: ${binPath}`));\n console.log();\n p.outro(pc.red(\"Installation may be corrupted\"));\n process.exit(1);\n }\n\n const originalCursor = \"/Applications/Cursor.app\";\n if (!existsSync(originalCursor)) {\n s.stop(\"Prerequisites check failed\");\n console.log();\n printWarning(\"Cursor.app not found in /Applications\");\n console.log(pc.dim(\" Please install Cursor IDE first.\"));\n console.log();\n p.outro(pc.red(\"Cursor IDE required\"));\n process.exit(1);\n }\n\n s.stop(\"Prerequisites verified\");\n\n // Get existing instances for context\n const existingInstances = getExistingInstances();\n\n let action: InstanceAction;\n let instanceName: string;\n\n // Determine action\n if (args.action && [\"create\", \"remove\", \"reinstall\"].includes(args.action)) {\n action = args.action as InstanceAction;\n } else {\n const actionResult = await p.select({\n message: \"What would you like to do?\",\n options: [\n {\n value: \"create\",\n label: \"Create new instance\",\n hint: \"Clone Cursor with separate identity\",\n },\n {\n value: \"reinstall\",\n label: \"Reinstall instance\",\n hint: existingInstances.length > 0\n ? \"Fix broken instance after Cursor update\"\n : \"No instances to reinstall\",\n },\n {\n value: \"remove\",\n label: \"Remove instance\",\n hint: existingInstances.length > 0\n ? `${existingInstances.length} instance${existingInstances.length !== 1 ? \"s\" : \"\"} available`\n : \"No instances to remove\",\n },\n ],\n });\n\n if (p.isCancel(actionResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n action = actionResult as InstanceAction;\n }\n\n // Get instance name\n if (args.name) {\n instanceName = args.name;\n } else if ((action === \"remove\" || action === \"reinstall\") && existingInstances.length > 0) {\n // For remove/reinstall actions, show existing instances to select from\n const actionLabel = action === \"remove\" ? \"remove\" : \"reinstall\";\n const instanceResult = await p.select({\n message: `Select instance to ${actionLabel}:`,\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.name,\n hint: inst.path,\n })),\n });\n\n if (p.isCancel(instanceResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n instanceName = instanceResult as string;\n } else if ((action === \"remove\" || action === \"reinstall\") && existingInstances.length === 0) {\n console.log();\n printInfo(`No custom Cursor instances found to ${action}.`);\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n } else {\n // For create action, prompt for name\n const nameResult = await p.text({\n message: \"Enter a name for the new instance:\",\n placeholder: \"Cursor Enterprise\",\n validate: (value) => {\n if (!value.trim()) return \"Instance name is required\";\n if (value.length < 2) return \"Name must be at least 2 characters\";\n const existing = existingInstances.find(\n (i) => i.name.toLowerCase() === value.toLowerCase()\n );\n if (existing) return `Instance \"${value}\" already exists`;\n return undefined;\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n instanceName = nameResult;\n }\n\n // Show summary\n printDivider();\n console.log();\n console.log(pc.bold(pc.cyan(\" 📋 Summary\")));\n console.log();\n const actionColor = action === \"create\" ? pc.green : action === \"reinstall\" ? pc.blue : pc.yellow;\n const actionLabel = action === \"create\" ? \"Create\" : action === \"reinstall\" ? \"Reinstall\" : \"Remove\";\n console.log(` ${pc.dim(\"Action:\")} ${actionColor(actionLabel)}`);\n console.log(` ${pc.dim(\"Instance:\")} ${highlight(instanceName)}`);\n\n if (action === \"create\" || action === \"reinstall\") {\n const slug = instanceName.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n console.log(` ${pc.dim(\"Bundle ID:\")} ${pc.dim(\"com.cursor.\")}${highlight(slug)}`);\n console.log(` ${pc.dim(\"Location:\")} ${pc.dim(\"~/Applications/\")}${highlight(instanceName + \".app\")}`);\n if (action === \"reinstall\") {\n const dataDir = join(process.env.HOME ?? \"\", \"Library\", \"Application Support\", instanceName.replace(/ /g, \"\"));\n console.log(` ${pc.dim(\"Data:\")} ${pc.green(\"✓\")} ${pc.dim(\"Preserved at\")} ${pc.dim(dataDir)}`);\n }\n } else {\n const targetPath = join(process.env.HOME ?? \"\", \"Applications\", `${instanceName}.app`);\n console.log(` ${pc.dim(\"Path:\")} ${pc.dim(targetPath)}`);\n }\n\n console.log();\n printDivider();\n console.log();\n\n const shouldContinue = await p.confirm({\n message: action === \"create\"\n ? \"Create this Cursor instance?\"\n : action === \"reinstall\"\n ? \"Reinstall this instance? (User data will be preserved)\"\n : \"Remove this Cursor instance? This cannot be undone.\",\n initialValue: action !== \"remove\",\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n // Execute script\n console.log();\n printDivider();\n console.log();\n\n const scriptPath = action === \"create\" \n ? createScript \n : action === \"reinstall\"\n ? reinstallScript\n : removeScript;\n // Pass --yes to remove/reinstall scripts since we already confirmed in the CLI\n const scriptArgs = action === \"remove\" || action === \"reinstall\" \n ? [\"--yes\", instanceName] \n : [instanceName];\n const exitCode = await runScript(scriptPath, scriptArgs);\n\n console.log();\n printDivider();\n console.log();\n\n if (exitCode === 0) {\n if (action === \"create\") {\n printSuccess(`Instance ${highlight(instanceName)} created successfully!`);\n console.log();\n console.log(pc.dim(\" Next steps:\"));\n console.log(pc.dim(\" • The new instance should launch automatically\"));\n console.log(pc.dim(\" • Sign in with a different Cursor account\"));\n console.log(pc.dim(\" • Find it in ~/Applications/\"));\n } else if (action === \"reinstall\") {\n printSuccess(`Instance ${highlight(instanceName)} reinstalled successfully!`);\n console.log();\n console.log(pc.dim(\" The instance has been:\"));\n console.log(pc.dim(\" • Refreshed with the latest Cursor version\"));\n console.log(pc.dim(\" • Relaunched with your preserved data\"));\n console.log(pc.dim(\" • Ready to use with your existing account\"));\n } else {\n printSuccess(`Instance ${highlight(instanceName)} removed successfully!`);\n }\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n printWarning(`Operation completed with exit code ${exitCode}`);\n console.log();\n p.outro(pc.yellow(\"Check the output above for details\"));\n process.exit(exitCode);\n }\n },\n});\n"],"mappings":"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","names":["import_citty","gradient","figlet","pc","pc","text","import_picocolors","import_node_path","import_node_path","pc","p","import_citty","import_node_path","import_picocolors","pc","import_citty","p","import_picocolors","pc","p","import_citty","import_node_path","import_picocolors","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","import_node_path","import_node_url","import_node_fs","resolve","pc","actionLabel","require"]}
package/dist/cli.js CHANGED
@@ -1255,7 +1255,7 @@ var instanceCommand = defineCommand6({
1255
1255
  action: {
1256
1256
  type: "string",
1257
1257
  alias: "a",
1258
- description: "Action: 'create' or 'remove'"
1258
+ description: "Action: 'create', 'reinstall', or 'remove'"
1259
1259
  },
1260
1260
  name: {
1261
1261
  type: "string",
@@ -1304,7 +1304,8 @@ var instanceCommand = defineCommand6({
1304
1304
  const binPath = getBinPath();
1305
1305
  const createScript = join7(binPath, "cursor-new-instance");
1306
1306
  const removeScript = join7(binPath, "cursor-remove-instance");
1307
- const scriptsExist = existsSync2(createScript) && existsSync2(removeScript);
1307
+ const reinstallScript = join7(binPath, "cursor-reinstall-instance.sh");
1308
+ const scriptsExist = existsSync2(createScript) && existsSync2(removeScript) && existsSync2(reinstallScript);
1308
1309
  if (!scriptsExist) {
1309
1310
  s.stop("Prerequisites check failed");
1310
1311
  console.log();
@@ -1328,7 +1329,7 @@ var instanceCommand = defineCommand6({
1328
1329
  const existingInstances = getExistingInstances();
1329
1330
  let action;
1330
1331
  let instanceName;
1331
- if (args.action && ["create", "remove"].includes(args.action)) {
1332
+ if (args.action && ["create", "remove", "reinstall"].includes(args.action)) {
1332
1333
  action = args.action;
1333
1334
  } else {
1334
1335
  const actionResult = await p6.select({
@@ -1339,6 +1340,11 @@ var instanceCommand = defineCommand6({
1339
1340
  label: "Create new instance",
1340
1341
  hint: "Clone Cursor with separate identity"
1341
1342
  },
1343
+ {
1344
+ value: "reinstall",
1345
+ label: "Reinstall instance",
1346
+ hint: existingInstances.length > 0 ? "Fix broken instance after Cursor update" : "No instances to reinstall"
1347
+ },
1342
1348
  {
1343
1349
  value: "remove",
1344
1350
  label: "Remove instance",
@@ -1354,9 +1360,10 @@ var instanceCommand = defineCommand6({
1354
1360
  }
1355
1361
  if (args.name) {
1356
1362
  instanceName = args.name;
1357
- } else if (action === "remove" && existingInstances.length > 0) {
1363
+ } else if ((action === "remove" || action === "reinstall") && existingInstances.length > 0) {
1364
+ const actionLabel2 = action === "remove" ? "remove" : "reinstall";
1358
1365
  const instanceResult = await p6.select({
1359
- message: "Select instance to remove:",
1366
+ message: `Select instance to ${actionLabel2}:`,
1360
1367
  options: existingInstances.map((inst) => ({
1361
1368
  value: inst.name,
1362
1369
  label: inst.name,
@@ -1368,9 +1375,9 @@ var instanceCommand = defineCommand6({
1368
1375
  process.exit(0);
1369
1376
  }
1370
1377
  instanceName = instanceResult;
1371
- } else if (action === "remove" && existingInstances.length === 0) {
1378
+ } else if ((action === "remove" || action === "reinstall") && existingInstances.length === 0) {
1372
1379
  console.log();
1373
- printInfo("No custom Cursor instances found to remove.");
1380
+ printInfo(`No custom Cursor instances found to ${action}.`);
1374
1381
  console.log();
1375
1382
  p6.outro(pc7.dim("Nothing to do"));
1376
1383
  return;
@@ -1398,12 +1405,18 @@ var instanceCommand = defineCommand6({
1398
1405
  console.log();
1399
1406
  console.log(pc7.bold(pc7.cyan(" \u{1F4CB} Summary")));
1400
1407
  console.log();
1401
- console.log(` ${pc7.dim("Action:")} ${action === "create" ? pc7.green("Create") : pc7.yellow("Remove")}`);
1408
+ const actionColor = action === "create" ? pc7.green : action === "reinstall" ? pc7.blue : pc7.yellow;
1409
+ const actionLabel = action === "create" ? "Create" : action === "reinstall" ? "Reinstall" : "Remove";
1410
+ console.log(` ${pc7.dim("Action:")} ${actionColor(actionLabel)}`);
1402
1411
  console.log(` ${pc7.dim("Instance:")} ${highlight(instanceName)}`);
1403
- if (action === "create") {
1412
+ if (action === "create" || action === "reinstall") {
1404
1413
  const slug = instanceName.toLowerCase().replace(/[^a-z0-9]/g, "");
1405
1414
  console.log(` ${pc7.dim("Bundle ID:")} ${pc7.dim("com.cursor.")}${highlight(slug)}`);
1406
1415
  console.log(` ${pc7.dim("Location:")} ${pc7.dim("~/Applications/")}${highlight(instanceName + ".app")}`);
1416
+ if (action === "reinstall") {
1417
+ const dataDir = join7(process.env.HOME ?? "", "Library", "Application Support", instanceName.replace(/ /g, ""));
1418
+ console.log(` ${pc7.dim("Data:")} ${pc7.green("\u2713")} ${pc7.dim("Preserved at")} ${pc7.dim(dataDir)}`);
1419
+ }
1407
1420
  } else {
1408
1421
  const targetPath = join7(process.env.HOME ?? "", "Applications", `${instanceName}.app`);
1409
1422
  console.log(` ${pc7.dim("Path:")} ${pc7.dim(targetPath)}`);
@@ -1412,8 +1425,8 @@ var instanceCommand = defineCommand6({
1412
1425
  printDivider();
1413
1426
  console.log();
1414
1427
  const shouldContinue = await p6.confirm({
1415
- message: action === "create" ? "Create this Cursor instance?" : "Remove this Cursor instance? This cannot be undone.",
1416
- initialValue: action === "create"
1428
+ message: action === "create" ? "Create this Cursor instance?" : action === "reinstall" ? "Reinstall this instance? (User data will be preserved)" : "Remove this Cursor instance? This cannot be undone.",
1429
+ initialValue: action !== "remove"
1417
1430
  });
1418
1431
  if (p6.isCancel(shouldContinue) || !shouldContinue) {
1419
1432
  p6.cancel("Operation cancelled");
@@ -1422,8 +1435,8 @@ var instanceCommand = defineCommand6({
1422
1435
  console.log();
1423
1436
  printDivider();
1424
1437
  console.log();
1425
- const scriptPath = action === "create" ? createScript : removeScript;
1426
- const scriptArgs = action === "remove" ? ["--yes", instanceName] : [instanceName];
1438
+ const scriptPath = action === "create" ? createScript : action === "reinstall" ? reinstallScript : removeScript;
1439
+ const scriptArgs = action === "remove" || action === "reinstall" ? ["--yes", instanceName] : [instanceName];
1427
1440
  const exitCode = await runScript(scriptPath, scriptArgs);
1428
1441
  console.log();
1429
1442
  printDivider();
@@ -1436,6 +1449,13 @@ var instanceCommand = defineCommand6({
1436
1449
  console.log(pc7.dim(" \u2022 The new instance should launch automatically"));
1437
1450
  console.log(pc7.dim(" \u2022 Sign in with a different Cursor account"));
1438
1451
  console.log(pc7.dim(" \u2022 Find it in ~/Applications/"));
1452
+ } else if (action === "reinstall") {
1453
+ printSuccess(`Instance ${highlight(instanceName)} reinstalled successfully!`);
1454
+ console.log();
1455
+ console.log(pc7.dim(" The instance has been:"));
1456
+ console.log(pc7.dim(" \u2022 Refreshed with the latest Cursor version"));
1457
+ console.log(pc7.dim(" \u2022 Relaunched with your preserved data"));
1458
+ console.log(pc7.dim(" \u2022 Ready to use with your existing account"));
1439
1459
  } else {
1440
1460
  printSuccess(`Instance ${highlight(instanceName)} removed successfully!`);
1441
1461
  }