cursor-kit-cli 1.0.4-beta.2 → 1.1.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/constants.ts","../src/commands/add.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\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\";\n\nconst main = defineCommand({\n meta: {\n name: \"cursor-kit\",\n version: \"0.1.0\",\n description: \"CLI toolkit to manage Cursor IDE rules and commands\",\n },\n setup() {\n printBanner();\n printVersion(\"0.1.0\");\n },\n subCommands: {\n init: initCommand,\n add: addCommand,\n pull: pullCommand,\n list: listCommand,\n remove: removeCommand,\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(\" v\") + cursorGradient(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 { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCursorDir,\n getCommandsDir,\n getRulesDir,\n dirExists,\n listFiles,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\n\nexport const initCommand = defineCommand({\n meta: {\n name: \"init\",\n description:\n \"Initialize .cursor/commands and .cursor/rules in your project\",\n },\n args: {\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Overwrite existing files\",\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 },\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\n const initBoth = !args.commands && !args.rules;\n const shouldInitCommands = initBoth || args.commands;\n const shouldInitRules = initBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit init \")));\n\n const commandsExist =\n dirExists(commandsDir) && listFiles(commandsDir).length > 0;\n const rulesExist = dirExists(rulesDir) && listFiles(rulesDir).length > 0;\n\n if ((commandsExist || rulesExist) && !args.force) {\n const existingItems: string[] = [];\n if (commandsExist) existingItems.push(\"commands\");\n if (rulesExist) existingItems.push(\"rules\");\n\n const shouldContinue = await p.confirm({\n message: `Existing ${existingItems.join(\" and \")} found. Overwrite?`,\n initialValue: false,\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(cursorDir);\n\n if (shouldInitCommands) {\n s.start(\"Fetching commands templates...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands initialized\");\n }\n\n if (shouldInitRules) {\n s.start(\"Fetching rules templates...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules initialized\");\n }\n\n printDivider();\n console.log();\n\n const commandFiles = listFiles(commandsDir, \".md\");\n const ruleFiles = listFiles(rulesDir, \".mdc\");\n\n if (shouldInitCommands && commandFiles.length > 0) {\n printSuccess(\n `Commands: ${highlight(commandFiles.length.toString())} templates`\n );\n commandFiles.forEach((f) => {\n console.log(pc.dim(` └─ ${f}`));\n });\n }\n\n if (shouldInitRules && ruleFiles.length > 0) {\n printSuccess(\n `Rules: ${highlight(ruleFiles.length.toString())} templates`\n );\n ruleFiles.forEach((f) => {\n console.log(pc.dim(` └─ ${f}`));\n });\n }\n\n console.log();\n p.outro(pc.green(\"✨ Cursor Kit initialized 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});\n","import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, statSync } 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 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 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 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\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\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n} as const;\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n writeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\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\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 or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeResult = await p.select({\n message: \"What do you want to add?\",\n options: [\n {\n value: \"command\",\n label: \"Command\",\n hint: \"A reusable prompt template\",\n },\n {\n value: \"rule\",\n label: \"Rule\",\n hint: \"Project-specific AI behavior rules\",\n },\n ],\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemType} name:`,\n placeholder: itemType === \"command\" ? \"my-command\" : \"my-rule\",\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 targetDir = isCommand ? getCommandsDir() : getRulesDir();\n const extension = isCommand ? \".md\" : \".mdc\";\n const filePath = join(targetDir, `${slug}${extension}`);\n\n if (fileExists(filePath)) {\n const shouldOverwrite = await p.confirm({\n message: `${highlight(slug + extension)} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start(`Creating ${itemType}...`);\n\n try {\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n writeFile(filePath, template);\n\n s.stop(`${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created`);\n\n console.log();\n console.log(pc.dim(\" File: \") + highlight(filePath));\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created! Edit the file to customize it.`)\n );\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n listFiles,\n getCursorDir,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull latest updates from cursor-kit repository\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only pull commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only pull rules\",\n default: false,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Force overwrite without confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const pullBoth = !args.commands && !args.rules;\n const shouldPullCommands = pullBoth || args.commands;\n const shouldPullRules = pullBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit pull \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, \".mdc\");\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0;\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` Commands: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` Rules: ${existingRules.length} files`));\n }\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"This will merge with existing files. Continue?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(getCursorDir());\n\n if (shouldPullCommands) {\n s.start(\"Pulling commands...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands updated\");\n }\n\n if (shouldPullRules) {\n s.start(\"Pulling rules...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules updated\");\n }\n\n printDivider();\n console.log();\n\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, \".mdc\");\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `Commands: ${highlight(newCommands.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullRules) {\n const added = newRules.length - existingRules.length;\n printSuccess(\n `Rules: ${highlight(newRules.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n console.log();\n p.outro(pc.green(\"✨ Successfully pulled latest updates!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n readFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printDivider } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ninterface ItemInfo {\n name: string;\n path: string;\n description?: string;\n}\n\nfunction extractDescription(content: string, isCommand: boolean): string | undefined {\n if (isCommand) {\n const firstLine = content.trim().split(\"\\n\")[0];\n if (firstLine && !firstLine.startsWith(\"#\") && !firstLine.startsWith(\"---\")) {\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(dir: string, extension: string, isCommand: boolean): 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\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all commands and rules\",\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 verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show full file paths\",\n default: false,\n },\n },\n async run({ args }) {\n const listBoth = !args.commands && !args.rules;\n const shouldListCommands = listBoth || args.commands;\n const shouldListRules = listBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit list \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = shouldListCommands ? getItems(commandsDir, \".md\", true) : [];\n const rules = shouldListRules ? getItems(rulesDir, \".mdc\", false) : [];\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules found.\"));\n console.log(pc.dim(\" Run \") + highlight(\"cursor-kit init\") + pc.dim(\" to get started.\"));\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(pc.bold(pc.cyan(\" 📜 Commands\")) + pc.dim(` (${commands.length})`));\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(pc.bold(pc.cyan(\" 📋 Rules\")) + pc.dim(` (${rules.length})`));\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 console.log();\n printDivider();\n\n const total = commands.length + rules.length;\n p.outro(pc.dim(`Total: ${total} item${total !== 1 ? \"s\" : \"\"}`));\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n removeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\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 or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule to remove\",\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, \".mdc\").map((f) => f.replace(\".mdc\", \"\"));\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules 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\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeOptions: SelectOption[] = [];\n\n if (commands.length > 0) {\n typeOptions.push({\n value: \"command\",\n label: \"Command\",\n hint: `${commands.length} available`,\n });\n }\n\n if (rules.length > 0) {\n typeOptions.push({\n value: \"rule\",\n label: \"Rule\",\n hint: `${rules.length} available`,\n });\n }\n\n 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 items = isCommand ? commands : rules;\n const dir = isCommand ? commandsDir : rulesDir;\n const extension = isCommand ? \".md\" : \".mdc\";\n\n if (items.length === 0) {\n p.cancel(`No ${itemType}s found`);\n process.exit(0);\n }\n\n if (args.name && items.includes(args.name)) {\n itemName = args.name;\n } else {\n const itemOptions: SelectOption[] = items.map((item) => ({\n value: item,\n label: item,\n }));\n\n const nameResult = await p.select({\n message: `Select ${itemType} to remove:`,\n options: itemOptions,\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult as string;\n }\n\n const filePath = join(dir, `${itemName}${extension}`);\n\n if (!fileExists(filePath)) {\n p.cancel(`${itemType} '${itemName}' not found`);\n process.exit(1);\n }\n\n if (!args.force) {\n const shouldDelete = await p.confirm({\n message: `Are you sure you want to delete ${highlight(itemName + extension)}?`,\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(filePath);\n console.log();\n printSuccess(`Removed ${highlight(itemName + extension)}`);\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\n"],"mappings":"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","names":["import_citty","gradient","figlet","pc","pc","pc","text","import_picocolors","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","import_giget","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","import_node_path","pc"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","../src/cli.ts","../src/utils/branding.ts","../src/commands/init.ts","../src/utils/fs.ts","../src/utils/templates.ts","../src/utils/constants.ts","../src/commands/add.ts","../src/commands/pull.ts","../src/commands/list.ts","../src/commands/remove.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import { defineCommand, runMain } from \"citty\";\nimport { createRequire } from \"node:module\";\nimport { printBanner, printVersion } from \"./utils/branding\";\nimport { initCommand } from \"./commands/init\";\nimport { addCommand } from \"./commands/add\";\nimport { pullCommand } from \"./commands/pull\";\nimport { listCommand } from \"./commands/list\";\nimport { removeCommand } from \"./commands/remove\";\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 },\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 getConflictingFiles,\n writeFile,\n} from \"../utils/fs\";\nimport { highlight, printDivider, printSuccess } from \"../utils/branding\";\nimport {\n fetchTemplateManifest,\n fetchMultipleTemplates,\n getTemplateLabel,\n type TemplateManifest,\n type TemplateType,\n} from \"../utils/templates\";\n\ntype ConflictStrategy = \"overwrite\" | \"merge\" | \"cancel\";\n\ninterface InitResult {\n added: string[];\n skipped: string[];\n}\n\nasync function selectTemplates(\n type: TemplateType,\n availableTemplates: string[]\n): Promise<string[] | symbol> {\n const 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: getTemplateLabel(template),\n hint: template,\n })),\n required: true,\n });\n\n return selectedTemplates as string[] | symbol;\n}\n\nasync function handleConflicts(\n type: TemplateType,\n conflictingFiles: string[]\n): Promise<ConflictStrategy | symbol> {\n console.log();\n console.log(\n pc.yellow(`⚠ ${conflictingFiles.length} existing ${type} found:`)\n );\n for (const file of conflictingFiles) {\n console.log(pc.dim(` └─ ${file}`));\n }\n console.log();\n\n const strategy = await p.select({\n message: \"How would you like to handle conflicts?\",\n options: [\n {\n value: \"overwrite\" as ConflictStrategy,\n label: \"Overwrite existing files\",\n hint: \"Replace all conflicting files\",\n },\n {\n value: \"merge\" as ConflictStrategy,\n label: \"Merge (keep existing, add new only)\",\n hint: \"Skip files that already exist\",\n },\n {\n value: \"cancel\" as ConflictStrategy,\n label: \"Cancel\",\n hint: \"Abort the operation\",\n },\n ],\n });\n\n return strategy as ConflictStrategy | symbol;\n}\n\nasync function installTemplates(\n type: TemplateType,\n targetDir: string,\n selectedTemplates: string[],\n conflictStrategy: ConflictStrategy\n): Promise<InitResult> {\n const result: InitResult = { added: [], skipped: [] };\n const conflictingFiles = getConflictingFiles(targetDir, selectedTemplates);\n\n let templatesToInstall: string[];\n\n if (conflictStrategy === \"merge\") {\n templatesToInstall = selectedTemplates.filter(\n (t) => !conflictingFiles.includes(t)\n );\n result.skipped = conflictingFiles.filter((f) =>\n selectedTemplates.includes(f)\n );\n } else {\n templatesToInstall = selectedTemplates;\n }\n\n if (templatesToInstall.length === 0) {\n return result;\n }\n\n const templates = await fetchMultipleTemplates(type, templatesToInstall);\n\n ensureDir(targetDir);\n\n for (const [filename, content] of templates) {\n const filePath = join(targetDir, filename);\n writeFile(filePath, content);\n result.added.push(filename);\n }\n\n return result;\n}\n\nexport const initCommand = defineCommand({\n meta: {\n name: \"init\",\n description:\n \"Initialize .cursor/commands and .cursor/rules 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 all: {\n type: \"boolean\",\n alias: \"a\",\n description: \"Install all templates without selection prompts\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const cursorDir = getCursorDir(cwd);\n const commandsDir = getCommandsDir(cwd);\n const rulesDir = getRulesDir(cwd);\n\n const initBoth = !args.commands && !args.rules;\n const shouldInitCommands = initBoth || args.commands;\n const shouldInitRules = initBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit init \")));\n\n const s = p.spinner();\n\n let manifest: TemplateManifest;\n\n try {\n s.start(\"Fetching template manifest...\");\n manifest = await fetchTemplateManifest();\n s.stop(\"Template manifest loaded\");\n } catch (error) {\n s.stop(\"Failed to fetch manifest\");\n p.cancel(\n `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n process.exit(1);\n }\n\n const results: {\n commands?: InitResult;\n rules?: InitResult;\n } = {};\n\n try {\n ensureDir(cursorDir);\n\n if (shouldInitCommands) {\n let selectedCommands: string[];\n\n if (args.all) {\n selectedCommands = manifest.commands;\n } else {\n const selection = await selectTemplates(\"commands\", manifest.commands);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedCommands = selection;\n }\n\n const conflictingCommands = getConflictingFiles(\n commandsDir,\n selectedCommands\n );\n let commandStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingCommands.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"commands\", conflictingCommands);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n commandStrategy = strategy;\n }\n\n s.start(\"Installing commands...\");\n results.commands = await installTemplates(\n \"commands\",\n commandsDir,\n selectedCommands,\n commandStrategy\n );\n s.stop(\"Commands installed\");\n }\n\n if (shouldInitRules) {\n let selectedRules: string[];\n\n if (args.all) {\n selectedRules = manifest.rules;\n } else {\n const selection = await selectTemplates(\"rules\", manifest.rules);\n if (p.isCancel(selection)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n selectedRules = selection;\n }\n\n const conflictingRules = getConflictingFiles(rulesDir, selectedRules);\n let ruleStrategy: ConflictStrategy = \"overwrite\";\n\n if (conflictingRules.length > 0 && !args.force) {\n const strategy = await handleConflicts(\"rules\", conflictingRules);\n if (p.isCancel(strategy) || strategy === \"cancel\") {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n ruleStrategy = strategy;\n }\n\n s.start(\"Installing rules...\");\n results.rules = await installTemplates(\n \"rules\",\n rulesDir,\n selectedRules,\n ruleStrategy\n );\n s.stop(\"Rules installed\");\n }\n\n 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 const totalAdded =\n (results.commands?.added.length ?? 0) +\n (results.rules?.added.length ?? 0);\n const totalSkipped =\n (results.commands?.skipped.length ?? 0) +\n (results.rules?.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 } 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 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 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 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 getNonConflictingFiles(dir: string, files: string[]): string[] {\n if (!dirExists(dir)) return files;\n return files.filter((file) => !fileExists(join(dir, file)));\n}\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 } from \"./fs\";\n\nexport interface TemplateManifest {\n commands: string[];\n rules: string[];\n}\n\nexport type TemplateType = \"commands\" | \"rules\";\n\nexport interface TemplateItem {\n name: string;\n type: TemplateType;\n}\n\nfunction getLocalTemplatesDir(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n // From dist/ go up one level to package root, then into templates/\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\n if (!dirExists(commandsDir) && !dirExists(rulesDir)) {\n return null;\n }\n\n return {\n commands: dirExists(commandsDir) ? listFiles(commandsDir, \".md\") : [],\n rules: dirExists(rulesDir) ? listFiles(rulesDir, \".mdc\") : [],\n };\n}\n\nfunction getLocalTemplateContent(type: TemplateType, filename: string): string | null {\n const templatesDir = getLocalTemplatesDir();\n const filePath = join(templatesDir, type, filename);\n\n if (fileExists(filePath)) {\n return readFile(filePath);\n }\n\n return null;\n}\n\nexport 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\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\";\n\nexport const COMMAND_EXTENSION = \".md\";\nexport const RULE_EXTENSION = \".mdc\";\n\nexport const CONFIG_FILE = \".cursorkit\";\n\nexport const TEMPLATE_PATHS = {\n commands: \"templates/commands\",\n rules: \"templates/rules\",\n} as const;\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n writeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\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\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 or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule\",\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit add \")));\n\n let itemType: ItemType;\n let itemName: string;\n\n if (args.type && [\"command\", \"rule\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeResult = await p.select({\n message: \"What do you want to add?\",\n options: [\n {\n value: \"command\",\n label: \"Command\",\n hint: \"A reusable prompt template\",\n },\n {\n value: \"rule\",\n label: \"Rule\",\n hint: \"Project-specific AI behavior rules\",\n },\n ],\n });\n\n if (p.isCancel(typeResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemType = typeResult as ItemType;\n }\n\n if (args.name) {\n itemName = args.name;\n } else {\n const nameResult = await p.text({\n message: `Enter ${itemType} name:`,\n placeholder: itemType === \"command\" ? \"my-command\" : \"my-rule\",\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 targetDir = isCommand ? getCommandsDir() : getRulesDir();\n const extension = isCommand ? \".md\" : \".mdc\";\n const filePath = join(targetDir, `${slug}${extension}`);\n\n if (fileExists(filePath)) {\n const shouldOverwrite = await p.confirm({\n message: `${highlight(slug + extension)} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start(`Creating ${itemType}...`);\n\n try {\n ensureDir(targetDir);\n const template = isCommand ? COMMAND_TEMPLATE : RULE_TEMPLATE;\n writeFile(filePath, template);\n\n s.stop(`${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created`);\n\n console.log();\n console.log(pc.dim(\" File: \") + highlight(filePath));\n console.log();\n\n p.outro(\n pc.green(`✨ ${itemType.charAt(0).toUpperCase() + itemType.slice(1)} created! Edit the file to customize it.`)\n );\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { downloadTemplate } from \"giget\";\nimport {\n ensureDir,\n getCommandsDir,\n getRulesDir,\n listFiles,\n getCursorDir,\n} from \"../utils/fs\";\nimport { REPO_URL, REPO_REF } from \"../utils/constants\";\nimport { highlight, printDivider, printSuccess, printInfo } from \"../utils/branding\";\n\nexport const pullCommand = defineCommand({\n meta: {\n name: \"pull\",\n description: \"Pull latest updates from cursor-kit repository\",\n },\n args: {\n commands: {\n type: \"boolean\",\n alias: \"c\",\n description: \"Only pull commands\",\n default: false,\n },\n rules: {\n type: \"boolean\",\n alias: \"r\",\n description: \"Only pull rules\",\n default: false,\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Force overwrite without confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const pullBoth = !args.commands && !args.rules;\n const shouldPullCommands = pullBoth || args.commands;\n const shouldPullRules = pullBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit pull \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const existingCommands = listFiles(commandsDir, \".md\");\n const existingRules = listFiles(rulesDir, \".mdc\");\n const hasExisting = existingCommands.length > 0 || existingRules.length > 0;\n\n if (hasExisting && !args.force) {\n printInfo(\"Current status:\");\n if (existingCommands.length > 0) {\n console.log(pc.dim(` Commands: ${existingCommands.length} files`));\n }\n if (existingRules.length > 0) {\n console.log(pc.dim(` Rules: ${existingRules.length} files`));\n }\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"This will merge with existing files. Continue?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n\n try {\n ensureDir(getCursorDir());\n\n if (shouldPullCommands) {\n s.start(\"Pulling commands...\");\n await downloadTemplate(`${REPO_URL}/templates/commands#${REPO_REF}`, {\n dir: commandsDir,\n force: true,\n });\n s.stop(\"Commands updated\");\n }\n\n if (shouldPullRules) {\n s.start(\"Pulling rules...\");\n await downloadTemplate(`${REPO_URL}/templates/rules#${REPO_REF}`, {\n dir: rulesDir,\n force: true,\n });\n s.stop(\"Rules updated\");\n }\n\n printDivider();\n console.log();\n\n const newCommands = listFiles(commandsDir, \".md\");\n const newRules = listFiles(rulesDir, \".mdc\");\n\n if (shouldPullCommands) {\n const added = newCommands.length - existingCommands.length;\n printSuccess(\n `Commands: ${highlight(newCommands.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n if (shouldPullRules) {\n const added = newRules.length - existingRules.length;\n printSuccess(\n `Rules: ${highlight(newRules.length.toString())} total` +\n (added > 0 ? pc.green(` (+${added} new)`) : \"\")\n );\n }\n\n console.log();\n p.outro(pc.green(\"✨ Successfully pulled latest updates!\"));\n } catch (error) {\n s.stop(\"Failed\");\n p.cancel(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n readFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printDivider } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ninterface ItemInfo {\n name: string;\n path: string;\n description?: string;\n}\n\nfunction extractDescription(content: string, isCommand: boolean): string | undefined {\n if (isCommand) {\n const firstLine = content.trim().split(\"\\n\")[0];\n if (firstLine && !firstLine.startsWith(\"#\") && !firstLine.startsWith(\"---\")) {\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(dir: string, extension: string, isCommand: boolean): 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\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all commands and rules\",\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 verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show full file paths\",\n default: false,\n },\n },\n async run({ args }) {\n const listBoth = !args.commands && !args.rules;\n const shouldListCommands = listBoth || args.commands;\n const shouldListRules = listBoth || args.rules;\n\n p.intro(pc.bgCyan(pc.black(\" cursor-kit list \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = shouldListCommands ? getItems(commandsDir, \".md\", true) : [];\n const rules = shouldListRules ? getItems(rulesDir, \".mdc\", false) : [];\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules found.\"));\n console.log(pc.dim(\" Run \") + highlight(\"cursor-kit init\") + pc.dim(\" to get started.\"));\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(pc.bold(pc.cyan(\" 📜 Commands\")) + pc.dim(` (${commands.length})`));\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(pc.bold(pc.cyan(\" 📋 Rules\")) + pc.dim(` (${rules.length})`));\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 console.log();\n printDivider();\n\n const total = commands.length + rules.length;\n p.outro(pc.dim(`Total: ${total} item${total !== 1 ? \"s\" : \"\"}`));\n },\n});\n\n","import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n getCommandsDir,\n getRulesDir,\n listFiles,\n removeFile,\n fileExists,\n} from \"../utils/fs\";\nimport { highlight, printSuccess } from \"../utils/branding\";\nimport { join } from \"node:path\";\n\ntype ItemType = \"command\" | \"rule\";\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 or rule\",\n },\n args: {\n type: {\n type: \"string\",\n alias: \"t\",\n description: \"Type: 'command' or 'rule'\",\n },\n name: {\n type: \"string\",\n alias: \"n\",\n description: \"Name of the command or rule to remove\",\n },\n force: {\n type: \"boolean\",\n alias: \"f\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(pc.bgCyan(pc.black(\" cursor-kit remove \")));\n\n const commandsDir = getCommandsDir();\n const rulesDir = getRulesDir();\n\n const commands = listFiles(commandsDir, \".md\").map((f) => f.replace(\".md\", \"\"));\n const rules = listFiles(rulesDir, \".mdc\").map((f) => f.replace(\".mdc\", \"\"));\n\n if (commands.length === 0 && rules.length === 0) {\n console.log();\n console.log(pc.yellow(\" No commands or rules 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\"].includes(args.type)) {\n itemType = args.type as ItemType;\n } else {\n const typeOptions: SelectOption[] = [];\n\n if (commands.length > 0) {\n typeOptions.push({\n value: \"command\",\n label: \"Command\",\n hint: `${commands.length} available`,\n });\n }\n\n if (rules.length > 0) {\n typeOptions.push({\n value: \"rule\",\n label: \"Rule\",\n hint: `${rules.length} available`,\n });\n }\n\n 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 items = isCommand ? commands : rules;\n const dir = isCommand ? commandsDir : rulesDir;\n const extension = isCommand ? \".md\" : \".mdc\";\n\n if (items.length === 0) {\n p.cancel(`No ${itemType}s found`);\n process.exit(0);\n }\n\n if (args.name && items.includes(args.name)) {\n itemName = args.name;\n } else {\n const itemOptions: SelectOption[] = items.map((item) => ({\n value: item,\n label: item,\n }));\n\n const nameResult = await p.select({\n message: `Select ${itemType} to remove:`,\n options: itemOptions,\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n itemName = nameResult as string;\n }\n\n const filePath = join(dir, `${itemName}${extension}`);\n\n if (!fileExists(filePath)) {\n p.cancel(`${itemType} '${itemName}' not found`);\n process.exit(1);\n }\n\n if (!args.force) {\n const shouldDelete = await p.confirm({\n message: `Are you sure you want to delete ${highlight(itemName + extension)}?`,\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(filePath);\n console.log();\n printSuccess(`Removed ${highlight(itemName + extension)}`);\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\n"],"mappings":"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","names":["import_citty","gradient","figlet","pc","pc","pc","text","import_picocolors","import_node_path","import_node_path","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","pc","import_citty","p","import_picocolors","import_node_path","pc","import_citty","p","import_picocolors","import_node_path","pc","require"]}