create-agent-config 1.0.0 → 2.0.0
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/README.md +55 -79
- package/dist/index.cjs +350 -94
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -2
- package/dist/index.d.ts +10 -2
- package/dist/index.js +327 -95
- package/dist/index.js.map +1 -1
- package/package.json +9 -3
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/detect.ts","../src/prompt.ts","../src/templates/shared.ts","../src/templates/agents-md.ts","../src/templates/claude-md.ts","../src/templates/cursor-mdc.ts","../src/templates/copilot-md.ts","../src/templates/windsurf.ts","../src/templates/cline.ts","../src/generate.ts","../src/index.ts"],"names":["readFileSync","existsSync","join","readdirSync","statSync","resolve","createInterface","dirname","mkdirSync","writeFileSync"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\nexport interface StackInfo {\n name: string;\n languages: string[];\n frameworks: string[];\n buildTools: string[];\n testFrameworks: string[];\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" | \"unknown\";\n scripts: Record<string, string>;\n hasTypeScript: boolean;\n hasPython: boolean;\n isMonorepo: boolean;\n directories: string[];\n}\n\nfunction readJsonSafe(path: string): Record<string, unknown> | null {\n try {\n return JSON.parse(readFileSync(path, \"utf-8\")) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction fileExists(root: string, ...paths: string[]): boolean {\n return paths.some((p) => existsSync(join(root, p)));\n}\n\nfunction detectPackageManager(root: string): StackInfo[\"packageManager\"] {\n if (existsSync(join(root, \"bun.lockb\")) || existsSync(join(root, \"bun.lock\")))\n return \"bun\";\n if (existsSync(join(root, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(root, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(root, \"package-lock.json\"))) return \"npm\";\n return \"unknown\";\n}\n\nfunction detectFrameworks(\n root: string,\n deps: Record<string, unknown>,\n): string[] {\n const found: string[] = [];\n\n const checks: [string, string[] | (() => boolean)][] = [\n [\n \"Next.js\",\n () =>\n fileExists(root, \"next.config.js\", \"next.config.mjs\", \"next.config.ts\"),\n ],\n [\"Nuxt\", () => fileExists(root, \"nuxt.config.ts\", \"nuxt.config.js\")],\n [\"Remix\", [\"@remix-run/react\", \"@remix-run/node\"]],\n [\"Astro\", [\"astro\"]],\n [\"SvelteKit\", [\"@sveltejs/kit\"]],\n [\"Angular\", () => fileExists(root, \"angular.json\")],\n [\"React\", [\"react\"]],\n [\"Vue\", [\"vue\"]],\n [\"Svelte\", [\"svelte\"]],\n [\"Express\", [\"express\"]],\n [\"Fastify\", [\"fastify\"]],\n [\"NestJS\", [\"@nestjs/core\"]],\n [\"Hono\", [\"hono\"]],\n [\"Elysia\", [\"elysia\"]],\n [\"Electron\", [\"electron\"]],\n [\"Vite\", [\"vite\"]],\n [\"Webpack\", [\"webpack\"]],\n [\"Turborepo\", () => fileExists(root, \"turbo.json\")],\n [\"Nx\", () => fileExists(root, \"nx.json\")],\n [\"Django\", () => fileExists(root, \"manage.py\")],\n [\"Flask\", [\"flask\"]],\n [\"FastAPI\", [\"fastapi\"]],\n ];\n\n for (const [name, check] of checks) {\n if (typeof check === \"function\") {\n if (check()) found.push(name);\n } else {\n if (check.some((dep) => dep in deps)) found.push(name);\n }\n }\n\n return found;\n}\n\nfunction detectTestFrameworks(deps: Record<string, unknown>): string[] {\n const found: string[] = [];\n const checks: [string, string[]][] = [\n [\"Vitest\", [\"vitest\"]],\n [\"Jest\", [\"jest\"]],\n [\"Mocha\", [\"mocha\"]],\n [\"Playwright\", [\"@playwright/test\"]],\n [\"Cypress\", [\"cypress\"]],\n [\"pytest\", [\"pytest\"]],\n ];\n\n for (const [name, pkgs] of checks) {\n if (pkgs.some((dep) => dep in deps)) found.push(name);\n }\n\n return found;\n}\n\nfunction getTopLevelDirs(root: string): string[] {\n try {\n return readdirSync(root)\n .filter((f) => {\n if (\n f.startsWith(\".\") ||\n f === \"node_modules\" ||\n f === \"dist\" ||\n f === \"build\" ||\n f === \"coverage\"\n )\n return false;\n try {\n return statSync(join(root, f)).isDirectory();\n } catch {\n return false;\n }\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n}\n\nexport function detectStack(rootDir?: string): StackInfo {\n const root = resolve(rootDir ?? \".\");\n const languages: string[] = [];\n const buildTools: string[] = [];\n\n const pkg = readJsonSafe(join(root, \"package.json\"));\n const allDeps: Record<string, unknown> = {\n ...((pkg?.dependencies as Record<string, unknown>) ?? {}),\n ...((pkg?.devDependencies as Record<string, unknown>) ?? {}),\n };\n\n const scripts = (pkg?.scripts as Record<string, string>) ?? {};\n const name = (pkg?.name as string) ?? \"\";\n\n const hasTypeScript = fileExists(root, \"tsconfig.json\", \"tsconfig.base.json\");\n const hasPython = fileExists(\n root,\n \"requirements.txt\",\n \"pyproject.toml\",\n \"Pipfile\",\n \"setup.py\",\n \"setup.cfg\",\n );\n const hasJs = pkg !== null || fileExists(root, \"package.json\");\n\n if (hasTypeScript) languages.push(\"TypeScript\");\n if (hasJs && !hasTypeScript) languages.push(\"JavaScript\");\n if (hasPython) languages.push(\"Python\");\n if (fileExists(root, \"Cargo.toml\")) languages.push(\"Rust\");\n if (fileExists(root, \"go.mod\")) languages.push(\"Go\");\n\n if (hasTypeScript && \"tsup\" in allDeps) buildTools.push(\"tsup\");\n if (\"esbuild\" in allDeps) buildTools.push(\"esbuild\");\n if (\"rollup\" in allDeps) buildTools.push(\"rollup\");\n\n const isMonorepo =\n fileExists(root, \"turbo.json\", \"nx.json\", \"lerna.json\") ||\n pkg?.workspaces !== undefined;\n\n const frameworks = detectFrameworks(root, allDeps);\n const testFrameworks = detectTestFrameworks(allDeps);\n\n return {\n name,\n languages,\n frameworks,\n buildTools,\n testFrameworks,\n packageManager: detectPackageManager(root),\n scripts,\n hasTypeScript,\n hasPython,\n isMonorepo,\n directories: getTopLevelDirs(root),\n };\n}\n","import { createInterface } from \"node:readline\";\nimport type { StackInfo } from \"./detect.js\";\n\nexport type OutputFormat =\n | \"agents-md\"\n | \"claude-md\"\n | \"cursor-mdc\"\n | \"copilot-md\"\n | \"windsurfrules\"\n | \"clinerules\";\n\nexport interface UserChoices {\n projectName: string;\n formats: OutputFormat[];\n}\n\nconst FORMAT_LABELS: Record<OutputFormat, string> = {\n \"agents-md\":\n \"AGENTS.md (open standard - Codex, Devin, Jules, 40+ tools)\",\n \"claude-md\": \"CLAUDE.md (Claude Code)\",\n \"cursor-mdc\": \".cursor/rules/ (Cursor IDE - modern .mdc format)\",\n \"copilot-md\": \"copilot-instructions.md (GitHub Copilot)\",\n windsurfrules: \".windsurfrules (Windsurf / Codeium)\",\n clinerules: \".clinerules (Cline)\",\n};\n\nconst ALL_FORMATS: OutputFormat[] = [\n \"agents-md\",\n \"claude-md\",\n \"cursor-mdc\",\n \"copilot-md\",\n \"windsurfrules\",\n \"clinerules\",\n];\n\nfunction ask(\n rl: ReturnType<typeof createInterface>,\n question: string,\n): Promise<string> {\n return new Promise((resolve) => rl.question(question, resolve));\n}\n\nexport async function promptUser(stack: StackInfo): Promise<UserChoices> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n const defaultName = stack.name || \"my-project\";\n const nameAnswer = await ask(rl, `\\n Project name (${defaultName}): `);\n const projectName = nameAnswer.trim() || defaultName;\n\n console.log(\"\\n Which config files should I generate?\\n\");\n\n ALL_FORMATS.forEach((fmt, i) => {\n console.log(` ${i + 1}. ${FORMAT_LABELS[fmt]}`);\n });\n\n console.log(` a. All of the above`);\n\n const formatAnswer = await ask(\n rl,\n `\\n Pick formats (comma-separated numbers, or 'a' for all) [a]: `,\n );\n\n let formats: OutputFormat[];\n const trimmed = formatAnswer.trim().toLowerCase();\n\n if (!trimmed || trimmed === \"a\" || trimmed === \"all\") {\n formats = [...ALL_FORMATS];\n } else {\n const indices = trimmed\n .split(/[,\\s]+/)\n .map((s) => parseInt(s, 10) - 1)\n .filter((n) => n >= 0 && n < ALL_FORMATS.length);\n formats =\n indices.length > 0\n ? [...new Set(indices.map((i) => ALL_FORMATS[i] as OutputFormat))]\n : [...ALL_FORMATS];\n }\n\n return { projectName, formats };\n } finally {\n rl.close();\n }\n}\n","import type { StackInfo } from \"../detect.js\";\n\nexport function stackSummary(stack: StackInfo): string {\n const parts: string[] = [];\n if (stack.languages.length > 0)\n parts.push(`Languages: ${stack.languages.join(\", \")}`);\n if (stack.frameworks.length > 0)\n parts.push(`Frameworks: ${stack.frameworks.join(\", \")}`);\n if (stack.testFrameworks.length > 0)\n parts.push(`Testing: ${stack.testFrameworks.join(\", \")}`);\n if (stack.buildTools.length > 0)\n parts.push(`Build: ${stack.buildTools.join(\", \")}`);\n parts.push(`Package manager: ${stack.packageManager}`);\n return parts.join(\"\\n\");\n}\n\nexport function commandsSection(stack: StackInfo): string {\n const lines: string[] = [];\n const s = stack.scripts;\n if (s.dev) lines.push(`- Dev server: \\`${runner(stack)} dev\\``);\n if (s.build) lines.push(`- Build: \\`${runner(stack)} build\\``);\n if (s.test) lines.push(`- Test: \\`${runner(stack)} test\\``);\n if (s.lint) lines.push(`- Lint: \\`${runner(stack)} lint\\``);\n if (s.typecheck) lines.push(`- Typecheck: \\`${runner(stack)} typecheck\\``);\n if (s.format) lines.push(`- Format: \\`${runner(stack)} format\\``);\n if (s.start) lines.push(`- Start: \\`${runner(stack)} start\\``);\n return lines.length > 0\n ? lines.join(\"\\n\")\n : \"- Check package.json for available scripts\";\n}\n\nfunction runner(stack: StackInfo): string {\n switch (stack.packageManager) {\n case \"pnpm\":\n return \"pnpm\";\n case \"yarn\":\n return \"yarn\";\n case \"bun\":\n return \"bun run\";\n default:\n return \"npm run\";\n }\n}\n\nexport function directorySection(stack: StackInfo): string {\n if (stack.directories.length === 0) return \"\";\n return stack.directories.map((d) => `- \\`${d}/\\``).join(\"\\n\");\n}\n\nexport function conventionsSection(stack: StackInfo): string {\n const lines: string[] = [];\n if (stack.hasTypeScript) {\n lines.push(\"- Use TypeScript strict mode\");\n lines.push(\"- Prefer `const` over `let`, avoid `any`\");\n lines.push(\"- Use explicit return types on exported functions\");\n }\n if (\n stack.frameworks.includes(\"React\") ||\n stack.frameworks.includes(\"Next.js\")\n ) {\n lines.push(\"- Functional components only, no class components\");\n lines.push(\"- Use hooks for state and side effects\");\n }\n if (stack.frameworks.includes(\"NestJS\")) {\n lines.push(\"- Follow NestJS module/controller/service pattern\");\n lines.push(\"- Use dependency injection\");\n }\n if (stack.hasPython) {\n lines.push(\"- Follow PEP 8 style\");\n lines.push(\"- Use type hints\");\n }\n if (lines.length === 0) {\n lines.push(\"- Follow existing code patterns\");\n lines.push(\"- Keep functions small and focused\");\n }\n return lines.join(\"\\n\");\n}\n","import type { StackInfo } from \"../detect.js\";\nimport {\n stackSummary,\n commandsSection,\n directorySection,\n conventionsSection,\n} from \"./shared.js\";\n\nexport function generateAgentsMd(\n projectName: string,\n stack: StackInfo,\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n sections.push(`## Project\\n`);\n sections.push(stackSummary(stack));\n\n if (stack.isMonorepo) {\n sections.push(`\\nThis is a monorepo.`);\n }\n\n sections.push(`\\n## Commands\\n`);\n sections.push(commandsSection(stack));\n\n const dirs = directorySection(stack);\n if (dirs) {\n sections.push(`\\n## Structure\\n`);\n sections.push(dirs);\n }\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Do not modify generated files in \\`dist/\\` or \\`build/\\``);\n sections.push(`- Run tests before committing`);\n sections.push(`- Keep commits small and focused`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { stackSummary, commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateClaudeMd(\n projectName: string,\n stack: StackInfo,\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n sections.push(stackSummary(stack));\n\n if (stack.isMonorepo) {\n sections.push(`\\nMonorepo project.`);\n }\n\n sections.push(`\\n## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n sections.push(`\\n## Important\\n`);\n sections.push(`- Always run tests after changes`);\n sections.push(`- Do not edit files in \\`dist/\\` or \\`build/\\``);\n sections.push(`- Prefer editing existing files over creating new ones`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateCursorMdc(\n projectName: string,\n stack: StackInfo,\n): string {\n const lines: string[] = [];\n\n lines.push(`---`);\n lines.push(`description: Project rules for ${projectName}`);\n lines.push(`globs:`);\n lines.push(`alwaysApply: true`);\n lines.push(`---\\n`);\n\n lines.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n lines.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n lines.push(`## Commands\\n`);\n lines.push(commandsSection(stack));\n\n lines.push(`\\n## Conventions\\n`);\n lines.push(conventionsSection(stack));\n\n lines.push(`\\n## Rules\\n`);\n lines.push(`- Do not modify generated files in \\`dist/\\` or \\`build/\\``);\n lines.push(`- Run tests before suggesting changes are complete`);\n lines.push(`- Prefer editing existing files over creating new ones`);\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateCopilotMd(\n projectName: string,\n stack: StackInfo,\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Tech: ${techParts.join(\", \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateWindsurfrules(\n projectName: string,\n stack: StackInfo,\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Run tests before completing tasks`);\n sections.push(`- Do not modify generated files in dist/ or build/`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateClinerules(\n projectName: string,\n stack: StackInfo,\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Run tests before completing tasks`);\n sections.push(`- Do not modify generated files in dist/ or build/`);\n sections.push(`- Prefer editing existing files over creating new ones`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type { StackInfo } from \"./detect.js\";\nimport type { OutputFormat } from \"./prompt.js\";\nimport { generateAgentsMd } from \"./templates/agents-md.js\";\nimport { generateClaudeMd } from \"./templates/claude-md.js\";\nimport { generateCursorMdc } from \"./templates/cursor-mdc.js\";\nimport { generateCopilotMd } from \"./templates/copilot-md.js\";\nimport { generateWindsurfrules } from \"./templates/windsurf.js\";\nimport { generateClinerules } from \"./templates/cline.js\";\n\ninterface GeneratedFile {\n path: string;\n content: string;\n}\n\nfunction getOutputPath(format: OutputFormat): string {\n switch (format) {\n case \"agents-md\":\n return \"AGENTS.md\";\n case \"claude-md\":\n return \"CLAUDE.md\";\n case \"cursor-mdc\":\n return \".cursor/rules/project.mdc\";\n case \"copilot-md\":\n return \".github/copilot-instructions.md\";\n case \"windsurfrules\":\n return \".windsurfrules\";\n case \"clinerules\":\n return \".clinerules\";\n }\n}\n\nfunction renderTemplate(\n format: OutputFormat,\n projectName: string,\n stack: StackInfo,\n): string {\n switch (format) {\n case \"agents-md\":\n return generateAgentsMd(projectName, stack);\n case \"claude-md\":\n return generateClaudeMd(projectName, stack);\n case \"cursor-mdc\":\n return generateCursorMdc(projectName, stack);\n case \"copilot-md\":\n return generateCopilotMd(projectName, stack);\n case \"windsurfrules\":\n return generateWindsurfrules(projectName, stack);\n case \"clinerules\":\n return generateClinerules(projectName, stack);\n }\n}\n\nexport function generateFiles(\n projectName: string,\n stack: StackInfo,\n formats: OutputFormat[],\n rootDir: string,\n): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const format of formats) {\n const relativePath = getOutputPath(format);\n const fullPath = join(rootDir, relativePath);\n const content = renderTemplate(format, projectName, stack);\n\n if (existsSync(fullPath)) {\n console.log(` ⚠ skipped ${relativePath} (already exists)`);\n continue;\n }\n\n const dir = dirname(fullPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(fullPath, content, \"utf-8\");\n files.push({ path: relativePath, content });\n console.log(` ✓ ${relativePath}`);\n }\n\n return files;\n}\n","import { resolve } from \"node:path\";\nimport { detectStack } from \"./detect.js\";\nimport { promptUser } from \"./prompt.js\";\nimport { generateFiles } from \"./generate.js\";\n\nconst VERSION = \"1.0.0\";\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(VERSION);\n return;\n }\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(`\n create-agent-config v${VERSION}\n\n Scaffold AI agent config files for your project.\n\n Usage:\n npm create agent-config Interactive mode\n npx create-agent-config Same thing\n npx create-agent-config [dir] Target a specific directory\n\n Options:\n -v, --version Print version\n -h, --help Print this help\n`);\n return;\n }\n\n const targetDir = resolve(args[0] ?? \".\");\n\n console.log(`\\n create-agent-config v${VERSION}\\n`);\n console.log(` Scanning ${targetDir}...\\n`);\n\n const stack = detectStack(targetDir);\n\n if (stack.languages.length > 0) {\n console.log(` Detected: ${stack.languages.join(\", \")}`);\n }\n if (stack.frameworks.length > 0) {\n console.log(` Frameworks: ${stack.frameworks.join(\", \")}`);\n }\n if (stack.testFrameworks.length > 0) {\n console.log(` Testing: ${stack.testFrameworks.join(\", \")}`);\n }\n\n const choices = await promptUser(stack);\n\n console.log(`\\n Generating config files...\\n`);\n\n const files = generateFiles(\n choices.projectName,\n stack,\n choices.formats,\n targetDir,\n );\n\n if (files.length > 0) {\n console.log(\n `\\n Done. ${files.length} file${files.length === 1 ? \"\" : \"s\"} created.`,\n );\n console.log(` Edit them to match your project's specific needs.\\n`);\n } else {\n console.log(`\\n No files generated (all already exist).\\n`);\n }\n}\n\nmain().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n});\n\nexport { detectStack } from \"./detect.js\";\nexport type { StackInfo } from \"./detect.js\";\nexport type { OutputFormat, UserChoices } from \"./prompt.js\";\nexport { generateFiles } from \"./generate.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/detect.ts","../src/prompt.ts","../src/templates/shared.ts","../src/templates/agents-md.ts","../src/templates/claude-md.ts","../src/templates/cursor-mdc.ts","../src/templates/copilot-md.ts","../src/templates/windsurf.ts","../src/templates/cline.ts","../src/generate.ts","../src/rules.ts","../src/index.ts"],"names":["readFileSync","p","existsSync","join","readdirSync","statSync","resolve","color","p2","dirname","mkdirSync","writeFileSync","httpsGet","p3"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\nexport interface StackInfo {\n name: string;\n languages: string[];\n frameworks: string[];\n buildTools: string[];\n testFrameworks: string[];\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" | \"unknown\";\n scripts: Record<string, string>;\n hasTypeScript: boolean;\n hasPython: boolean;\n isMonorepo: boolean;\n directories: string[];\n}\n\nfunction readJsonSafe(path: string): Record<string, unknown> | null {\n try {\n return JSON.parse(readFileSync(path, \"utf-8\")) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction fileExists(root: string, ...paths: string[]): boolean {\n return paths.some((p) => existsSync(join(root, p)));\n}\n\nfunction detectPackageManager(root: string): StackInfo[\"packageManager\"] {\n if (existsSync(join(root, \"bun.lockb\")) || existsSync(join(root, \"bun.lock\")))\n return \"bun\";\n if (existsSync(join(root, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(join(root, \"yarn.lock\"))) return \"yarn\";\n if (existsSync(join(root, \"package-lock.json\"))) return \"npm\";\n return \"unknown\";\n}\n\nfunction detectFrameworks(\n root: string,\n deps: Record<string, unknown>,\n): string[] {\n const found: string[] = [];\n\n const checks: [string, string[] | (() => boolean)][] = [\n [\n \"Next.js\",\n () =>\n fileExists(root, \"next.config.js\", \"next.config.mjs\", \"next.config.ts\"),\n ],\n [\"Nuxt\", () => fileExists(root, \"nuxt.config.ts\", \"nuxt.config.js\")],\n [\"Remix\", [\"@remix-run/react\", \"@remix-run/node\"]],\n [\"Astro\", [\"astro\"]],\n [\"SvelteKit\", [\"@sveltejs/kit\"]],\n [\"Angular\", () => fileExists(root, \"angular.json\")],\n [\"React\", [\"react\"]],\n [\"Vue\", [\"vue\"]],\n [\"Svelte\", [\"svelte\"]],\n [\"Express\", [\"express\"]],\n [\"Fastify\", [\"fastify\"]],\n [\"NestJS\", [\"@nestjs/core\"]],\n [\"Hono\", [\"hono\"]],\n [\"Elysia\", [\"elysia\"]],\n [\"Electron\", [\"electron\"]],\n [\"Vite\", [\"vite\"]],\n [\"Webpack\", [\"webpack\"]],\n [\"Turborepo\", () => fileExists(root, \"turbo.json\")],\n [\"Nx\", () => fileExists(root, \"nx.json\")],\n [\"Django\", () => fileExists(root, \"manage.py\")],\n [\"Flask\", [\"flask\"]],\n [\"FastAPI\", [\"fastapi\"]],\n ];\n\n for (const [name, check] of checks) {\n if (typeof check === \"function\") {\n if (check()) found.push(name);\n } else {\n if (check.some((dep) => dep in deps)) found.push(name);\n }\n }\n\n return found;\n}\n\nfunction detectTestFrameworks(deps: Record<string, unknown>): string[] {\n const found: string[] = [];\n const checks: [string, string[]][] = [\n [\"Vitest\", [\"vitest\"]],\n [\"Jest\", [\"jest\"]],\n [\"Mocha\", [\"mocha\"]],\n [\"Playwright\", [\"@playwright/test\"]],\n [\"Cypress\", [\"cypress\"]],\n [\"pytest\", [\"pytest\"]],\n ];\n\n for (const [name, pkgs] of checks) {\n if (pkgs.some((dep) => dep in deps)) found.push(name);\n }\n\n return found;\n}\n\nfunction getTopLevelDirs(root: string): string[] {\n try {\n return readdirSync(root)\n .filter((f) => {\n if (\n f.startsWith(\".\") ||\n f === \"node_modules\" ||\n f === \"dist\" ||\n f === \"build\" ||\n f === \"coverage\"\n )\n return false;\n try {\n return statSync(join(root, f)).isDirectory();\n } catch {\n return false;\n }\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n}\n\nexport function detectStack(rootDir?: string): StackInfo {\n const root = resolve(rootDir ?? \".\");\n const languages: string[] = [];\n const buildTools: string[] = [];\n\n const pkg = readJsonSafe(join(root, \"package.json\"));\n const allDeps: Record<string, unknown> = {\n ...((pkg?.dependencies as Record<string, unknown>) ?? {}),\n ...((pkg?.devDependencies as Record<string, unknown>) ?? {}),\n };\n\n const scripts = (pkg?.scripts as Record<string, string>) ?? {};\n const name = (pkg?.name as string) ?? \"\";\n\n const hasTypeScript = fileExists(root, \"tsconfig.json\", \"tsconfig.base.json\");\n const hasPython = fileExists(\n root,\n \"requirements.txt\",\n \"pyproject.toml\",\n \"Pipfile\",\n \"setup.py\",\n \"setup.cfg\",\n );\n const hasJs = pkg !== null || fileExists(root, \"package.json\");\n\n if (hasTypeScript) languages.push(\"TypeScript\");\n if (hasJs && !hasTypeScript) languages.push(\"JavaScript\");\n if (hasPython) languages.push(\"Python\");\n if (fileExists(root, \"Cargo.toml\")) languages.push(\"Rust\");\n if (fileExists(root, \"go.mod\")) languages.push(\"Go\");\n\n if (hasTypeScript && \"tsup\" in allDeps) buildTools.push(\"tsup\");\n if (\"esbuild\" in allDeps) buildTools.push(\"esbuild\");\n if (\"rollup\" in allDeps) buildTools.push(\"rollup\");\n\n const isMonorepo =\n fileExists(root, \"turbo.json\", \"nx.json\", \"lerna.json\") ||\n pkg?.workspaces !== undefined;\n\n const frameworks = detectFrameworks(root, allDeps);\n const testFrameworks = detectTestFrameworks(allDeps);\n\n return {\n name,\n languages,\n frameworks,\n buildTools,\n testFrameworks,\n packageManager: detectPackageManager(root),\n scripts,\n hasTypeScript,\n hasPython,\n isMonorepo,\n directories: getTopLevelDirs(root),\n };\n}\n","import * as p from \"@clack/prompts\";\nimport color from \"picocolors\";\nimport type { StackInfo } from \"./detect.js\";\nimport type { CommunityRule } from \"./rules.js\";\n\nexport type OutputFormat =\n | \"agents-md\"\n | \"claude-md\"\n | \"cursor-mdc\"\n | \"copilot-md\"\n | \"windsurfrules\"\n | \"clinerules\";\n\nexport interface UserChoices {\n projectName: string;\n formats: OutputFormat[];\n useRemoteRules: boolean;\n}\n\ninterface FormatOption {\n value: OutputFormat;\n label: string;\n hint: string;\n}\n\nconst FORMAT_OPTIONS: FormatOption[] = [\n {\n value: \"agents-md\",\n label: \"AGENTS.md\",\n hint: \"open standard - Codex, Devin, Jules, 40+ tools\",\n },\n {\n value: \"claude-md\",\n label: \"CLAUDE.md\",\n hint: \"Claude Code\",\n },\n {\n value: \"cursor-mdc\",\n label: \".cursor/rules/project.mdc\",\n hint: \"Cursor IDE\",\n },\n {\n value: \"copilot-md\",\n label: \".github/copilot-instructions.md\",\n hint: \"GitHub Copilot\",\n },\n {\n value: \"windsurfrules\",\n label: \".windsurfrules\",\n hint: \"Windsurf / Codeium\",\n },\n {\n value: \"clinerules\",\n label: \".clinerules\",\n hint: \"Cline\",\n },\n];\n\nfunction formatStack(stack: StackInfo): string {\n const parts: string[] = [];\n if (stack.languages.length > 0)\n parts.push(color.cyan(stack.languages.join(\", \")));\n if (stack.frameworks.length > 0)\n parts.push(color.yellow(stack.frameworks.join(\", \")));\n if (stack.testFrameworks.length > 0)\n parts.push(color.green(stack.testFrameworks.join(\", \")));\n if (stack.buildTools.length > 0)\n parts.push(color.magenta(stack.buildTools.join(\", \")));\n return parts.join(color.dim(\" + \"));\n}\n\nexport async function promptUser(\n stack: StackInfo,\n remoteRules: CommunityRule[],\n): Promise<UserChoices> {\n const detected = formatStack(stack);\n if (detected) {\n p.log.info(`Detected: ${detected}`);\n p.log.info(`Package manager: ${color.cyan(stack.packageManager)}`);\n if (stack.isMonorepo) p.log.info(\"Monorepo detected\");\n } else {\n p.log.warn(\"Could not detect project stack. Using minimal defaults.\");\n }\n\n const projectName = await p.text({\n message: \"Project name?\",\n placeholder: stack.name || \"my-project\",\n defaultValue: stack.name || \"my-project\",\n });\n\n if (p.isCancel(projectName)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n const formats = await p.multiselect({\n message: \"Which config files should I create?\",\n options: FORMAT_OPTIONS,\n required: true,\n initialValues: FORMAT_OPTIONS.map((o) => o.value),\n });\n\n if (p.isCancel(formats)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n let useRemoteRules = false;\n if (remoteRules.length > 0) {\n const ruleNames = remoteRules\n .map((r) => color.cyan(r.title))\n .join(color.dim(\", \"));\n\n const useRemote = await p.confirm({\n message: `Found ${remoteRules.length} community rule${remoteRules.length === 1 ? \"\" : \"s\"} for your stack (${ruleNames}). Include them?`,\n initialValue: true,\n });\n\n if (p.isCancel(useRemote)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n useRemoteRules = useRemote;\n }\n\n return {\n projectName: projectName as string,\n formats: formats as OutputFormat[],\n useRemoteRules,\n };\n}\n\nexport function showPlan(\n projectName: string,\n formats: OutputFormat[],\n useRemoteRules: boolean,\n rootDir: string,\n): void {\n const lines = formats.map((f) => {\n const opt = FORMAT_OPTIONS.find((o) => o.value === f);\n const file = getFilePath(f);\n return ` ${color.green(\"+\")} ${color.bold(file)} ${color.dim(`(${opt?.hint ?? f})`)}`;\n });\n\n p.log.message(\n [\n `${color.bold(\"Here's what I'll generate:\")}`,\n \"\",\n ...lines,\n \"\",\n `${color.dim(\"Location:\")} ${rootDir}`,\n useRemoteRules\n ? `${color.dim(\"Rules:\")} community best practices from cursor.directory`\n : `${color.dim(\"Rules:\")} built-in defaults`,\n `${color.dim(\"Existing files will be skipped.\")}`,\n ].join(\"\\n\"),\n );\n}\n\nfunction getFilePath(format: OutputFormat): string {\n switch (format) {\n case \"agents-md\":\n return \"AGENTS.md\";\n case \"claude-md\":\n return \"CLAUDE.md\";\n case \"cursor-mdc\":\n return \".cursor/rules/project.mdc\";\n case \"copilot-md\":\n return \".github/copilot-instructions.md\";\n case \"windsurfrules\":\n return \".windsurfrules\";\n case \"clinerules\":\n return \".clinerules\";\n }\n}\n","import type { StackInfo } from \"../detect.js\";\n\nexport function stackSummary(stack: StackInfo): string {\n const parts: string[] = [];\n if (stack.languages.length > 0)\n parts.push(`Languages: ${stack.languages.join(\", \")}`);\n if (stack.frameworks.length > 0)\n parts.push(`Frameworks: ${stack.frameworks.join(\", \")}`);\n if (stack.testFrameworks.length > 0)\n parts.push(`Testing: ${stack.testFrameworks.join(\", \")}`);\n if (stack.buildTools.length > 0)\n parts.push(`Build: ${stack.buildTools.join(\", \")}`);\n parts.push(`Package manager: ${stack.packageManager}`);\n return parts.join(\"\\n\");\n}\n\nexport function commandsSection(stack: StackInfo): string {\n const lines: string[] = [];\n const s = stack.scripts;\n if (s.dev) lines.push(`- Dev server: \\`${runner(stack)} dev\\``);\n if (s.build) lines.push(`- Build: \\`${runner(stack)} build\\``);\n if (s.test) lines.push(`- Test: \\`${runner(stack)} test\\``);\n if (s.lint) lines.push(`- Lint: \\`${runner(stack)} lint\\``);\n if (s.typecheck) lines.push(`- Typecheck: \\`${runner(stack)} typecheck\\``);\n if (s.format) lines.push(`- Format: \\`${runner(stack)} format\\``);\n if (s.start) lines.push(`- Start: \\`${runner(stack)} start\\``);\n return lines.length > 0\n ? lines.join(\"\\n\")\n : \"- Check package.json for available scripts\";\n}\n\nfunction runner(stack: StackInfo): string {\n switch (stack.packageManager) {\n case \"pnpm\":\n return \"pnpm\";\n case \"yarn\":\n return \"yarn\";\n case \"bun\":\n return \"bun run\";\n default:\n return \"npm run\";\n }\n}\n\nexport function directorySection(stack: StackInfo): string {\n if (stack.directories.length === 0) return \"\";\n return stack.directories.map((d) => `- \\`${d}/\\``).join(\"\\n\");\n}\n\nexport function conventionsSection(stack: StackInfo): string {\n const lines: string[] = [];\n if (stack.hasTypeScript) {\n lines.push(\"- Use TypeScript strict mode\");\n lines.push(\"- Prefer `const` over `let`, avoid `any`\");\n lines.push(\"- Use explicit return types on exported functions\");\n }\n if (\n stack.frameworks.includes(\"React\") ||\n stack.frameworks.includes(\"Next.js\")\n ) {\n lines.push(\"- Functional components only, no class components\");\n lines.push(\"- Use hooks for state and side effects\");\n }\n if (stack.frameworks.includes(\"NestJS\")) {\n lines.push(\"- Follow NestJS module/controller/service pattern\");\n lines.push(\"- Use dependency injection\");\n }\n if (stack.hasPython) {\n lines.push(\"- Follow PEP 8 style\");\n lines.push(\"- Use type hints\");\n }\n if (lines.length === 0) {\n lines.push(\"- Follow existing code patterns\");\n lines.push(\"- Keep functions small and focused\");\n }\n return lines.join(\"\\n\");\n}\n","import type { StackInfo } from \"../detect.js\";\nimport {\n stackSummary,\n commandsSection,\n directorySection,\n conventionsSection,\n} from \"./shared.js\";\n\nexport function generateAgentsMd(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n sections.push(`## Project\\n`);\n sections.push(stackSummary(stack));\n\n if (stack.isMonorepo) {\n sections.push(`\\nThis is a monorepo.`);\n }\n\n sections.push(`\\n## Commands\\n`);\n sections.push(commandsSection(stack));\n\n const dirs = directorySection(stack);\n if (dirs) {\n sections.push(`\\n## Structure\\n`);\n sections.push(dirs);\n }\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n if (communityContent) {\n sections.push(`\\n## Best Practices\\n`);\n sections.push(communityContent);\n }\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Do not modify generated files in \\`dist/\\` or \\`build/\\``);\n sections.push(`- Run tests before committing`);\n sections.push(`- Keep commits small and focused`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { stackSummary, commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateClaudeMd(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n sections.push(stackSummary(stack));\n\n if (stack.isMonorepo) {\n sections.push(`\\nMonorepo project.`);\n }\n\n sections.push(`\\n## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n if (communityContent) {\n sections.push(`\\n## Best Practices\\n`);\n sections.push(communityContent);\n }\n\n sections.push(`\\n## Important\\n`);\n sections.push(`- Always run tests after changes`);\n sections.push(`- Do not edit files in \\`dist/\\` or \\`build/\\``);\n sections.push(`- Prefer editing existing files over creating new ones`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateCursorMdc(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const lines: string[] = [];\n\n lines.push(`---`);\n lines.push(`description: Project rules for ${projectName}`);\n lines.push(`globs:`);\n lines.push(`alwaysApply: true`);\n lines.push(`---\\n`);\n\n lines.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n lines.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n lines.push(`## Commands\\n`);\n lines.push(commandsSection(stack));\n\n lines.push(`\\n## Conventions\\n`);\n lines.push(conventionsSection(stack));\n\n if (communityContent) {\n lines.push(`\\n## Best Practices\\n`);\n lines.push(communityContent);\n }\n\n lines.push(`\\n## Rules\\n`);\n lines.push(`- Do not modify generated files in \\`dist/\\` or \\`build/\\``);\n lines.push(`- Run tests before suggesting changes are complete`);\n lines.push(`- Prefer editing existing files over creating new ones`);\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateCopilotMd(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Tech: ${techParts.join(\", \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n if (communityContent) {\n sections.push(`\\n## Best Practices\\n`);\n sections.push(communityContent);\n }\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateWindsurfrules(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n if (communityContent) {\n sections.push(`\\n## Best Practices\\n`);\n sections.push(communityContent);\n }\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Run tests before completing tasks`);\n sections.push(`- Do not modify generated files in dist/ or build/`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import type { StackInfo } from \"../detect.js\";\nimport { commandsSection, conventionsSection } from \"./shared.js\";\n\nexport function generateClinerules(\n projectName: string,\n stack: StackInfo,\n communityContent = \"\",\n): string {\n const sections: string[] = [];\n\n sections.push(`# ${projectName}\\n`);\n\n const techParts: string[] = [];\n if (stack.languages.length > 0) techParts.push(stack.languages.join(\", \"));\n if (stack.frameworks.length > 0) techParts.push(stack.frameworks.join(\", \"));\n if (techParts.length > 0) {\n sections.push(`Stack: ${techParts.join(\" + \")}\\n`);\n }\n\n sections.push(`## Commands\\n`);\n sections.push(commandsSection(stack));\n\n sections.push(`\\n## Conventions\\n`);\n sections.push(conventionsSection(stack));\n\n if (communityContent) {\n sections.push(`\\n## Best Practices\\n`);\n sections.push(communityContent);\n }\n\n sections.push(`\\n## Rules\\n`);\n sections.push(`- Run tests before completing tasks`);\n sections.push(`- Do not modify generated files in dist/ or build/`);\n sections.push(`- Prefer editing existing files over creating new ones`);\n\n return sections.join(\"\\n\") + \"\\n\";\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport color from \"picocolors\";\nimport type { StackInfo } from \"./detect.js\";\nimport type { OutputFormat } from \"./prompt.js\";\nimport type { CommunityRule } from \"./rules.js\";\nimport { generateAgentsMd } from \"./templates/agents-md.js\";\nimport { generateClaudeMd } from \"./templates/claude-md.js\";\nimport { generateCursorMdc } from \"./templates/cursor-mdc.js\";\nimport { generateCopilotMd } from \"./templates/copilot-md.js\";\nimport { generateWindsurfrules } from \"./templates/windsurf.js\";\nimport { generateClinerules } from \"./templates/cline.js\";\n\nexport interface GeneratedFile {\n path: string;\n content: string;\n}\n\nfunction getOutputPath(format: OutputFormat): string {\n switch (format) {\n case \"agents-md\":\n return \"AGENTS.md\";\n case \"claude-md\":\n return \"CLAUDE.md\";\n case \"cursor-mdc\":\n return \".cursor/rules/project.mdc\";\n case \"copilot-md\":\n return \".github/copilot-instructions.md\";\n case \"windsurfrules\":\n return \".windsurfrules\";\n case \"clinerules\":\n return \".clinerules\";\n }\n}\n\nfunction renderTemplate(\n format: OutputFormat,\n projectName: string,\n stack: StackInfo,\n communityRules: CommunityRule[],\n): string {\n const communityContent =\n communityRules.length > 0\n ? communityRules.map((r) => r.content).join(\"\\n\\n\")\n : \"\";\n\n switch (format) {\n case \"agents-md\":\n return generateAgentsMd(projectName, stack, communityContent);\n case \"claude-md\":\n return generateClaudeMd(projectName, stack, communityContent);\n case \"cursor-mdc\":\n return generateCursorMdc(projectName, stack, communityContent);\n case \"copilot-md\":\n return generateCopilotMd(projectName, stack, communityContent);\n case \"windsurfrules\":\n return generateWindsurfrules(projectName, stack, communityContent);\n case \"clinerules\":\n return generateClinerules(projectName, stack, communityContent);\n }\n}\n\nexport function generateFiles(\n projectName: string,\n stack: StackInfo,\n formats: OutputFormat[],\n rootDir: string,\n communityRules: CommunityRule[] = [],\n): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const format of formats) {\n const relativePath = getOutputPath(format);\n const fullPath = join(rootDir, relativePath);\n const content = renderTemplate(format, projectName, stack, communityRules);\n\n if (existsSync(fullPath)) {\n p.log.warn(\n `${color.dim(relativePath)} ${color.yellow(\"skipped (already exists)\")}`,\n );\n continue;\n }\n\n const dir = dirname(fullPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(fullPath, content, \"utf-8\");\n files.push({ path: relativePath, content });\n p.log.success(`${color.green(relativePath)}`);\n }\n\n return files;\n}\n","import { get as httpsGet } from \"node:https\";\nimport type { StackInfo } from \"./detect.js\";\n\nconst RAW_BASE =\n \"https://raw.githubusercontent.com/pontusab/cursor.directory/main/packages/data/src/rules\";\n\nconst FRAMEWORK_TO_FILES: Record<string, string> = {\n \"Next.js\": \"nextjs\",\n React: \"react\",\n Vue: \"vue\",\n Nuxt: \"nuxtjs\",\n Angular: \"angular\",\n Svelte: \"svelte\",\n SvelteKit: \"sveltekit\",\n Astro: \"astro\",\n Remix: \"remix\",\n Express: \"expressjs\",\n Fastify: \"fastify\",\n NestJS: \"nestjs\",\n Electron: \"electron\",\n Django: \"django\",\n Flask: \"flask\",\n FastAPI: \"fastapi\",\n Vite: \"react-vite-2026\",\n};\n\nconst LANGUAGE_TO_FILES: Record<string, string> = {\n TypeScript: \"typescript\",\n Python: \"python\",\n Rust: \"rust\",\n Go: \"go\",\n};\n\nexport interface CommunityRule {\n title: string;\n content: string;\n source: string;\n}\n\nfunction httpGet(url: string, timeoutMs = 8000): Promise<string> {\n return new Promise((resolve, reject) => {\n const req = httpsGet(\n url,\n { headers: { \"User-Agent\": \"create-agent-config\" } },\n (res) => {\n if (\n res.statusCode &&\n res.statusCode >= 300 &&\n res.statusCode < 400 &&\n res.headers.location\n ) {\n httpGet(res.headers.location, timeoutMs).then(resolve, reject);\n return;\n }\n if (res.statusCode !== 200) {\n reject(new Error(`HTTP ${res.statusCode}`));\n return;\n }\n const chunks: Buffer[] = [];\n res.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n res.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf-8\")));\n res.on(\"error\", reject);\n },\n );\n req.on(\"error\", reject);\n req.setTimeout(timeoutMs, () => {\n req.destroy();\n reject(new Error(\"Request timed out\"));\n });\n });\n}\n\nfunction parseFirstRule(tsSource: string): CommunityRule | null {\n const contentMatch = tsSource.match(/content:\\s*`([\\s\\S]*?)`/);\n if (!contentMatch?.[1]) return null;\n\n const titleMatch = tsSource.match(/title:\\s*\"([^\"]+)\"/);\n\n return {\n title: titleMatch?.[1] ?? \"Community rule\",\n content: contentMatch[1].trim(),\n source: \"cursor.directory\",\n };\n}\n\nasync function fetchRuleFile(fileName: string): Promise<CommunityRule | null> {\n try {\n const raw = await httpGet(`${RAW_BASE}/${fileName}.ts`);\n return parseFirstRule(raw);\n } catch {\n return null;\n }\n}\n\nexport function getMatchingFileNames(stack: StackInfo): string[] {\n const files = new Set<string>();\n\n for (const fw of stack.frameworks) {\n const mapped = FRAMEWORK_TO_FILES[fw];\n if (mapped) files.add(mapped);\n }\n\n for (const lang of stack.languages) {\n const mapped = LANGUAGE_TO_FILES[lang];\n if (mapped) files.add(mapped);\n }\n\n return [...files];\n}\n\nexport async function fetchCommunityRules(\n stack: StackInfo,\n): Promise<CommunityRule[]> {\n const fileNames = getMatchingFileNames(stack);\n if (fileNames.length === 0) return [];\n\n const results = await Promise.allSettled(\n fileNames.map((f) => fetchRuleFile(f)),\n );\n\n return results\n .filter(\n (r): r is PromiseFulfilledResult<CommunityRule | null> =>\n r.status === \"fulfilled\",\n )\n .map((r) => r.value)\n .filter((r): r is CommunityRule => r !== null);\n}\n","import { resolve } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport color from \"picocolors\";\nimport { detectStack } from \"./detect.js\";\nimport { promptUser, showPlan } from \"./prompt.js\";\nimport { generateFiles } from \"./generate.js\";\nimport { fetchCommunityRules } from \"./rules.js\";\nimport type { CommunityRule } from \"./rules.js\";\n\nconst VERSION = \"2.0.0\";\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(VERSION);\n return;\n }\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(`\n ${color.bold(\"create-agent-config\")} v${VERSION}\n\n Scaffold AI agent config files for your project.\n Fetches community best practices from cursor.directory.\n\n ${color.dim(\"Usage:\")}\n npm create agent-config Interactive mode\n npx create-agent-config Same thing\n npx create-agent-config [dir] Target a specific directory\n\n ${color.dim(\"Options:\")}\n --offline Skip fetching community rules\n -v, --version Print version\n -h, --help Print this help\n\n ${color.dim(\"What gets generated (you choose which):\")}\n AGENTS.md Open standard (Codex, Devin, Jules)\n CLAUDE.md Claude Code\n .cursor/rules/project.mdc Cursor IDE\n .github/copilot-instructions.md GitHub Copilot\n .windsurfrules Windsurf / Codeium\n .clinerules Cline\n\n Existing files are never overwritten.\n Source: ${color.underline(\"https://github.com/ofershap/create-agent-config\")}\n`);\n return;\n }\n\n const offline = args.includes(\"--offline\");\n const positionalArgs = args.filter((a) => !a.startsWith(\"-\"));\n const targetDir = resolve(positionalArgs[0] ?? \".\");\n\n p.intro(color.bgCyan(color.black(\" create-agent-config \")));\n\n const s = p.spinner();\n\n s.start(\"Scanning project...\");\n const stack = detectStack(targetDir);\n s.stop(\"Project scanned.\");\n\n let remoteRules: CommunityRule[] = [];\n if (!offline) {\n s.start(\"Fetching community rules from cursor.directory...\");\n remoteRules = await fetchCommunityRules(stack);\n if (remoteRules.length > 0) {\n s.stop(\n `Found ${remoteRules.length} community rule${remoteRules.length === 1 ? \"\" : \"s\"} for your stack.`,\n );\n } else {\n s.stop(\"No matching community rules found. Using built-in defaults.\");\n }\n }\n\n const choices = await promptUser(stack, remoteRules);\n\n showPlan(\n choices.projectName,\n choices.formats,\n choices.useRemoteRules,\n targetDir,\n );\n\n const proceed = await p.confirm({\n message: \"Generate these files?\",\n initialValue: true,\n });\n\n if (p.isCancel(proceed) || !proceed) {\n p.cancel(\"Nothing generated.\");\n return;\n }\n\n const activeRules = choices.useRemoteRules ? remoteRules : [];\n\n const files = generateFiles(\n choices.projectName,\n stack,\n choices.formats,\n targetDir,\n activeRules,\n );\n\n if (files.length > 0) {\n p.outro(\n `${color.green(`${files.length} file${files.length === 1 ? \"\" : \"s\"} created.`)} Edit them to match your project.`,\n );\n } else {\n p.outro(\"All files already existed. Nothing to do.\");\n }\n}\n\nmain().catch((err: unknown) => {\n console.error(err);\n process.exit(1);\n});\n\nexport { detectStack } from \"./detect.js\";\nexport type { StackInfo } from \"./detect.js\";\nexport type { OutputFormat, UserChoices } from \"./prompt.js\";\nexport { generateFiles } from \"./generate.js\";\nexport type { CommunityRule } from \"./rules.js\";\nexport { fetchCommunityRules } from \"./rules.js\";\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -13,16 +13,24 @@ interface StackInfo {
|
|
|
13
13
|
}
|
|
14
14
|
declare function detectStack(rootDir?: string): StackInfo;
|
|
15
15
|
|
|
16
|
+
interface CommunityRule {
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
source: string;
|
|
20
|
+
}
|
|
21
|
+
declare function fetchCommunityRules(stack: StackInfo): Promise<CommunityRule[]>;
|
|
22
|
+
|
|
16
23
|
type OutputFormat = "agents-md" | "claude-md" | "cursor-mdc" | "copilot-md" | "windsurfrules" | "clinerules";
|
|
17
24
|
interface UserChoices {
|
|
18
25
|
projectName: string;
|
|
19
26
|
formats: OutputFormat[];
|
|
27
|
+
useRemoteRules: boolean;
|
|
20
28
|
}
|
|
21
29
|
|
|
22
30
|
interface GeneratedFile {
|
|
23
31
|
path: string;
|
|
24
32
|
content: string;
|
|
25
33
|
}
|
|
26
|
-
declare function generateFiles(projectName: string, stack: StackInfo, formats: OutputFormat[], rootDir: string): GeneratedFile[];
|
|
34
|
+
declare function generateFiles(projectName: string, stack: StackInfo, formats: OutputFormat[], rootDir: string, communityRules?: CommunityRule[]): GeneratedFile[];
|
|
27
35
|
|
|
28
|
-
export { type OutputFormat, type StackInfo, type UserChoices, detectStack, generateFiles };
|
|
36
|
+
export { type CommunityRule, type OutputFormat, type StackInfo, type UserChoices, detectStack, fetchCommunityRules, generateFiles };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,16 +13,24 @@ interface StackInfo {
|
|
|
13
13
|
}
|
|
14
14
|
declare function detectStack(rootDir?: string): StackInfo;
|
|
15
15
|
|
|
16
|
+
interface CommunityRule {
|
|
17
|
+
title: string;
|
|
18
|
+
content: string;
|
|
19
|
+
source: string;
|
|
20
|
+
}
|
|
21
|
+
declare function fetchCommunityRules(stack: StackInfo): Promise<CommunityRule[]>;
|
|
22
|
+
|
|
16
23
|
type OutputFormat = "agents-md" | "claude-md" | "cursor-mdc" | "copilot-md" | "windsurfrules" | "clinerules";
|
|
17
24
|
interface UserChoices {
|
|
18
25
|
projectName: string;
|
|
19
26
|
formats: OutputFormat[];
|
|
27
|
+
useRemoteRules: boolean;
|
|
20
28
|
}
|
|
21
29
|
|
|
22
30
|
interface GeneratedFile {
|
|
23
31
|
path: string;
|
|
24
32
|
content: string;
|
|
25
33
|
}
|
|
26
|
-
declare function generateFiles(projectName: string, stack: StackInfo, formats: OutputFormat[], rootDir: string): GeneratedFile[];
|
|
34
|
+
declare function generateFiles(projectName: string, stack: StackInfo, formats: OutputFormat[], rootDir: string, communityRules?: CommunityRule[]): GeneratedFile[];
|
|
27
35
|
|
|
28
|
-
export { type OutputFormat, type StackInfo, type UserChoices, detectStack, generateFiles };
|
|
36
|
+
export { type CommunityRule, type OutputFormat, type StackInfo, type UserChoices, detectStack, fetchCommunityRules, generateFiles };
|