cursor-kit-cli 1.6.0 → 1.7.0-beta.1

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/templates.ts","../src/utils/constants.ts","../src/utils/copilot.ts","../src/commands/add.ts","../src/utils/target.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/instance.ts","../src/utils/alias.ts"],"sourcesContent":["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 getAgentDir,\n getAgentRulesDir,\n getAgentWorkflowsDir,\n getAgentSkillsDir,\n} from \"../utils/fs\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\nimport {\n fetchTemplateManifest,\n fetchMultipleTemplates,\n getTemplateLabel,\n getSkillLabel,\n copyLocalSkill,\n convertMdToMdc,\n transformTocContentForCursor,\n transformRuleForAntiGravity,\n transformCommandToWorkflow,\n copyLocalSkillForAntiGravity,\n type TemplateManifest,\n type TemplateType,\n} from \"../utils/templates\";\nimport { type InstructionTarget } from \"../types/init\";\nimport {\n checkCopilotConflicts,\n installCopilotInstructions,\n} from \"../utils/copilot\";\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface InitResult {\n added: string[];\n skipped: string[];\n}\n\nasync function promptTargetSelection(): Promise<InstructionTarget | symbol> {\n return await p.select({\n message: \"Which AI IDE are you using?\",\n options: [\n {\n value: \"cursor\" as const,\n label: \"Cursor\",\n hint: \"Generate .cursor/ directory structure\",\n },\n {\n value: \"github-copilot\" as const,\n label: \"GitHub Copilot\",\n hint: \"Generate .github/copilot-instructions.md\",\n },\n {\n value: \"google-antigravity\" as const,\n label: \"Google AntiGravity\",\n hint: \"Generate .agent/ directory with rules and workflows\",\n },\n ],\n initialValue: \"cursor\",\n });\n}\n\nasync function handleCopilotInstallation(\n cwd: string,\n manifest: TemplateManifest,\n args: {\n all?: boolean;\n commands?: boolean;\n rules?: boolean;\n skills?: boolean;\n force?: boolean;\n },\n shouldInitCommands: boolean,\n shouldInitRules: boolean,\n shouldInitSkills: boolean\n): Promise<void> {\n const s = p.spinner();\n\n const canProceed = await checkCopilotConflicts(cwd, args.force ?? false);\n if (!canProceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n let selectedCommands: string[] = [];\n let selectedRules: string[] = [];\n let selectedSkills: string[] = [];\n\n if (shouldInitCommands) {\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\n if (shouldInitRules) {\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\n if (shouldInitSkills) {\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\n if (\n selectedCommands.length === 0 &&\n selectedRules.length === 0 &&\n selectedSkills.length === 0\n ) {\n p.cancel(\"No templates selected\");\n process.exit(0);\n }\n\n try {\n s.start(\"Installing GitHub Copilot instructions...\");\n const result = await installCopilotInstructions(\n cwd,\n selectedCommands,\n selectedRules,\n selectedSkills\n );\n s.stop(\"GitHub Copilot instructions installed\");\n\n printDivider();\n console.log();\n\n if (result.commands.length > 0) {\n printSuccess(`Commands: ${highlight(result.commands.length.toString())} added`);\n for (const cmd of result.commands) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${cmd}`));\n }\n }\n\n if (result.rules.length > 0) {\n printSuccess(`Rules: ${highlight(result.rules.length.toString())} added`);\n for (const rule of result.rules) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${rule}`));\n }\n }\n\n if (result.skills.length > 0) {\n printSuccess(`Skills: ${highlight(result.skills.length.toString())} added`);\n for (const skill of result.skills) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${skill}`));\n }\n }\n\n console.log();\n p.outro(pc.green(\"✨ GitHub Copilot instructions created successfully!\"));\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\nasync function handleAntiGravityInstallation(\n cwd: string,\n manifest: TemplateManifest,\n args: {\n all?: boolean;\n commands?: boolean;\n rules?: boolean;\n skills?: boolean;\n force?: boolean;\n },\n shouldInitCommands: boolean,\n shouldInitRules: boolean,\n shouldInitSkills: boolean\n): Promise<void> {\n const s = p.spinner();\n const agentDir = getAgentDir(cwd);\n const rulesDir = getAgentRulesDir(cwd);\n const workflowsDir = getAgentWorkflowsDir(cwd);\n const skillsDir = getAgentSkillsDir(cwd);\n\n // Check for existing conflicts\n const existingRules = getConflictingFiles(rulesDir, manifest.rules);\n const existingWorkflows = getConflictingFiles(workflowsDir, manifest.commands);\n const existingSkills = getConflictingDirs(skillsDir, manifest.skills);\n\n if ((existingRules.length > 0 || existingWorkflows.length > 0 || existingSkills.length > 0) && !args.force) {\n console.log();\n console.log(pc.yellow(\"⚠ Existing files found:\"));\n for (const file of [...existingRules, ...existingWorkflows, ...existingSkills]) {\n console.log(pc.dim(` └─ ${file}`));\n }\n console.log();\n\n const proceed = await p.confirm({\n message: \"Overwrite existing files?\",\n initialValue: false,\n });\n\n if (p.isCancel(proceed) || !proceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n let selectedCommands: string[] = [];\n let selectedRules: string[] = [];\n let selectedSkills: string[] = [];\n\n // Commands become workflows in AntiGravity\n if (shouldInitCommands) {\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\n if (shouldInitRules) {\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\n if (shouldInitSkills) {\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\n if (selectedCommands.length === 0 && selectedRules.length === 0 && selectedSkills.length === 0) {\n p.cancel(\"No templates selected\");\n process.exit(0);\n }\n\n const results = {\n workflows: [] as string[],\n rules: [] as string[],\n skills: [] as string[],\n };\n\n try {\n ensureDir(agentDir);\n ensureDir(rulesDir);\n ensureDir(workflowsDir);\n ensureDir(skillsDir);\n\n // Install commands as workflows\n if (selectedCommands.length > 0) {\n s.start(\"Installing workflows...\");\n const templates = await fetchMultipleTemplates(\"commands\", selectedCommands);\n \n for (const [filename, content] of templates) {\n const transformedContent = transformCommandToWorkflow(content, filename);\n const filePath = join(workflowsDir, filename);\n writeFile(filePath, transformedContent);\n results.workflows.push(filename);\n }\n s.stop(\"Workflows installed\");\n }\n\n // Install rules with AntiGravity format\n if (selectedRules.length > 0) {\n s.start(\"Installing rules...\");\n const templates = await fetchMultipleTemplates(\"rules\", selectedRules);\n \n for (const [filename, content] of templates) {\n const transformedContent = transformRuleForAntiGravity(content, filename);\n const filePath = join(rulesDir, filename);\n writeFile(filePath, transformedContent);\n results.rules.push(filename);\n }\n s.stop(\"Rules installed\");\n }\n\n // Install skills with AntiGravity format\n if (selectedSkills.length > 0) {\n s.start(\"Installing skills...\");\n for (const skillName of selectedSkills) {\n const success = copyLocalSkillForAntiGravity(skillName, skillsDir);\n if (success) {\n results.skills.push(skillName);\n }\n }\n s.stop(\"Skills installed\");\n }\n\n printDivider();\n console.log();\n\n if (results.workflows.length > 0) {\n printSuccess(`Workflows: ${highlight(results.workflows.length.toString())} added`);\n for (const wf of results.workflows) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${wf}`));\n }\n }\n\n if (results.rules.length > 0) {\n printSuccess(`Rules: ${highlight(results.rules.length.toString())} added`);\n for (const rule of results.rules) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${rule}`));\n }\n }\n\n if (results.skills.length > 0) {\n printSuccess(`Skills: ${highlight(results.skills.length.toString())} added`);\n for (const skill of results.skills) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${skill}`));\n }\n }\n\n console.log();\n p.outro(pc.green(\"✨ Google AntiGravity configuration created successfully!\"));\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\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 target: InstructionTarget\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n \n // For Cursor target, rules need .mdc extension, commands stay .md\n // For GitHub Copilot, everything stays .md\n const expectedFilenames = selectedTemplates.map((filename) => {\n if (target === \"cursor\" && type === \"rules\" && filename.endsWith(\".md\")) {\n return convertMdToMdc(filename);\n }\n return filename;\n });\n \n const conflictingFiles = getConflictingFiles(targetDir, expectedFilenames);\n\n let templatesToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n templatesToInstall = selectedTemplates.filter(\n (t) => {\n const expectedName = target === \"cursor\" && type === \"rules\" && t.endsWith(\".md\")\n ? convertMdToMdc(t)\n : t;\n return !conflictingFiles.includes(expectedName);\n }\n );\n result.skipped = conflictingFiles.filter((f) =>\n expectedFilenames.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 // Convert .md to .mdc for rules when target is cursor\n const outputFilename = target === \"cursor\" && type === \"rules\" && filename.endsWith(\".md\")\n ? convertMdToMdc(filename)\n : filename;\n \n // Transform toc.md content for Cursor to fix links\n let transformedContent = content;\n if (target === \"cursor\" && type === \"rules\" && filename === \"toc.md\") {\n transformedContent = transformTocContentForCursor(content);\n }\n \n const filePath = join(targetDir, outputFilename);\n writeFile(filePath, transformedContent);\n result.added.push(outputFilename);\n }\n\n return result;\n}\n\nasync function installSkills(\n targetDir: string,\n selectedSkills: string[],\n conflictStrategy: ConflictStrategy,\n target: InstructionTarget\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 // Convert SKILL.md to SKILL.mdc for Cursor target\n const convertToMdc = target === \"cursor\";\n\n for (const skillName of skillsToInstall) {\n const success = copyLocalSkill(skillName, targetDir, convertToMdc);\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 target: {\n type: \"string\",\n alias: \"t\",\n description: \"Target AI IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n default: undefined,\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 let target: InstructionTarget;\n if (args.target === \"github-copilot\" || args.target === \"cursor\" || args.target === \"google-antigravity\") {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\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 if (target === \"github-copilot\") {\n await handleCopilotInstallation(\n cwd,\n manifest,\n args,\n shouldInitCommands,\n shouldInitRules,\n shouldInitSkills\n );\n return;\n }\n\n if (target === \"google-antigravity\") {\n await handleAntiGravityInstallation(\n cwd,\n manifest,\n args,\n shouldInitCommands,\n shouldInitRules,\n shouldInitSkills\n );\n return;\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 target\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 // For Cursor, rules need .mdc extension, so check for .mdc files\n const expectedRuleFilenames = selectedRules.map((filename) => {\n return target === \"cursor\" && filename.endsWith(\".md\")\n ? convertMdToMdc(filename)\n : filename;\n });\n const conflictingRules = getConflictingFiles(rulesDir, expectedRuleFilenames);\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 target\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 target\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\nexport function getGitHubDir(cwd: string = process.cwd()): string {\n return join(cwd, \".github\");\n}\n\nexport function getCopilotInstructionsPath(cwd: string = process.cwd()): string {\n return join(getGitHubDir(cwd), \"copilot-instructions.md\");\n}\n\nexport function getCopilotInstructionsDir(cwd: string = process.cwd()): string {\n return join(getGitHubDir(cwd), \"copilot-instructions\");\n}\n\nexport function getCopilotCommandsDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"commands\");\n}\n\nexport function getCopilotRulesDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"rules\");\n}\n\nexport function getCopilotSkillsDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"skills\");\n}\n\nexport function deleteFile(path: string): void {\n if (fileExists(path)) {\n rmSync(path);\n }\n}\n\n// Google AntiGravity directory utilities\nexport function getAgentDir(cwd: string = process.cwd()): string {\n return join(cwd, \".agent\");\n}\n\nexport function getAgentRulesDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"rules\");\n}\n\nexport function getAgentWorkflowsDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"workflows\");\n}\n\nexport function getAgentSkillsDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"skills\");\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, writeFile, deleteFile } 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, \".md\") : [],\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 // Backward compatibility: try .mdc if .md not found (for rules)\n if (type === \"rules\" && filename.endsWith(\".md\")) {\n const mdcPath = filePath.replace(/\\.md$/, \".mdc\");\n if (fileExists(mdcPath)) {\n return readFile(mdcPath);\n }\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 convertMdToMdc(filename: string): string {\n return filename.replace(/\\.md$/, \".mdc\");\n}\n\nexport function transformTocContentForCursor(content: string): string {\n // Transform skill links: SKILL.md -> SKILL.mdc\n content = content.replace(/\\]\\(\\.\\.\\/skills\\/([^/]+)\\/SKILL\\.md\\)/g, '](../skills/$1/SKILL.mdc)');\n \n // Transform rule links: .md -> .mdc (for rules in the same directory)\n content = content.replace(/\\]\\(\\.\\/([^)]+)\\.md\\)/g, '](./$1.mdc)');\n \n return content;\n}\n\nexport function copyLocalSkill(\n skillName: string,\n targetDir: string,\n convertToMdc: boolean = false\n): 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\n // Convert SKILL.md to SKILL.mdc if needed (for Cursor)\n if (convertToMdc) {\n const skillMdPath = join(destPath, \"SKILL.md\");\n const skillMdcPath = join(destPath, \"SKILL.mdc\");\n if (fileExists(skillMdPath)) {\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n // Delete SKILL.md since Cursor only uses SKILL.mdc\n deleteFile(skillMdPath);\n }\n }\n\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\nexport function stripFrontmatter(content: string): string {\n const frontmatterRegex = /^---\\n[\\s\\S]*?\\n---\\n/;\n return content.replace(frontmatterRegex, \"\").trim();\n}\n\nexport function extractFrontmatter(content: string): {\n alwaysApply?: boolean;\n name?: string;\n description?: string;\n [key: string]: unknown;\n} {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n/);\n if (!frontmatterMatch) return {};\n\n const frontmatter = frontmatterMatch[1];\n const result: Record<string, unknown> = {};\n\n for (const line of frontmatter.split(\"\\n\")) {\n const match = line.match(/^(\\w+):\\s*(.+)$/);\n if (match) {\n const [, key, value] = match;\n result[key] =\n value === \"true\" ? true : value === \"false\" ? false : value;\n }\n }\n\n return result;\n}\n/**\n * Get semantic description keywords for a rule based on filename.\n * Helps the IDE understand when to apply the rule.\n */\nfunction getSemanticDescriptionForRule(filename: string): string {\n const baseName = filename.replace(/\\.(md|mdc)$/, \"\").toLowerCase();\n \n const semanticMap: Record<string, string> = {\n \"toc\": \"Table of contents, skill routing, rule selection guide, when to apply rules\",\n \"git\": \"Git commit conventions, branching strategy, version control, commit messages\",\n \"coding-style\": \"Code formatting, style guidelines, best practices, clean code\",\n };\n \n return semanticMap[baseName] || \"\";\n}\n\n/**\n * Transform a Cursor rule to Google AntiGravity rule format.\n * Converts alwaysApply: true to trigger: always_on\n * Otherwise uses trigger: model_decision\n * Adds semantic keywords to description for better IDE understanding\n */\nexport function transformRuleForAntiGravity(content: string, filename: string = \"\"): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Determine trigger type based on alwaysApply flag\n const trigger = frontmatter.alwaysApply === true ? \"always_on\" : \"model_decision\";\n \n // Build description with semantic keywords\n const existingDesc = frontmatter.description || frontmatter.name || \"\";\n const semanticDesc = getSemanticDescriptionForRule(filename);\n const description = semanticDesc || existingDesc;\n \n // Create AntiGravity frontmatter\n let newFrontmatter = `---\\ntrigger: ${trigger}\\n`;\n if (description) {\n newFrontmatter += `description: ${description}\\n`;\n }\n newFrontmatter += \"---\\n\\n\";\n \n return newFrontmatter + body;\n}\n\n/**\n * Transform a Cursor command to Google AntiGravity workflow format.\n * Adds description frontmatter based on the command content.\n */\nexport function transformCommandToWorkflow(content: string, filename: string): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Use existing description or derive from filename\n const description = frontmatter.description || \n filename.replace(/\\.md$/, \"\").split(\"-\").map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(\" \");\n \n // Create AntiGravity workflow frontmatter\n const newFrontmatter = `---\\ndescription: ${description}\\n---\\n\\n`;\n \n return newFrontmatter + body;\n}\n\n/**\n * Transform SKILL.md content to AntiGravity format.\n * Uses existing description from frontmatter with trigger: manual\n */\nexport function transformSkillForAntiGravity(content: string): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Use existing description from SKILL.md metadata\n const description = frontmatter.description || frontmatter.name || \"\";\n \n // Create AntiGravity skill frontmatter with manual trigger\n let newFrontmatter = `---\\ntrigger: manual\\n`;\n if (description) {\n newFrontmatter += `description: ${description}\\n`;\n }\n newFrontmatter += \"---\\n\\n\";\n \n return newFrontmatter + body;\n}\n\n/**\n * Copy a local skill to AntiGravity format.\n * Transforms SKILL.md with proper frontmatter.\n */\nexport function copyLocalSkillForAntiGravity(\n skillName: string,\n targetDir: string\n): 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\n // Transform SKILL.md to AntiGravity format\n const skillMdPath = join(destPath, \"SKILL.md\");\n if (fileExists(skillMdPath)) {\n const content = readFile(skillMdPath);\n const transformedContent = transformSkillForAntiGravity(content);\n writeFile(skillMdPath, transformedContent);\n }\n\n return true;\n}\n\nexport function generateCopilotIndex(\n commands: string[],\n rules: string[],\n skills: string[],\n alwaysApplyRules: string[] = []\n): string {\n let output = \"# GitHub Copilot Custom Instructions\\n\\n\";\n output += \"> Generated by cursor-kit-cli\\n\\n\";\n output +=\n \"This file provides instructions for GitHub Copilot. \";\n output +=\n \"When working on tasks, read the relevant files from the `copilot-instructions/` directory as needed.\\n\\n\";\n\n if (alwaysApplyRules.length > 0) {\n output += \"## Rules Applied Automatically\\n\\n\";\n output +=\n \"The following rules are always applied. Read these files for context:\\n\\n\";\n for (const rule of alwaysApplyRules) {\n const ruleName = rule.replace(/\\.md$/, \"\");\n output += `- **${ruleName}**: Read \\`.github/copilot-instructions/rules/${rule}\\` for guidelines\\n`;\n }\n output += \"\\n\";\n }\n\n if (commands.length > 0) {\n output += \"## Commands\\n\\n\";\n output +=\n \"When the user requests a command, read the corresponding file:\\n\\n\";\n for (const cmd of commands) {\n const cmdName = cmd.replace(/\\.md$/, \"\");\n output += `- **${cmdName}**: Read \\`.github/copilot-instructions/commands/${cmd}\\` when user requests \"${cmdName}\"\\n`;\n }\n output += \"\\n\";\n }\n\n if (rules.length > 0) {\n output += \"## Rules\\n\\n\";\n output +=\n \"Apply these rules when relevant to the task. Read the files as needed:\\n\\n\";\n for (const rule of rules) {\n const ruleName = rule.replace(/\\.md$/, \"\");\n output += `- **${ruleName}**: Read \\`.github/copilot-instructions/rules/${rule}\\` for ${ruleName} guidelines\\n`;\n }\n output += \"\\n\";\n }\n\n if (skills.length > 0) {\n output += \"## Skills\\n\\n\";\n output +=\n \"These are comprehensive guides for specialized domains. Read the relevant skill when working in that domain:\\n\\n\";\n for (const skill of skills) {\n output += `- **${skill}**: Read \\`.github/copilot-instructions/skills/${skill}/SKILL.md\\` when working on ${skill} tasks\\n`;\n }\n output += \"\\n\";\n }\n\n output += \"## Usage Guidelines\\n\\n\";\n output +=\n \"- **Don't read all files at once** - Only read files relevant to the current task\\n\";\n output +=\n \"- **Commands**: Read command files when the user explicitly requests that command\\n\";\n output +=\n \"- **Rules**: Reference rules when they apply to the current coding task\\n\";\n output +=\n \"- **Skills**: Read skill files when working in that domain (e.g., frontend-development for React components)\\n\";\n output +=\n \"- **Always Apply Rules**: These are automatically considered, but you can reference them for specific guidance\\n\\n\";\n\n return output;\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 { join } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n ensureDir,\n fileExists,\n dirExists,\n writeFile,\n deleteFile,\n readFile,\n getCopilotInstructionsPath,\n getCopilotInstructionsDir,\n getCopilotCommandsDir,\n getCopilotRulesDir,\n getCopilotSkillsDir,\n} from \"./fs\";\nimport {\n fetchMultipleTemplates,\n copyLocalSkill,\n stripFrontmatter,\n extractFrontmatter,\n generateCopilotIndex,\n} from \"./templates\";\nimport { printSuccess } from \"./branding\";\n\nexport interface CopilotInstallResult {\n commands: string[];\n rules: string[];\n skills: string[];\n alwaysApplyRules: string[];\n}\n\nasync function installCopilotCommands(\n commandsDir: string,\n selectedCommands: string[]\n): Promise<string[]> {\n if (selectedCommands.length === 0) return [];\n\n ensureDir(commandsDir);\n const commandsMap = await fetchMultipleTemplates(\"commands\", selectedCommands);\n const installed: string[] = [];\n\n for (const [filename, content] of commandsMap) {\n const cleanContent = stripFrontmatter(content);\n const filePath = join(commandsDir, filename);\n writeFile(filePath, cleanContent);\n installed.push(filename);\n }\n\n return installed;\n}\n\nasync function installCopilotRules(\n rulesDir: string,\n selectedRules: string[]\n): Promise<{ installed: string[]; alwaysApply: string[] }> {\n if (selectedRules.length === 0) return { installed: [], alwaysApply: [] };\n\n ensureDir(rulesDir);\n const rulesMap = await fetchMultipleTemplates(\"rules\", selectedRules);\n const installed: string[] = [];\n const alwaysApply: string[] = [];\n\n for (const [filename, content] of rulesMap) {\n const frontmatter = extractFrontmatter(content);\n const cleanContent = stripFrontmatter(content);\n\n // Templates are now .md, but handle .mdc for backward compatibility\n const mdFilename = filename.endsWith(\".md\") ? filename : filename.replace(/\\.mdc$/, \".md\");\n const filePath = join(rulesDir, mdFilename);\n writeFile(filePath, cleanContent);\n\n installed.push(mdFilename);\n\n if (frontmatter.alwaysApply) {\n alwaysApply.push(mdFilename);\n }\n }\n\n return { installed, alwaysApply };\n}\n\nasync function installCopilotSkills(\n skillsDir: string,\n selectedSkills: string[]\n): Promise<string[]> {\n if (selectedSkills.length === 0) return [];\n\n ensureDir(skillsDir);\n const installed: string[] = [];\n\n for (const skillName of selectedSkills) {\n const success = copyLocalSkill(skillName, skillsDir);\n if (!success) continue;\n\n const skillTargetDir = join(skillsDir, skillName);\n const skillMdcPath = join(skillTargetDir, \"SKILL.mdc\");\n const skillMdPath = join(skillTargetDir, \"SKILL.md\");\n\n // Handle SKILL.md (new format) or SKILL.mdc (backward compatibility)\n if (fileExists(skillMdPath)) {\n // Already .md, just strip frontmatter if needed\n const content = readFile(skillMdPath);\n const cleanContent = stripFrontmatter(content);\n writeFile(skillMdPath, cleanContent);\n } else if (fileExists(skillMdcPath)) {\n // Convert .mdc to .md (backward compatibility)\n const content = readFile(skillMdcPath);\n const cleanContent = stripFrontmatter(content);\n writeFile(skillMdPath, cleanContent);\n deleteFile(skillMdcPath);\n }\n\n installed.push(skillName);\n }\n\n return installed;\n}\n\nexport async function checkCopilotConflicts(\n cwd: string,\n force: boolean\n): Promise<boolean> {\n const copilotDir = getCopilotInstructionsDir(cwd);\n const copilotIndexPath = getCopilotInstructionsPath(cwd);\n\n const hasExistingDir = dirExists(copilotDir);\n const hasExistingIndex = fileExists(copilotIndexPath);\n\n if ((hasExistingDir || hasExistingIndex) && !force) {\n const overwrite = await p.confirm({\n message: \"GitHub Copilot instructions already exist. Overwrite?\",\n initialValue: false,\n });\n\n if (p.isCancel(overwrite) || !overwrite) {\n return false;\n }\n }\n\n return true;\n}\n\nexport async function installCopilotInstructions(\n cwd: string,\n selectedCommands: string[],\n selectedRules: string[],\n selectedSkills: string[]\n): Promise<CopilotInstallResult> {\n const commandsDir = getCopilotCommandsDir(cwd);\n const rulesDir = getCopilotRulesDir(cwd);\n const skillsDir = getCopilotSkillsDir(cwd);\n const copilotIndexPath = getCopilotInstructionsPath(cwd);\n\n const [installedCommands, rulesResult, installedSkills] = await Promise.all([\n installCopilotCommands(commandsDir, selectedCommands),\n installCopilotRules(rulesDir, selectedRules),\n installCopilotSkills(skillsDir, selectedSkills),\n ]);\n\n const installedRules = rulesResult.installed;\n const alwaysApplyRules = rulesResult.alwaysApply;\n\n const indexContent = generateCopilotIndex(\n installedCommands,\n installedRules,\n installedSkills,\n alwaysApplyRules\n );\n\n writeFile(copilotIndexPath, indexContent);\n\n printSuccess(`GitHub Copilot instructions generated`);\n console.log(pc.dim(` └─ ${copilotIndexPath}`));\n console.log(pc.dim(` └─ ${getCopilotInstructionsDir(cwd)}/`));\n\n return {\n commands: installedCommands,\n rules: installedRules.map((r) => r.replace(/\\.md$/, \"\")),\n skills: installedSkills,\n alwaysApplyRules,\n };\n}\n\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport type { InstructionTarget } from \"../types/init\";\nimport { highlight } from \"../utils/branding\";\nimport {\n dirExists,\n ensureDir,\n fileExists,\n writeFile,\n readFile,\n deleteFile,\n} from \"../utils/fs\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\nimport { convertMdToMdc } from \"../utils/templates\";\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 target: {\n type: \"string\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\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: target === \"google-antigravity\" ? \"Workflow\" : \"Command\",\n hint: target === \"google-antigravity\" ? \"A workflow template\" : \"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 const itemLabel = itemType === \"command\" ? targetConfig.commandsLabel : itemType;\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemLabel} 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 isSkill = itemType === \"skill\";\n const isRule = itemType === \"rule\";\n\n let targetPath: string;\n let displayPath: string;\n\n if (isSkill) {\n targetPath = join(directories.skillsDir, slug);\n displayPath = targetPath;\n } else {\n const targetDir = isCommand ? directories.commandsDir : directories.rulesDir;\n const extension = \".md\";\n targetPath = join(targetDir, `${slug}${extension}`);\n displayPath = targetPath;\n }\n\n const getExpectedExtension = (): string => {\n if (isSkill) return \"\";\n if (isCommand) return targetConfig.commandsExtension;\n return targetConfig.rulesExtension;\n };\n\n const checkPath = isSkill\n ? targetPath\n : isCommand\n ? targetPath\n : join(directories.rulesDir, `${slug}${getExpectedExtension()}`);\n\n const exists = isSkill\n ? dirExists(targetPath)\n : fileExists(targetPath) || (!isCommand && fileExists(checkPath));\n\n if (exists) {\n const displayName = isSkill\n ? slug\n : isCommand\n ? `${slug}.md`\n : `${slug}${getExpectedExtension()}`;\n const shouldOverwrite = await p.confirm({\n message: `${highlight(displayName)} 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 ${itemLabel}...`);\n\n try {\n if (isSkill) {\n ensureDir(targetPath);\n ensureDir(join(targetPath, \"references\"));\n const skillMdPath = join(targetPath, \"SKILL.md\");\n writeFile(skillMdPath, SKILL_TEMPLATE);\n writeFile(join(targetPath, \"references\", \"example.md\"), SKILL_REFERENCE_TEMPLATE);\n\n if (target === \"cursor\") {\n const skillMdcPath = join(targetPath, \"SKILL.mdc\");\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n deleteFile(skillMdPath);\n }\n } else {\n const targetDir = isCommand ? directories.commandsDir : directories.rulesDir;\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n\n if (isCommand) {\n writeFile(targetPath, template);\n } else if (isRule) {\n writeFile(targetPath, template);\n if (target === \"cursor\") {\n const mdcPath = join(targetDir, convertMdToMdc(`${slug}.md`));\n const content = readFile(targetPath);\n writeFile(mdcPath, content);\n deleteFile(targetPath);\n }\n }\n }\n\n s.stop(`${itemLabel.charAt(0).toUpperCase() + itemLabel.slice(1)} created`);\n\n console.log();\n console.log(pc.dim(\" Target: \") + highlight(targetConfig.label));\n if (isSkill) {\n console.log(pc.dim(\" Directory: \") + highlight(displayPath));\n const skillFileName = target === \"cursor\" ? \"SKILL.mdc\" : \"SKILL.md\";\n console.log(pc.dim(\" Main file: \") + highlight(join(displayPath, skillFileName)));\n } else if (isCommand) {\n console.log(pc.dim(\" File: \") + highlight(displayPath));\n } else {\n const finalPath = target === \"cursor\"\n ? join(directories.rulesDir, convertMdToMdc(`${slug}.md`))\n : targetPath;\n console.log(pc.dim(\" File: \") + highlight(finalPath));\n }\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemLabel.charAt(0).toUpperCase() + itemLabel.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 * as p from \"@clack/prompts\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n getCopilotInstructionsDir,\n getCopilotCommandsDir,\n getCopilotRulesDir,\n getCopilotSkillsDir,\n getAgentDir,\n getAgentRulesDir,\n getAgentWorkflowsDir,\n getAgentSkillsDir,\n} from \"./fs\";\n\ninterface TargetDirectories {\n rootDir: string;\n commandsDir: string;\n rulesDir: string;\n skillsDir: string;\n}\n\ninterface TargetConfig {\n label: string;\n hint: string;\n commandsLabel: string;\n rulesLabel: string;\n rulesExtension: string;\n commandsExtension: string;\n}\n\nexport const TARGET_CONFIGS: Record<InstructionTarget, TargetConfig> = {\n cursor: {\n label: \"Cursor\",\n hint: \".cursor/ directory\",\n commandsLabel: \"commands\",\n rulesLabel: \"rules\",\n rulesExtension: \".mdc\",\n commandsExtension: \".md\",\n },\n \"github-copilot\": {\n label: \"GitHub Copilot\",\n hint: \".github/copilot-instructions/ directory\",\n commandsLabel: \"commands\",\n rulesLabel: \"rules\",\n rulesExtension: \".md\",\n commandsExtension: \".md\",\n },\n \"google-antigravity\": {\n label: \"Google AntiGravity\",\n hint: \".agent/ directory\",\n commandsLabel: \"workflows\",\n rulesLabel: \"rules\",\n rulesExtension: \".md\",\n commandsExtension: \".md\",\n },\n};\n\nexport async function promptTargetSelection(): Promise<InstructionTarget | symbol> {\n return await p.select({\n message: \"Which AI IDE are you targeting?\",\n options: [\n {\n value: \"cursor\" as const,\n label: \"Cursor\",\n hint: \"Work with .cursor/ directory\",\n },\n {\n value: \"github-copilot\" as const,\n label: \"GitHub Copilot\",\n hint: \"Work with .github/copilot-instructions/\",\n },\n {\n value: \"google-antigravity\" as const,\n label: \"Google AntiGravity\",\n hint: \"Work with .agent/ directory\",\n },\n ],\n initialValue: \"cursor\",\n });\n}\n\nexport function isValidTarget(value: string | undefined): value is InstructionTarget {\n return value === \"cursor\" || value === \"github-copilot\" || value === \"google-antigravity\";\n}\n\nexport function getTargetDirectories(\n target: InstructionTarget,\n cwd: string = process.cwd()\n): TargetDirectories {\n switch (target) {\n case \"cursor\":\n return {\n rootDir: getCursorDir(cwd),\n commandsDir: getCommandsDir(cwd),\n rulesDir: getRulesDir(cwd),\n skillsDir: getSkillsDir(cwd),\n };\n case \"github-copilot\":\n return {\n rootDir: getCopilotInstructionsDir(cwd),\n commandsDir: getCopilotCommandsDir(cwd),\n rulesDir: getCopilotRulesDir(cwd),\n skillsDir: getCopilotSkillsDir(cwd),\n };\n case \"google-antigravity\":\n return {\n rootDir: getAgentDir(cwd),\n commandsDir: getAgentWorkflowsDir(cwd),\n rulesDir: getAgentRulesDir(cwd),\n skillsDir: getAgentSkillsDir(cwd),\n };\n }\n}\n\nexport function getTargetConfig(target: InstructionTarget): TargetConfig {\n return TARGET_CONFIGS[target];\n}\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport { join } from \"node:path\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n ensureDir,\n listFiles,\n listDirs,\n writeFile,\n readFile,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\nimport {\n convertMdToMdc,\n transformTocContentForCursor,\n transformRuleForAntiGravity,\n transformCommandToWorkflow,\n} from \"../utils/templates\";\n\nasync function convertPulledFilesForTarget(\n target: InstructionTarget,\n directories: ReturnType<typeof getTargetDirectories>\n): Promise<void> {\n const { commandsDir, rulesDir, skillsDir } = directories;\n\n if (target === \"cursor\") {\n const ruleFiles = listFiles(rulesDir, \".md\");\n for (const file of ruleFiles) {\n const sourcePath = join(rulesDir, file);\n const content = readFile(sourcePath);\n const mdcFilename = convertMdToMdc(file);\n const destPath = join(rulesDir, mdcFilename);\n\n let transformedContent = content;\n if (file === \"toc.md\") {\n transformedContent = transformTocContentForCursor(content);\n }\n\n writeFile(destPath, transformedContent);\n\n const { rmSync } = await import(\"node:fs\");\n rmSync(sourcePath);\n }\n\n const skillDirs = listDirs(skillsDir);\n for (const skillDir of skillDirs) {\n const skillPath = join(skillsDir, skillDir);\n const skillMdPath = join(skillPath, \"SKILL.md\");\n const skillMdcPath = join(skillPath, \"SKILL.mdc\");\n\n const { existsSync } = await import(\"node:fs\");\n if (existsSync(skillMdPath)) {\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n const { rmSync } = await import(\"node:fs\");\n rmSync(skillMdPath);\n }\n }\n } else if (target === \"google-antigravity\") {\n const ruleFiles = listFiles(rulesDir, \".md\");\n for (const file of ruleFiles) {\n const sourcePath = join(rulesDir, file);\n const content = readFile(sourcePath);\n const transformedContent = transformRuleForAntiGravity(content, file);\n writeFile(sourcePath, transformedContent);\n }\n\n const commandFiles = listFiles(commandsDir, \".md\");\n for (const file of commandFiles) {\n const sourcePath = join(commandsDir, file);\n const content = readFile(sourcePath);\n const transformedContent = transformCommandToWorkflow(content, file);\n writeFile(sourcePath, transformedContent);\n }\n }\n}\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 target: {\n type: \"string\",\n alias: \"t\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\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 let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\n const { rootDir, commandsDir, rulesDir, skillsDir } = directories;\n\n const rulesExtension = target === \"cursor\" ? \".mdc\" : \".md\";\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, rulesExtension);\n const existingSkills = listDirs(skillsDir);\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0 || existingSkills.length > 0;\n\n console.log(pc.dim(` Target: ${highlight(targetConfig.label)}`));\n console.log();\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` ${targetConfig.commandsLabel}: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` ${targetConfig.rulesLabel}: ${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(rootDir);\n\n if (shouldPullCommands) {\n s.start(`Pulling ${targetConfig.commandsLabel}...`);\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(`${targetConfig.commandsLabel.charAt(0).toUpperCase() + targetConfig.commandsLabel.slice(1)} updated`);\n }\n\n if (shouldPullRules) {\n s.start(`Pulling ${targetConfig.rulesLabel}...`);\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(`${targetConfig.rulesLabel.charAt(0).toUpperCase() + targetConfig.rulesLabel.slice(1)} 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 if (target !== \"github-copilot\") {\n s.start(\"Converting files for target...\");\n await convertPulledFilesForTarget(target, directories);\n s.stop(\"Files converted\");\n }\n\n printDivider();\n console.log();\n\n const newRulesExtension = target === \"cursor\" ? \".mdc\" : \".md\";\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, newRulesExtension);\n const newSkills = listDirs(skillsDir);\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `${targetConfig.commandsLabel.charAt(0).toUpperCase() + targetConfig.commandsLabel.slice(1)}: ${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 `${targetConfig.rulesLabel.charAt(0).toUpperCase() + targetConfig.rulesLabel.slice(1)}: ${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 for ${targetConfig.label}!`));\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 { join } from \"node:path\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n listFiles,\n listDirs,\n removeFile,\n fileExists,\n dirExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\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 target: {\n type: \"string\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\n const { commandsDir, rulesDir, skillsDir } = directories;\n\n const rulesExtension = targetConfig.rulesExtension;\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, rulesExtension).map((f) => f.replace(rulesExtension, \"\"));\n const skills = listDirs(skillsDir);\n\n console.log(pc.dim(` Target: ${highlight(targetConfig.label)}`));\n console.log();\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(` No ${targetConfig.commandsLabel}, ${targetConfig.rulesLabel}, 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: target === \"google-antigravity\" ? \"Workflow\" : \"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 ? rulesExtension : \"\";\n const itemLabel = isCommand ? targetConfig.commandsLabel : itemType;\n\n if (items.length === 0) {\n p.cancel(`No ${itemLabel}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 ${itemLabel} 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(`${itemLabel} '${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)} from ${targetConfig.label}`);\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\";\nimport {\n createAlias,\n removeAlias,\n getAliasForInstance,\n aliasExists,\n generateAliasName,\n getStorageLocationLabel,\n isHomeBinInPath,\n getPathSetupInstructions,\n detectShellConfigPath,\n type AliasStorageLocation,\n} from \"../utils/alias\";\n\ntype InstanceAction = \"create\" | \"remove\" | \"reinstall\" | \"alias\";\n\ninterface InstanceInfo {\n name: string;\n path: string;\n alias?: 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 const name = app.replace(\".app\", \"\");\n const aliasEntry = getAliasForInstance(name);\n return {\n name,\n path: join(userAppsDir, app),\n alias: aliasEntry?.aliasName,\n };\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\nasync function promptAliasCreation(\n instanceName: string,\n providedAlias?: string,\n providedLocation?: string,\n skipConfirmation?: boolean\n): Promise<{ aliasName: string; location: AliasStorageLocation } | null> {\n if (!skipConfirmation) {\n const shouldCreateAlias = await p.confirm({\n message: \"Would you like to create a shell alias for this instance?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldCreateAlias) || !shouldCreateAlias) {\n return null;\n }\n }\n\n let aliasName: string;\n const suggestedAlias = generateAliasName(instanceName);\n\n if (providedAlias) {\n aliasName = providedAlias;\n } else {\n const aliasResult = await p.text({\n message: \"Enter alias name:\",\n placeholder: suggestedAlias,\n initialValue: suggestedAlias,\n validate: (value) => {\n if (!value.trim()) return \"Alias name is required\";\n if (!/^[a-z0-9-]+$/.test(value)) return \"Alias must contain only lowercase letters, numbers, and hyphens\";\n if (aliasExists(value)) return `Alias \"${value}\" already exists`;\n return undefined;\n },\n });\n\n if (p.isCancel(aliasResult)) {\n return null;\n }\n\n aliasName = aliasResult;\n }\n\n let location: AliasStorageLocation;\n\n if (providedLocation && [\"shell-config\", \"usr-local-bin\", \"home-bin\"].includes(providedLocation)) {\n location = providedLocation as AliasStorageLocation;\n } else {\n const locationResult = await p.select({\n message: \"Where should the alias be stored?\",\n options: [\n {\n value: \"shell-config\" as AliasStorageLocation,\n label: \"Shell config\",\n hint: detectShellConfigPath(),\n },\n {\n value: \"home-bin\" as AliasStorageLocation,\n label: \"~/bin\",\n hint: \"User-local executable scripts\",\n },\n {\n value: \"usr-local-bin\" as AliasStorageLocation,\n label: \"/usr/local/bin\",\n hint: \"System-wide (may require sudo)\",\n },\n ],\n });\n\n if (p.isCancel(locationResult)) {\n return null;\n }\n\n location = locationResult as AliasStorageLocation;\n }\n\n return { aliasName, location };\n}\n\nasync function handleAliasCreation(\n instanceName: string,\n aliasName: string,\n location: AliasStorageLocation\n): Promise<boolean> {\n const result = createAlias({\n aliasName,\n instanceName,\n storageLocation: location,\n });\n\n if (!result.success) {\n printWarning(`Failed to create alias: ${result.error}`);\n return false;\n }\n\n console.log();\n printSuccess(`Alias ${highlight(aliasName)} created!`);\n console.log(pc.dim(` └─ Location: ${getStorageLocationLabel(location)}`));\n\n if (location === \"home-bin\" && !isHomeBinInPath()) {\n console.log();\n printWarning(\"~/bin is not in your PATH\");\n console.log(pc.dim(getPathSetupInstructions()));\n }\n\n if (location === \"shell-config\") {\n console.log();\n console.log(pc.dim(\" Restart your terminal or run:\"));\n console.log(pc.dim(` source ${detectShellConfigPath()}`));\n }\n\n console.log();\n console.log(pc.dim(\" Usage:\"));\n console.log(pc.dim(` ${aliasName} . # Open current directory`));\n console.log(pc.dim(` ${aliasName} /path/to/dir # Open specific directory`));\n\n return true;\n}\n\nasync function handleAliasRemoval(instanceName: string): Promise<void> {\n const aliasEntry = getAliasForInstance(instanceName);\n\n if (!aliasEntry) {\n return;\n }\n\n const shouldRemove = await p.confirm({\n message: `Remove associated alias \"${aliasEntry.aliasName}\"?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldRemove) || !shouldRemove) {\n return;\n }\n\n const removed = removeAlias(aliasEntry.aliasName);\n\n if (removed) {\n printSuccess(`Alias ${highlight(aliasEntry.aliasName)} removed`);\n } else {\n printWarning(`Could not remove alias ${aliasEntry.aliasName}`);\n }\n}\n\nasync function handleAliasAction(\n instanceName: string,\n providedAlias?: string,\n providedLocation?: string\n): Promise<void> {\n const existingAlias = getAliasForInstance(instanceName);\n\n if (existingAlias) {\n console.log();\n printInfo(`Instance ${highlight(instanceName)} already has alias: ${highlight(existingAlias.aliasName)}`);\n console.log(pc.dim(` └─ Location: ${getStorageLocationLabel(existingAlias.storageLocation)}`));\n console.log();\n\n const updateChoice = await p.select({\n message: \"What would you like to do?\",\n options: [\n {\n value: \"update\",\n label: \"Update alias\",\n hint: \"Change alias name or location\",\n },\n {\n value: \"remove\",\n label: \"Remove alias\",\n hint: \"Delete the existing alias\",\n },\n {\n value: \"keep\",\n label: \"Keep current alias\",\n hint: \"No changes\",\n },\n ],\n });\n\n if (p.isCancel(updateChoice) || updateChoice === \"keep\") {\n p.outro(pc.dim(\"No changes made\"));\n return;\n }\n\n if (updateChoice === \"remove\") {\n const removed = removeAlias(existingAlias.aliasName);\n if (removed) {\n console.log();\n printSuccess(`Alias ${highlight(existingAlias.aliasName)} removed`);\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n printWarning(`Could not remove alias ${existingAlias.aliasName}`);\n p.outro(pc.yellow(\"Check file permissions\"));\n }\n return;\n }\n\n // Update: remove old alias first\n removeAlias(existingAlias.aliasName);\n }\n\n // Create new alias (skip confirmation since user already chose alias action)\n const aliasConfig = await promptAliasCreation(\n instanceName,\n providedAlias,\n providedLocation,\n true\n );\n\n if (!aliasConfig) {\n p.outro(pc.dim(\"Alias creation cancelled\"));\n return;\n }\n\n const success = await handleAliasCreation(instanceName, aliasConfig.aliasName, aliasConfig.location);\n\n if (success) {\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n p.outro(pc.yellow(\"Alias creation failed\"));\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', 'remove', or 'alias'\",\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 alias: {\n type: \"string\",\n alias: \"A\",\n description: \"Shell alias name for the instance (e.g. 'cursor-work')\",\n },\n aliasLocation: {\n type: \"string\",\n description: \"Alias storage location: 'shell-config', 'usr-local-bin', or 'home-bin'\",\n },\n skipAlias: {\n type: \"boolean\",\n description: \"Skip alias creation prompt\",\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 const aliasInfo = instance.alias ? pc.dim(` (alias: ${pc.cyan(instance.alias)})`) : \"\";\n console.log(` ${pc.green(\"●\")} ${highlight(instance.name)}${aliasInfo}`);\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 // Get existing instances for context (needed for alias action before prerequisites)\n const existingInstances = getExistingInstances();\n\n // Handle alias action early (doesn't need instance scripts)\n if (args.action === \"alias\") {\n if (existingInstances.length === 0) {\n console.log();\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Create an instance first with: \") + highlight(\"cursor-kit instance -a create\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n let instanceName: string;\n\n if (args.name) {\n const found = existingInstances.find((i) => i.name === args.name);\n if (!found) {\n printWarning(`Instance \"${args.name}\" not found.`);\n console.log(pc.dim(\" Available instances:\"));\n for (const inst of existingInstances) {\n console.log(pc.dim(` • ${inst.name}`));\n }\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n instanceName = args.name;\n } else {\n const instanceResult = await p.select({\n message: \"Select instance to manage alias:\",\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.alias ? `${inst.name} (alias: ${inst.alias})` : inst.name,\n hint: inst.alias ? \"Has alias\" : \"No alias\",\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 }\n\n await handleAliasAction(instanceName, args.alias, args.aliasLocation);\n return;\n }\n\n const s = p.spinner();\n\n // Check prerequisites (only for create/remove/reinstall)\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 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: \"alias\",\n label: \"Manage alias\",\n hint: existingInstances.length > 0\n ? \"Add or update shell alias for instance\"\n : \"No instances available\",\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 // Handle alias action if selected from menu\n if (action === \"alias\") {\n if (existingInstances.length === 0) {\n console.log();\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Create an instance first.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n const instanceResult = await p.select({\n message: \"Select instance to manage alias:\",\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.alias ? `${inst.name} (alias: ${inst.alias})` : inst.name,\n hint: inst.alias ? \"Has alias\" : \"No alias\",\n })),\n });\n\n if (p.isCancel(instanceResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n await handleAliasAction(instanceResult as string, args.alias, args.aliasLocation);\n return;\n }\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.alias ? `${inst.name} (alias: ${inst.alias})` : 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 const aliasEntry = getAliasForInstance(instanceName);\n if (aliasEntry) {\n console.log(` ${pc.dim(\"Alias:\")} ${pc.yellow(aliasEntry.aliasName)} ${pc.dim(\"(will be removed)\")}`);\n }\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\n // Offer alias creation\n if (!args.skipAlias) {\n console.log();\n\n const aliasConfig = await promptAliasCreation(\n instanceName,\n args.alias,\n args.aliasLocation\n );\n\n if (aliasConfig) {\n await handleAliasCreation(instanceName, aliasConfig.aliasName, aliasConfig.location);\n }\n } else if (args.alias) {\n // If alias is provided but skipAlias is set, still create it\n const location = (args.aliasLocation as AliasStorageLocation) ?? \"shell-config\";\n await handleAliasCreation(instanceName, args.alias, location);\n }\n\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 // Handle alias removal for remove action\n await handleAliasRemoval(instanceName);\n\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","import {\n appendFileSync,\n chmodSync,\n existsSync,\n mkdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport type AliasStorageLocation =\n | \"shell-config\"\n | \"usr-local-bin\"\n | \"home-bin\";\n\nexport interface AliasConfig {\n aliases: Record<string, AliasEntry>;\n}\n\nexport interface AliasEntry {\n instanceName: string;\n aliasName: string;\n storageLocation: AliasStorageLocation;\n createdAt: string;\n scriptPath?: string;\n}\n\nconst CURSOR_KIT_DIR = \".cursor-kit\";\nconst ALIASES_FILE = \"aliases.json\";\n\nexport function getAliasConfigDir(): string {\n return join(homedir(), CURSOR_KIT_DIR);\n}\n\nexport function getAliasConfigPath(): string {\n return join(getAliasConfigDir(), ALIASES_FILE);\n}\n\nexport function ensureConfigDir(): void {\n const configDir = getAliasConfigDir();\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n}\n\nexport function loadAliasConfig(): AliasConfig {\n const configPath = getAliasConfigPath();\n if (!existsSync(configPath)) {\n return { aliases: {} };\n }\n\n try {\n const content = readFileSync(configPath, \"utf-8\");\n return JSON.parse(content) as AliasConfig;\n } catch {\n return { aliases: {} };\n }\n}\n\nexport function saveAliasConfig(config: AliasConfig): void {\n ensureConfigDir();\n const configPath = getAliasConfigPath();\n writeFileSync(configPath, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\nexport function getInstanceDataDir(instanceName: string): string {\n return join(\n homedir(),\n \"Library\",\n \"Application Support\",\n instanceName.replace(/ /g, \"\")\n );\n}\n\nexport function getInstanceAppPath(instanceName: string): string {\n return join(homedir(), \"Applications\", `${instanceName}.app`);\n}\n\nfunction generateScriptContent(instanceName: string): string {\n const dataDir = getInstanceDataDir(instanceName);\n const appPath = getInstanceAppPath(instanceName);\n\n return `#!/usr/bin/env bash\n# Generated by cursor-kit for instance: ${instanceName}\n# This script opens the specified directory (or current directory) in the Cursor instance\n\nset -euo pipefail\n\nDIR=\"\\${1:-.}\"\n\n# Resolve to absolute path if relative\nif [[ \"\\$DIR\" != /* ]]; then\n DIR=\"\\$(cd \"\\$DIR\" 2>/dev/null && pwd)\"\nfi\n\nDATA_DIR=\"${dataDir}\"\nAPP_PATH=\"${appPath}\"\n\nif [ ! -d \"\\$APP_PATH\" ]; then\n echo \"Error: Cursor instance not found at \\$APP_PATH\" >&2\n echo \"The instance may have been removed. Run 'cursor-kit instance -l' to see available instances.\" >&2\n exit 1\nfi\n\nopen -n \"\\$APP_PATH\" --args --user-data-dir \"\\$DATA_DIR\" \"\\$DIR\"\n`;\n}\n\nfunction generateShellFunction(\n aliasName: string,\n instanceName: string\n): string {\n const dataDir = getInstanceDataDir(instanceName);\n const appPath = getInstanceAppPath(instanceName);\n\n return `\n# cursor-kit alias: ${aliasName} -> ${instanceName}\n${aliasName}() {\n local DIR=\"\\${1:-.}\"\n if [[ \"\\$DIR\" != /* ]]; then\n DIR=\"\\$(cd \"\\$DIR\" 2>/dev/null && pwd)\"\n fi\n local DATA_DIR=\"${dataDir}\"\n local APP_PATH=\"${appPath}\"\n if [ ! -d \"\\$APP_PATH\" ]; then\n echo \"Error: Cursor instance not found at \\$APP_PATH\" >&2\n return 1\n fi\n open -n \"\\$APP_PATH\" --args --user-data-dir \"\\$DATA_DIR\" \"\\$DIR\"\n}\n# end cursor-kit alias: ${aliasName}\n`;\n}\n\nexport function detectShellConfigPath(): string {\n const home = homedir();\n const shell = process.env.SHELL ?? \"/bin/zsh\";\n\n if (shell.includes(\"zsh\")) {\n return join(home, \".zshrc\");\n }\n if (shell.includes(\"bash\")) {\n const bashProfile = join(home, \".bash_profile\");\n if (existsSync(bashProfile)) {\n return bashProfile;\n }\n return join(home, \".bashrc\");\n }\n\n return join(home, \".zshrc\");\n}\n\nexport function getHomeBinDir(): string {\n return join(homedir(), \"bin\");\n}\n\nexport function getUsrLocalBinDir(): string {\n return \"/usr/local/bin\";\n}\n\nfunction ensureBinDir(binDir: string): void {\n if (!existsSync(binDir)) {\n mkdirSync(binDir, { recursive: true });\n }\n}\n\nexport function createExecutableScript(\n aliasName: string,\n instanceName: string,\n targetDir: string\n): string {\n ensureBinDir(targetDir);\n\n const scriptPath = join(targetDir, aliasName);\n const scriptContent = generateScriptContent(instanceName);\n\n writeFileSync(scriptPath, scriptContent, \"utf-8\");\n chmodSync(scriptPath, 0o755);\n\n return scriptPath;\n}\n\nexport function createShellAlias(\n aliasName: string,\n instanceName: string,\n shellConfigPath: string\n): void {\n const functionContent = generateShellFunction(aliasName, instanceName);\n\n if (!existsSync(shellConfigPath)) {\n writeFileSync(shellConfigPath, \"\", \"utf-8\");\n }\n\n const existingContent = readFileSync(shellConfigPath, \"utf-8\");\n if (existingContent.includes(`# cursor-kit alias: ${aliasName}`)) {\n removeShellAlias(aliasName, shellConfigPath);\n }\n\n appendFileSync(shellConfigPath, functionContent, \"utf-8\");\n}\n\nexport function removeShellAlias(\n aliasName: string,\n shellConfigPath: string\n): boolean {\n if (!existsSync(shellConfigPath)) {\n return false;\n }\n\n const content = readFileSync(shellConfigPath, \"utf-8\");\n const startMarker = `# cursor-kit alias: ${aliasName}`;\n const endMarker = `# end cursor-kit alias: ${aliasName}`;\n\n const startIndex = content.indexOf(startMarker);\n if (startIndex === -1) {\n return false;\n }\n\n const endIndex = content.indexOf(endMarker);\n if (endIndex === -1) {\n return false;\n }\n\n const before = content.slice(0, startIndex);\n const after = content.slice(endIndex + endMarker.length);\n\n const newContent = (before + after).replace(/\\n{3,}/g, \"\\n\\n\");\n writeFileSync(shellConfigPath, newContent, \"utf-8\");\n\n return true;\n}\n\nexport function removeExecutableScript(scriptPath: string): boolean {\n if (!existsSync(scriptPath)) {\n return false;\n }\n\n try {\n unlinkSync(scriptPath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport interface CreateAliasOptions {\n aliasName: string;\n instanceName: string;\n storageLocation: AliasStorageLocation;\n}\n\nexport interface CreateAliasResult {\n success: boolean;\n scriptPath?: string;\n shellConfigPath?: string;\n error?: string;\n}\n\nexport function createAlias(options: CreateAliasOptions): CreateAliasResult {\n const { aliasName, instanceName, storageLocation } = options;\n\n try {\n let scriptPath: string | undefined;\n let shellConfigPath: string | undefined;\n\n switch (storageLocation) {\n case \"shell-config\": {\n shellConfigPath = detectShellConfigPath();\n createShellAlias(aliasName, instanceName, shellConfigPath);\n break;\n }\n case \"usr-local-bin\": {\n scriptPath = createExecutableScript(\n aliasName,\n instanceName,\n getUsrLocalBinDir()\n );\n break;\n }\n case \"home-bin\": {\n scriptPath = createExecutableScript(\n aliasName,\n instanceName,\n getHomeBinDir()\n );\n break;\n }\n }\n\n const config = loadAliasConfig();\n config.aliases[aliasName] = {\n instanceName,\n aliasName,\n storageLocation,\n createdAt: new Date().toISOString(),\n scriptPath,\n };\n saveAliasConfig(config);\n\n return { success: true, scriptPath, shellConfigPath };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n}\n\nexport function removeAlias(aliasName: string): boolean {\n const config = loadAliasConfig();\n const entry = config.aliases[aliasName];\n\n if (!entry) {\n return false;\n }\n\n let removed = false;\n\n switch (entry.storageLocation) {\n case \"shell-config\": {\n const shellConfigPath = detectShellConfigPath();\n removed = removeShellAlias(aliasName, shellConfigPath);\n break;\n }\n case \"usr-local-bin\": {\n const scriptPath = join(getUsrLocalBinDir(), aliasName);\n removed = removeExecutableScript(scriptPath);\n break;\n }\n case \"home-bin\": {\n const scriptPath = join(getHomeBinDir(), aliasName);\n removed = removeExecutableScript(scriptPath);\n break;\n }\n }\n\n delete config.aliases[aliasName];\n saveAliasConfig(config);\n\n return removed;\n}\n\nexport function getAliasForInstance(instanceName: string): AliasEntry | null {\n const config = loadAliasConfig();\n\n for (const entry of Object.values(config.aliases)) {\n if (entry.instanceName === instanceName) {\n return entry;\n }\n }\n\n return null;\n}\n\nexport function getAliasByName(aliasName: string): AliasEntry | null {\n const config = loadAliasConfig();\n return config.aliases[aliasName] ?? null;\n}\n\nexport function listAliases(): AliasEntry[] {\n const config = loadAliasConfig();\n return Object.values(config.aliases);\n}\n\nexport function aliasExists(aliasName: string): boolean {\n const config = loadAliasConfig();\n return aliasName in config.aliases;\n}\n\nexport function generateAliasName(instanceName: string): string {\n return instanceName\n .toLowerCase()\n .replace(/^cursor\\s*/i, \"cursor-\")\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\nexport function getStorageLocationLabel(\n location: AliasStorageLocation\n): string {\n switch (location) {\n case \"shell-config\":\n return \"Shell config (~/.zshrc or ~/.bashrc)\";\n case \"usr-local-bin\":\n return \"/usr/local/bin (system-wide)\";\n case \"home-bin\":\n return \"~/bin (user-local)\";\n }\n}\n\nexport function isHomeBinInPath(): boolean {\n const pathEnv = process.env.PATH ?? \"\";\n const homeBin = getHomeBinDir();\n return pathEnv\n .split(\":\")\n .some((p) => p === homeBin || p === \"~/bin\" || p === \"$HOME/bin\");\n}\n\nexport function getPathSetupInstructions(): string {\n const shell = process.env.SHELL ?? \"/bin/zsh\";\n const configFile = shell.includes(\"zsh\") ? \"~/.zshrc\" : \"~/.bashrc\";\n\n return `Add the following to your ${configFile}:\n\nexport PATH=\"$HOME/bin:$PATH\"\n\nThen restart your terminal or run: source ${configFile}`;\n}\n"],"mappings":"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","names":["defineCommand","text","p","pc","join","join","dirname","dirname","join","join","pc","join","pc","pc","join","p","defineCommand","join","pc","p","promptTargetSelection","defineCommand","pc","promptTargetSelection","join","defineCommand","p","pc","join","join","rmSync","existsSync","defineCommand","pc","promptTargetSelection","p","defineCommand","join","pc","join","defineCommand","pc","defineCommand","p","pc","join","defineCommand","pc","promptTargetSelection","join","defineCommand","p","pc","join","dirname","fileURLToPath","existsSync","chmodSync","readdirSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","p","dirname","fileURLToPath","join","existsSync","chmodSync","readdirSync","resolve","pc","defineCommand","instanceName","actionLabel","require","defineCommand"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/templates.ts","../src/utils/constants.ts","../src/utils/copilot.ts","../src/commands/add.ts","../src/utils/target.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/instance.ts","../src/utils/alias.ts","../src/commands/share.ts","../src/commands/receive.ts"],"sourcesContent":["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\";\nimport { shareCommand } from \"./commands/share\";\nimport { receiveCommand } from \"./commands/receive\";\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 share: shareCommand,\n receive: receiveCommand,\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 getAgentDir,\n getAgentRulesDir,\n getAgentWorkflowsDir,\n getAgentSkillsDir,\n} from \"../utils/fs\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\nimport {\n fetchTemplateManifest,\n fetchMultipleTemplates,\n getTemplateLabel,\n getSkillLabel,\n copyLocalSkill,\n convertMdToMdc,\n transformTocContentForCursor,\n transformRuleForAntiGravity,\n transformCommandToWorkflow,\n copyLocalSkillForAntiGravity,\n type TemplateManifest,\n type TemplateType,\n} from \"../utils/templates\";\nimport { type InstructionTarget } from \"../types/init\";\nimport {\n checkCopilotConflicts,\n installCopilotInstructions,\n} from \"../utils/copilot\";\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface InitResult {\n added: string[];\n skipped: string[];\n}\n\nasync function promptTargetSelection(): Promise<InstructionTarget | symbol> {\n return await p.select({\n message: \"Which AI IDE are you using?\",\n options: [\n {\n value: \"cursor\" as const,\n label: \"Cursor\",\n hint: \"Generate .cursor/ directory structure\",\n },\n {\n value: \"github-copilot\" as const,\n label: \"GitHub Copilot\",\n hint: \"Generate .github/copilot-instructions.md\",\n },\n {\n value: \"google-antigravity\" as const,\n label: \"Google AntiGravity\",\n hint: \"Generate .agent/ directory with rules and workflows\",\n },\n ],\n initialValue: \"cursor\",\n });\n}\n\nasync function handleCopilotInstallation(\n cwd: string,\n manifest: TemplateManifest,\n args: {\n all?: boolean;\n commands?: boolean;\n rules?: boolean;\n skills?: boolean;\n force?: boolean;\n },\n shouldInitCommands: boolean,\n shouldInitRules: boolean,\n shouldInitSkills: boolean\n): Promise<void> {\n const s = p.spinner();\n\n const canProceed = await checkCopilotConflicts(cwd, args.force ?? false);\n if (!canProceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n let selectedCommands: string[] = [];\n let selectedRules: string[] = [];\n let selectedSkills: string[] = [];\n\n if (shouldInitCommands) {\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\n if (shouldInitRules) {\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\n if (shouldInitSkills) {\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\n if (\n selectedCommands.length === 0 &&\n selectedRules.length === 0 &&\n selectedSkills.length === 0\n ) {\n p.cancel(\"No templates selected\");\n process.exit(0);\n }\n\n try {\n s.start(\"Installing GitHub Copilot instructions...\");\n const result = await installCopilotInstructions(\n cwd,\n selectedCommands,\n selectedRules,\n selectedSkills\n );\n s.stop(\"GitHub Copilot instructions installed\");\n\n printDivider();\n console.log();\n\n if (result.commands.length > 0) {\n printSuccess(`Commands: ${highlight(result.commands.length.toString())} added`);\n for (const cmd of result.commands) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${cmd}`));\n }\n }\n\n if (result.rules.length > 0) {\n printSuccess(`Rules: ${highlight(result.rules.length.toString())} added`);\n for (const rule of result.rules) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${rule}`));\n }\n }\n\n if (result.skills.length > 0) {\n printSuccess(`Skills: ${highlight(result.skills.length.toString())} added`);\n for (const skill of result.skills) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${skill}`));\n }\n }\n\n console.log();\n p.outro(pc.green(\"✨ GitHub Copilot instructions created successfully!\"));\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\nasync function handleAntiGravityInstallation(\n cwd: string,\n manifest: TemplateManifest,\n args: {\n all?: boolean;\n commands?: boolean;\n rules?: boolean;\n skills?: boolean;\n force?: boolean;\n },\n shouldInitCommands: boolean,\n shouldInitRules: boolean,\n shouldInitSkills: boolean\n): Promise<void> {\n const s = p.spinner();\n const agentDir = getAgentDir(cwd);\n const rulesDir = getAgentRulesDir(cwd);\n const workflowsDir = getAgentWorkflowsDir(cwd);\n const skillsDir = getAgentSkillsDir(cwd);\n\n // Check for existing conflicts\n const existingRules = getConflictingFiles(rulesDir, manifest.rules);\n const existingWorkflows = getConflictingFiles(workflowsDir, manifest.commands);\n const existingSkills = getConflictingDirs(skillsDir, manifest.skills);\n\n if ((existingRules.length > 0 || existingWorkflows.length > 0 || existingSkills.length > 0) && !args.force) {\n console.log();\n console.log(pc.yellow(\"⚠ Existing files found:\"));\n for (const file of [...existingRules, ...existingWorkflows, ...existingSkills]) {\n console.log(pc.dim(` └─ ${file}`));\n }\n console.log();\n\n const proceed = await p.confirm({\n message: \"Overwrite existing files?\",\n initialValue: false,\n });\n\n if (p.isCancel(proceed) || !proceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n let selectedCommands: string[] = [];\n let selectedRules: string[] = [];\n let selectedSkills: string[] = [];\n\n // Commands become workflows in AntiGravity\n if (shouldInitCommands) {\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\n if (shouldInitRules) {\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\n if (shouldInitSkills) {\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\n if (selectedCommands.length === 0 && selectedRules.length === 0 && selectedSkills.length === 0) {\n p.cancel(\"No templates selected\");\n process.exit(0);\n }\n\n const results = {\n workflows: [] as string[],\n rules: [] as string[],\n skills: [] as string[],\n };\n\n try {\n ensureDir(agentDir);\n ensureDir(rulesDir);\n ensureDir(workflowsDir);\n ensureDir(skillsDir);\n\n // Install commands as workflows\n if (selectedCommands.length > 0) {\n s.start(\"Installing workflows...\");\n const templates = await fetchMultipleTemplates(\"commands\", selectedCommands);\n \n for (const [filename, content] of templates) {\n const transformedContent = transformCommandToWorkflow(content, filename);\n const filePath = join(workflowsDir, filename);\n writeFile(filePath, transformedContent);\n results.workflows.push(filename);\n }\n s.stop(\"Workflows installed\");\n }\n\n // Install rules with AntiGravity format\n if (selectedRules.length > 0) {\n s.start(\"Installing rules...\");\n const templates = await fetchMultipleTemplates(\"rules\", selectedRules);\n \n for (const [filename, content] of templates) {\n const transformedContent = transformRuleForAntiGravity(content, filename);\n const filePath = join(rulesDir, filename);\n writeFile(filePath, transformedContent);\n results.rules.push(filename);\n }\n s.stop(\"Rules installed\");\n }\n\n // Install skills with AntiGravity format\n if (selectedSkills.length > 0) {\n s.start(\"Installing skills...\");\n for (const skillName of selectedSkills) {\n const success = copyLocalSkillForAntiGravity(skillName, skillsDir);\n if (success) {\n results.skills.push(skillName);\n }\n }\n s.stop(\"Skills installed\");\n }\n\n printDivider();\n console.log();\n\n if (results.workflows.length > 0) {\n printSuccess(`Workflows: ${highlight(results.workflows.length.toString())} added`);\n for (const wf of results.workflows) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${wf}`));\n }\n }\n\n if (results.rules.length > 0) {\n printSuccess(`Rules: ${highlight(results.rules.length.toString())} added`);\n for (const rule of results.rules) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${rule}`));\n }\n }\n\n if (results.skills.length > 0) {\n printSuccess(`Skills: ${highlight(results.skills.length.toString())} added`);\n for (const skill of results.skills) {\n console.log(pc.dim(` └─ ${pc.green(\"+\")} ${skill}`));\n }\n }\n\n console.log();\n p.outro(pc.green(\"✨ Google AntiGravity configuration created successfully!\"));\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\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 target: InstructionTarget\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n \n // For Cursor target, rules need .mdc extension, commands stay .md\n // For GitHub Copilot, everything stays .md\n const expectedFilenames = selectedTemplates.map((filename) => {\n if (target === \"cursor\" && type === \"rules\" && filename.endsWith(\".md\")) {\n return convertMdToMdc(filename);\n }\n return filename;\n });\n \n const conflictingFiles = getConflictingFiles(targetDir, expectedFilenames);\n\n let templatesToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n templatesToInstall = selectedTemplates.filter(\n (t) => {\n const expectedName = target === \"cursor\" && type === \"rules\" && t.endsWith(\".md\")\n ? convertMdToMdc(t)\n : t;\n return !conflictingFiles.includes(expectedName);\n }\n );\n result.skipped = conflictingFiles.filter((f) =>\n expectedFilenames.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 // Convert .md to .mdc for rules when target is cursor\n const outputFilename = target === \"cursor\" && type === \"rules\" && filename.endsWith(\".md\")\n ? convertMdToMdc(filename)\n : filename;\n \n // Transform toc.md content for Cursor to fix links\n let transformedContent = content;\n if (target === \"cursor\" && type === \"rules\" && filename === \"toc.md\") {\n transformedContent = transformTocContentForCursor(content);\n }\n \n const filePath = join(targetDir, outputFilename);\n writeFile(filePath, transformedContent);\n result.added.push(outputFilename);\n }\n\n return result;\n}\n\nasync function installSkills(\n targetDir: string,\n selectedSkills: string[],\n conflictStrategy: ConflictStrategy,\n target: InstructionTarget\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 // Convert SKILL.md to SKILL.mdc for Cursor target\n const convertToMdc = target === \"cursor\";\n\n for (const skillName of skillsToInstall) {\n const success = copyLocalSkill(skillName, targetDir, convertToMdc);\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 target: {\n type: \"string\",\n alias: \"t\",\n description: \"Target AI IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n default: undefined,\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 let target: InstructionTarget;\n if (args.target === \"github-copilot\" || args.target === \"cursor\" || args.target === \"google-antigravity\") {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\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 if (target === \"github-copilot\") {\n await handleCopilotInstallation(\n cwd,\n manifest,\n args,\n shouldInitCommands,\n shouldInitRules,\n shouldInitSkills\n );\n return;\n }\n\n if (target === \"google-antigravity\") {\n await handleAntiGravityInstallation(\n cwd,\n manifest,\n args,\n shouldInitCommands,\n shouldInitRules,\n shouldInitSkills\n );\n return;\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 target\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 // For Cursor, rules need .mdc extension, so check for .mdc files\n const expectedRuleFilenames = selectedRules.map((filename) => {\n return target === \"cursor\" && filename.endsWith(\".md\")\n ? convertMdToMdc(filename)\n : filename;\n });\n const conflictingRules = getConflictingFiles(rulesDir, expectedRuleFilenames);\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 target\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 target\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\nexport function getGitHubDir(cwd: string = process.cwd()): string {\n return join(cwd, \".github\");\n}\n\nexport function getCopilotInstructionsPath(cwd: string = process.cwd()): string {\n return join(getGitHubDir(cwd), \"copilot-instructions.md\");\n}\n\nexport function getCopilotInstructionsDir(cwd: string = process.cwd()): string {\n return join(getGitHubDir(cwd), \"copilot-instructions\");\n}\n\nexport function getCopilotCommandsDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"commands\");\n}\n\nexport function getCopilotRulesDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"rules\");\n}\n\nexport function getCopilotSkillsDir(cwd: string = process.cwd()): string {\n return join(getCopilotInstructionsDir(cwd), \"skills\");\n}\n\nexport function deleteFile(path: string): void {\n if (fileExists(path)) {\n rmSync(path);\n }\n}\n\n// Google AntiGravity directory utilities\nexport function getAgentDir(cwd: string = process.cwd()): string {\n return join(cwd, \".agent\");\n}\n\nexport function getAgentRulesDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"rules\");\n}\n\nexport function getAgentWorkflowsDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"workflows\");\n}\n\nexport function getAgentSkillsDir(cwd: string = process.cwd()): string {\n return join(getAgentDir(cwd), \"skills\");\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, writeFile, deleteFile } 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, \".md\") : [],\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 // Backward compatibility: try .mdc if .md not found (for rules)\n if (type === \"rules\" && filename.endsWith(\".md\")) {\n const mdcPath = filePath.replace(/\\.md$/, \".mdc\");\n if (fileExists(mdcPath)) {\n return readFile(mdcPath);\n }\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 convertMdToMdc(filename: string): string {\n return filename.replace(/\\.md$/, \".mdc\");\n}\n\nexport function transformTocContentForCursor(content: string): string {\n // Transform skill links: SKILL.md -> SKILL.mdc\n content = content.replace(/\\]\\(\\.\\.\\/skills\\/([^/]+)\\/SKILL\\.md\\)/g, '](../skills/$1/SKILL.mdc)');\n \n // Transform rule links: .md -> .mdc (for rules in the same directory)\n content = content.replace(/\\]\\(\\.\\/([^)]+)\\.md\\)/g, '](./$1.mdc)');\n \n return content;\n}\n\nexport function copyLocalSkill(\n skillName: string,\n targetDir: string,\n convertToMdc: boolean = false\n): 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\n // Convert SKILL.md to SKILL.mdc if needed (for Cursor)\n if (convertToMdc) {\n const skillMdPath = join(destPath, \"SKILL.md\");\n const skillMdcPath = join(destPath, \"SKILL.mdc\");\n if (fileExists(skillMdPath)) {\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n // Delete SKILL.md since Cursor only uses SKILL.mdc\n deleteFile(skillMdPath);\n }\n }\n\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\nexport function stripFrontmatter(content: string): string {\n const frontmatterRegex = /^---\\n[\\s\\S]*?\\n---\\n/;\n return content.replace(frontmatterRegex, \"\").trim();\n}\n\nexport function extractFrontmatter(content: string): {\n alwaysApply?: boolean;\n name?: string;\n description?: string;\n [key: string]: unknown;\n} {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n/);\n if (!frontmatterMatch) return {};\n\n const frontmatter = frontmatterMatch[1];\n const result: Record<string, unknown> = {};\n\n for (const line of frontmatter.split(\"\\n\")) {\n const match = line.match(/^(\\w+):\\s*(.+)$/);\n if (match) {\n const [, key, value] = match;\n result[key] =\n value === \"true\" ? true : value === \"false\" ? false : value;\n }\n }\n\n return result;\n}\n/**\n * Get semantic description keywords for a rule based on filename.\n * Helps the IDE understand when to apply the rule.\n */\nfunction getSemanticDescriptionForRule(filename: string): string {\n const baseName = filename.replace(/\\.(md|mdc)$/, \"\").toLowerCase();\n \n const semanticMap: Record<string, string> = {\n \"toc\": \"Table of contents, skill routing, rule selection guide, when to apply rules\",\n \"git\": \"Git commit conventions, branching strategy, version control, commit messages\",\n \"coding-style\": \"Code formatting, style guidelines, best practices, clean code\",\n };\n \n return semanticMap[baseName] || \"\";\n}\n\n/**\n * Transform a Cursor rule to Google AntiGravity rule format.\n * Converts alwaysApply: true to trigger: always_on\n * Otherwise uses trigger: model_decision\n * Adds semantic keywords to description for better IDE understanding\n */\nexport function transformRuleForAntiGravity(content: string, filename: string = \"\"): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Determine trigger type based on alwaysApply flag\n const trigger = frontmatter.alwaysApply === true ? \"always_on\" : \"model_decision\";\n \n // Build description with semantic keywords\n const existingDesc = frontmatter.description || frontmatter.name || \"\";\n const semanticDesc = getSemanticDescriptionForRule(filename);\n const description = semanticDesc || existingDesc;\n \n // Create AntiGravity frontmatter\n let newFrontmatter = `---\\ntrigger: ${trigger}\\n`;\n if (description) {\n newFrontmatter += `description: ${description}\\n`;\n }\n newFrontmatter += \"---\\n\\n\";\n \n return newFrontmatter + body;\n}\n\n/**\n * Transform a Cursor command to Google AntiGravity workflow format.\n * Adds description frontmatter based on the command content.\n */\nexport function transformCommandToWorkflow(content: string, filename: string): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Use existing description or derive from filename\n const description = frontmatter.description || \n filename.replace(/\\.md$/, \"\").split(\"-\").map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(\" \");\n \n // Create AntiGravity workflow frontmatter\n const newFrontmatter = `---\\ndescription: ${description}\\n---\\n\\n`;\n \n return newFrontmatter + body;\n}\n\n/**\n * Transform SKILL.md content to AntiGravity format.\n * Uses existing description from frontmatter with trigger: manual\n */\nexport function transformSkillForAntiGravity(content: string): string {\n const frontmatter = extractFrontmatter(content);\n const body = stripFrontmatter(content);\n \n // Use existing description from SKILL.md metadata\n const description = frontmatter.description || frontmatter.name || \"\";\n \n // Create AntiGravity skill frontmatter with manual trigger\n let newFrontmatter = `---\\ntrigger: manual\\n`;\n if (description) {\n newFrontmatter += `description: ${description}\\n`;\n }\n newFrontmatter += \"---\\n\\n\";\n \n return newFrontmatter + body;\n}\n\n/**\n * Copy a local skill to AntiGravity format.\n * Transforms SKILL.md with proper frontmatter.\n */\nexport function copyLocalSkillForAntiGravity(\n skillName: string,\n targetDir: string\n): 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\n // Transform SKILL.md to AntiGravity format\n const skillMdPath = join(destPath, \"SKILL.md\");\n if (fileExists(skillMdPath)) {\n const content = readFile(skillMdPath);\n const transformedContent = transformSkillForAntiGravity(content);\n writeFile(skillMdPath, transformedContent);\n }\n\n return true;\n}\n\nexport function generateCopilotIndex(\n commands: string[],\n rules: string[],\n skills: string[],\n alwaysApplyRules: string[] = []\n): string {\n let output = \"# GitHub Copilot Custom Instructions\\n\\n\";\n output += \"> Generated by cursor-kit-cli\\n\\n\";\n output +=\n \"This file provides instructions for GitHub Copilot. \";\n output +=\n \"When working on tasks, read the relevant files from the `copilot-instructions/` directory as needed.\\n\\n\";\n\n if (alwaysApplyRules.length > 0) {\n output += \"## Rules Applied Automatically\\n\\n\";\n output +=\n \"The following rules are always applied. Read these files for context:\\n\\n\";\n for (const rule of alwaysApplyRules) {\n const ruleName = rule.replace(/\\.md$/, \"\");\n output += `- **${ruleName}**: Read \\`.github/copilot-instructions/rules/${rule}\\` for guidelines\\n`;\n }\n output += \"\\n\";\n }\n\n if (commands.length > 0) {\n output += \"## Commands\\n\\n\";\n output +=\n \"When the user requests a command, read the corresponding file:\\n\\n\";\n for (const cmd of commands) {\n const cmdName = cmd.replace(/\\.md$/, \"\");\n output += `- **${cmdName}**: Read \\`.github/copilot-instructions/commands/${cmd}\\` when user requests \"${cmdName}\"\\n`;\n }\n output += \"\\n\";\n }\n\n if (rules.length > 0) {\n output += \"## Rules\\n\\n\";\n output +=\n \"Apply these rules when relevant to the task. Read the files as needed:\\n\\n\";\n for (const rule of rules) {\n const ruleName = rule.replace(/\\.md$/, \"\");\n output += `- **${ruleName}**: Read \\`.github/copilot-instructions/rules/${rule}\\` for ${ruleName} guidelines\\n`;\n }\n output += \"\\n\";\n }\n\n if (skills.length > 0) {\n output += \"## Skills\\n\\n\";\n output +=\n \"These are comprehensive guides for specialized domains. Read the relevant skill when working in that domain:\\n\\n\";\n for (const skill of skills) {\n output += `- **${skill}**: Read \\`.github/copilot-instructions/skills/${skill}/SKILL.md\\` when working on ${skill} tasks\\n`;\n }\n output += \"\\n\";\n }\n\n output += \"## Usage Guidelines\\n\\n\";\n output +=\n \"- **Don't read all files at once** - Only read files relevant to the current task\\n\";\n output +=\n \"- **Commands**: Read command files when the user explicitly requests that command\\n\";\n output +=\n \"- **Rules**: Reference rules when they apply to the current coding task\\n\";\n output +=\n \"- **Skills**: Read skill files when working in that domain (e.g., frontend-development for React components)\\n\";\n output +=\n \"- **Always Apply Rules**: These are automatically considered, but you can reference them for specific guidance\\n\\n\";\n\n return output;\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 { join } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n ensureDir,\n fileExists,\n dirExists,\n writeFile,\n deleteFile,\n readFile,\n getCopilotInstructionsPath,\n getCopilotInstructionsDir,\n getCopilotCommandsDir,\n getCopilotRulesDir,\n getCopilotSkillsDir,\n} from \"./fs\";\nimport {\n fetchMultipleTemplates,\n copyLocalSkill,\n stripFrontmatter,\n extractFrontmatter,\n generateCopilotIndex,\n} from \"./templates\";\nimport { printSuccess } from \"./branding\";\n\nexport interface CopilotInstallResult {\n commands: string[];\n rules: string[];\n skills: string[];\n alwaysApplyRules: string[];\n}\n\nasync function installCopilotCommands(\n commandsDir: string,\n selectedCommands: string[]\n): Promise<string[]> {\n if (selectedCommands.length === 0) return [];\n\n ensureDir(commandsDir);\n const commandsMap = await fetchMultipleTemplates(\"commands\", selectedCommands);\n const installed: string[] = [];\n\n for (const [filename, content] of commandsMap) {\n const cleanContent = stripFrontmatter(content);\n const filePath = join(commandsDir, filename);\n writeFile(filePath, cleanContent);\n installed.push(filename);\n }\n\n return installed;\n}\n\nasync function installCopilotRules(\n rulesDir: string,\n selectedRules: string[]\n): Promise<{ installed: string[]; alwaysApply: string[] }> {\n if (selectedRules.length === 0) return { installed: [], alwaysApply: [] };\n\n ensureDir(rulesDir);\n const rulesMap = await fetchMultipleTemplates(\"rules\", selectedRules);\n const installed: string[] = [];\n const alwaysApply: string[] = [];\n\n for (const [filename, content] of rulesMap) {\n const frontmatter = extractFrontmatter(content);\n const cleanContent = stripFrontmatter(content);\n\n // Templates are now .md, but handle .mdc for backward compatibility\n const mdFilename = filename.endsWith(\".md\") ? filename : filename.replace(/\\.mdc$/, \".md\");\n const filePath = join(rulesDir, mdFilename);\n writeFile(filePath, cleanContent);\n\n installed.push(mdFilename);\n\n if (frontmatter.alwaysApply) {\n alwaysApply.push(mdFilename);\n }\n }\n\n return { installed, alwaysApply };\n}\n\nasync function installCopilotSkills(\n skillsDir: string,\n selectedSkills: string[]\n): Promise<string[]> {\n if (selectedSkills.length === 0) return [];\n\n ensureDir(skillsDir);\n const installed: string[] = [];\n\n for (const skillName of selectedSkills) {\n const success = copyLocalSkill(skillName, skillsDir);\n if (!success) continue;\n\n const skillTargetDir = join(skillsDir, skillName);\n const skillMdcPath = join(skillTargetDir, \"SKILL.mdc\");\n const skillMdPath = join(skillTargetDir, \"SKILL.md\");\n\n // Handle SKILL.md (new format) or SKILL.mdc (backward compatibility)\n if (fileExists(skillMdPath)) {\n // Already .md, just strip frontmatter if needed\n const content = readFile(skillMdPath);\n const cleanContent = stripFrontmatter(content);\n writeFile(skillMdPath, cleanContent);\n } else if (fileExists(skillMdcPath)) {\n // Convert .mdc to .md (backward compatibility)\n const content = readFile(skillMdcPath);\n const cleanContent = stripFrontmatter(content);\n writeFile(skillMdPath, cleanContent);\n deleteFile(skillMdcPath);\n }\n\n installed.push(skillName);\n }\n\n return installed;\n}\n\nexport async function checkCopilotConflicts(\n cwd: string,\n force: boolean\n): Promise<boolean> {\n const copilotDir = getCopilotInstructionsDir(cwd);\n const copilotIndexPath = getCopilotInstructionsPath(cwd);\n\n const hasExistingDir = dirExists(copilotDir);\n const hasExistingIndex = fileExists(copilotIndexPath);\n\n if ((hasExistingDir || hasExistingIndex) && !force) {\n const overwrite = await p.confirm({\n message: \"GitHub Copilot instructions already exist. Overwrite?\",\n initialValue: false,\n });\n\n if (p.isCancel(overwrite) || !overwrite) {\n return false;\n }\n }\n\n return true;\n}\n\nexport async function installCopilotInstructions(\n cwd: string,\n selectedCommands: string[],\n selectedRules: string[],\n selectedSkills: string[]\n): Promise<CopilotInstallResult> {\n const commandsDir = getCopilotCommandsDir(cwd);\n const rulesDir = getCopilotRulesDir(cwd);\n const skillsDir = getCopilotSkillsDir(cwd);\n const copilotIndexPath = getCopilotInstructionsPath(cwd);\n\n const [installedCommands, rulesResult, installedSkills] = await Promise.all([\n installCopilotCommands(commandsDir, selectedCommands),\n installCopilotRules(rulesDir, selectedRules),\n installCopilotSkills(skillsDir, selectedSkills),\n ]);\n\n const installedRules = rulesResult.installed;\n const alwaysApplyRules = rulesResult.alwaysApply;\n\n const indexContent = generateCopilotIndex(\n installedCommands,\n installedRules,\n installedSkills,\n alwaysApplyRules\n );\n\n writeFile(copilotIndexPath, indexContent);\n\n printSuccess(`GitHub Copilot instructions generated`);\n console.log(pc.dim(` └─ ${copilotIndexPath}`));\n console.log(pc.dim(` └─ ${getCopilotInstructionsDir(cwd)}/`));\n\n return {\n commands: installedCommands,\n rules: installedRules.map((r) => r.replace(/\\.md$/, \"\")),\n skills: installedSkills,\n alwaysApplyRules,\n };\n}\n\n","import * as p from \"@clack/prompts\";\nimport { defineCommand } from \"citty\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport type { InstructionTarget } from \"../types/init\";\nimport { highlight } from \"../utils/branding\";\nimport {\n dirExists,\n ensureDir,\n fileExists,\n writeFile,\n readFile,\n deleteFile,\n} from \"../utils/fs\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\nimport { convertMdToMdc } from \"../utils/templates\";\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 target: {\n type: \"string\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\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: target === \"google-antigravity\" ? \"Workflow\" : \"Command\",\n hint: target === \"google-antigravity\" ? \"A workflow template\" : \"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 const itemLabel = itemType === \"command\" ? targetConfig.commandsLabel : itemType;\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemLabel} 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 isSkill = itemType === \"skill\";\n const isRule = itemType === \"rule\";\n\n let targetPath: string;\n let displayPath: string;\n\n if (isSkill) {\n targetPath = join(directories.skillsDir, slug);\n displayPath = targetPath;\n } else {\n const targetDir = isCommand ? directories.commandsDir : directories.rulesDir;\n const extension = \".md\";\n targetPath = join(targetDir, `${slug}${extension}`);\n displayPath = targetPath;\n }\n\n const getExpectedExtension = (): string => {\n if (isSkill) return \"\";\n if (isCommand) return targetConfig.commandsExtension;\n return targetConfig.rulesExtension;\n };\n\n const checkPath = isSkill\n ? targetPath\n : isCommand\n ? targetPath\n : join(directories.rulesDir, `${slug}${getExpectedExtension()}`);\n\n const exists = isSkill\n ? dirExists(targetPath)\n : fileExists(targetPath) || (!isCommand && fileExists(checkPath));\n\n if (exists) {\n const displayName = isSkill\n ? slug\n : isCommand\n ? `${slug}.md`\n : `${slug}${getExpectedExtension()}`;\n const shouldOverwrite = await p.confirm({\n message: `${highlight(displayName)} 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 ${itemLabel}...`);\n\n try {\n if (isSkill) {\n ensureDir(targetPath);\n ensureDir(join(targetPath, \"references\"));\n const skillMdPath = join(targetPath, \"SKILL.md\");\n writeFile(skillMdPath, SKILL_TEMPLATE);\n writeFile(join(targetPath, \"references\", \"example.md\"), SKILL_REFERENCE_TEMPLATE);\n\n if (target === \"cursor\") {\n const skillMdcPath = join(targetPath, \"SKILL.mdc\");\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n deleteFile(skillMdPath);\n }\n } else {\n const targetDir = isCommand ? directories.commandsDir : directories.rulesDir;\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n\n if (isCommand) {\n writeFile(targetPath, template);\n } else if (isRule) {\n writeFile(targetPath, template);\n if (target === \"cursor\") {\n const mdcPath = join(targetDir, convertMdToMdc(`${slug}.md`));\n const content = readFile(targetPath);\n writeFile(mdcPath, content);\n deleteFile(targetPath);\n }\n }\n }\n\n s.stop(`${itemLabel.charAt(0).toUpperCase() + itemLabel.slice(1)} created`);\n\n console.log();\n console.log(pc.dim(\" Target: \") + highlight(targetConfig.label));\n if (isSkill) {\n console.log(pc.dim(\" Directory: \") + highlight(displayPath));\n const skillFileName = target === \"cursor\" ? \"SKILL.mdc\" : \"SKILL.md\";\n console.log(pc.dim(\" Main file: \") + highlight(join(displayPath, skillFileName)));\n } else if (isCommand) {\n console.log(pc.dim(\" File: \") + highlight(displayPath));\n } else {\n const finalPath = target === \"cursor\"\n ? join(directories.rulesDir, convertMdToMdc(`${slug}.md`))\n : targetPath;\n console.log(pc.dim(\" File: \") + highlight(finalPath));\n }\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemLabel.charAt(0).toUpperCase() + itemLabel.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 * as p from \"@clack/prompts\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n getSkillsDir,\n getCopilotInstructionsDir,\n getCopilotCommandsDir,\n getCopilotRulesDir,\n getCopilotSkillsDir,\n getAgentDir,\n getAgentRulesDir,\n getAgentWorkflowsDir,\n getAgentSkillsDir,\n} from \"./fs\";\n\ninterface TargetDirectories {\n rootDir: string;\n commandsDir: string;\n rulesDir: string;\n skillsDir: string;\n}\n\ninterface TargetConfig {\n label: string;\n hint: string;\n commandsLabel: string;\n rulesLabel: string;\n rulesExtension: string;\n commandsExtension: string;\n}\n\nexport const TARGET_CONFIGS: Record<InstructionTarget, TargetConfig> = {\n cursor: {\n label: \"Cursor\",\n hint: \".cursor/ directory\",\n commandsLabel: \"commands\",\n rulesLabel: \"rules\",\n rulesExtension: \".mdc\",\n commandsExtension: \".md\",\n },\n \"github-copilot\": {\n label: \"GitHub Copilot\",\n hint: \".github/copilot-instructions/ directory\",\n commandsLabel: \"commands\",\n rulesLabel: \"rules\",\n rulesExtension: \".md\",\n commandsExtension: \".md\",\n },\n \"google-antigravity\": {\n label: \"Google AntiGravity\",\n hint: \".agent/ directory\",\n commandsLabel: \"workflows\",\n rulesLabel: \"rules\",\n rulesExtension: \".md\",\n commandsExtension: \".md\",\n },\n};\n\nexport async function promptTargetSelection(): Promise<InstructionTarget | symbol> {\n return await p.select({\n message: \"Which AI IDE are you targeting?\",\n options: [\n {\n value: \"cursor\" as const,\n label: \"Cursor\",\n hint: \"Work with .cursor/ directory\",\n },\n {\n value: \"github-copilot\" as const,\n label: \"GitHub Copilot\",\n hint: \"Work with .github/copilot-instructions/\",\n },\n {\n value: \"google-antigravity\" as const,\n label: \"Google AntiGravity\",\n hint: \"Work with .agent/ directory\",\n },\n ],\n initialValue: \"cursor\",\n });\n}\n\nexport function isValidTarget(value: string | undefined): value is InstructionTarget {\n return value === \"cursor\" || value === \"github-copilot\" || value === \"google-antigravity\";\n}\n\nexport function getTargetDirectories(\n target: InstructionTarget,\n cwd: string = process.cwd()\n): TargetDirectories {\n switch (target) {\n case \"cursor\":\n return {\n rootDir: getCursorDir(cwd),\n commandsDir: getCommandsDir(cwd),\n rulesDir: getRulesDir(cwd),\n skillsDir: getSkillsDir(cwd),\n };\n case \"github-copilot\":\n return {\n rootDir: getCopilotInstructionsDir(cwd),\n commandsDir: getCopilotCommandsDir(cwd),\n rulesDir: getCopilotRulesDir(cwd),\n skillsDir: getCopilotSkillsDir(cwd),\n };\n case \"google-antigravity\":\n return {\n rootDir: getAgentDir(cwd),\n commandsDir: getAgentWorkflowsDir(cwd),\n rulesDir: getAgentRulesDir(cwd),\n skillsDir: getAgentSkillsDir(cwd),\n };\n }\n}\n\nexport function getTargetConfig(target: InstructionTarget): TargetConfig {\n return TARGET_CONFIGS[target];\n}\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport { join } from \"node:path\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n ensureDir,\n listFiles,\n listDirs,\n writeFile,\n readFile,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\nimport {\n convertMdToMdc,\n transformTocContentForCursor,\n transformRuleForAntiGravity,\n transformCommandToWorkflow,\n} from \"../utils/templates\";\n\nasync function convertPulledFilesForTarget(\n target: InstructionTarget,\n directories: ReturnType<typeof getTargetDirectories>\n): Promise<void> {\n const { commandsDir, rulesDir, skillsDir } = directories;\n\n if (target === \"cursor\") {\n const ruleFiles = listFiles(rulesDir, \".md\");\n for (const file of ruleFiles) {\n const sourcePath = join(rulesDir, file);\n const content = readFile(sourcePath);\n const mdcFilename = convertMdToMdc(file);\n const destPath = join(rulesDir, mdcFilename);\n\n let transformedContent = content;\n if (file === \"toc.md\") {\n transformedContent = transformTocContentForCursor(content);\n }\n\n writeFile(destPath, transformedContent);\n\n const { rmSync } = await import(\"node:fs\");\n rmSync(sourcePath);\n }\n\n const skillDirs = listDirs(skillsDir);\n for (const skillDir of skillDirs) {\n const skillPath = join(skillsDir, skillDir);\n const skillMdPath = join(skillPath, \"SKILL.md\");\n const skillMdcPath = join(skillPath, \"SKILL.mdc\");\n\n const { existsSync } = await import(\"node:fs\");\n if (existsSync(skillMdPath)) {\n const content = readFile(skillMdPath);\n writeFile(skillMdcPath, content);\n const { rmSync } = await import(\"node:fs\");\n rmSync(skillMdPath);\n }\n }\n } else if (target === \"google-antigravity\") {\n const ruleFiles = listFiles(rulesDir, \".md\");\n for (const file of ruleFiles) {\n const sourcePath = join(rulesDir, file);\n const content = readFile(sourcePath);\n const transformedContent = transformRuleForAntiGravity(content, file);\n writeFile(sourcePath, transformedContent);\n }\n\n const commandFiles = listFiles(commandsDir, \".md\");\n for (const file of commandFiles) {\n const sourcePath = join(commandsDir, file);\n const content = readFile(sourcePath);\n const transformedContent = transformCommandToWorkflow(content, file);\n writeFile(sourcePath, transformedContent);\n }\n }\n}\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 target: {\n type: \"string\",\n alias: \"t\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\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 let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\n const { rootDir, commandsDir, rulesDir, skillsDir } = directories;\n\n const rulesExtension = target === \"cursor\" ? \".mdc\" : \".md\";\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, rulesExtension);\n const existingSkills = listDirs(skillsDir);\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0 || existingSkills.length > 0;\n\n console.log(pc.dim(` Target: ${highlight(targetConfig.label)}`));\n console.log();\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` ${targetConfig.commandsLabel}: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` ${targetConfig.rulesLabel}: ${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(rootDir);\n\n if (shouldPullCommands) {\n s.start(`Pulling ${targetConfig.commandsLabel}...`);\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(`${targetConfig.commandsLabel.charAt(0).toUpperCase() + targetConfig.commandsLabel.slice(1)} updated`);\n }\n\n if (shouldPullRules) {\n s.start(`Pulling ${targetConfig.rulesLabel}...`);\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(`${targetConfig.rulesLabel.charAt(0).toUpperCase() + targetConfig.rulesLabel.slice(1)} 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 if (target !== \"github-copilot\") {\n s.start(\"Converting files for target...\");\n await convertPulledFilesForTarget(target, directories);\n s.stop(\"Files converted\");\n }\n\n printDivider();\n console.log();\n\n const newRulesExtension = target === \"cursor\" ? \".mdc\" : \".md\";\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, newRulesExtension);\n const newSkills = listDirs(skillsDir);\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `${targetConfig.commandsLabel.charAt(0).toUpperCase() + targetConfig.commandsLabel.slice(1)}: ${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 `${targetConfig.rulesLabel.charAt(0).toUpperCase() + targetConfig.rulesLabel.slice(1)}: ${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 for ${targetConfig.label}!`));\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 { join } from \"node:path\";\nimport type { InstructionTarget } from \"../types/init\";\nimport {\n listFiles,\n listDirs,\n removeFile,\n fileExists,\n dirExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport {\n promptTargetSelection,\n isValidTarget,\n getTargetDirectories,\n getTargetConfig,\n} from \"../utils/target\";\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 target: {\n type: \"string\",\n description: \"Target IDE: 'cursor', 'github-copilot', or 'google-antigravity'\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n let target: InstructionTarget;\n if (isValidTarget(args.target)) {\n target = args.target;\n } else {\n const selection = await promptTargetSelection();\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n target = selection;\n }\n\n const targetConfig = getTargetConfig(target);\n const directories = getTargetDirectories(target);\n const { commandsDir, rulesDir, skillsDir } = directories;\n\n const rulesExtension = targetConfig.rulesExtension;\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, rulesExtension).map((f) => f.replace(rulesExtension, \"\"));\n const skills = listDirs(skillsDir);\n\n console.log(pc.dim(` Target: ${highlight(targetConfig.label)}`));\n console.log();\n\n if (commands.length === 0 && rules.length === 0 && skills.length === 0) {\n console.log();\n console.log(pc.yellow(` No ${targetConfig.commandsLabel}, ${targetConfig.rulesLabel}, 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: target === \"google-antigravity\" ? \"Workflow\" : \"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 ? rulesExtension : \"\";\n const itemLabel = isCommand ? targetConfig.commandsLabel : itemType;\n\n if (items.length === 0) {\n p.cancel(`No ${itemLabel}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 ${itemLabel} 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(`${itemLabel} '${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)} from ${targetConfig.label}`);\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\";\nimport {\n createAlias,\n removeAlias,\n getAliasForInstance,\n aliasExists,\n generateAliasName,\n getStorageLocationLabel,\n isHomeBinInPath,\n getPathSetupInstructions,\n detectShellConfigPath,\n type AliasStorageLocation,\n} from \"../utils/alias\";\n\ntype InstanceAction = \"create\" | \"remove\" | \"reinstall\" | \"alias\";\n\ninterface InstanceInfo {\n name: string;\n path: string;\n alias?: 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 const name = app.replace(\".app\", \"\");\n const aliasEntry = getAliasForInstance(name);\n return {\n name,\n path: join(userAppsDir, app),\n alias: aliasEntry?.aliasName,\n };\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\nasync function promptAliasCreation(\n instanceName: string,\n providedAlias?: string,\n providedLocation?: string,\n skipConfirmation?: boolean\n): Promise<{ aliasName: string; location: AliasStorageLocation } | null> {\n if (!skipConfirmation) {\n const shouldCreateAlias = await p.confirm({\n message: \"Would you like to create a shell alias for this instance?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldCreateAlias) || !shouldCreateAlias) {\n return null;\n }\n }\n\n let aliasName: string;\n const suggestedAlias = generateAliasName(instanceName);\n\n if (providedAlias) {\n aliasName = providedAlias;\n } else {\n const aliasResult = await p.text({\n message: \"Enter alias name:\",\n placeholder: suggestedAlias,\n initialValue: suggestedAlias,\n validate: (value) => {\n if (!value.trim()) return \"Alias name is required\";\n if (!/^[a-z0-9-]+$/.test(value)) return \"Alias must contain only lowercase letters, numbers, and hyphens\";\n if (aliasExists(value)) return `Alias \"${value}\" already exists`;\n return undefined;\n },\n });\n\n if (p.isCancel(aliasResult)) {\n return null;\n }\n\n aliasName = aliasResult;\n }\n\n let location: AliasStorageLocation;\n\n if (providedLocation && [\"shell-config\", \"usr-local-bin\", \"home-bin\"].includes(providedLocation)) {\n location = providedLocation as AliasStorageLocation;\n } else {\n const locationResult = await p.select({\n message: \"Where should the alias be stored?\",\n options: [\n {\n value: \"shell-config\" as AliasStorageLocation,\n label: \"Shell config\",\n hint: detectShellConfigPath(),\n },\n {\n value: \"home-bin\" as AliasStorageLocation,\n label: \"~/bin\",\n hint: \"User-local executable scripts\",\n },\n {\n value: \"usr-local-bin\" as AliasStorageLocation,\n label: \"/usr/local/bin\",\n hint: \"System-wide (may require sudo)\",\n },\n ],\n });\n\n if (p.isCancel(locationResult)) {\n return null;\n }\n\n location = locationResult as AliasStorageLocation;\n }\n\n return { aliasName, location };\n}\n\nasync function handleAliasCreation(\n instanceName: string,\n aliasName: string,\n location: AliasStorageLocation\n): Promise<boolean> {\n const result = createAlias({\n aliasName,\n instanceName,\n storageLocation: location,\n });\n\n if (!result.success) {\n printWarning(`Failed to create alias: ${result.error}`);\n return false;\n }\n\n console.log();\n printSuccess(`Alias ${highlight(aliasName)} created!`);\n console.log(pc.dim(` └─ Location: ${getStorageLocationLabel(location)}`));\n\n if (location === \"home-bin\" && !isHomeBinInPath()) {\n console.log();\n printWarning(\"~/bin is not in your PATH\");\n console.log(pc.dim(getPathSetupInstructions()));\n }\n\n if (location === \"shell-config\") {\n console.log();\n console.log(pc.dim(\" Restart your terminal or run:\"));\n console.log(pc.dim(` source ${detectShellConfigPath()}`));\n }\n\n console.log();\n console.log(pc.dim(\" Usage:\"));\n console.log(pc.dim(` ${aliasName} . # Open current directory`));\n console.log(pc.dim(` ${aliasName} /path/to/dir # Open specific directory`));\n\n return true;\n}\n\nasync function handleAliasRemoval(instanceName: string): Promise<void> {\n const aliasEntry = getAliasForInstance(instanceName);\n\n if (!aliasEntry) {\n return;\n }\n\n const shouldRemove = await p.confirm({\n message: `Remove associated alias \"${aliasEntry.aliasName}\"?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldRemove) || !shouldRemove) {\n return;\n }\n\n const removed = removeAlias(aliasEntry.aliasName);\n\n if (removed) {\n printSuccess(`Alias ${highlight(aliasEntry.aliasName)} removed`);\n } else {\n printWarning(`Could not remove alias ${aliasEntry.aliasName}`);\n }\n}\n\nasync function handleAliasAction(\n instanceName: string,\n providedAlias?: string,\n providedLocation?: string\n): Promise<void> {\n const existingAlias = getAliasForInstance(instanceName);\n\n if (existingAlias) {\n console.log();\n printInfo(`Instance ${highlight(instanceName)} already has alias: ${highlight(existingAlias.aliasName)}`);\n console.log(pc.dim(` └─ Location: ${getStorageLocationLabel(existingAlias.storageLocation)}`));\n console.log();\n\n const updateChoice = await p.select({\n message: \"What would you like to do?\",\n options: [\n {\n value: \"update\",\n label: \"Update alias\",\n hint: \"Change alias name or location\",\n },\n {\n value: \"remove\",\n label: \"Remove alias\",\n hint: \"Delete the existing alias\",\n },\n {\n value: \"keep\",\n label: \"Keep current alias\",\n hint: \"No changes\",\n },\n ],\n });\n\n if (p.isCancel(updateChoice) || updateChoice === \"keep\") {\n p.outro(pc.dim(\"No changes made\"));\n return;\n }\n\n if (updateChoice === \"remove\") {\n const removed = removeAlias(existingAlias.aliasName);\n if (removed) {\n console.log();\n printSuccess(`Alias ${highlight(existingAlias.aliasName)} removed`);\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n printWarning(`Could not remove alias ${existingAlias.aliasName}`);\n p.outro(pc.yellow(\"Check file permissions\"));\n }\n return;\n }\n\n // Update: remove old alias first\n removeAlias(existingAlias.aliasName);\n }\n\n // Create new alias (skip confirmation since user already chose alias action)\n const aliasConfig = await promptAliasCreation(\n instanceName,\n providedAlias,\n providedLocation,\n true\n );\n\n if (!aliasConfig) {\n p.outro(pc.dim(\"Alias creation cancelled\"));\n return;\n }\n\n const success = await handleAliasCreation(instanceName, aliasConfig.aliasName, aliasConfig.location);\n\n if (success) {\n console.log();\n p.outro(pc.green(\"✨ Done!\"));\n } else {\n p.outro(pc.yellow(\"Alias creation failed\"));\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', 'remove', or 'alias'\",\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 alias: {\n type: \"string\",\n alias: \"A\",\n description: \"Shell alias name for the instance (e.g. 'cursor-work')\",\n },\n aliasLocation: {\n type: \"string\",\n description: \"Alias storage location: 'shell-config', 'usr-local-bin', or 'home-bin'\",\n },\n skipAlias: {\n type: \"boolean\",\n description: \"Skip alias creation prompt\",\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 const aliasInfo = instance.alias ? pc.dim(` (alias: ${pc.cyan(instance.alias)})`) : \"\";\n console.log(` ${pc.green(\"●\")} ${highlight(instance.name)}${aliasInfo}`);\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 // Get existing instances for context (needed for alias action before prerequisites)\n const existingInstances = getExistingInstances();\n\n // Handle alias action early (doesn't need instance scripts)\n if (args.action === \"alias\") {\n if (existingInstances.length === 0) {\n console.log();\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Create an instance first with: \") + highlight(\"cursor-kit instance -a create\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n let instanceName: string;\n\n if (args.name) {\n const found = existingInstances.find((i) => i.name === args.name);\n if (!found) {\n printWarning(`Instance \"${args.name}\" not found.`);\n console.log(pc.dim(\" Available instances:\"));\n for (const inst of existingInstances) {\n console.log(pc.dim(` • ${inst.name}`));\n }\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n instanceName = args.name;\n } else {\n const instanceResult = await p.select({\n message: \"Select instance to manage alias:\",\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.alias ? `${inst.name} (alias: ${inst.alias})` : inst.name,\n hint: inst.alias ? \"Has alias\" : \"No alias\",\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 }\n\n await handleAliasAction(instanceName, args.alias, args.aliasLocation);\n return;\n }\n\n const s = p.spinner();\n\n // Check prerequisites (only for create/remove/reinstall)\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 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: \"alias\",\n label: \"Manage alias\",\n hint: existingInstances.length > 0\n ? \"Add or update shell alias for instance\"\n : \"No instances available\",\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 // Handle alias action if selected from menu\n if (action === \"alias\") {\n if (existingInstances.length === 0) {\n console.log();\n printInfo(\"No custom Cursor instances found.\");\n console.log(pc.dim(\" Create an instance first.\"));\n console.log();\n p.outro(pc.dim(\"Nothing to do\"));\n return;\n }\n\n const instanceResult = await p.select({\n message: \"Select instance to manage alias:\",\n options: existingInstances.map((inst) => ({\n value: inst.name,\n label: inst.alias ? `${inst.name} (alias: ${inst.alias})` : inst.name,\n hint: inst.alias ? \"Has alias\" : \"No alias\",\n })),\n });\n\n if (p.isCancel(instanceResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n await handleAliasAction(instanceResult as string, args.alias, args.aliasLocation);\n return;\n }\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.alias ? `${inst.name} (alias: ${inst.alias})` : 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 const aliasEntry = getAliasForInstance(instanceName);\n if (aliasEntry) {\n console.log(` ${pc.dim(\"Alias:\")} ${pc.yellow(aliasEntry.aliasName)} ${pc.dim(\"(will be removed)\")}`);\n }\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\n // Offer alias creation\n if (!args.skipAlias) {\n console.log();\n\n const aliasConfig = await promptAliasCreation(\n instanceName,\n args.alias,\n args.aliasLocation\n );\n\n if (aliasConfig) {\n await handleAliasCreation(instanceName, aliasConfig.aliasName, aliasConfig.location);\n }\n } else if (args.alias) {\n // If alias is provided but skipAlias is set, still create it\n const location = (args.aliasLocation as AliasStorageLocation) ?? \"shell-config\";\n await handleAliasCreation(instanceName, args.alias, location);\n }\n\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 // Handle alias removal for remove action\n await handleAliasRemoval(instanceName);\n\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","import {\n appendFileSync,\n chmodSync,\n existsSync,\n mkdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport type AliasStorageLocation =\n | \"shell-config\"\n | \"usr-local-bin\"\n | \"home-bin\";\n\nexport interface AliasConfig {\n aliases: Record<string, AliasEntry>;\n}\n\nexport interface AliasEntry {\n instanceName: string;\n aliasName: string;\n storageLocation: AliasStorageLocation;\n createdAt: string;\n scriptPath?: string;\n}\n\nconst CURSOR_KIT_DIR = \".cursor-kit\";\nconst ALIASES_FILE = \"aliases.json\";\n\nexport function getAliasConfigDir(): string {\n return join(homedir(), CURSOR_KIT_DIR);\n}\n\nexport function getAliasConfigPath(): string {\n return join(getAliasConfigDir(), ALIASES_FILE);\n}\n\nexport function ensureConfigDir(): void {\n const configDir = getAliasConfigDir();\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n}\n\nexport function loadAliasConfig(): AliasConfig {\n const configPath = getAliasConfigPath();\n if (!existsSync(configPath)) {\n return { aliases: {} };\n }\n\n try {\n const content = readFileSync(configPath, \"utf-8\");\n return JSON.parse(content) as AliasConfig;\n } catch {\n return { aliases: {} };\n }\n}\n\nexport function saveAliasConfig(config: AliasConfig): void {\n ensureConfigDir();\n const configPath = getAliasConfigPath();\n writeFileSync(configPath, JSON.stringify(config, null, 2), \"utf-8\");\n}\n\nexport function getInstanceDataDir(instanceName: string): string {\n return join(\n homedir(),\n \"Library\",\n \"Application Support\",\n instanceName.replace(/ /g, \"\")\n );\n}\n\nexport function getInstanceAppPath(instanceName: string): string {\n return join(homedir(), \"Applications\", `${instanceName}.app`);\n}\n\nfunction generateScriptContent(instanceName: string): string {\n const dataDir = getInstanceDataDir(instanceName);\n const appPath = getInstanceAppPath(instanceName);\n\n return `#!/usr/bin/env bash\n# Generated by cursor-kit for instance: ${instanceName}\n# This script opens the specified directory (or current directory) in the Cursor instance\n\nset -euo pipefail\n\nDIR=\"\\${1:-.}\"\n\n# Resolve to absolute path if relative\nif [[ \"\\$DIR\" != /* ]]; then\n DIR=\"\\$(cd \"\\$DIR\" 2>/dev/null && pwd)\"\nfi\n\nDATA_DIR=\"${dataDir}\"\nAPP_PATH=\"${appPath}\"\n\nif [ ! -d \"\\$APP_PATH\" ]; then\n echo \"Error: Cursor instance not found at \\$APP_PATH\" >&2\n echo \"The instance may have been removed. Run 'cursor-kit instance -l' to see available instances.\" >&2\n exit 1\nfi\n\nopen -n \"\\$APP_PATH\" --args --user-data-dir \"\\$DATA_DIR\" \"\\$DIR\"\n`;\n}\n\nfunction generateShellFunction(\n aliasName: string,\n instanceName: string\n): string {\n const dataDir = getInstanceDataDir(instanceName);\n const appPath = getInstanceAppPath(instanceName);\n\n return `\n# cursor-kit alias: ${aliasName} -> ${instanceName}\n${aliasName}() {\n local DIR=\"\\${1:-.}\"\n if [[ \"\\$DIR\" != /* ]]; then\n DIR=\"\\$(cd \"\\$DIR\" 2>/dev/null && pwd)\"\n fi\n local DATA_DIR=\"${dataDir}\"\n local APP_PATH=\"${appPath}\"\n if [ ! -d \"\\$APP_PATH\" ]; then\n echo \"Error: Cursor instance not found at \\$APP_PATH\" >&2\n return 1\n fi\n open -n \"\\$APP_PATH\" --args --user-data-dir \"\\$DATA_DIR\" \"\\$DIR\"\n}\n# end cursor-kit alias: ${aliasName}\n`;\n}\n\nexport function detectShellConfigPath(): string {\n const home = homedir();\n const shell = process.env.SHELL ?? \"/bin/zsh\";\n\n if (shell.includes(\"zsh\")) {\n return join(home, \".zshrc\");\n }\n if (shell.includes(\"bash\")) {\n const bashProfile = join(home, \".bash_profile\");\n if (existsSync(bashProfile)) {\n return bashProfile;\n }\n return join(home, \".bashrc\");\n }\n\n return join(home, \".zshrc\");\n}\n\nexport function getHomeBinDir(): string {\n return join(homedir(), \"bin\");\n}\n\nexport function getUsrLocalBinDir(): string {\n return \"/usr/local/bin\";\n}\n\nfunction ensureBinDir(binDir: string): void {\n if (!existsSync(binDir)) {\n mkdirSync(binDir, { recursive: true });\n }\n}\n\nexport function createExecutableScript(\n aliasName: string,\n instanceName: string,\n targetDir: string\n): string {\n ensureBinDir(targetDir);\n\n const scriptPath = join(targetDir, aliasName);\n const scriptContent = generateScriptContent(instanceName);\n\n writeFileSync(scriptPath, scriptContent, \"utf-8\");\n chmodSync(scriptPath, 0o755);\n\n return scriptPath;\n}\n\nexport function createShellAlias(\n aliasName: string,\n instanceName: string,\n shellConfigPath: string\n): void {\n const functionContent = generateShellFunction(aliasName, instanceName);\n\n if (!existsSync(shellConfigPath)) {\n writeFileSync(shellConfigPath, \"\", \"utf-8\");\n }\n\n const existingContent = readFileSync(shellConfigPath, \"utf-8\");\n if (existingContent.includes(`# cursor-kit alias: ${aliasName}`)) {\n removeShellAlias(aliasName, shellConfigPath);\n }\n\n appendFileSync(shellConfigPath, functionContent, \"utf-8\");\n}\n\nexport function removeShellAlias(\n aliasName: string,\n shellConfigPath: string\n): boolean {\n if (!existsSync(shellConfigPath)) {\n return false;\n }\n\n const content = readFileSync(shellConfigPath, \"utf-8\");\n const startMarker = `# cursor-kit alias: ${aliasName}`;\n const endMarker = `# end cursor-kit alias: ${aliasName}`;\n\n const startIndex = content.indexOf(startMarker);\n if (startIndex === -1) {\n return false;\n }\n\n const endIndex = content.indexOf(endMarker);\n if (endIndex === -1) {\n return false;\n }\n\n const before = content.slice(0, startIndex);\n const after = content.slice(endIndex + endMarker.length);\n\n const newContent = (before + after).replace(/\\n{3,}/g, \"\\n\\n\");\n writeFileSync(shellConfigPath, newContent, \"utf-8\");\n\n return true;\n}\n\nexport function removeExecutableScript(scriptPath: string): boolean {\n if (!existsSync(scriptPath)) {\n return false;\n }\n\n try {\n unlinkSync(scriptPath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport interface CreateAliasOptions {\n aliasName: string;\n instanceName: string;\n storageLocation: AliasStorageLocation;\n}\n\nexport interface CreateAliasResult {\n success: boolean;\n scriptPath?: string;\n shellConfigPath?: string;\n error?: string;\n}\n\nexport function createAlias(options: CreateAliasOptions): CreateAliasResult {\n const { aliasName, instanceName, storageLocation } = options;\n\n try {\n let scriptPath: string | undefined;\n let shellConfigPath: string | undefined;\n\n switch (storageLocation) {\n case \"shell-config\": {\n shellConfigPath = detectShellConfigPath();\n createShellAlias(aliasName, instanceName, shellConfigPath);\n break;\n }\n case \"usr-local-bin\": {\n scriptPath = createExecutableScript(\n aliasName,\n instanceName,\n getUsrLocalBinDir()\n );\n break;\n }\n case \"home-bin\": {\n scriptPath = createExecutableScript(\n aliasName,\n instanceName,\n getHomeBinDir()\n );\n break;\n }\n }\n\n const config = loadAliasConfig();\n config.aliases[aliasName] = {\n instanceName,\n aliasName,\n storageLocation,\n createdAt: new Date().toISOString(),\n scriptPath,\n };\n saveAliasConfig(config);\n\n return { success: true, scriptPath, shellConfigPath };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n}\n\nexport function removeAlias(aliasName: string): boolean {\n const config = loadAliasConfig();\n const entry = config.aliases[aliasName];\n\n if (!entry) {\n return false;\n }\n\n let removed = false;\n\n switch (entry.storageLocation) {\n case \"shell-config\": {\n const shellConfigPath = detectShellConfigPath();\n removed = removeShellAlias(aliasName, shellConfigPath);\n break;\n }\n case \"usr-local-bin\": {\n const scriptPath = join(getUsrLocalBinDir(), aliasName);\n removed = removeExecutableScript(scriptPath);\n break;\n }\n case \"home-bin\": {\n const scriptPath = join(getHomeBinDir(), aliasName);\n removed = removeExecutableScript(scriptPath);\n break;\n }\n }\n\n delete config.aliases[aliasName];\n saveAliasConfig(config);\n\n return removed;\n}\n\nexport function getAliasForInstance(instanceName: string): AliasEntry | null {\n const config = loadAliasConfig();\n\n for (const entry of Object.values(config.aliases)) {\n if (entry.instanceName === instanceName) {\n return entry;\n }\n }\n\n return null;\n}\n\nexport function getAliasByName(aliasName: string): AliasEntry | null {\n const config = loadAliasConfig();\n return config.aliases[aliasName] ?? null;\n}\n\nexport function listAliases(): AliasEntry[] {\n const config = loadAliasConfig();\n return Object.values(config.aliases);\n}\n\nexport function aliasExists(aliasName: string): boolean {\n const config = loadAliasConfig();\n return aliasName in config.aliases;\n}\n\nexport function generateAliasName(instanceName: string): string {\n return instanceName\n .toLowerCase()\n .replace(/^cursor\\s*/i, \"cursor-\")\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\nexport function getStorageLocationLabel(\n location: AliasStorageLocation\n): string {\n switch (location) {\n case \"shell-config\":\n return \"Shell config (~/.zshrc or ~/.bashrc)\";\n case \"usr-local-bin\":\n return \"/usr/local/bin (system-wide)\";\n case \"home-bin\":\n return \"~/bin (user-local)\";\n }\n}\n\nexport function isHomeBinInPath(): boolean {\n const pathEnv = process.env.PATH ?? \"\";\n const homeBin = getHomeBinDir();\n return pathEnv\n .split(\":\")\n .some((p) => p === homeBin || p === \"~/bin\" || p === \"$HOME/bin\");\n}\n\nexport function getPathSetupInstructions(): string {\n const shell = process.env.SHELL ?? \"/bin/zsh\";\n const configFile = shell.includes(\"zsh\") ? \"~/.zshrc\" : \"~/.bashrc\";\n\n return `Add the following to your ${configFile}:\n\nexport PATH=\"$HOME/bin:$PATH\"\n\nThen restart your terminal or run: source ${configFile}`;\n}\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { createServer, type Server, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { networkInterfaces } from \"node:os\";\nimport archiver from \"archiver\";\nimport { printDivider, printSuccess, printInfo, printError, highlight } from \"../utils/branding\";\nimport {\n dirExists,\n fileExists,\n getCursorDir,\n getAgentDir,\n getGitHubDir,\n getCopilotInstructionsPath,\n getCopilotInstructionsDir,\n} from \"../utils/fs\";\nimport type { InstructionTarget } from \"../types/init\";\n\nconst DEFAULT_PORT = 8080;\nconst MAX_PORT_RETRIES = 10;\nconst METADATA_FILENAME = \".cursor-kit-share.json\";\n\ninterface ConfigOption {\n type: InstructionTarget;\n label: string;\n directory: string;\n path: string;\n}\n\ninterface ShareMetadata {\n version: number;\n configs: InstructionTarget[];\n}\n\nfunction getLocalIp(): string {\n const nets = networkInterfaces();\n for (const name of Object.keys(nets)) {\n const netList = nets[name];\n if (!netList) continue;\n for (const net of netList) {\n if (net.family === \"IPv4\" && !net.internal) {\n return net.address;\n }\n }\n }\n return \"127.0.0.1\";\n}\n\nfunction detectAvailableConfigs(cwd: string): ConfigOption[] {\n const configs: ConfigOption[] = [];\n\n const cursorDir = getCursorDir(cwd);\n if (dirExists(cursorDir)) {\n configs.push({\n type: \"cursor\",\n label: \"Cursor\",\n directory: \".cursor\",\n path: cursorDir,\n });\n }\n\n const agentDir = getAgentDir(cwd);\n if (dirExists(agentDir)) {\n configs.push({\n type: \"google-antigravity\",\n label: \"Google AntiGravity\",\n directory: \".agent\",\n path: agentDir,\n });\n }\n\n const githubDir = getGitHubDir(cwd);\n const copilotInstructionsPath = getCopilotInstructionsPath(cwd);\n const copilotInstructionsDir = getCopilotInstructionsDir(cwd);\n if (fileExists(copilotInstructionsPath) || dirExists(copilotInstructionsDir)) {\n configs.push({\n type: \"github-copilot\",\n label: \"GitHub Copilot\",\n directory: \".github\",\n path: githubDir,\n });\n }\n\n return configs;\n}\n\nfunction tryListen(server: Server, port: number): Promise<number> {\n return new Promise((resolve, reject) => {\n const handleError = (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n reject(new Error(`Port ${port} is already in use`));\n } else {\n reject(err);\n }\n };\n\n server.once(\"error\", handleError);\n server.listen(port, () => {\n server.removeListener(\"error\", handleError);\n resolve(port);\n });\n });\n}\n\nasync function findAvailablePort(server: Server, startPort: number): Promise<number> {\n for (let i = 0; i < MAX_PORT_RETRIES; i++) {\n const port = startPort + i;\n try {\n return await tryListen(server, port);\n } catch {\n if (i === MAX_PORT_RETRIES - 1) {\n throw new Error(`Could not find an available port after ${MAX_PORT_RETRIES} attempts`);\n }\n }\n }\n throw new Error(\"Unexpected error finding available port\");\n}\n\nfunction createConfigZipStream(selectedConfigs: ConfigOption[]): archiver.Archiver {\n const archive = archiver(\"zip\", {\n zlib: { level: 6 },\n });\n\n archive.on(\"warning\", (err) => {\n if (err.code !== \"ENOENT\") {\n console.warn(pc.yellow(`Warning: ${err.message}`));\n }\n });\n\n archive.on(\"error\", (err) => {\n throw err;\n });\n\n const metadata: ShareMetadata = {\n version: 1,\n configs: selectedConfigs.map((c) => c.type),\n };\n archive.append(JSON.stringify(metadata, null, 2), { name: METADATA_FILENAME });\n\n for (const config of selectedConfigs) {\n archive.directory(config.path, config.directory);\n }\n\n archive.finalize();\n\n return archive;\n}\n\nfunction handleRequest(\n req: IncomingMessage,\n res: ServerResponse,\n selectedConfigs: ConfigOption[],\n onTransferStart: () => void,\n onTransferComplete: () => void,\n onTransferError: (err: Error) => void\n): void {\n if (req.method !== \"GET\" || req.url !== \"/\") {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not Found\");\n return;\n }\n\n onTransferStart();\n\n res.writeHead(200, {\n \"Content-Type\": \"application/zip\",\n \"Content-Disposition\": 'attachment; filename=\"cursor-kit-configs.zip\"',\n \"Transfer-Encoding\": \"chunked\",\n });\n\n const archive = createConfigZipStream(selectedConfigs);\n\n res.on(\"finish\", () => {\n onTransferComplete();\n });\n\n res.on(\"close\", () => {\n if (!res.writableFinished) {\n onTransferError(new Error(\"Client disconnected before transfer completed\"));\n }\n });\n\n archive.on(\"error\", (err) => {\n onTransferError(err);\n res.destroy();\n });\n\n archive.pipe(res);\n}\n\nexport const shareCommand = defineCommand({\n meta: {\n name: \"share\",\n description: \"Share AI IDE configs (.cursor, .agent, .github) over LAN via HTTP\",\n },\n args: {\n port: {\n type: \"string\",\n alias: \"p\",\n description: \"Port to use for the HTTP server\",\n default: String(DEFAULT_PORT),\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const requestedPort = Number.parseInt(args.port, 10);\n\n if (Number.isNaN(requestedPort) || requestedPort < 1 || requestedPort > 65535) {\n p.cancel(\"Invalid port number. Please specify a port between 1 and 65535.\");\n process.exit(1);\n }\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit share \")));\n\n const availableConfigs = detectAvailableConfigs(cwd);\n\n if (availableConfigs.length === 0) {\n console.log();\n printError(\"No AI IDE configs found in the current directory.\");\n printInfo(\"Run 'cursor-kit init' first to create configs for your AI IDE.\");\n console.log();\n p.cancel(\"Nothing to share\");\n process.exit(1);\n }\n\n let selectedConfigs: ConfigOption[];\n\n if (availableConfigs.length === 1) {\n selectedConfigs = availableConfigs;\n printInfo(`Found: ${highlight(availableConfigs[0].label)} (${availableConfigs[0].directory})`);\n } else {\n const selection = await p.multiselect({\n message: \"Which AI IDE configs do you want to share?\",\n options: availableConfigs.map((config) => ({\n value: config.type,\n label: config.label,\n hint: config.directory,\n })),\n required: true,\n });\n\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n selectedConfigs = availableConfigs.filter((c) =>\n (selection as InstructionTarget[]).includes(c.type)\n );\n }\n\n console.log();\n\n const s = p.spinner();\n s.start(\"Starting HTTP server...\");\n\n let server: Server | null = null;\n let transferInProgress = false;\n\n const cleanup = () => {\n if (server) {\n server.close();\n server = null;\n }\n };\n\n process.on(\"SIGINT\", () => {\n console.log();\n if (transferInProgress) {\n printError(\"Transfer interrupted\");\n } else {\n printInfo(\"Server stopped\");\n }\n cleanup();\n process.exit(0);\n });\n\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(0);\n });\n\n try {\n server = createServer((req, res) => {\n handleRequest(\n req,\n res,\n selectedConfigs,\n () => {\n transferInProgress = true;\n console.log();\n printInfo(\"Connection established, transferring files...\");\n },\n () => {\n transferInProgress = false;\n console.log();\n printSuccess(\"Transfer complete!\");\n printInfo(\"Server will shut down automatically.\");\n cleanup();\n process.exit(0);\n },\n (err) => {\n transferInProgress = false;\n printError(`Transfer failed: ${err.message}`);\n }\n );\n });\n\n const actualPort = await findAvailablePort(server, requestedPort);\n const localIp = getLocalIp();\n\n s.stop(\"HTTP server started\");\n\n console.log();\n printDivider();\n console.log();\n printInfo(\"Sharing configs:\");\n for (const config of selectedConfigs) {\n console.log(pc.dim(` └─ ${pc.green(\"●\")} ${config.label} (${config.directory})`));\n }\n console.log();\n printInfo(`Local IP: ${highlight(localIp)}`);\n printInfo(`Port: ${highlight(String(actualPort))}`);\n console.log();\n printDivider();\n console.log();\n\n console.log(pc.bold(\" Run this command on the receiving machine:\"));\n console.log();\n console.log(\n ` ${pc.cyan(\"$\")} ${pc.bold(pc.green(`cursor-kit receive http://${localIp}:${actualPort}`))}`\n );\n console.log();\n printDivider();\n console.log();\n printInfo(\"Waiting for connection... (Press Ctrl+C to cancel)\");\n } catch (error) {\n s.stop(\"Failed to start server\");\n cleanup();\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 { get as httpGet } from \"node:http\";\nimport { createWriteStream, createReadStream } from \"node:fs\";\nimport { pipeline } from \"node:stream/promises\";\nimport { PassThrough } from \"node:stream\";\nimport unzipper from \"unzipper\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\nimport { printDivider, printSuccess, printInfo, printError, highlight } from \"../utils/branding\";\nimport {\n dirExists,\n fileExists,\n removeFile,\n ensureDir,\n getCursorDir,\n getAgentDir,\n getGitHubDir,\n} from \"../utils/fs\";\nimport type { InstructionTarget } from \"../types/init\";\n\nconst METADATA_FILENAME = \".cursor-kit-share.json\";\n\ninterface ShareMetadata {\n version: number;\n configs: InstructionTarget[];\n}\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface ConfigInfo {\n type: InstructionTarget;\n label: string;\n directory: string;\n targetPath: string;\n hasConflict: boolean;\n}\n\nfunction isValidUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString);\n return url.protocol === \"http:\";\n } catch {\n return false;\n }\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;\n}\n\nfunction getConfigInfo(type: InstructionTarget, cwd: string): ConfigInfo {\n switch (type) {\n case \"cursor\":\n return {\n type,\n label: \"Cursor\",\n directory: \".cursor\",\n targetPath: getCursorDir(cwd),\n hasConflict: dirExists(getCursorDir(cwd)),\n };\n case \"google-antigravity\":\n return {\n type,\n label: \"Google AntiGravity\",\n directory: \".agent\",\n targetPath: getAgentDir(cwd),\n hasConflict: dirExists(getAgentDir(cwd)),\n };\n case \"github-copilot\":\n return {\n type,\n label: \"GitHub Copilot\",\n directory: \".github\",\n targetPath: getGitHubDir(cwd),\n hasConflict: dirExists(getGitHubDir(cwd)),\n };\n }\n}\n\nasync function downloadToTemp(url: string): Promise<{ tempPath: string; size: number }> {\n const tempPath = join(tmpdir(), `cursor-kit-receive-${randomUUID()}.zip`);\n\n return new Promise((resolve, reject) => {\n const request = httpGet(url, (response) => {\n if (response.statusCode !== 200) {\n reject(new Error(`Server returned status ${response.statusCode}`));\n return;\n }\n\n const writeStream = createWriteStream(tempPath);\n const passThrough = new PassThrough();\n let size = 0;\n\n passThrough.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n });\n\n response.pipe(passThrough).pipe(writeStream);\n\n writeStream.on(\"finish\", () => {\n resolve({ tempPath, size });\n });\n\n writeStream.on(\"error\", (err) => {\n reject(err);\n });\n\n response.on(\"error\", (err) => {\n reject(err);\n });\n });\n\n request.on(\"error\", reject);\n request.on(\"timeout\", () => {\n request.destroy();\n reject(new Error(\"Connection timed out\"));\n });\n request.setTimeout(30000);\n });\n}\n\nasync function readMetadataFromZip(zipPath: string): Promise<ShareMetadata | null> {\n return new Promise((resolve) => {\n const readStream = createReadStream(zipPath);\n const unzipStream = readStream.pipe(unzipper.Parse());\n\n let found = false;\n\n unzipStream.on(\"entry\", async (entry) => {\n if (entry.path === METADATA_FILENAME && !found) {\n found = true;\n const chunks: Buffer[] = [];\n entry.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n entry.on(\"end\", () => {\n try {\n const content = Buffer.concat(chunks).toString(\"utf-8\");\n const metadata = JSON.parse(content) as ShareMetadata;\n resolve(metadata);\n } catch {\n resolve(null);\n }\n });\n } else {\n entry.autodrain();\n }\n });\n\n unzipStream.on(\"close\", () => {\n if (!found) {\n resolve(null);\n }\n });\n\n unzipStream.on(\"error\", () => {\n resolve(null);\n });\n });\n}\n\nasync function extractWithStrategy(\n zipPath: string,\n cwd: string,\n configs: ConfigInfo[],\n strategy: ConflictStrategy\n): Promise<void> {\n if (strategy === \"overwrite\") {\n for (const config of configs) {\n if (config.hasConflict) {\n removeFile(config.targetPath);\n }\n }\n }\n\n const configDirs = new Set(configs.map((c) => c.directory));\n\n return new Promise((resolve, reject) => {\n const readStream = createReadStream(zipPath);\n const unzipStream = readStream.pipe(unzipper.Parse());\n\n const extractPromises: Promise<void>[] = [];\n\n unzipStream.on(\"entry\", (entry) => {\n const entryPath = entry.path as string;\n\n if (entryPath === METADATA_FILENAME) {\n entry.autodrain();\n return;\n }\n\n const topLevelDir = entryPath.split(\"/\")[0];\n if (!configDirs.has(topLevelDir)) {\n entry.autodrain();\n return;\n }\n\n const targetPath = join(cwd, entryPath);\n\n if (entry.type === \"Directory\") {\n ensureDir(targetPath);\n entry.autodrain();\n return;\n }\n\n if (strategy === \"merge\" && fileExists(targetPath)) {\n entry.autodrain();\n return;\n }\n\n ensureDir(join(targetPath, \"..\"));\n const writeStream = createWriteStream(targetPath);\n const extractPromise = pipeline(entry, writeStream);\n extractPromises.push(extractPromise);\n });\n\n unzipStream.on(\"close\", async () => {\n try {\n await Promise.all(extractPromises);\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n\n unzipStream.on(\"error\", reject);\n });\n}\n\nexport const receiveCommand = defineCommand({\n meta: {\n name: \"receive\",\n description: \"Receive and extract shared AI IDE configs from a cursor-kit share URL\",\n },\n args: {\n url: {\n type: \"positional\",\n description: \"The share URL (e.g., http://192.168.1.15:8080)\",\n required: true,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Overwrite existing configs without prompting\",\n default: false,\n },\n },\n async run({ args }) {\n const { url, force } = args;\n const cwd = process.cwd();\n\n if (!isValidUrl(url)) {\n p.cancel(\"Invalid URL. Please provide a valid HTTP URL (e.g., http://192.168.1.15:8080)\");\n process.exit(1);\n }\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit receive \")));\n\n console.log();\n printInfo(`Source: ${highlight(url)}`);\n printInfo(`Destination: ${highlight(cwd)}`);\n console.log();\n printDivider();\n console.log();\n\n const s = p.spinner();\n s.start(\"Connecting to server...\");\n\n let tempPath: string | null = null;\n let receivedSize = 0;\n\n try {\n const result = await downloadToTemp(url);\n tempPath = result.tempPath;\n receivedSize = result.size;\n s.stop(\"Connected and downloaded\");\n\n printInfo(`Received: ${highlight(formatBytes(receivedSize))}`);\n console.log();\n\n s.start(\"Reading metadata...\");\n const metadata = await readMetadataFromZip(tempPath);\n\n if (!metadata || !metadata.configs || metadata.configs.length === 0) {\n s.stop(\"Invalid share file\");\n printError(\"This doesn't appear to be a valid cursor-kit share.\");\n printInfo(\"The share file is missing required metadata.\");\n p.cancel(\"Invalid share format\");\n removeFile(tempPath);\n process.exit(1);\n }\n\n s.stop(\"Metadata loaded\");\n\n const configs = metadata.configs.map((type) => getConfigInfo(type, cwd));\n const conflictingConfigs = configs.filter((c) => c.hasConflict);\n\n printInfo(\"Configs in this share:\");\n for (const config of configs) {\n const conflictIcon = config.hasConflict ? pc.yellow(\"⚠\") : pc.green(\"●\");\n const conflictHint = config.hasConflict ? pc.yellow(\" (exists)\") : \"\";\n console.log(pc.dim(` └─ ${conflictIcon} ${config.label} (${config.directory})${conflictHint}`));\n }\n console.log();\n\n let strategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingConfigs.length > 0 && !force) {\n const strategySelection = await p.select({\n message: `${conflictingConfigs.length} existing config(s) found. How do you want 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 if (p.isCancel(strategySelection) || strategySelection === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n removeFile(tempPath);\n process.exit(0);\n }\n\n strategy = strategySelection;\n }\n\n s.start(\"Extracting configs...\");\n await extractWithStrategy(tempPath, cwd, configs, strategy);\n s.stop(\"Configs extracted\");\n\n removeFile(tempPath);\n\n console.log();\n printDivider();\n console.log();\n\n for (const config of configs) {\n const action = config.hasConflict\n ? strategy === \"merge\"\n ? \"merged\"\n : \"replaced\"\n : \"added\";\n printSuccess(`${config.label}: ${highlight(action)}`);\n }\n\n console.log();\n p.outro(pc.green(\"✨ Transfer complete!\"));\n } catch (error) {\n s.stop(\"Failed\");\n\n if (tempPath) {\n removeFile(tempPath);\n }\n\n let errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (errorMessage.includes(\"ECONNREFUSED\")) {\n errorMessage = \"Connection refused. Make sure the share server is running.\";\n } else if (errorMessage.includes(\"ETIMEDOUT\") || errorMessage.includes(\"timeout\")) {\n errorMessage = \"Connection timed out. Check the URL and network connection.\";\n } else if (errorMessage.includes(\"ENOTFOUND\")) {\n errorMessage = \"Host not found. Check the URL and network connection.\";\n } else if (errorMessage.includes(\"ECONNRESET\") || errorMessage.includes(\"aborted\")) {\n errorMessage = \"Connection was reset. The server may have closed unexpectedly.\";\n }\n\n printError(errorMessage);\n p.cancel(\"Failed to receive configs\");\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["defineCommand","text","p","pc","join","join","dirname","dirname","join","join","pc","join","pc","pc","join","p","defineCommand","join","pc","p","promptTargetSelection","defineCommand","pc","promptTargetSelection","join","defineCommand","p","pc","join","join","rmSync","existsSync","defineCommand","pc","promptTargetSelection","p","defineCommand","join","pc","join","defineCommand","pc","defineCommand","p","pc","join","defineCommand","pc","promptTargetSelection","join","defineCommand","p","pc","join","dirname","fileURLToPath","existsSync","chmodSync","readdirSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","p","dirname","fileURLToPath","join","existsSync","chmodSync","readdirSync","resolve","pc","defineCommand","instanceName","actionLabel","defineCommand","p","pc","resolve","pc","defineCommand","defineCommand","p","pc","join","METADATA_FILENAME","join","resolve","defineCommand","pc","require","defineCommand"]}