create-stackforge 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +543 -518
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/cli/commands/create.ts","../src/cli/prompts/index.ts","../src/utils/package-manager.ts","../src/presets/index.ts","../src/cli/config-builder.ts","../src/cli/defaults.ts","../src/utils/supported.ts","../src/generators/core/project-creator.ts","../src/utils/file-system.ts","../src/generators/scripts/scripts-registry.ts","../src/utils/versions.ts","../src/generators/deps/deps-registry.ts","../src/generators/core/readme.ts","../src/utils/project-config.ts","../src/utils/schema.ts","../src/utils/migrations.ts","../src/generators/database/database-files.ts","../src/utils/env-file.ts","../src/generators/frontend/frontend-files.ts","../src/generators/templates/template-engine.ts","../src/generators/ui/ui-files.ts","../src/generators/auth/auth-files.ts","../src/generators/api/api-files.ts","../src/ai-agents/config-generator.ts","../src/generators/features/feature-files.ts","../src/cli/run-generators.ts","../src/cli/validators/config.ts","../src/cli/validators/compatibility.ts","../src/utils/version-manager.ts","../src/utils/dependency-resolver.ts","../src/cli/validators/dependencies.ts","../src/utils/logger.ts","../src/utils/install.ts","../src/cli/commands/list.ts","../src/cli/commands/add.ts","../src/utils/package-json.ts","../src/utils/feature-update.ts","../src/cli/commands/remove.ts","../src/utils/feature-cleanup.ts","../src/cli/commands/update.ts","../src/cli/commands/doctor.ts","../src/utils/doctor.ts","../src/cli/commands/configure-agents.ts","../src/cli/commands/add-agent.ts","../src/cli/commands/remove-agent.ts","../src/cli/commands/list-agents.ts","../src/cli/commands/migrate.ts","../src/cli/commands/list-presets.ts","../src/cli/commands/use.ts","../src/cli/commands/validate.ts","../src/cli/commands/fix.ts","../src/cli/commands/upgrade.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createRequire } from 'node:module';\nimport { createCommand } from './cli/commands/create.js';\nimport { listCommand } from './cli/commands/list.js';\nimport { addCommand } from './cli/commands/add.js';\nimport { removeCommand } from './cli/commands/remove.js';\nimport { updateCommand } from './cli/commands/update.js';\nimport { doctorCommand } from './cli/commands/doctor.js';\nimport { configureAgentsCommand } from './cli/commands/configure-agents.js';\nimport { addAgentCommand } from './cli/commands/add-agent.js';\nimport { removeAgentCommand } from './cli/commands/remove-agent.js';\nimport { listAgentsCommand } from './cli/commands/list-agents.js';\nimport { migrateCommand } from './cli/commands/migrate.js';\nimport { listPresetsCommand } from './cli/commands/list-presets.js';\nimport { useCommand } from './cli/commands/use.js';\nimport { validateCommand } from './cli/commands/validate.js';\nimport { fixCommand } from './cli/commands/fix.js';\nimport { upgradeCommand } from './cli/commands/upgrade.js';\nimport { logger } from './utils/logger.js';\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json');\n\nconst program = new Command();\n\nprogram\n .name('create-stackforge')\n .description('Universal full-stack boilerplate generator')\n .version(version);\n\nprogram.addCommand(createCommand, { isDefault: true });\nprogram.addCommand(listCommand);\nprogram.addCommand(addCommand);\nprogram.addCommand(removeCommand);\nprogram.addCommand(updateCommand);\nprogram.addCommand(doctorCommand);\nprogram.addCommand(configureAgentsCommand);\nprogram.addCommand(addAgentCommand);\nprogram.addCommand(removeAgentCommand);\nprogram.addCommand(listAgentsCommand);\nprogram.addCommand(migrateCommand);\nprogram.addCommand(listPresetsCommand);\nprogram.addCommand(useCommand);\nprogram.addCommand(validateCommand);\nprogram.addCommand(fixCommand);\nprogram.addCommand(upgradeCommand);\n\nprogram.parseAsync(process.argv).catch((err) => {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n","import { Command } from 'commander';\nimport { promptForConfig } from '../prompts/index.js';\nimport { runGenerators } from '../run-generators.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { logger } from '../../utils/logger.js';\nimport { runInstall } from '../../utils/install.js';\nimport { join, resolve } from 'node:path';\n\nfunction parseCsv(input?: string): string[] | undefined {\n if (!input) return undefined;\n return input.split(',').map((a) => a.trim()).filter(Boolean);\n}\n\nexport const createCommand = new Command('create')\n .argument('[project-name]', 'name of the project')\n .option('--preset <name>', 'use a preset config')\n .option('--no-install', 'skip dependency install')\n .option('--dry-run', 'print planned actions without writing files')\n .option('--ai-agents <list>', 'comma-separated list of AI agents to configure')\n .option('--features <list>', 'comma-separated list of features to include')\n .option('--yes', 'skip prompts and use defaults')\n .option('--no-prompts', 'alias for --yes')\n .option('--out-dir <path>', 'output directory (defaults to current working directory)')\n .action(async (projectName, options) => {\n logger.info('Starting StackForge create flow...');\n const skipPrompts = Boolean(options.yes || options.noPrompts);\n const config = await promptForConfig({ projectName, preset: options.preset, skipPrompts });\n if (options.aiAgents) {\n config.aiAgents = parseCsv(options.aiAgents) ?? [];\n }\n if (options.features) {\n config.features = parseCsv(options.features) ?? [];\n }\n validateConfig(config);\n validateCompatibility(config);\n validateDependencies(config);\n const ctx = {\n dryRun: Boolean(options.dryRun),\n log: (message: string) => logger.info(message)\n };\n const outDir = options.outDir ? resolve(options.outDir) : process.cwd();\n await runGenerators(outDir, config, ctx);\n if (options.install !== false && !options.dryRun) {\n const projectRoot = join(outDir, config.projectName);\n logger.info('Installing dependencies...');\n await runInstall(config.packageManager, projectRoot);\n }\n logger.info(`Project created: ${config.projectName}`);\n });\n","import inquirer from 'inquirer';\nimport type { PackageManager, StackforgeConfig } from '../../types/config.js';\nimport { detectPackageManager } from '../../utils/package-manager.js';\nimport { buildConfig } from '../config-builder.js';\nimport { defaultConfig } from '../defaults.js';\nimport { supported } from '../../utils/supported.js';\n\nconst displayNames: Record<string, string> = {\n // Frontend\n nextjs: 'Next.js',\n vite: 'Vite',\n // UI\n none: 'None',\n tailwind: 'Tailwind CSS',\n shadcn: 'shadcn/ui',\n mui: 'Material UI',\n chakra: 'Chakra UI',\n mantine: 'Mantine',\n antd: 'Ant Design',\n nextui: 'NextUI',\n // Database\n postgres: 'PostgreSQL',\n mysql: 'MySQL',\n sqlite: 'SQLite',\n mongodb: 'MongoDB',\n neon: 'Neon',\n supabase: 'Supabase',\n // ORM\n drizzle: 'Drizzle',\n prisma: 'Prisma',\n mongoose: 'Mongoose',\n typeorm: 'TypeORM',\n // Auth\n nextauth: 'NextAuth',\n clerk: 'Clerk',\n 'better-auth': 'Better Auth',\n // API\n rest: 'REST',\n trpc: 'tRPC',\n graphql: 'GraphQL',\n // Features\n email: 'Email (Resend)',\n storage: 'File Storage (Cloudinary)',\n payments: 'Payments (Stripe)',\n analytics: 'Analytics (PostHog)',\n 'error-tracking': 'Error Tracking (Sentry)'\n};\n\nfunction label(value: string): string {\n return displayNames[value] || value;\n}\n\nexport async function promptForConfig(input: {\n projectName?: string;\n preset?: string;\n skipPrompts?: boolean;\n}): Promise<StackforgeConfig> {\n if (input.skipPrompts) {\n const base = defaultConfig();\n const merged: StackforgeConfig = {\n ...base,\n projectName: input.projectName ?? base.projectName,\n preset: input.preset\n };\n return buildConfig(merged);\n }\n\n const detected = detectPackageManager(process.cwd());\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: 'Project name',\n default: input.projectName || 'my-app'\n },\n {\n type: 'list',\n name: 'packageManager',\n message: 'Package manager',\n choices: [\n { name: 'npm', value: 'npm' },\n { name: 'pnpm', value: 'pnpm' },\n { name: 'yarn', value: 'yarn' },\n { name: 'bun', value: 'bun' }\n ],\n default: detected || 'npm'\n },\n {\n type: 'list',\n name: 'frontend',\n message: 'Frontend framework',\n choices: supported.frontend.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'language',\n message: 'Language',\n choices: [\n { name: 'TypeScript', value: 'ts' },\n { name: 'JavaScript', value: 'js' }\n ]\n },\n {\n type: 'list',\n name: 'uiLibrary',\n message: 'UI library',\n choices: supported.ui.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'databaseProvider',\n message: 'Database provider',\n choices: supported.database.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'orm',\n message: 'ORM',\n when: (ans) => ans.databaseProvider !== 'none',\n choices: supported.orm.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'authProvider',\n message: 'Authentication',\n choices: supported.auth.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'apiType',\n message: 'API type',\n choices: supported.api.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'checkbox',\n name: 'features',\n message: 'Additional features',\n choices: supported.features.map((v) => ({ name: label(v), value: v }))\n }\n ]);\n\n const base: StackforgeConfig = {\n projectName: answers.projectName,\n packageManager: answers.packageManager as PackageManager,\n frontend: { type: answers.frontend, language: answers.language },\n ui: { library: answers.uiLibrary },\n database: { provider: answers.databaseProvider, orm: answers.orm },\n auth: { provider: answers.authProvider },\n api: { type: answers.apiType },\n features: answers.features ?? [],\n aiAgents: [],\n preset: input.preset\n };\n\n return buildConfig(base);\n}\n","import { existsSync } from 'node:fs';\nimport { unlink } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { PackageManager } from '../types/config.js';\n\nexport const LOCKFILES: Array<{ pm: PackageManager; file: string }> = [\n { pm: 'pnpm', file: 'pnpm-lock.yaml' },\n { pm: 'yarn', file: 'yarn.lock' },\n { pm: 'bun', file: 'bun.lockb' },\n { pm: 'npm', file: 'package-lock.json' }\n];\n\nexport function detectPackageManager(cwd: string): PackageManager | null {\n for (const entry of LOCKFILES) {\n if (existsSync(join(cwd, entry.file))) {\n return entry.pm;\n }\n }\n return null;\n}\n\nexport async function removeLockfiles(cwd: string): Promise<void> {\n for (const entry of LOCKFILES) {\n const target = join(cwd, entry.file);\n if (existsSync(target)) {\n await unlink(target);\n }\n }\n}\n","import type { StackforgeConfig } from '../types/config.js';\n\nexport type PresetName = 'starter' | 'saas' | 'ecommerce' | 'blog' | 'api';\n\nconst presets: Record<PresetName, Partial<StackforgeConfig>> = {\n starter: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'drizzle' },\n auth: { provider: 'none' },\n api: { type: 'trpc' },\n features: []\n },\n saas: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'prisma' },\n auth: { provider: 'nextauth' },\n api: { type: 'trpc' },\n features: ['email', 'payments']\n },\n ecommerce: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'prisma' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: ['payments', 'storage']\n },\n blog: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'sqlite', orm: 'prisma' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: ['storage']\n },\n api: {\n frontend: { type: 'vite', language: 'ts' },\n ui: { library: 'none' },\n database: { provider: 'postgres', orm: 'drizzle' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: []\n }\n};\n\nexport const presetNames: PresetName[] = Object.keys(presets) as PresetName[];\n\nexport function getPreset(name: string | undefined): Partial<StackforgeConfig> | null {\n if (!name) return null;\n return presets[name as PresetName] ?? null;\n}","import type { StackforgeConfig } from '../types/config.js';\nimport { getPreset } from '../presets/index.js';\n\nexport function buildConfig(base: StackforgeConfig): StackforgeConfig {\n const preset = getPreset(base.preset);\n const merged: StackforgeConfig = preset\n ? {\n ...base,\n ...preset,\n frontend: preset.frontend ?? base.frontend,\n ui: preset.ui ?? base.ui,\n database: preset.database ?? base.database,\n auth: preset.auth ?? base.auth,\n api: preset.api ?? base.api,\n features: preset.features ?? base.features,\n aiAgents: preset.aiAgents ?? base.aiAgents\n }\n : base;\n\n if (merged.ui.library === 'shadcn') {\n // Ensure Tailwind base requirements are satisfied by generator/deps.\n merged.ui = { library: 'shadcn' };\n }\n\n return merged;\n}","import type { StackforgeConfig } from '../../types/config.js';\n\nexport function defaultConfig(): StackforgeConfig {\n return {\n projectName: 'my-app',\n packageManager: 'npm',\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'none' },\n database: { provider: 'none' },\n auth: { provider: 'none' },\n api: { type: 'none' },\n features: [],\n aiAgents: []\n };\n}","export const supported = {\n frontend: ['nextjs', 'vite'] as const,\n ui: ['none', 'tailwind', 'shadcn', 'mui', 'chakra', 'mantine', 'antd', 'nextui'] as const,\n database: ['none', 'postgres', 'mysql', 'sqlite', 'mongodb', 'neon', 'supabase'] as const,\n orm: ['drizzle', 'prisma', 'mongoose', 'typeorm'] as const,\n auth: ['none', 'nextauth', 'clerk', 'better-auth', 'supabase'] as const,\n api: ['none', 'rest', 'trpc', 'graphql'] as const,\n agents: ['claude', 'copilot', 'codex', 'gemini', 'cursor', 'codeium', 'windsurf', 'tabnine'] as const,\n features: ['email', 'storage', 'payments', 'analytics', 'error-tracking'] as const\n};\n","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport { collectScripts } from '../scripts/scripts-registry.js';\nimport { collectDependencies } from '../deps/deps-registry.js';\nimport { buildProjectReadme } from './readme.js';\nimport type { GeneratorContext } from '../context.js';\nimport { writeProjectConfig } from '../../utils/project-config.js';\n\ninterface PackageJson {\n name: string;\n version: string;\n private: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nexport async function createProjectSkeleton(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n await ensureDir(projectRoot, ctx);\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(projectRoot, 'README.md'), readme + '\\n', ctx);\n\n const envExample = `# Environment Variables\\n`;\n await writeTextFile(join(projectRoot, '.env.example'), envExample, ctx);\n const gitignore = await readTextFile(join(templatesRoot, 'shared', '_gitignore'));\n await writeTextFile(join(projectRoot, '.gitignore'), gitignore, ctx);\n const editorconfig = await readTextFile(join(templatesRoot, 'shared', '.editorconfig'));\n await writeTextFile(join(projectRoot, '.editorconfig'), editorconfig, ctx);\n\n const pkg: PackageJson = {\n name: config.projectName,\n version: '0.0.0',\n private: true\n };\n\n const featureScripts = collectScripts(config);\n const featureDeps = collectDependencies(config);\n\n if (Object.keys(featureScripts).length > 0) {\n pkg.scripts = featureScripts;\n }\n pkg.dependencies = featureDeps.dependencies;\n pkg.devDependencies = featureDeps.devDependencies;\n\n await writeTextFile(join(projectRoot, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', ctx);\n\n if (!ctx?.dryRun) {\n await writeProjectConfig(projectRoot, config);\n }\n\n if (config.frontend.language === 'ts') {\n const tsconfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'Bundler',\n strict: true,\n jsx: 'preserve',\n baseUrl: '.',\n paths: {\n '@/*': ['src/*']\n },\n esModuleInterop: true,\n resolveJsonModule: true,\n incremental: true,\n noEmit: true,\n forceConsistentCasingInFileNames: true,\n skipLibCheck: true\n },\n include: ['src', 'app']\n };\n\n await writeTextFile(join(projectRoot, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', ctx);\n }\n}\n","import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { GeneratorContext } from '../generators/context.js';\n\nexport async function ensureDir(path: string, ctx?: GeneratorContext): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: mkdir ${path}`);\n return;\n }\n await mkdir(path, { recursive: true });\n}\n\nexport async function writeTextFile(\n path: string,\n content: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: write ${path}`);\n return;\n }\n await ensureDir(dirname(path), ctx);\n await writeFile(path, content, 'utf8');\n}\n\nexport async function readTextFile(path: string): Promise<string> {\n return readFile(path, 'utf8');\n}\n\nexport async function removePath(path: string, ctx?: GeneratorContext): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: remove ${path}`);\n return;\n }\n await rm(path, { recursive: true, force: true });\n}","import type { StackforgeConfig } from '../types/config.js';\n\nexport type ScriptMap = Record<string, string>;\n\nexport function collectScripts(config: StackforgeConfig): ScriptMap {\n const scripts: ScriptMap = {};\n\n if (config.frontend.type === 'nextjs') {\n scripts['dev'] = 'next dev';\n scripts['build'] = 'next build';\n scripts['start'] = 'next start';\n scripts['lint'] = 'next lint';\n }\n\n if (config.frontend.type === 'vite') {\n scripts['dev'] = 'vite';\n scripts['build'] = 'vite build';\n scripts['preview'] = 'vite preview';\n\n if (config.api.type === 'rest' || config.api.type === 'graphql' || config.api.type === 'trpc') {\n scripts['api:dev'] = config.frontend.language === 'ts' ? 'tsx src/server/index.ts' : 'node src/server/index.js';\n }\n }\n\n if (config.ui.library === 'tailwind') {\n scripts['css:build'] = 'npx tailwindcss -i ./src/styles.css -o ./dist/styles.css';\n scripts['css:watch'] = 'npx tailwindcss -i ./src/styles.css -o ./dist/styles.css --watch';\n }\n\n if (config.database.orm === 'drizzle') {\n scripts['db:generate'] = 'npx drizzle-kit generate';\n scripts['db:migrate'] = 'npx drizzle-kit migrate';\n }\n\n if (config.database.orm === 'prisma') {\n scripts['db:generate'] = 'npx prisma generate';\n scripts['db:migrate'] = 'npx prisma migrate dev';\n scripts['db:studio'] = 'npx prisma studio';\n }\n\n if (config.ui.library === 'shadcn') {\n scripts['ui:add'] = 'npx shadcn-ui@latest add';\n }\n\n if (config.database.orm === 'typeorm') {\n scripts['db:generate'] = 'npx typeorm migration:generate';\n scripts['db:migrate'] = 'npx typeorm migration:run';\n }\n\n return scripts;\n}\n","export const versions = {\n next: '^16.0.10',\n react: '^19.0.0',\n reactDom: '^19.0.0',\n vite: '^6.0.0',\n viteReactSwc: '^3.5.0',\n typescript: '^5.5.4',\n typesReact: '^19.0.0',\n typesReactDom: '^19.0.0',\n typesNode: '^20.14.10',\n tsx: '^4.16.5',\n tailwindcss: '^3.4.0',\n postcss: '^8.4.0',\n autoprefixer: '^10.4.0',\n cva: '^0.7.0',\n clsx: '^2.1.1',\n tailwindMerge: '^2.4.0',\n muiMaterial: '^5.16.0',\n muiEmotionReact: '^11.13.0',\n muiEmotionStyled: '^11.13.0',\n chakraUi: '^2.8.2',\n chakraEmotionReact: '^11.11.0',\n chakraEmotionStyled: '^11.11.0',\n chakraFramerMotion: '^11.11.0',\n mantineCore: '^7.12.0',\n mantineHooks: '^7.12.0',\n mantineDates: '^7.12.0',\n mantineNotifications: '^7.12.0',\n antd: '^5.20.0',\n nextui: '^2.4.6',\n drizzleOrm: '^0.36.0',\n drizzleKit: '^0.24.0',\n prisma: '^5.17.0',\n prismaClient: '^5.17.0',\n mongoose: '^8.5.0',\n typeorm: '^0.3.20',\n reflectMetadata: '^0.2.2',\n pg: '^8.12.0',\n typesPg: '^8.11.10',\n mysql2: '^3.10.0',\n betterSqlite3: '^9.4.0',\n neonServerless: '^0.9.5',\n nextAuth: '^4.24.0',\n clerkNext: '^5.0.0',\n supabaseJs: '^2.45.0',\n supabaseSsr: '^0.5.2',\n trpcServer: '^10.45.0',\n trpcClient: '^10.45.0',\n trpcReactQuery: '^10.45.0',\n tanstackQuery: '^4.18.0',\n zod: '^3.23.0',\n graphql: '^16.9.0',\n graphqlRequest: '^6.1.0',\n graphqlYoga: '^5.7.0',\n mongodb: '^6.8.0',\n betterAuth: '^1.2.0',\n resend: '^3.5.0',\n sendgrid: '^8.1.0',\n nodemailer: '^6.9.0',\n typesNodemailer: '^6.4.0',\n awsSes: '^3.700.0',\n cloudinary: '^2.0.0',\n awsS3: '^3.700.0',\n vercelBlob: '^0.24.0',\n stripe: '^14.0.0',\n paypal: '^1.0.0',\n razorpay: '^2.9.0',\n posthog: '^1.165.0',\n reactGa4: '^2.1.0',\n vercelAnalytics: '^1.3.0',\n sentryNext: '^8.35.0',\n logrocket: '^8.1.0'\n} as const;\n","import type { StackforgeConfig } from '../types/config.js';\nimport { versions } from '../../utils/versions.js';\n\nexport interface DependencyResult {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n}\n\nexport function collectDependencies(config: StackforgeConfig): DependencyResult {\n const dependencies: Record<string, string> = {};\n const devDependencies: Record<string, string> = {};\n\n if (config.frontend.type === 'nextjs') {\n dependencies['next'] = versions.next;\n dependencies['react'] = versions.react;\n dependencies['react-dom'] = versions.reactDom;\n }\n\n if (config.frontend.type === 'vite') {\n dependencies['react'] = versions.react;\n dependencies['react-dom'] = versions.reactDom;\n devDependencies['vite'] = versions.vite;\n devDependencies['@vitejs/plugin-react-swc'] = versions.viteReactSwc;\n\n if ((config.api.type === 'rest' || config.api.type === 'graphql') && config.frontend.language === 'ts') {\n devDependencies['tsx'] = versions.tsx;\n devDependencies['@types/node'] = versions.typesNode;\n }\n }\n\n if (config.frontend.language === 'ts') {\n devDependencies['typescript'] = versions.typescript;\n devDependencies['@types/react'] = versions.typesReact;\n devDependencies['@types/react-dom'] = versions.typesReactDom;\n }\n\n if (config.ui.library === 'tailwind' || config.ui.library === 'shadcn') {\n devDependencies['tailwindcss'] = versions.tailwindcss;\n devDependencies['postcss'] = versions.postcss;\n devDependencies['autoprefixer'] = versions.autoprefixer;\n }\n\n if (config.ui.library === 'shadcn') {\n dependencies['class-variance-authority'] = versions.cva;\n dependencies['clsx'] = versions.clsx;\n dependencies['tailwind-merge'] = versions.tailwindMerge;\n }\n\n if (config.ui.library === 'mui') {\n dependencies['@mui/material'] = versions.muiMaterial;\n dependencies['@emotion/react'] = versions.muiEmotionReact;\n dependencies['@emotion/styled'] = versions.muiEmotionStyled;\n }\n\n if (config.ui.library === 'chakra') {\n dependencies['@chakra-ui/react'] = versions.chakraUi;\n dependencies['@emotion/react'] = versions.chakraEmotionReact;\n dependencies['@emotion/styled'] = versions.chakraEmotionStyled;\n dependencies['framer-motion'] = versions.chakraFramerMotion;\n }\n\n if (config.ui.library === 'mantine') {\n dependencies['@mantine/core'] = versions.mantineCore;\n dependencies['@mantine/hooks'] = versions.mantineHooks;\n dependencies['@mantine/dates'] = versions.mantineDates;\n dependencies['@mantine/notifications'] = versions.mantineNotifications;\n }\n\n if (config.ui.library === 'antd') {\n dependencies['antd'] = versions.antd;\n }\n\n if (config.ui.library === 'nextui') {\n dependencies['@nextui-org/react'] = versions.nextui;\n }\n\n if (config.database.provider === 'postgres' || config.database.provider === 'neon' || config.database.provider === 'supabase') {\n dependencies['pg'] = versions.pg;\n if (config.frontend.language === 'ts') {\n devDependencies['@types/pg'] = versions.typesPg;\n }\n }\n\n if (config.database.provider === 'mysql') {\n dependencies['mysql2'] = versions.mysql2;\n }\n\n if (config.database.provider === 'sqlite') {\n dependencies['better-sqlite3'] = versions.betterSqlite3;\n }\n\n if (config.database.provider === 'mongodb') {\n dependencies['mongodb'] = versions.mongodb;\n }\n\n if (config.database.provider === 'neon') {\n dependencies['@neondatabase/serverless'] = versions.neonServerless;\n }\n\n if (config.database.provider === 'supabase') {\n dependencies['@supabase/supabase-js'] = versions.supabaseJs;\n }\n\n if (config.database.orm === 'drizzle') {\n dependencies['drizzle-orm'] = versions.drizzleOrm;\n devDependencies['drizzle-kit'] = versions.drizzleKit;\n }\n\n if (config.database.orm === 'prisma') {\n devDependencies['prisma'] = versions.prisma;\n dependencies['@prisma/client'] = versions.prismaClient;\n }\n\n if (config.database.orm === 'mongoose') {\n dependencies['mongoose'] = versions.mongoose;\n }\n\n if (config.database.orm === 'typeorm') {\n dependencies['typeorm'] = versions.typeorm;\n dependencies['reflect-metadata'] = versions.reflectMetadata;\n }\n\n if (config.auth.provider === 'nextauth') {\n dependencies['next-auth'] = versions.nextAuth;\n }\n\n if (config.auth.provider === 'clerk') {\n dependencies['@clerk/nextjs'] = versions.clerkNext;\n }\n\n if (config.auth.provider === 'better-auth') {\n dependencies['better-auth'] = versions.betterAuth;\n }\n\n if (config.auth.provider === 'supabase') {\n dependencies['@supabase/supabase-js'] = versions.supabaseJs;\n if (config.frontend.type === 'nextjs') {\n dependencies['@supabase/ssr'] = versions.supabaseSsr;\n }\n }\n\n if (config.api.type === 'trpc') {\n dependencies['@trpc/server'] = versions.trpcServer;\n dependencies['@trpc/client'] = versions.trpcClient;\n dependencies['@trpc/react-query'] = versions.trpcReactQuery;\n dependencies['@tanstack/react-query'] = versions.tanstackQuery;\n dependencies['zod'] = versions.zod;\n if (config.frontend.type === 'vite') {\n devDependencies['tsx'] = versions.tsx;\n devDependencies['@types/node'] = versions.typesNode;\n }\n }\n\n if (config.api.type === 'graphql') {\n dependencies['graphql'] = versions.graphql;\n dependencies['graphql-request'] = versions.graphqlRequest;\n dependencies['graphql-yoga'] = versions.graphqlYoga;\n }\n\n if (config.features.includes('email')) {\n dependencies['resend'] = versions.resend;\n }\n\n if (config.features.includes('storage')) {\n dependencies['cloudinary'] = versions.cloudinary;\n }\n\n if (config.features.includes('payments')) {\n dependencies['stripe'] = versions.stripe;\n }\n\n if (config.features.includes('analytics')) {\n dependencies['posthog-js'] = versions.posthog;\n }\n\n if (config.features.includes('error-tracking') && config.frontend.type === 'nextjs') {\n dependencies['@sentry/nextjs'] = versions.sentryNext;\n }\n\n return { dependencies, devDependencies };\n}\n","import type { StackforgeConfig } from '../types/config.js';\n\nfunction formatDb(config: StackforgeConfig): string {\n if (config.database.provider === 'none') return 'none';\n return `${config.database.provider}${config.database.orm ? ` (${config.database.orm})` : ''}`;\n}\n\nfunction getDevCommand(config: StackforgeConfig): string {\n if (config.frontend.type === 'vite' && (config.api.type === 'rest' || config.api.type === 'graphql')) {\n return 'npm run dev (frontend) + npm run api:dev (API)';\n }\n return 'npm run dev';\n}\n\nfunction formatFeatures(config: StackforgeConfig): string {\n if (!config.features || config.features.length === 0) return 'none';\n return config.features.join(', ');\n}\n\nexport function buildProjectReadme(config: StackforgeConfig): string {\n const featureLinks = config.features\n .map((f) => `- features/${f}/README.md`)\n .join('\\n');\n\n return `# ${config.projectName}\n\nGenerated by StackForge.\n\n## Stack\n- Frontend: ${config.frontend.type} (${config.frontend.language})\n- UI: ${config.ui.library}\n- Database: ${formatDb(config)}\n- Auth: ${config.auth.provider}\n- API: ${config.api.type}\n- Features: ${formatFeatures(config)}\n\n## Commands\n- Install: ${config.packageManager} install\n- Dev: ${getDevCommand(config)}\n\n${config.features.length ? `## Feature Docs\\n${featureLinks}\\n` : ''}\n## Notes\n- Update .env values before running in production.\n`;\n}","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { STACKFORGE_SCHEMA_VERSION } from './schema.js';\nimport type { StackforgeProjectFile } from './migrations.js';\nimport { migrateConfig } from './migrations.js';\n\nexport async function writeProjectConfig(root: string, config: StackforgeConfig): Promise<void> {\n const path = join(root, 'stackforge.json');\n const payload: StackforgeProjectFile = { ...config, _schemaVersion: STACKFORGE_SCHEMA_VERSION };\n await writeFile(path, JSON.stringify(payload, null, 2) + '\\n', 'utf8');\n}\n\nexport async function readProjectConfig(root: string): Promise<StackforgeConfig> {\n const path = join(root, 'stackforge.json');\n const raw = await readFile(path, 'utf8');\n const parsed = JSON.parse(raw) as StackforgeProjectFile;\n const migrated = migrateConfig(parsed);\n if (migrated._schemaVersion !== parsed._schemaVersion) {\n await writeFile(path, JSON.stringify(migrated, null, 2) + '\\n', 'utf8');\n }\n return migrated as StackforgeConfig;\n}","export const STACKFORGE_SCHEMA_VERSION = 1;","import { STACKFORGE_SCHEMA_VERSION } from './schema.js';\nimport type { StackforgeConfig } from '../types/config.js';\n\nexport interface StackforgeProjectFile extends StackforgeConfig {\n _schemaVersion?: number;\n}\n\nexport function migrateConfig(input: StackforgeProjectFile): StackforgeProjectFile {\n let current = input._schemaVersion ?? 0;\n let config: StackforgeProjectFile = { ...input };\n\n if (current < 1) {\n config = { ...config, _schemaVersion: 1 };\n current = 1;\n }\n\n if (current !== STACKFORGE_SCHEMA_VERSION) {\n config._schemaVersion = STACKFORGE_SCHEMA_VERSION;\n }\n\n return config;\n}","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, writeTextFile, readTextFile } from '../../utils/file-system.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport type { GeneratorContext } from '../context.js';\n\nexport async function generateDatabaseFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n\n if (config.database.provider !== 'none') {\n const envPath = join(projectRoot, '.env.example');\n if (config.database.provider === 'mongodb') {\n await appendEnvLine(envPath, 'MONGODB_URI=\"\"', ctx);\n } else {\n await appendEnvLine(envPath, 'DATABASE_URL=\"\"', ctx);\n }\n if (config.database.provider === 'neon') {\n await appendEnvLine(envPath, 'NEON_API_KEY=\"\"', ctx);\n await appendEnvLine(envPath, 'NEON_PROJECT_ID=\"\"', ctx);\n const providerDir = join(projectRoot, 'database');\n await ensureDir(providerDir, ctx);\n const providerReadme = await readTextFile(join(templatesRoot, 'database', 'providers', 'neon.README.md'));\n await writeTextFile(join(providerDir, 'README.md'), providerReadme, ctx);\n }\n if (config.database.provider === 'supabase') {\n await appendEnvLine(envPath, 'SUPABASE_URL=\"\"', ctx);\n await appendEnvLine(envPath, 'SUPABASE_ANON_KEY=\"\"', ctx);\n const providerDir = join(projectRoot, 'database');\n await ensureDir(providerDir, ctx);\n const providerReadme = await readTextFile(join(templatesRoot, 'database', 'providers', 'supabase.README.md'));\n await writeTextFile(join(providerDir, 'README.md'), providerReadme, ctx);\n }\n }\n\n if (config.database.orm === 'drizzle') {\n const drizzleDir = join(projectRoot, 'drizzle');\n await ensureDir(drizzleDir, ctx);\n const configContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', 'drizzle.config.ts'));\n const schemaContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', 'schema.ts'));\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const clientContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', `client.${ext}`));\n const exampleContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', `example.${ext}`));\n await writeTextFile(join(projectRoot, 'drizzle.config.ts'), configContent, ctx);\n await writeTextFile(join(drizzleDir, 'schema.ts'), schemaContent, ctx);\n await writeTextFile(join(drizzleDir, `client.${ext}`), clientContent, ctx);\n await writeTextFile(join(drizzleDir, `example.${ext}`), exampleContent, ctx);\n }\n\n if (config.database.orm === 'prisma') {\n const prismaDir = join(projectRoot, 'prisma');\n await ensureDir(prismaDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'database', 'prisma', 'schema.prisma'));\n await writeTextFile(join(prismaDir, 'schema.prisma'), schema, ctx);\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const client = await readTextFile(join(templatesRoot, 'database', 'prisma', `client.${ext}`));\n const example = await readTextFile(join(templatesRoot, 'database', 'prisma', `example.${ext}`));\n await writeTextFile(join(dbDir, `prisma.${ext}`), client, ctx);\n await writeTextFile(join(dbDir, `prisma-example.${ext}`), example, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `prisma-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'mongoose') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const connection = await readTextFile(join(templatesRoot, 'database', 'mongoose', `connection.${ext}`));\n const model = await readTextFile(join(templatesRoot, 'database', 'mongoose', `model.${ext}`));\n await writeTextFile(join(dbDir, `mongoose.${ext}`), connection, ctx);\n await writeTextFile(join(dbDir, `mongoose-model.${ext}`), model, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `mongoose-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'typeorm') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const template = await readTextFile(join(templatesRoot, 'database', 'typeorm', `data-source.${ext}`));\n const typeormType =\n config.database.provider === 'mysql'\n ? 'mysql'\n : config.database.provider === 'sqlite'\n ? 'sqlite'\n : 'postgres';\n const migrationsPath = config.frontend.language === 'ts' ? 'migrations/*.ts' : 'migrations/*.js';\n const content = template.replace('{{typeormType}}', typeormType).replace('{{migrationsPath}}', migrationsPath);\n await writeTextFile(join(dbDir, `data-source.${ext}`), content, ctx);\n const entitiesDir = join(dbDir, 'entities');\n await ensureDir(entitiesDir, ctx);\n const entity = await readTextFile(join(templatesRoot, 'database', 'typeorm', `entity.${ext}`));\n await writeTextFile(join(entitiesDir, `User.${ext}`), entity, ctx);\n const migrationsDir = join(dbDir, 'migrations');\n await ensureDir(migrationsDir, ctx);\n const migrationReadme = await readTextFile(join(templatesRoot, 'database', 'typeorm', 'migrations', 'README.md'));\n await writeTextFile(join(migrationsDir, 'README.md'), migrationReadme, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `typeorm-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'drizzle') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `drizzle-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { ensureDir } from './file-system.js';\nimport { dirname } from 'node:path';\nimport type { GeneratorContext } from '../generators/context.js';\n\nexport async function appendEnvLine(\n path: string,\n line: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: append ${path} -> ${line}`);\n return;\n }\n await ensureDir(dirname(path), ctx);\n let existing = '';\n try {\n existing = await readFile(path, 'utf8');\n } catch {\n existing = '';\n }\n\n const normalized = existing.endsWith('\\n') || existing.length === 0 ? existing : existing + '\\n';\n const content = normalized + line + (line.endsWith('\\n') ? '' : '\\n');\n await writeFile(path, content, 'utf8');\n}\n\nexport async function removeEnvKey(\n path: string,\n key: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: remove env ${key} from ${path}`);\n return;\n }\n let existing = '';\n try {\n existing = await readFile(path, 'utf8');\n } catch {\n return;\n }\n const lines = existing.split(/\\r?\\n/);\n const filtered = lines.filter((line) => {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) return true;\n return !trimmed.startsWith(`${key}=`);\n });\n await writeFile(path, filtered.join('\\n'), 'utf8');\n}","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { applyTemplate } from '../templates/template-engine.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\n\nexport async function generateFrontendFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n\n if (config.frontend.type === 'nextjs') {\n const appDir = join(projectRoot, 'app');\n await ensureDir(appDir, ctx);\n\n const uiCssImports = buildUiCssImports(config, 'nextjs');\n const importCss = uiCssImports.length ? uiCssImports.join('') + '\\n' : '';\n const hasTrpc = config.api.type === 'trpc';\n const hasUiProvider = requiresUiProvider(config);\n const hasProviders = hasTrpc || hasUiProvider;\n const providersImport = hasProviders ? \"import { Providers } from './providers';\\n\" : '';\n const wrapChildren = hasProviders ? '<Providers>{children}</Providers>' : '{children}';\n\n const layoutTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'layout.tsx' : 'layout.jsx'\n );\n const pageTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'\n );\n const actionsTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'actions.ts' : 'actions.js'\n );\n const nextConfigTemplatePath = join(\n templatesRoot,\n 'nextjs',\n config.frontend.language === 'ts' ? 'next.config.ts' : 'next.config.js'\n );\n\n const layoutTemplate = await readTextFile(layoutTemplatePath);\n const pageTemplate = await readTextFile(pageTemplatePath);\n const examplesTemplate = await readTextFile(\n join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'examples-page.tsx' : 'examples-page.jsx'\n )\n );\n const nextConfigTemplate = await readTextFile(nextConfigTemplatePath);\n const actionsTemplate = await readTextFile(actionsTemplatePath);\n\n const layout = applyTemplate(layoutTemplate, {\n importCss,\n providersImport,\n wrapChildren\n });\n const links = buildPageLinks(config);\n const page = applyTemplate(pageTemplate, { projectName: config.projectName, links });\n\n await writeTextFile(\n join(projectRoot, config.frontend.language === 'ts' ? 'next.config.ts' : 'next.config.js'),\n nextConfigTemplate,\n ctx\n );\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'layout.tsx' : 'layout.jsx'), layout, ctx);\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'), page, ctx);\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'actions.ts' : 'actions.js'), actionsTemplate, ctx);\n\n if (config.api.type !== 'none') {\n const examplesDir = join(appDir, 'examples');\n await ensureDir(examplesDir, ctx);\n const { imports, components } = buildApiExamples(config, 'nextjs');\n const featureNotes = buildFeatureNotes(config);\n const { uiDemoImport, uiDemoComponent } = buildUiDemoTokens(config, 'nextjs');\n const examplesPage = applyTemplate(examplesTemplate, {\n imports,\n components,\n featureNotes,\n uiDemoImport,\n uiDemoComponent\n });\n await writeTextFile(\n join(examplesDir, config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'),\n examplesPage,\n ctx\n );\n }\n\n if (hasProviders) {\n const providers = buildProvidersComponent(config, 'nextjs');\n await writeTextFile(\n join(appDir, config.frontend.language === 'ts' ? 'providers.tsx' : 'providers.jsx'),\n providers,\n ctx\n );\n }\n }\n\n if (config.frontend.type === 'vite') {\n const srcDir = join(projectRoot, 'src');\n await ensureDir(srcDir, ctx);\n\n const uiCssImports = buildUiCssImports(config, 'vite');\n const cssImport = uiCssImports.length ? uiCssImports.join('') : '';\n const ext = config.frontend.language === 'ts' ? 'tsx' : 'jsx';\n const mainTemplatePath = join(templatesRoot, 'vite', config.frontend.language === 'ts' ? 'main.tsx' : 'main.jsx');\n const appTemplatePath = join(templatesRoot, 'vite', config.frontend.language === 'ts' ? 'App.tsx' : 'App.jsx');\n const indexTemplatePath = join(templatesRoot, 'vite', 'index.html');\n const viteConfigTemplatePath = join(templatesRoot, 'vite', 'vite.config.ts');\n const viteEnvTemplatePath = join(templatesRoot, 'vite', 'vite-env.d.ts');\n\n const mainTemplate = await readTextFile(mainTemplatePath);\n const appTemplate = await readTextFile(appTemplatePath);\n const indexTemplate = await readTextFile(indexTemplatePath);\n const viteConfigTemplate = await readTextFile(viteConfigTemplatePath);\n const viteEnvTemplate = await readTextFile(viteEnvTemplatePath);\n\n const hasTrpc = config.api.type === 'trpc';\n const hasUiProvider = requiresUiProvider(config);\n const hasProviders = hasTrpc || hasUiProvider;\n const providersImport = hasProviders ? \"import { Providers } from './providers';\\n\" : '';\n const wrapApp = hasProviders ? '<Providers><App /></Providers>' : '<App />';\n\n const { initImports, initCalls } = buildFeatureInit(config, 'vite');\n const main = applyTemplate(mainTemplate, {\n importCss: cssImport,\n providersImport,\n wrapApp,\n initImports,\n initCalls\n });\n const { imports, components } = buildApiExamples(config, 'vite');\n const featureNotes = buildFeatureNotes(config);\n const { uiDemoImport, uiDemoComponent } = buildUiDemoTokens(config, 'vite');\n const apiImports = imports ? imports + '\\n' : '';\n const apiExamples = components || '';\n const app = applyTemplate(appTemplate, {\n projectName: config.projectName,\n apiImports,\n apiExamples,\n featureNotes,\n uiDemoImport,\n uiDemoComponent\n });\n const indexHtml = applyTemplate(indexTemplate, { projectName: config.projectName, ext });\n\n await writeTextFile(join(projectRoot, 'index.html'), indexHtml, ctx);\n await writeTextFile(join(projectRoot, 'vite.config.ts'), viteConfigTemplate, ctx);\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'main.tsx' : 'main.jsx'), main, ctx);\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'App.tsx' : 'App.jsx'), app, ctx);\n if (config.frontend.language === 'ts') {\n await writeTextFile(join(srcDir, 'vite-env.d.ts'), viteEnvTemplate, ctx);\n }\n await appendEnvLine(join(projectRoot, '.env.example'), 'VITE_API_URL=\"http://localhost:3001\"', ctx);\n\n if (hasProviders) {\n const providers = buildProvidersComponent(config, 'vite');\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'providers.tsx' : 'providers.jsx'), providers, ctx);\n }\n }\n}\n\nfunction buildUiCssImports(config: StackforgeConfig, target: 'nextjs' | 'vite'): string[] {\n const imports: string[] = [];\n const tailwindPath = target === 'nextjs' ? \"../src/styles.css\" : \"./styles.css\";\n if (config.ui.library === 'tailwind') {\n imports.push(`import '${tailwindPath}';\\n`);\n }\n if (config.ui.library === 'mantine') {\n imports.push(\"import '@mantine/core/styles.css';\\n\");\n imports.push(\"import '@mantine/dates/styles.css';\\n\");\n imports.push(\"import '@mantine/notifications/styles.css';\\n\");\n }\n if (config.ui.library === 'antd') {\n imports.push(\"import 'antd/dist/reset.css';\\n\");\n }\n return imports;\n}\n\nfunction requiresUiProvider(config: StackforgeConfig): boolean {\n return ['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(config.ui.library);\n}\n\nfunction buildProvidersComponent(config: StackforgeConfig, target: 'nextjs' | 'vite'): string {\n const hasTrpc = config.api.type === 'trpc';\n const ui = config.ui.library;\n const needsTheme = ['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(ui);\n const isTypescript = config.frontend.language === 'ts';\n const hasFeatureInit = config.features.includes('analytics') || config.features.includes('error-tracking');\n const themeImportPath = target === 'nextjs' ? '../src/theme' : './theme';\n\n const imports: string[] = [];\n const lines: string[] = [];\n\n if (target === 'nextjs') {\n lines.push('\"use client\";\\n');\n }\n\n if (hasTrpc && isTypescript) {\n imports.push(\"import type React from 'react';\");\n imports.push(\"import { useState, useEffect } from 'react';\");\n } else if (hasTrpc) {\n imports.push(\"import { useState, useEffect } from 'react';\");\n } else if (isTypescript) {\n imports.push(\"import type React from 'react';\");\n if (hasFeatureInit) {\n imports.push(\"import { useEffect } from 'react';\");\n }\n } else if (hasFeatureInit) {\n imports.push(\"import { useEffect } from 'react';\");\n }\n\n if (hasTrpc) {\n imports.push(\"import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\");\n }\n\n if (ui === 'mui') {\n imports.push(\"import { ThemeProvider, CssBaseline } from '@mui/material';\");\n }\n if (ui === 'chakra') {\n imports.push(\"import { ChakraProvider } from '@chakra-ui/react';\");\n }\n if (ui === 'mantine') {\n imports.push(\"import { MantineProvider } from '@mantine/core';\");\n }\n if (ui === 'antd') {\n imports.push(\"import { ConfigProvider } from 'antd';\");\n }\n if (ui === 'nextui') {\n imports.push(\"import { NextUIProvider } from '@nextui-org/react';\");\n }\n if (needsTheme) {\n imports.push(`import { theme } from '${themeImportPath}';`);\n }\n if (config.features.includes('analytics')) {\n const analyticsPath = target === 'nextjs' ? '../src/lib/posthog' : './lib/posthog';\n imports.push(`import { initPosthog } from '${analyticsPath}';`);\n }\n if (config.features.includes('error-tracking')) {\n const sentryPath = target === 'nextjs' ? '../src/lib/sentry' : './lib/sentry';\n imports.push(`import { initSentry } from '${sentryPath}';`);\n }\n\n lines.push(imports.join('\\n') + '\\n');\n\n const propsType = isTypescript ? ': { children: React.ReactNode }' : '';\n lines.push(`export function Providers({ children }${propsType}) {\\n`);\n\n if (hasTrpc) {\n lines.push(' const [client] = useState(() => new QueryClient());\\n\\n');\n }\n if (hasFeatureInit) {\n lines.push(' useEffect(() => {\\n');\n if (config.features.includes('analytics')) {\n lines.push(' initPosthog();\\n');\n }\n if (config.features.includes('error-tracking')) {\n lines.push(' initSentry();\\n');\n }\n lines.push(' }, []);\\n\\n');\n }\n\n let body = '{children}';\n if (ui === 'mui') {\n body = '<ThemeProvider theme={theme}><CssBaseline />{children}</ThemeProvider>';\n } else if (ui === 'chakra') {\n body = '<ChakraProvider theme={theme}>{children}</ChakraProvider>';\n } else if (ui === 'mantine') {\n body = '<MantineProvider theme={theme}>{children}</MantineProvider>';\n } else if (ui === 'antd') {\n body = '<ConfigProvider theme={theme}>{children}</ConfigProvider>';\n } else if (ui === 'nextui') {\n body = '<NextUIProvider theme={theme}>{children}</NextUIProvider>';\n }\n\n if (hasTrpc) {\n body = `<QueryClientProvider client={client}>${body}</QueryClientProvider>`;\n }\n\n lines.push(` return ${body};\\n`);\n lines.push('}\\n');\n\n return lines.join('');\n}\n\nfunction buildFeatureInit(config: StackforgeConfig, target: 'vite' | 'nextjs'): { initImports: string; initCalls: string } {\n if (target !== 'vite') return { initImports: '', initCalls: '' };\n const imports: string[] = [];\n const calls: string[] = [];\n if (config.features.includes('analytics')) {\n imports.push(\"import { initPosthog } from './lib/posthog';\");\n calls.push('initPosthog();');\n }\n if (config.features.includes('error-tracking')) {\n imports.push(\"import { initSentry } from './lib/sentry';\");\n calls.push('initSentry();');\n }\n return {\n initImports: imports.length ? imports.join('\\n') + '\\n' : '',\n initCalls: calls.length ? calls.join('\\n') + '\\n' : ''\n };\n}\n\nfunction buildApiExamples(\n config: StackforgeConfig,\n target: 'nextjs' | 'vite'\n): { imports: string; components: string } {\n if (config.api.type === 'none') {\n return { imports: '', components: '' };\n }\n\n const imports: string[] = [];\n const components: string[] = [];\n\n if (config.api.type === 'rest') {\n const path = target === 'nextjs' ? '../../src/api/client-usage' : './api/client-usage';\n imports.push(`import { RestExample } from '${path}';`);\n components.push('<RestExample />');\n }\n\n if (config.api.type === 'graphql') {\n const path = target === 'nextjs' ? '../../src/graphql/client-usage' : './graphql/client-usage';\n imports.push(`import { GraphqlExample } from '${path}';`);\n components.push('<GraphqlExample />');\n }\n\n if (config.api.type === 'trpc') {\n const path = target === 'nextjs' ? '../../src/trpc/client-usage' : './trpc/client-usage';\n imports.push(`import { TrpcExample } from '${path}';`);\n components.push('<TrpcExample />');\n }\n\n return { imports: imports.join('\\n') + '\\n', components: components.join('\\n ') };\n}\n\nfunction buildFeatureNotes(config: StackforgeConfig): string {\n const notes: string[] = [];\n if (config.features.includes('analytics')) notes.push('<p>Analytics enabled (PostHog).</p>');\n if (config.features.includes('error-tracking')) notes.push('<p>Error tracking enabled (Sentry).</p>');\n if (config.features.includes('email')) notes.push('<p>Email feature enabled (Resend).</p>');\n if (config.features.includes('payments')) notes.push('<p>Payments feature enabled (Stripe).</p>');\n if (config.features.includes('storage')) notes.push('<p>Storage feature enabled (Cloudinary).</p>');\n if (!notes.length) return '';\n return notes.join('\\n ');\n}\n\nfunction buildUiDemoTokens(\n config: StackforgeConfig,\n target: 'nextjs' | 'vite'\n): { uiDemoImport: string; uiDemoComponent: string } {\n if (config.ui.library === 'none') {\n return { uiDemoImport: '', uiDemoComponent: '' };\n }\n const importPath = target === 'nextjs' ? '../../src/components/ui-demo' : './components/ui-demo';\n return {\n uiDemoImport: `import { UiDemo } from '${importPath}';\\n`,\n uiDemoComponent: '<UiDemo />'\n };\n}\n\nfunction buildPageLinks(config: StackforgeConfig): string {\n const items: string[] = [];\n if (config.api.type === 'rest') {\n items.push('<li><Link href=\"/api/hello\">REST hello</Link></li>');\n }\n if (config.api.type === 'graphql') {\n items.push('<li><Link href=\"/api/graphql\">GraphQL endpoint</Link></li>');\n }\n if (config.api.type !== 'none') {\n items.push('<li><Link href=\"/examples\">API examples</Link></li>');\n }\n if (config.auth.provider !== 'none') {\n items.push('<li><Link href=\"/auth/protected\">Auth protected page</Link></li>');\n }\n return items.join('\\n ');\n}\n","export type TemplateVars = Record<string, string>;\n\nexport function applyTemplate(content: string, vars: TemplateVars): string {\n let out = content;\n for (const [key, value] of Object.entries(vars)) {\n out = out.replaceAll(`{{${key}}}`, value);\n }\n return out;\n}","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\n\nexport async function generateUiFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n\n if (config.ui.library === 'tailwind') {\n const tailwindTemplate = await readTextFile(join(templatesRoot, 'ui', 'tailwind.config.js'));\n const postcssTemplate = await readTextFile(join(templatesRoot, 'ui', 'postcss.config.js'));\n const stylesTemplate = await readTextFile(join(templatesRoot, 'ui', 'styles.css'));\n\n await writeTextFile(join(projectRoot, 'tailwind.config.js'), tailwindTemplate, ctx);\n await writeTextFile(join(projectRoot, 'postcss.config.js'), postcssTemplate, ctx);\n\n const stylesDir = join(projectRoot, 'src');\n await ensureDir(stylesDir, ctx);\n await writeTextFile(join(stylesDir, 'styles.css'), stylesTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'demo-tailwind.tsx' : 'demo-tailwind.jsx')\n );\n await ensureDir(join(projectRoot, 'src', 'components'), ctx);\n await writeTextFile(\n join(projectRoot, 'src', 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n if (config.ui.library === 'shadcn') {\n await ensureDir(join(projectRoot, 'components'), ctx);\n const shadcnReadme = await readTextFile(join(templatesRoot, 'ui', 'shadcn.README.md'));\n await writeTextFile(join(projectRoot, 'components', 'README.md'), shadcnReadme, ctx);\n\n const componentsJson = await readTextFile(join(templatesRoot, 'ui', 'components.json'));\n await writeTextFile(join(projectRoot, 'components.json'), componentsJson, ctx);\n\n const srcDir = join(projectRoot, 'src');\n await ensureDir(join(srcDir, 'lib'), ctx);\n await ensureDir(join(srcDir, 'components', 'ui'), ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const utilsTemplate = await readTextFile(join(templatesRoot, 'ui', `utils.${ext}`));\n await writeTextFile(join(srcDir, 'lib', `utils.${ext}`), utilsTemplate, ctx);\n const buttonTemplate = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'button.tsx' : 'button.jsx')\n );\n await writeTextFile(join(srcDir, 'components', 'ui', config.frontend.language === 'ts' ? 'button.tsx' : 'button.jsx'), buttonTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'demo-shadcn.tsx' : 'demo-shadcn.jsx')\n );\n await writeTextFile(\n join(srcDir, 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n if (['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(config.ui.library)) {\n await ensureDir(join(projectRoot, 'components'), ctx);\n const readme = await readTextFile(join(templatesRoot, 'ui', `${config.ui.library}.README.md`));\n await writeTextFile(join(projectRoot, 'components', 'README.md'), readme, ctx);\n\n const srcDir = join(projectRoot, 'src');\n await ensureDir(srcDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const themeTemplate = await readTextFile(join(templatesRoot, 'ui', `${config.ui.library}.theme.${ext}`));\n await writeTextFile(join(srcDir, `theme.${ext}`), themeTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', `demo-${config.ui.library}.${config.frontend.language === 'ts' ? 'tsx' : 'jsx'}`)\n );\n await ensureDir(join(srcDir, 'components'), ctx);\n await writeTextFile(\n join(srcDir, 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n}\n","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport { writeTextFile, ensureDir, readTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\n\nexport async function generateAuthFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n\n if (config.auth.provider === 'nextauth') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXTAUTH_SECRET=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXTAUTH_URL=\"\"', ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'auth', '[...nextauth]');\n await ensureDir(routeDir, ctx);\n\n const route = await readTextFile(join(templatesRoot, 'auth', `nextauth-route.${ext}`));\n await writeTextFile(join(routeDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'), route, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'nextauth.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n const options = await readTextFile(join(templatesRoot, 'auth', `nextauth-options.${ext}`));\n await writeTextFile(join(authDir, `auth-options.${ext}`), options, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `nextauth-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `nextauth-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `nextauth-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n }\n }\n\n if (config.auth.provider === 'clerk') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'CLERK_SECRET_KEY=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"\"', ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const clerkClient = `import { clerkClient } from '@clerk/nextjs/server';\\n\\nexport { clerkClient };\\n`;\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n await writeTextFile(join(libDir, `clerk.${ext}`), clerkClient, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const middleware = `import { authMiddleware } from '@clerk/nextjs';\\n\\nexport default authMiddleware();\\n\\nexport const config = {\\n matcher: ['/((?!.*\\\\..*|_next).*)', '/', '/(api|trpc)(.*)']\\n};\\n`;\n await writeTextFile(join(projectRoot, `middleware.${ext}`), middleware, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'clerk.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `clerk-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `clerk-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `clerk-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n }\n }\n\n if (config.auth.provider === 'better-auth') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'BETTER_AUTH_SECRET=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'BETTER_AUTH_URL=\"\"', ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'better-auth.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n const serverConfig = await readTextFile(join(templatesRoot, 'auth', `better-auth-server.${ext}`));\n await writeTextFile(join(authDir, `auth.${ext}`), serverConfig, ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const clientConfig = await readTextFile(join(templatesRoot, 'auth', `better-auth-client.${ext}`));\n await writeTextFile(join(libDir, `auth-client.${ext}`), clientConfig, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'auth', '[...all]');\n await ensureDir(routeDir, ctx);\n const route = await readTextFile(join(templatesRoot, 'auth', `better-auth-route.${ext}`));\n await writeTextFile(join(routeDir, `route.${ext}`), route, ctx);\n\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `better-auth-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `better-auth-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n }\n }\n\n if (config.auth.provider === 'supabase') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_SUPABASE_URL=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_SUPABASE_ANON_KEY=\"\"', ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const supabaseClient = `import { createClient } from '@supabase/supabase-js';\\n\\nconst url = process.env.NEXT_PUBLIC_SUPABASE_URL || '';\\nconst key = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || '';\\n\\nexport const supabase = createClient(url, key);\\n`;\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n await writeTextFile(join(libDir, `supabase.${ext}`), supabaseClient, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const supabaseServer = `import { createServerClient } from '@supabase/ssr';\\nimport { cookies } from 'next/headers';\\n\\nexport function createSupabaseServerClient() {\\n const cookieStore = cookies();\\n return createServerClient(\\n process.env.NEXT_PUBLIC_SUPABASE_URL || '',\\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || '',\\n {\\n cookies: {\\n get(name) {\\n return cookieStore.get(name)?.value;\\n }\\n }\\n }\\n );\\n}\\n`;\n await writeTextFile(join(libDir, `supabase-server.${ext}`), supabaseServer, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'supabase.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `supabase-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `supabase-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `supabase-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n const signin = await readTextFile(\n join(templatesRoot, 'auth', `supabase-vite-signin.${ext}x`)\n );\n const authUiDir = join(projectRoot, 'src', 'auth');\n await ensureDir(authUiDir, ctx);\n await writeTextFile(join(authUiDir, `signin.${ext}x`), signin, ctx);\n }\n }\n}\n","import { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, writeTextFile, readTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\n\nexport async function generateApiFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n\n if (config.api.type === 'rest') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# REST API\n\n## Overview\n- Next.js: app/api/hello/route.(ts|js) provides a sample GET route.\n- If a database is selected, app/api/users/route.(ts|js) includes CRUD examples.\n- Vite: src/server/index.(ts|js) hosts the API server (run npm run api:dev).\n\n## Client usage\n- src/api/client.(ts|js) wraps fetch helpers.\n- src/api/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'hello');\n await ensureDir(routeDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const handler = await readTextFile(join(templatesRoot, 'api', 'rest', `route.${ext}`));\n await writeTextFile(join(routeDir, `route.${ext}`), handler, ctx);\n\n if (config.database.orm) {\n const usersDir = join(projectRoot, 'app', 'api', 'users');\n await ensureDir(usersDir, ctx);\n const usersRoute = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'users-route.ts' : 'users-route.js')\n );\n await writeTextFile(\n join(usersDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'),\n usersRoute,\n ctx\n );\n }\n }\n\n if (config.frontend.type === 'vite') {\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n }\n\n const clientDir = join(projectRoot, 'src', 'api');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.api.type === 'trpc') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# tRPC Setup\n\n## Overview\n- Router lives in src/server/api/trpc.ts and src/server/api/root.ts.\n- Next.js: app/api/trpc/[trpc]/route.(ts|js) wires the handler.\n- Vite: src/server/index.(ts|js) runs the API server (npm run api:dev).\n\n## Client usage\n- src/trpc/client.(ts|js) configures the tRPC client.\n- src/trpc/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const trpcDir = join(projectRoot, 'src', 'server', 'api');\n await ensureDir(trpcDir, ctx);\n const router = await readTextFile(join(templatesRoot, 'api', 'trpc', 'trpc.ts'));\n const appRouter = await readTextFile(join(templatesRoot, 'api', 'trpc', 'root.ts'));\n await writeTextFile(join(trpcDir, 'trpc.ts'), router, ctx);\n await writeTextFile(join(trpcDir, 'root.ts'), appRouter, ctx);\n\n const routeDir = join(projectRoot, 'app', 'api', 'trpc', '[trpc]');\n await ensureDir(routeDir, ctx);\n const handler = await readTextFile(join(templatesRoot, 'api', 'trpc', 'route.ts'));\n await writeTextFile(join(routeDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'), handler, ctx);\n\n const clientDir = join(projectRoot, 'src', 'trpc');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.frontend.type === 'vite') {\n const trpcDir = join(projectRoot, 'src', 'server', 'api');\n await ensureDir(trpcDir, ctx);\n const router = await readTextFile(join(templatesRoot, 'api', 'trpc', 'trpc.ts'));\n const appRouter = await readTextFile(join(templatesRoot, 'api', 'trpc', 'root.ts'));\n await writeTextFile(join(trpcDir, 'trpc.ts'), router, ctx);\n await writeTextFile(join(trpcDir, 'root.ts'), appRouter, ctx);\n\n const clientDir = join(projectRoot, 'src', 'trpc');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-vite.ts' : 'client-vite.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n }\n }\n\n if (config.api.type === 'graphql') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# GraphQL Setup\n\n## Overview\n- Schema in src/graphql/schema.graphql.\n- Next.js: app/api/graphql/route.(ts|js) runs the Yoga handler.\n- Vite: src/server/index.(ts|js) runs the API server (npm run api:dev).\n\n## Client usage\n- src/graphql/client.(ts|js) configures the GraphQL client.\n- src/graphql/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const gqlDir = join(projectRoot, 'src', 'graphql');\n await ensureDir(gqlDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'api', 'graphql', 'schema.graphql'));\n await writeTextFile(join(gqlDir, 'schema.graphql'), schema, ctx);\n\n const routeDir = join(projectRoot, 'app', 'api', 'graphql');\n await ensureDir(routeDir, ctx);\n const gqlExt = config.frontend.language === 'ts' ? 'ts' : 'js';\n const handler = await readTextFile(join(templatesRoot, 'api', 'graphql', `route.${gqlExt}`));\n await writeTextFile(join(routeDir, `route.${gqlExt}`), handler, ctx);\n\n const clientDir = join(projectRoot, 'src', 'graphql');\n const client = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.frontend.type === 'vite') {\n const gqlDir = join(projectRoot, 'src', 'graphql');\n await ensureDir(gqlDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'api', 'graphql', 'schema.graphql'));\n await writeTextFile(join(gqlDir, 'schema.graphql'), schema, ctx);\n\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n\n const clientDir = join(projectRoot, 'src', 'graphql');\n const client = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n }\n}\n","import { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { ensureDir, writeTextFile } from '../utils/file-system.js';\nimport type { GeneratorContext } from '../generators/context.js';\n\nfunction buildAgentContext(config: StackforgeConfig) {\n return {\n stack: {\n frontend: config.frontend,\n ui: config.ui,\n database: config.database,\n auth: config.auth,\n api: config.api\n },\n features: config.features,\n aiAgents: config.aiAgents,\n hints: buildHints(config)\n };\n}\n\nfunction buildTools(config: StackforgeConfig): string[] {\n const tools: string[] = [];\n if (config.database.provider !== 'none') tools.push('database');\n if (config.database.orm) tools.push('orm');\n if (config.api.type !== 'none') tools.push('api');\n if (config.auth.provider !== 'none') tools.push('auth');\n if (config.features.includes('email')) tools.push('email');\n if (config.features.includes('storage')) tools.push('storage');\n if (config.features.includes('payments')) tools.push('payments');\n if (config.features.includes('analytics')) tools.push('analytics');\n if (config.features.includes('error-tracking')) tools.push('error-tracking');\n return tools;\n}\n\nfunction buildFunctionDefinitions(tools: string[]) {\n return tools.map((tool) => {\n switch (tool) {\n case 'database':\n return {\n name: 'stackforge_database',\n description: 'Inspect database connection and configuration.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['status', 'env', 'client-paths'] }\n },\n required: ['action']\n }\n };\n case 'orm':\n return {\n name: 'stackforge_orm',\n description: 'Inspect ORM configuration and schema locations.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['schema', 'migrations', 'examples'] }\n },\n required: ['action']\n }\n };\n case 'api':\n return {\n name: 'stackforge_api',\n description: 'Inspect API routes and clients.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['routes', 'clients', 'examples'] }\n },\n required: ['action']\n }\n };\n case 'auth':\n return {\n name: 'stackforge_auth',\n description: 'Inspect auth routes and helpers.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['routes', 'helpers', 'env'] }\n },\n required: ['action']\n }\n };\n case 'email':\n return {\n name: 'stackforge_email',\n description: 'Inspect email client and docs.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'storage':\n return {\n name: 'stackforge_storage',\n description: 'Inspect storage setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'payments':\n return {\n name: 'stackforge_payments',\n description: 'Inspect payments setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'analytics':\n return {\n name: 'stackforge_analytics',\n description: 'Inspect analytics setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'env'] }\n },\n required: ['action']\n }\n };\n case 'error-tracking':\n return {\n name: 'stackforge_error-tracking',\n description: 'Inspect error tracking setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'env'] }\n },\n required: ['action']\n }\n };\n default:\n return {\n name: `stackforge_${tool}`,\n description: `Access ${tool} helpers for this project.`,\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string' }\n },\n required: ['action']\n }\n };\n }\n });\n}\n\nfunction buildHints(config: StackforgeConfig): string[] {\n const hints: string[] = [];\n if (config.api.type === 'trpc') hints.push('tRPC router at src/server/api/root.ts');\n if (config.api.type === 'graphql') hints.push('GraphQL schema at src/graphql/schema.graphql');\n if (config.api.type === 'rest') {\n hints.push(\n config.frontend.type === 'nextjs'\n ? 'REST route at app/api/hello/route.ts'\n : 'REST server at src/server/index.ts'\n );\n }\n if (config.database.orm === 'drizzle') hints.push('Drizzle schema at drizzle/schema.ts');\n if (config.database.orm === 'prisma') hints.push('Prisma schema at prisma/schema.prisma');\n if (config.database.orm === 'mongoose') hints.push('Mongoose connection at src/db/mongoose.ts');\n if (config.database.orm === 'typeorm') hints.push('TypeORM data source at src/db/data-source.ts');\n if (config.ui.library === 'mui') hints.push('MUI components docs in components/README.md');\n if (config.ui.library === 'chakra') hints.push('Chakra UI docs in components/README.md');\n if (config.ui.library === 'mantine') hints.push('Mantine docs in components/README.md');\n if (config.ui.library === 'antd') hints.push('Ant Design docs in components/README.md');\n if (config.ui.library === 'nextui') hints.push('NextUI docs in components/README.md');\n if (config.features.includes('analytics')) hints.push('Analytics client at src/lib/posthog.ts');\n if (config.features.includes('error-tracking')) hints.push('Error tracking at src/lib/sentry.ts');\n if (config.auth.provider === 'nextauth') hints.push('NextAuth route at app/api/auth/[...nextauth]/route.ts');\n if (config.auth.provider === 'clerk') hints.push('Clerk middleware at middleware.ts');\n if (config.auth.provider === 'supabase') hints.push('Supabase client at src/lib/supabase.ts');\n return hints;\n}\n\nexport async function generateAiAgentConfigs(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n if (!config.aiAgents || config.aiAgents.length === 0) return;\n\n const projectRoot = resolveProjectRoot(root, config);\n const agentsRoot = join(projectRoot, '.ai-agents');\n await ensureDir(agentsRoot, ctx);\n const serversRoot = join(agentsRoot, 'servers');\n await ensureDir(serversRoot, ctx);\n const protocolsRoot = join(agentsRoot, 'protocols');\n await ensureDir(protocolsRoot, ctx);\n const tools = buildTools(config);\n const hints = buildHints(config);\n\n for (const agent of config.aiAgents) {\n const agentDir = join(agentsRoot, agent);\n await ensureDir(agentDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n const contextJson = JSON.stringify(buildAgentContext(config), null, 2);\n await writeTextFile(join(agentDir, 'context.json'), contextJson + '\\n', ctx);\n const toolsJson = JSON.stringify({ tools }, null, 2);\n await writeTextFile(join(agentDir, 'tools.json'), toolsJson + '\\n', ctx);\n\n if (agent === 'claude') {\n const content = JSON.stringify(\n {\n mcpServers: {\n stackforge: {\n command: 'node',\n args: [`.ai-agents/servers/claude/mcp-server.${ext}`]\n }\n }\n },\n null,\n 2\n );\n await writeTextFile(join(agentDir, 'claude_desktop_config.json'), content + '\\n', ctx);\n const claudeRoot = join(projectRoot, '.claude');\n await ensureDir(claudeRoot, ctx);\n await writeTextFile(join(claudeRoot, 'claude_desktop_config.json'), content + '\\n', ctx);\n await writeTextFile(\n join(claudeRoot, 'README.md'),\n 'StackForge generated this folder for Claude. Use claude_desktop_config.json to configure the MCP server. The server lives in .ai-agents/servers/claude/mcp-server.(ts|js).\\n',\n ctx\n );\n const serverDir = join(serversRoot, 'claude');\n await ensureDir(serverDir, ctx);\n const serverContent = buildMcpServerContent(ext, tools, hints);\n await writeTextFile(join(serverDir, `mcp-server.${ext}`), serverContent, ctx);\n const mcpSpec = JSON.stringify(\n {\n name: 'stackforge',\n tools\n },\n null,\n 2\n );\n await writeTextFile(join(serverDir, 'mcp.json'), mcpSpec + '\\n', ctx);\n await writeTextFile(\n join(serverDir, 'README.md'),\n 'Run the MCP server: `node mcp-server.js` (or .ts with tsx). Endpoints: /tools and /invoke.\\n',\n ctx\n );\n }\n\n if (agent === 'copilot') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'functions.json'), content + '\\n', ctx);\n const serverDir = join(serversRoot, 'copilot');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'functions.json'), content + '\\n', ctx);\n }\n\n if (agent === 'codex') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'functions.json'), content + '\\n', ctx);\n const codexRoot = join(projectRoot, '.codex');\n await ensureDir(codexRoot, ctx);\n await writeTextFile(join(codexRoot, 'functions.json'), content + '\\n', ctx);\n await writeTextFile(\n join(codexRoot, 'README.md'),\n 'StackForge generated this folder for Codex. Use functions.json for OpenAI function calling integrations.\\n',\n ctx\n );\n const serverDir = join(serversRoot, 'codex');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'functions.json'), content + '\\n', ctx);\n }\n\n if (agent === 'gemini') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'function_declarations.json'), content + '\\n', ctx);\n const serverDir = join(serversRoot, 'gemini');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'function_declarations.json'), content + '\\n', ctx);\n }\n\n if (agent === 'cursor') {\n const content = `# Cursor rules\\n# See context.json for project stack details\\n`;\n await writeTextFile(join(agentDir, '.cursorrules'), content, ctx);\n await writeTextFile(join(projectRoot, '.cursorrules'), content, ctx);\n const cursorRoot = join(projectRoot, '.cursor');\n await ensureDir(cursorRoot, ctx);\n const extensions = JSON.stringify({ recommendations: ['cursor.cursor'] }, null, 2);\n await writeTextFile(join(cursorRoot, 'extensions.json'), extensions + '\\n', ctx);\n const serverDir = join(serversRoot, 'cursor');\n await ensureDir(serverDir, ctx);\n const serverContent = `# Cursor uses .cursorrules for guidance.\\n`;\n await writeTextFile(join(serverDir, 'README.md'), serverContent, ctx);\n }\n\n if (agent === 'codeium') {\n const content = JSON.stringify({ protocol: 'lsp', tools, hints }, null, 2);\n await writeTextFile(join(agentDir, 'server-config.json'), content + '\\n', ctx);\n }\n\n if (agent === 'windsurf') {\n const windsurfRoot = join(projectRoot, '.windsurf');\n await ensureDir(windsurfRoot, ctx);\n const content = JSON.stringify({ protocol: 'cascade', tools, hints }, null, 2);\n await writeTextFile(join(windsurfRoot, 'cascade.json'), content + '\\n', ctx);\n }\n\n if (agent === 'tabnine') {\n const tabnineRoot = join(projectRoot, '.tabnine');\n await ensureDir(tabnineRoot, ctx);\n const content = JSON.stringify({ tools, hints }, null, 2);\n await writeTextFile(join(tabnineRoot, 'config.json'), content + '\\n', ctx);\n }\n }\n\n const protocolTools = tools;\n const openAiFunctions = buildFunctionDefinitions(protocolTools);\n const openAiSchema = JSON.stringify({ functions: openAiFunctions }, null, 2);\n await writeTextFile(join(protocolsRoot, 'openai-functions.json'), openAiSchema + '\\n', ctx);\n const lspSchema = JSON.stringify(\n {\n version: '0.1',\n capabilities: {\n tools: protocolTools\n }\n },\n null,\n 2\n );\n await writeTextFile(join(protocolsRoot, 'lsp.json'), lspSchema + '\\n', ctx);\n\n const docsDir = join(projectRoot, 'docs');\n await ensureDir(docsDir, ctx);\n const aiDoc = buildAiAgentsDoc(config);\n await writeTextFile(join(docsDir, 'AI_AGENTS.md'), aiDoc + '\\n', ctx);\n}\n\nfunction resolveProjectRoot(root: string, config: StackforgeConfig): string {\n const candidate = join(root, 'stackforge.json');\n if (existsSync(candidate)) return root;\n return join(root, config.projectName);\n}\n\nfunction buildAiAgentsDoc(config: StackforgeConfig): string {\n const agentsList = config.aiAgents.map((agent) => `- ${agent}`).join('\\n');\n const tools = buildTools(config).map((tool) => `- ${tool}`).join('\\n');\n const hints = buildHints(config).map((hint) => `- ${hint}`).join('\\n');\n\n return `# AI Agent Integrations\n\nThis project includes configuration files for the selected AI agents.\n\n## Enabled Agents\n${agentsList || '- none'}\n\n## Tools Enabled\n${tools || '- none'}\n\n## Project Hints\n${hints || '- none'}\n\n## Files\n- .ai-agents/<agent>/context.json\n- .ai-agents/<agent>/tools.json\n- .ai-agents/servers/<agent>/\n- .claude/claude_desktop_config.json (when Claude is enabled)\n- .codex/functions.json (when Codex is enabled)\n- .cursor/extensions.json and .cursorrules (when Cursor is enabled)\n- .windsurf/cascade.json (when Windsurf is enabled)\n- .tabnine/config.json (when Tabnine is enabled)\n\n## Setup Notes\n- Claude Desktop: copy .ai-agents/claude/claude_desktop_config.json into your Claude config folder.\n- Claude MCP server: run .ai-agents/servers/claude/mcp-server.(ts|js).\n- Copilot: use .ai-agents/copilot/functions.json for function calling.\n- Codex: use .codex/functions.json for function calling.\n- Gemini: use .ai-agents/gemini/function_declarations.json in AI Studio.\n- Cursor: .ai-agents/cursor/.cursorrules is auto-discovered when opening the project.\n- Codeium: use .ai-agents/codeium/server-config.json for LSP tools.\n- Windsurf: use .windsurf/cascade.json for Cascade protocol.\n- Tabnine: use .tabnine/config.json for plugin configuration.\n\n## Notes\n- Agent configs are generated based on stackforge.json.\n- Re-run \\`stackforge configure-agents\\` after changing your stack.\n`;\n}\n\nfunction buildMcpServerContent(ext: string, tools: string[], hints: string[]): string {\n const toolCases = [\n \"case 'stackforge_database':\\n return { ok: true, message: 'Check DATABASE_URL in .env and review db clients in src/db or drizzle/' };\",\n \"case 'stackforge_orm':\\n return { ok: true, message: 'Review ORM schema or models in drizzle/ or prisma/ or src/db' };\",\n \"case 'stackforge_api':\\n return { ok: true, message: 'API routes in app/api and clients in src/api, src/graphql, or src/trpc' };\",\n \"case 'stackforge_auth':\\n return { ok: true, message: 'Auth routes in app/api/auth and auth helpers in auth/' };\",\n \"case 'stackforge_email':\\n return { ok: true, message: 'Email client at src/lib/resend.ts and docs in features/email' };\",\n \"case 'stackforge_storage':\\n return { ok: true, message: 'Storage docs in features/storage' };\",\n \"case 'stackforge_payments':\\n return { ok: true, message: 'Stripe client at src/lib/stripe.ts and docs in features/payments' };\",\n \"case 'stackforge_analytics':\\n return { ok: true, message: 'PostHog client at src/lib/posthog.ts' };\",\n \"case 'stackforge_error-tracking':\\n return { ok: true, message: 'Sentry client at src/lib/sentry.ts' };\"\n ].join('\\n ');\n\n const nameType = ext === 'ts' ? ': string' : '';\n const actionType = ext === 'ts' ? ': string' : '';\n const createServerExpr = ext === 'ts' ? 'createServer' : 'http.createServer';\n const importLine = ext === 'ts'\n ? \"import { createServer } from 'node:http';\"\n : \"const http = require('node:http');\";\n\n return `${importLine}\n\nconst tools = ${JSON.stringify(tools, null, 2)};\nconst hints = ${JSON.stringify(hints, null, 2)};\n\nfunction handleTool(name${nameType}, action${actionType}) {\n switch (name) {\n ${toolCases}\n default:\n return { ok: false, message: 'Unknown tool' };\n }\n}\n\nconst server = ${createServerExpr}((req, res) => {\n if (req.url === '/tools') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ tools, hints }));\n return;\n }\n if (req.url === '/invoke' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => (body += chunk));\n req.on('end', () => {\n try {\n const payload = JSON.parse(body || '{}');\n const name = payload.name || '';\n const action = payload.arguments?.action || '';\n const result = handleTool(name, action);\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(result));\n } catch (err) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ok: false, message: 'Invalid JSON' }));\n }\n });\n return;\n }\n res.writeHead(404);\n res.end();\n});\n\nconst port = Number(process.env.MCP_PORT || 7341);\nserver.listen(port, () => {\n console.log('MCP server listening on', port);\n});\n`;\n}\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport { fileURLToPath } from 'node:url';\n\nexport async function generateFeatureFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = fileURLToPath(new URL('../../../templates', import.meta.url));\n const libDir = join(projectRoot, 'src', 'lib');\n const isTs = config.frontend.language === 'ts';\n\n if (config.features.includes('email')) {\n const dir = join(projectRoot, 'features', 'email');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'email', 'README.md'));\n const resendClient = await readTextFile(\n join(templatesRoot, 'features', 'email', isTs ? 'resend.ts' : 'resend.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'resend.ts' : 'resend.js'), resendClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'RESEND_API_KEY=\"\"', ctx);\n }\n\n if (config.features.includes('storage')) {\n const dir = join(projectRoot, 'features', 'storage');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'storage', 'README.md'));\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n const storageClient = await readTextFile(\n join(templatesRoot, 'features', 'storage', isTs ? 'storage.ts' : 'storage.js')\n );\n await writeTextFile(join(libDir, isTs ? 'storage.ts' : 'storage.js'), storageClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'CLOUDINARY_URL=\"\"', ctx);\n }\n\n if (config.features.includes('payments')) {\n const dir = join(projectRoot, 'features', 'payments');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'payments', 'README.md'));\n const stripeClient = await readTextFile(\n join(templatesRoot, 'features', 'payments', isTs ? 'stripe.ts' : 'stripe.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'stripe.ts' : 'stripe.js'), stripeClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'STRIPE_SECRET_KEY=\"\"', ctx);\n }\n\n if (config.features.includes('analytics')) {\n const dir = join(projectRoot, 'features', 'analytics');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'analytics', 'README.md'));\n const client = await readTextFile(\n join(templatesRoot, 'features', 'analytics', isTs ? 'posthog.ts' : 'posthog.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'posthog.ts' : 'posthog.js'), client, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_POSTHOG_KEY=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_POSTHOG_HOST=\"\"', ctx);\n }\n\n if (config.features.includes('error-tracking')) {\n const dir = join(projectRoot, 'features', 'error-tracking');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'error-tracking', 'README.md'));\n const client = await readTextFile(\n join(templatesRoot, 'features', 'error-tracking', isTs ? 'sentry.ts' : 'sentry.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'sentry.ts' : 'sentry.js'), client, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'SENTRY_DSN=\"\"', ctx);\n }\n}\n","import type { StackforgeConfig } from '../types/config.js';\nimport { createProjectSkeleton } from '../generators/core/project-creator.js';\nimport { generateDatabaseFiles } from '../generators/database/database-files.js';\nimport { generateFrontendFiles } from '../generators/frontend/frontend-files.js';\nimport { generateUiFiles } from '../generators/ui/ui-files.js';\nimport { generateAuthFiles } from '../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../generators/api/api-files.js';\nimport type { GeneratorContext } from '../generators/context.js';\nimport { generateAiAgentConfigs } from '../ai-agents/config-generator.js';\nimport { generateFeatureFiles } from '../generators/features/feature-files.js';\n\nexport async function runGenerators(\n cwd: string,\n config: StackforgeConfig,\n ctx: GeneratorContext\n): Promise<void> {\n await createProjectSkeleton(cwd, config, ctx);\n await generateFrontendFiles(cwd, config, ctx);\n await generateUiFiles(cwd, config, ctx);\n await generateDatabaseFiles(cwd, config, ctx);\n await generateAuthFiles(cwd, config, ctx);\n await generateApiFiles(cwd, config, ctx);\n await generateFeatureFiles(cwd, config, ctx);\n await generateAiAgentConfigs(cwd, config, ctx);\n}","import type { StackforgeConfig } from '../../types/config.js';\nimport { supported } from '../../utils/supported.js';\n\nexport function validateConfig(config: StackforgeConfig): void {\n if (!supported.frontend.includes(config.frontend.type)) {\n throw new Error(`Unsupported frontend: ${config.frontend.type}`);\n }\n if (!supported.ui.includes(config.ui.library)) {\n throw new Error(`Unsupported UI library: ${config.ui.library}`);\n }\n if (!supported.database.includes(config.database.provider)) {\n throw new Error(`Unsupported database: ${config.database.provider}`);\n }\n if (config.database.orm && !supported.orm.includes(config.database.orm)) {\n throw new Error(`Unsupported ORM: ${config.database.orm}`);\n }\n if (!supported.auth.includes(config.auth.provider)) {\n throw new Error(`Unsupported auth: ${config.auth.provider}`);\n }\n if (!supported.api.includes(config.api.type)) {\n throw new Error(`Unsupported API: ${config.api.type}`);\n }\n for (const feature of config.features) {\n if (!(supported.features as readonly string[]).includes(feature)) {\n throw new Error(`Unsupported feature: ${feature}`);\n }\n }\n\n if (config.database.orm && config.database.provider === 'none') {\n throw new Error('ORM requires a database provider.');\n }\n}","import type { StackforgeConfig } from '../../types/config.js';\n\nexport function validateCompatibility(config: StackforgeConfig): void {\n if (config.auth.provider === 'nextauth' && config.frontend.type !== 'nextjs') {\n throw new Error('NextAuth requires Next.js.');\n }\n\n if (config.auth.provider === 'clerk' && config.frontend.type !== 'nextjs') {\n throw new Error('Clerk requires Next.js.');\n }\n\n if (config.api.type === 'trpc' && config.frontend.language !== 'ts') {\n throw new Error('tRPC requires TypeScript.');\n }\n\n if (config.database.orm === 'mongoose' && config.database.provider !== 'mongodb') {\n throw new Error('Mongoose requires MongoDB. Use drizzle, prisma, or typeorm with SQL databases.');\n }\n\n if (config.database.orm === 'typeorm') {\n const supported = ['postgres', 'mysql', 'sqlite'];\n if (!supported.includes(config.database.provider)) {\n throw new Error('TypeORM requires postgres, mysql, or sqlite.');\n }\n }\n\n if (config.features.includes('error-tracking') && config.frontend.type !== 'nextjs') {\n throw new Error('Error tracking (Sentry) requires Next.js.');\n }\n}\n","import { versions } from './versions.js';\n\nexport function resolveVersions(options?: { allowMajor?: boolean }): typeof versions {\n return versions;\n}\n","import type { StackforgeConfig } from '../types/config.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport { resolveVersions } from './version-manager.js';\n\nexport function resolveDependencies(config: StackforgeConfig, options?: { allowMajor?: boolean }) {\n resolveVersions(options);\n return collectDependencies(config);\n}\n\nexport function resolveScripts(config: StackforgeConfig) {\n return collectScripts(config);\n}\n","import type { StackforgeConfig } from '../../types/config.js';\nimport { resolveDependencies, resolveScripts } from '../../utils/dependency-resolver.js';\n\nexport function validateDependencies(config: StackforgeConfig): void {\n const deps = resolveDependencies(config);\n const scripts = resolveScripts(config);\n\n if (Object.keys(scripts).length === 0) {\n throw new Error('No scripts resolved for the selected stack.');\n }\n\n if (Object.keys(deps.dependencies).length === 0 && Object.keys(deps.devDependencies).length === 0) {\n throw new Error('No dependencies resolved for the selected stack.');\n }\n}\n","export const logger = {\n info(message: string) {\n console.log(message);\n },\n warn(message: string) {\n console.warn(message);\n },\n error(message: string) {\n console.error(message);\n }\n};","import { exec } from 'node:child_process';\nimport type { PackageManager } from '../types/config.js';\n\nexport function getInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case 'pnpm':\n return 'pnpm install';\n case 'yarn':\n return 'yarn install';\n case 'bun':\n return 'bun install';\n default:\n return 'npm install';\n }\n}\n\nexport function runInstall(pm: PackageManager, cwd: string): Promise<void> {\n const command = getInstallCommand(pm);\n return new Promise((resolve, reject) => {\n const child = exec(command, { cwd }, (err) => {\n if (err) reject(err);\n else resolve();\n });\n child.stdout?.pipe(process.stdout);\n child.stderr?.pipe(process.stderr);\n });\n}","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const listCommand = new Command('list')\n .option('--available', 'show available features')\n .option('--category <name>', 'filter by category')\n .action(async (options) => {\n try {\n if (options.available) {\n logger.info('Available features:');\n logger.info(`frontend: ${supported.frontend.join(', ')}`);\n logger.info(`ui: ${supported.ui.join(', ')}`);\n logger.info(`database: ${supported.database.join(', ')}`);\n logger.info(`orm: ${supported.orm.join(', ')}`);\n logger.info(`auth: ${supported.auth.join(', ')}`);\n logger.info(`api: ${supported.api.join(', ')}`);\n logger.info(`features: ${supported.features.join(', ')}`);\n return;\n }\n\n const config = await readProjectConfig(process.cwd());\n if (!options.category) {\n logger.info(`frontend: ${config.frontend.type} (${config.frontend.language})`);\n logger.info(`ui: ${config.ui.library}`);\n logger.info(`database: ${config.database.provider}${config.database.orm ? ' (' + config.database.orm + ')' : ''}`);\n logger.info(`auth: ${config.auth.provider}`);\n logger.info(`api: ${config.api.type}`);\n logger.info(`features: ${config.features.length ? config.features.join(', ') : 'none'}`);\n return;\n }\n\n switch (options.category) {\n case 'frontend':\n logger.info(`frontend: ${config.frontend.type} (${config.frontend.language})`);\n break;\n case 'ui':\n logger.info(`ui: ${config.ui.library}`);\n break;\n case 'database':\n logger.info(`database: ${config.database.provider}${config.database.orm ? ' (' + config.database.orm + ')' : ''}`);\n break;\n case 'auth':\n logger.info(`auth: ${config.auth.provider}`);\n break;\n case 'api':\n logger.info(`api: ${config.api.type}`);\n break;\n case 'features':\n logger.info(`features: ${config.features.length ? config.features.join(', ') : 'none'}`);\n break;\n default:\n logger.error(`Unknown category: ${options.category}`);\n }\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { updateConfigForFeature, syncPackageJson } from '../../utils/feature-update.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { generateUiFiles } from '../../generators/ui/ui-files.js';\nimport { generateDatabaseFiles } from '../../generators/database/database-files.js';\nimport { generateAuthFiles } from '../../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../../generators/api/api-files.js';\nimport { generateFeatureFiles } from '../../generators/features/feature-files.js';\nimport { dirname, join } from 'node:path';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\n\nfunction parseFeature(feature: string): { category: string; value: string } {\n const parts = feature.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('Feature must be in the form category:value (e.g., auth:nextauth).');\n }\n const [category, value] = parts;\n return { category, value };\n}\n\nexport const addCommand = new Command('add')\n .argument('<feature>', 'feature to add (category:value)')\n .action(async (feature) => {\n try {\n const cwd = process.cwd();\n const { category, value } = parseFeature(feature);\n const current = await readProjectConfig(cwd);\n const next = updateConfigForFeature(current, category, value, 'add');\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(`${cwd}/package.json`, current, next);\n\n const root = dirname(cwd);\n if (category === 'ui') await generateUiFiles(root, next);\n if (category === 'database' || category === 'orm') await generateDatabaseFiles(root, next);\n if (category === 'auth') await generateAuthFiles(root, next);\n if (category === 'api') await generateApiFiles(root, next);\n if (category === 'feature') await generateFeatureFiles(root, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Added ${feature}`);\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n","import { readFile, writeFile } from 'node:fs/promises';\nimport type { ScriptMap } from '../generators/scripts/scripts-registry.js';\nimport type { DependencyResult } from '../generators/deps/deps-registry.js';\n\ninterface PackageJson {\n name?: string;\n version?: string;\n private?: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nexport async function readPackageJson(path: string): Promise<PackageJson> {\n const raw = await readFile(path, 'utf8');\n return JSON.parse(raw) as PackageJson;\n}\n\nexport async function writePackageJson(path: string, pkg: PackageJson): Promise<void> {\n await writeFile(path, JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n}\n\nexport function mergeScripts(pkg: PackageJson, scripts: ScriptMap): PackageJson {\n return { ...pkg, scripts: { ...(pkg.scripts ?? {}), ...scripts } };\n}\n\nexport function mergeDependencies(pkg: PackageJson, deps: DependencyResult): PackageJson {\n return {\n ...pkg,\n dependencies: { ...(pkg.dependencies ?? {}), ...deps.dependencies },\n devDependencies: { ...(pkg.devDependencies ?? {}), ...deps.devDependencies }\n };\n}\n\nexport function removeScripts(pkg: PackageJson, scriptsToRemove: ScriptMap): PackageJson {\n if (!pkg.scripts) return pkg;\n const next = { ...pkg.scripts };\n for (const key of Object.keys(scriptsToRemove)) {\n delete next[key];\n }\n return { ...pkg, scripts: next };\n}\n\nexport function removeDependencies(pkg: PackageJson, depsToRemove: DependencyResult): PackageJson {\n const nextDeps = { ...(pkg.dependencies ?? {}) };\n const nextDev = { ...(pkg.devDependencies ?? {}) };\n\n for (const key of Object.keys(depsToRemove.dependencies)) {\n delete nextDeps[key];\n }\n for (const key of Object.keys(depsToRemove.devDependencies)) {\n delete nextDev[key];\n }\n\n return { ...pkg, dependencies: nextDeps, devDependencies: nextDev };\n}","import type { StackforgeConfig } from '../types/config.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport {\n mergeDependencies,\n mergeScripts,\n readPackageJson,\n removeDependencies,\n removeScripts,\n writePackageJson\n} from './package-json.js';\nimport { supported } from './supported.js';\n\nexport function updateConfigForFeature(\n config: StackforgeConfig,\n category: string,\n value: string | undefined,\n action: 'add' | 'remove'\n): StackforgeConfig {\n const next = { ...config, database: { ...config.database }, ui: { ...config.ui }, auth: { ...config.auth }, api: { ...config.api } };\n\n switch (category) {\n case 'ui':\n if (action === 'add' && value && !supported.ui.includes(value as StackforgeConfig['ui']['library'])) {\n throw new Error(`Unsupported UI library: ${value}`);\n }\n next.ui.library = action === 'remove' ? 'none' : (value as StackforgeConfig['ui']['library']);\n break;\n case 'auth':\n if (action === 'add' && value && !supported.auth.includes(value as StackforgeConfig['auth']['provider'])) {\n throw new Error(`Unsupported auth provider: ${value}`);\n }\n next.auth.provider = action === 'remove' ? 'none' : (value as StackforgeConfig['auth']['provider']);\n break;\n case 'api':\n if (action === 'add' && value && !supported.api.includes(value as StackforgeConfig['api']['type'])) {\n throw new Error(`Unsupported API type: ${value}`);\n }\n next.api.type = action === 'remove' ? 'none' : (value as StackforgeConfig['api']['type']);\n break;\n case 'database':\n if (action === 'add' && value && !supported.database.includes(value as StackforgeConfig['database']['provider'])) {\n throw new Error(`Unsupported database: ${value}`);\n }\n next.database.provider = action === 'remove' ? 'none' : (value as StackforgeConfig['database']['provider']);\n if (action === 'remove' || value === 'none') next.database.orm = undefined;\n break;\n case 'orm':\n if (action === 'add' && value && !supported.orm.includes(value as NonNullable<StackforgeConfig['database']['orm']>)) {\n throw new Error(`Unsupported ORM: ${value}`);\n }\n next.database.orm = action === 'remove' ? undefined : (value as NonNullable<StackforgeConfig['database']['orm']>);\n break;\n case 'feature':\n if (action === 'add' && value && !(supported.features as readonly string[]).includes(value)) {\n throw new Error(`Unsupported feature: ${value}`);\n }\n if (action === 'add' && value) {\n next.features = Array.from(new Set([...next.features, value]));\n } else if (action === 'remove' && value) {\n next.features = next.features.filter((f) => f !== value);\n }\n break;\n default:\n throw new Error(`Unknown feature category: ${category}`);\n }\n\n return next;\n}\n\nfunction diffKeys<T extends Record<string, string>>(oldMap: T, newMap: T): T {\n const diff: Record<string, string> = {};\n for (const key of Object.keys(oldMap)) {\n if (!(key in newMap)) diff[key] = oldMap[key];\n }\n return diff as T;\n}\n\nexport async function syncPackageJson(\n path: string,\n oldConfig: StackforgeConfig,\n newConfig: StackforgeConfig\n): Promise<void> {\n const pkg = await readPackageJson(path);\n const oldScripts = collectScripts(oldConfig);\n const newScripts = collectScripts(newConfig);\n const oldDeps = collectDependencies(oldConfig);\n const newDeps = collectDependencies(newConfig);\n\n const scriptsToRemove = diffKeys(oldScripts, newScripts);\n const depsToRemove = {\n dependencies: diffKeys(oldDeps.dependencies, newDeps.dependencies),\n devDependencies: diffKeys(oldDeps.devDependencies, newDeps.devDependencies)\n };\n\n let nextPkg = removeScripts(pkg, scriptsToRemove);\n nextPkg = removeDependencies(nextPkg, depsToRemove);\n nextPkg = mergeScripts(nextPkg, newScripts);\n nextPkg = mergeDependencies(nextPkg, newDeps);\n\n await writePackageJson(path, nextPkg);\n}","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { updateConfigForFeature, syncPackageJson } from '../../utils/feature-update.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { cleanupFeature } from '../../utils/feature-cleanup.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join } from 'node:path';\n\nfunction parseFeature(feature: string): { category: string; value: string } {\n const parts = feature.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('Feature must be in the form category:value (e.g., auth:nextauth).');\n }\n const [category, value] = parts;\n return { category, value };\n}\n\nfunction assertRemovalTarget(category: string, value: string, current: Awaited<ReturnType<typeof readProjectConfig>>): void {\n switch (category) {\n case 'ui':\n if (current.ui.library !== value) {\n throw new Error(`UI library ${value} is not installed.`);\n }\n break;\n case 'auth':\n if (current.auth.provider !== value) {\n throw new Error(`Auth provider ${value} is not installed.`);\n }\n break;\n case 'api':\n if (current.api.type !== value) {\n throw new Error(`API type ${value} is not installed.`);\n }\n break;\n case 'database':\n if (current.database.provider !== value) {\n throw new Error(`Database provider ${value} is not installed.`);\n }\n break;\n case 'orm':\n if (current.database.orm !== value) {\n throw new Error(`ORM ${value} is not installed.`);\n }\n break;\n case 'feature':\n if (!current.features.includes(value)) {\n throw new Error(`Feature ${value} is not installed.`);\n }\n break;\n default:\n throw new Error(`Unknown feature category: ${category}`);\n }\n}\n\nexport const removeCommand = new Command('remove')\n .argument('<feature>', 'feature to remove (category:value)')\n .action(async (feature) => {\n try {\n const cwd = process.cwd();\n const { category, value } = parseFeature(feature);\n const current = await readProjectConfig(cwd);\n assertRemovalTarget(category, value, current);\n await cleanupFeature(cwd, current, category, value);\n\n const next = updateConfigForFeature(current, category, value, 'remove');\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(`${cwd}/package.json`, current, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Removed ${feature}`);\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { removePath } from './file-system.js';\nimport { removeEnvKey } from './env-file.js';\n\nexport async function cleanupFeature(\n cwd: string,\n config: StackforgeConfig,\n category: string,\n value?: string\n): Promise<void> {\n const root = cwd;\n\n if (category === 'ui') {\n if (config.ui.library === 'tailwind') {\n await removePath(join(root, 'tailwind.config.js'));\n await removePath(join(root, 'postcss.config.js'));\n await removePath(join(root, 'src', 'styles.css'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n if (config.ui.library === 'shadcn') {\n await removePath(join(root, 'components'));\n await removePath(join(root, 'components.json'));\n await removePath(join(root, 'src', 'lib', 'utils.ts'));\n await removePath(join(root, 'src', 'lib', 'utils.js'));\n await removePath(join(root, 'src', 'components', 'ui'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n if (\n config.ui.library === 'mui' ||\n config.ui.library === 'chakra' ||\n config.ui.library === 'mantine' ||\n config.ui.library === 'antd' ||\n config.ui.library === 'nextui'\n ) {\n await removePath(join(root, 'components'));\n await removePath(join(root, 'src', 'theme.ts'));\n await removePath(join(root, 'src', 'theme.js'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n }\n\n if (category === 'auth') {\n if (config.auth.provider === 'nextauth') {\n await removePath(join(root, 'app', 'api', 'auth'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removeEnvKey(join(root, '.env.example'), 'NEXTAUTH_SECRET');\n await removeEnvKey(join(root, '.env.example'), 'NEXTAUTH_URL');\n }\n if (config.auth.provider === 'clerk') {\n await removePath(join(root, 'middleware.ts'));\n await removePath(join(root, 'middleware.js'));\n await removePath(join(root, 'src', 'lib', 'clerk.ts'));\n await removePath(join(root, 'src', 'lib', 'clerk.js'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removeEnvKey(join(root, '.env.example'), 'CLERK_SECRET_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY');\n }\n if (config.auth.provider === 'supabase') {\n await removePath(join(root, 'src', 'lib', 'supabase.ts'));\n await removePath(join(root, 'src', 'lib', 'supabase.js'));\n await removePath(join(root, 'src', 'lib', 'supabase-server.ts'));\n await removePath(join(root, 'src', 'lib', 'supabase-server.js'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removePath(join(root, 'src', 'auth', 'signin.tsx'));\n await removePath(join(root, 'src', 'auth', 'signin.jsx'));\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_SUPABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_SUPABASE_ANON_KEY');\n }\n await removePath(join(root, 'auth'));\n }\n\n if (category === 'api') {\n if (config.api.type === 'rest') {\n await removePath(join(root, 'app', 'api', 'hello'));\n await removePath(join(root, 'app', 'api', 'users'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'server'));\n await removePath(join(root, 'src', 'api'));\n await removePath(join(root, 'src', 'api', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'api', 'client-usage.jsx'));\n }\n if (config.api.type === 'trpc') {\n await removePath(join(root, 'app', 'api', 'trpc'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'server', 'api'));\n await removePath(join(root, 'src', 'trpc'));\n await removePath(join(root, 'src', 'trpc', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'trpc', 'client-usage.jsx'));\n await removePath(join(root, 'src', 'server'));\n }\n if (config.api.type === 'graphql') {\n await removePath(join(root, 'app', 'api', 'graphql'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'graphql'));\n await removePath(join(root, 'src', 'server'));\n await removePath(join(root, 'src', 'graphql', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'graphql', 'client-usage.jsx'));\n }\n await removePath(join(root, 'api'));\n }\n\n if (category === 'database') {\n if (config.database.orm === 'drizzle') {\n await removePath(join(root, 'drizzle.config.ts'));\n await removePath(join(root, 'drizzle'));\n }\n if (config.database.orm === 'prisma') {\n await removePath(join(root, 'prisma'));\n await removePath(join(root, 'src', 'db', 'prisma.ts'));\n await removePath(join(root, 'src', 'db', 'prisma.js'));\n await removePath(join(root, 'src', 'db', 'prisma-example.ts'));\n await removePath(join(root, 'src', 'db', 'prisma-example.js'));\n }\n if (config.database.orm === 'mongoose') {\n await removePath(join(root, 'src', 'db', 'mongoose.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose.js'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.js'));\n }\n if (config.database.orm === 'typeorm') {\n await removePath(join(root, 'src', 'db', 'data-source.ts'));\n await removePath(join(root, 'src', 'db', 'data-source.js'));\n await removePath(join(root, 'src', 'db', 'entities'));\n await removePath(join(root, 'src', 'db', 'migrations'));\n }\n await removeEnvKey(join(root, '.env.example'), 'DATABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'NEON_API_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEON_PROJECT_ID');\n await removeEnvKey(join(root, '.env.example'), 'SUPABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'SUPABASE_ANON_KEY');\n }\n\n if (category === 'orm') {\n if (config.database.orm === 'drizzle') {\n await removePath(join(root, 'drizzle.config.ts'));\n await removePath(join(root, 'drizzle'));\n }\n if (config.database.orm === 'prisma') {\n await removePath(join(root, 'prisma'));\n await removePath(join(root, 'src', 'db', 'prisma.ts'));\n await removePath(join(root, 'src', 'db', 'prisma.js'));\n await removePath(join(root, 'src', 'db', 'prisma-example.ts'));\n await removePath(join(root, 'src', 'db', 'prisma-example.js'));\n }\n if (config.database.orm === 'mongoose') {\n await removePath(join(root, 'src', 'db', 'mongoose.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose.js'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.js'));\n }\n if (config.database.orm === 'typeorm') {\n await removePath(join(root, 'src', 'db', 'data-source.ts'));\n await removePath(join(root, 'src', 'db', 'data-source.js'));\n await removePath(join(root, 'src', 'db', 'entities'));\n await removePath(join(root, 'src', 'db', 'migrations'));\n }\n }\n\n if (category === 'feature') {\n const targets = value ? [value] : config.features;\n if (targets.includes('email')) {\n await removePath(join(root, 'features', 'email'));\n await removeEnvKey(join(root, '.env.example'), 'RESEND_API_KEY');\n await removePath(join(root, 'src', 'lib', 'resend.ts'));\n await removePath(join(root, 'src', 'lib', 'resend.js'));\n }\n if (targets.includes('storage')) {\n await removePath(join(root, 'features', 'storage'));\n await removeEnvKey(join(root, '.env.example'), 'CLOUDINARY_URL');\n await removePath(join(root, 'src', 'lib', 'storage.ts'));\n await removePath(join(root, 'src', 'lib', 'storage.js'));\n }\n if (targets.includes('payments')) {\n await removePath(join(root, 'features', 'payments'));\n await removeEnvKey(join(root, '.env.example'), 'STRIPE_SECRET_KEY');\n await removePath(join(root, 'src', 'lib', 'stripe.ts'));\n await removePath(join(root, 'src', 'lib', 'stripe.js'));\n }\n if (targets.includes('analytics')) {\n await removePath(join(root, 'features', 'analytics'));\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_POSTHOG_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_POSTHOG_HOST');\n await removePath(join(root, 'src', 'lib', 'posthog.ts'));\n await removePath(join(root, 'src', 'lib', 'posthog.js'));\n }\n if (targets.includes('error-tracking')) {\n await removePath(join(root, 'features', 'error-tracking'));\n await removeEnvKey(join(root, '.env.example'), 'SENTRY_DSN');\n await removePath(join(root, 'src', 'lib', 'sentry.ts'));\n await removePath(join(root, 'src', 'lib', 'sentry.js'));\n }\n }\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { syncPackageJson } from '../../utils/feature-update.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { resolveDependencies, resolveScripts } from '../../utils/dependency-resolver.js';\nimport { readPackageJson, writePackageJson } from '../../utils/package-json.js';\n\nexport const updateCommand = new Command('update')\n .option('--check', 'check for updates')\n .option('--major', 'allow major updates')\n .option('--live', 'compare against latest registry versions')\n .action(async (options) => {\n try {\n const cwd = process.cwd();\n\n const config = await readProjectConfig(cwd);\n const pkgPath = join(cwd, 'package.json');\n if (options.check) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf8')) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n const expectedScripts = resolveScripts(config);\n const expectedDeps = resolveDependencies(config, { allowMajor: Boolean(options.major) });\n\n const issues: string[] = [];\n for (const key of Object.keys(expectedScripts)) {\n if (!pkg.scripts || !(key in pkg.scripts)) {\n issues.push(`Missing script: ${key}`);\n } else if (pkg.scripts[key] !== expectedScripts[key]) {\n issues.push(`Script mismatch: ${key}`);\n }\n }\n\n for (const key of Object.keys(expectedDeps.dependencies)) {\n if (!pkg.dependencies || !(key in pkg.dependencies)) {\n issues.push(`Missing dependency: ${key}`);\n } else if (pkg.dependencies[key] !== expectedDeps.dependencies[key]) {\n issues.push(`Dependency version mismatch: ${key}`);\n }\n }\n\n for (const key of Object.keys(expectedDeps.devDependencies)) {\n if (!pkg.devDependencies || !(key in pkg.devDependencies)) {\n issues.push(`Missing devDependency: ${key}`);\n } else if (pkg.devDependencies[key] !== expectedDeps.devDependencies[key]) {\n issues.push(`Dev dependency version mismatch: ${key}`);\n }\n }\n\n if (options.live) {\n const { fetchLatestVersion } = await import('../../utils/npm-registry.js');\n const allDeps = {\n ...expectedDeps.dependencies,\n ...expectedDeps.devDependencies\n };\n for (const [name, version] of Object.entries(allDeps)) {\n const latest = await fetchLatestVersion(name);\n if (latest && !version.includes(latest)) {\n issues.push(`Latest available: ${name}@${latest} (current ${version})`);\n }\n }\n }\n\n if (issues.length === 0) {\n logger.info('No updates needed.');\n } else {\n for (const issue of issues) logger.warn(issue);\n }\n return;\n }\n\n await syncPackageJson(pkgPath, config, config);\n if (options.live) {\n const { fetchLatestVersion } = await import('../../utils/npm-registry.js');\n const pkg = await readPackageJson(pkgPath);\n const allowMajor = Boolean(options.major);\n\n const updateMap = async (deps: Record<string, string> | undefined) => {\n if (!deps) return;\n for (const [name, current] of Object.entries(deps)) {\n const latest = await fetchLatestVersion(name);\n if (!latest) continue;\n const currentMajor = parseMajor(current);\n const latestMajor = parseMajor(latest);\n if (!allowMajor && currentMajor !== null && latestMajor !== null && latestMajor > currentMajor) {\n continue;\n }\n deps[name] = `^${latest}`;\n }\n };\n\n await updateMap(pkg.dependencies);\n await updateMap(pkg.devDependencies);\n await writePackageJson(pkgPath, pkg);\n }\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info('Project updated.');\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\nfunction parseMajor(version: string): number | null {\n const match = version.match(/(\\d+)\\./);\n if (!match) return null;\n return Number(match[1]);\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { STACKFORGE_SCHEMA_VERSION } from '../../utils/schema.js';\nimport { checkProject, fixProject } from '../../utils/doctor.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { readFile } from 'node:fs/promises';\n\nexport const doctorCommand = new Command('doctor')\n .option('--fix', 'apply non-destructive fixes')\n .action(async (options) => {\n const cwd = process.cwd();\n const configPath = join(cwd, 'stackforge.json');\n if (!existsSync(configPath)) {\n logger.error('Missing stackforge.json. Run from a StackForge project root.');\n return;\n }\n\n let config;\n try {\n const raw = JSON.parse(await readFile(configPath, 'utf8')) as { _schemaVersion?: number };\n const schemaVersion = raw._schemaVersion ?? 0;\n if (schemaVersion !== STACKFORGE_SCHEMA_VERSION) {\n logger.warn(`stackforge.json schema version ${schemaVersion} (expected ${STACKFORGE_SCHEMA_VERSION})`);\n } else {\n logger.info('stackforge.json OK');\n }\n config = await readProjectConfig(cwd);\n } catch (err) {\n logger.error('Failed to read stackforge.json');\n return;\n }\n\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n logger.error('Missing package.json');\n return;\n }\n const result = await checkProject(cwd);\n if (result.issues.length === 0) {\n logger.info('No issues found.');\n return;\n }\n\n for (const issue of result.issues) {\n logger.warn(issue);\n }\n\n if (options.fix) {\n await fixProject(result, cwd);\n logger.info('Applied fixes.');\n }\n });\n","import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join, dirname, basename } from 'node:path';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { syncPackageJson } from './feature-update.js';\nimport { buildProjectReadme } from '../generators/core/readme.js';\nimport { writeTextFile } from './file-system.js';\nimport { appendEnvLine } from './env-file.js';\nimport { generateAiAgentConfigs } from '../ai-agents/config-generator.js';\nimport { readProjectConfig } from './project-config.js';\n\nexport interface DoctorResult {\n issues: string[];\n config?: Awaited<ReturnType<typeof readProjectConfig>>;\n pkgPath: string;\n envPath: string;\n hasConfig: boolean;\n hasPackageJson: boolean;\n}\n\nfunction requiredEnvKeys(config: NonNullable<DoctorResult['config']>): string[] {\n const keys: string[] = [];\n if (config.database.provider !== 'none') keys.push('DATABASE_URL');\n if (config.database.provider === 'neon') keys.push('NEON_API_KEY', 'NEON_PROJECT_ID');\n if (config.database.provider === 'supabase') keys.push('SUPABASE_URL', 'SUPABASE_ANON_KEY');\n if (config.auth.provider === 'nextauth') keys.push('NEXTAUTH_SECRET', 'NEXTAUTH_URL');\n if (config.auth.provider === 'clerk') keys.push('CLERK_SECRET_KEY', 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY');\n if (config.auth.provider === 'supabase') keys.push('NEXT_PUBLIC_SUPABASE_URL', 'NEXT_PUBLIC_SUPABASE_ANON_KEY');\n if (config.features.includes('email')) keys.push('RESEND_API_KEY');\n if (config.features.includes('storage')) keys.push('CLOUDINARY_URL');\n if (config.features.includes('payments')) keys.push('STRIPE_SECRET_KEY');\n if (config.features.includes('analytics')) keys.push('NEXT_PUBLIC_POSTHOG_KEY', 'NEXT_PUBLIC_POSTHOG_HOST');\n if (config.features.includes('error-tracking')) keys.push('SENTRY_DSN');\n return keys;\n}\n\nfunction agentFiles(agent: string): string[] {\n const files = ['context.json', 'tools.json'];\n if (agent === 'claude') files.push('claude_desktop_config.json');\n if (agent === 'copilot') files.push('functions.json');\n if (agent === 'codex') files.push('functions.json');\n if (agent === 'gemini') files.push('function_declarations.json');\n if (agent === 'cursor') files.push('.cursorrules');\n if (agent === 'codeium') files.push('server-config.json');\n if (agent === 'windsurf') files.push('cascade.json');\n if (agent === 'tabnine') files.push('config.json');\n return files;\n}\n\nexport async function checkProject(cwd: string): Promise<DoctorResult> {\n const configPath = join(cwd, 'stackforge.json');\n const pkgPath = join(cwd, 'package.json');\n const envPath = join(cwd, '.env.example');\n const issues: string[] = [];\n\n if (!existsSync(configPath)) {\n return {\n issues: ['Missing stackforge.json. Run from a StackForge project root.'],\n config: undefined,\n pkgPath,\n envPath,\n hasConfig: false,\n hasPackageJson: existsSync(pkgPath)\n };\n }\n\n if (!existsSync(pkgPath)) {\n return {\n issues: ['Missing package.json'],\n config: await readProjectConfig(cwd),\n pkgPath,\n envPath,\n hasConfig: true,\n hasPackageJson: false\n };\n }\n\n const config = await readProjectConfig(cwd);\n const pkg = JSON.parse(await readFile(pkgPath, 'utf8')) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const requiredScripts = collectScripts(config);\n const requiredDeps = collectDependencies(config);\n\n for (const key of Object.keys(requiredScripts)) {\n if (!pkg.scripts || !(key in pkg.scripts)) {\n issues.push(`Missing script: ${key}`);\n }\n }\n\n for (const key of Object.keys(requiredDeps.dependencies)) {\n if (!pkg.dependencies || !(key in pkg.dependencies)) {\n issues.push(`Missing dependency: ${key}`);\n }\n }\n\n for (const key of Object.keys(requiredDeps.devDependencies)) {\n if (!pkg.devDependencies || !(key in pkg.devDependencies)) {\n issues.push(`Missing devDependency: ${key}`);\n }\n }\n\n let envContent = '';\n if (existsSync(envPath)) {\n envContent = await readFile(envPath, 'utf8');\n }\n const envKeys = new Set(\n envContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'))\n .map((line) => line.split('=')[0])\n );\n const requiredEnv = requiredEnvKeys(config);\n for (const key of requiredEnv) {\n if (!envKeys.has(key)) {\n issues.push(`Missing env key in .env.example: ${key}`);\n }\n }\n\n for (const agent of config.aiAgents) {\n const agentRoot = join(cwd, '.ai-agents', agent);\n for (const file of agentFiles(agent)) {\n if (!existsSync(join(agentRoot, file))) {\n issues.push(`Missing AI agent file: .ai-agents/${agent}/${file}`);\n }\n }\n if (agent === 'claude' && !existsSync(join(cwd, '.claude', 'claude_desktop_config.json'))) {\n issues.push('Missing Claude config: .claude/claude_desktop_config.json');\n }\n if (agent === 'codex' && !existsSync(join(cwd, '.codex', 'functions.json'))) {\n issues.push('Missing Codex config: .codex/functions.json');\n }\n if (agent === 'cursor' && !existsSync(join(cwd, '.cursor', 'extensions.json'))) {\n issues.push('Missing Cursor config: .cursor/extensions.json');\n }\n if (agent === 'windsurf' && !existsSync(join(cwd, '.windsurf', 'cascade.json'))) {\n issues.push('Missing Windsurf config: .windsurf/cascade.json');\n }\n if (agent === 'tabnine' && !existsSync(join(cwd, '.tabnine', 'config.json'))) {\n issues.push('Missing Tabnine config: .tabnine/config.json');\n }\n }\n\n return {\n issues,\n config,\n pkgPath,\n envPath,\n hasConfig: true,\n hasPackageJson: true\n };\n}\n\nexport async function fixProject(result: DoctorResult, cwd: string): Promise<void> {\n const { config, pkgPath, envPath } = result;\n if (!config) return;\n await syncPackageJson(pkgPath, config, config);\n\n const envContent = existsSync(envPath) ? await readFile(envPath, 'utf8') : '';\n const envKeys = new Set(\n envContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'))\n .map((line) => line.split('=')[0])\n );\n const missingEnv = requiredEnvKeys(config).filter((key) => !envKeys.has(key));\n for (const key of missingEnv) {\n await appendEnvLine(envPath, `${key}=\"\"`);\n }\n\n if (config.aiAgents.length > 0) {\n const base = basename(cwd) === config.projectName ? dirname(cwd) : cwd;\n await generateAiAgentConfigs(base, config);\n }\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const configureAgentsCommand = new Command('configure-agents')\n .option('--agents <list>', 'comma-separated list of agents')\n .action(async (options) => {\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const agents = options.agents\n ? String(options.agents)\n .split(',')\n .map((a: string) => a.trim())\n .filter(Boolean)\n : config.aiAgents;\n\n const invalid = (agents ?? []).filter((a) => !supported.agents.includes(a as typeof supported.agents[number]));\n if (invalid.length) {\n throw new Error(`Unsupported agents: ${invalid.join(', ')}`);\n }\n\n const next = { ...config, aiAgents: agents };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info('AI agents configured.');\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const addAgentCommand = new Command('add-agent')\n .argument('<agent>', 'agent to add')\n .action(async (agent) => {\n if (!supported.agents.includes(agent as typeof supported.agents[number])) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const set = new Set(config.aiAgents ?? []);\n set.add(agent);\n const next = { ...config, aiAgents: Array.from(set) };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info(`Added agent: ${agent}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const removeAgentCommand = new Command('remove-agent')\n .argument('<agent>', 'agent to remove')\n .action(async (agent) => {\n if (!supported.agents.includes(agent as typeof supported.agents[number])) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const next = { ...config, aiAgents: (config.aiAgents ?? []).filter((a) => a !== agent) };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info(`Removed agent: ${agent}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\n\nexport const listAgentsCommand = new Command('list-agents')\n .action(async () => {\n const config = await readProjectConfig(process.cwd());\n const agents = config.aiAgents ?? [];\n if (agents.length === 0) {\n logger.info('No agents configured.');\n return;\n }\n logger.info(`Configured agents: ${agents.join(', ')}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { STACKFORGE_SCHEMA_VERSION } from '../../utils/schema.js';\nimport { migrateConfig } from '../../utils/migrations.js';\n\nexport const migrateCommand = new Command('migrate')\n .option('--dry-run', 'show planned migration without writing')\n .action(async (options) => {\n try {\n const cwd = process.cwd();\n const path = join(cwd, 'stackforge.json');\n const raw = await readFile(path, 'utf8');\n const parsed = JSON.parse(raw) as { _schemaVersion?: number };\n const current = parsed._schemaVersion ?? 0;\n\n if (current === STACKFORGE_SCHEMA_VERSION) {\n logger.info('No migration needed.');\n return;\n }\n\n logger.info(`Migrating schema ${current} -> ${STACKFORGE_SCHEMA_VERSION}`);\n const migrated = migrateConfig(parsed as any);\n if (!options.dryRun) {\n await writeFile(path, JSON.stringify(migrated, null, 2) + '\\n', 'utf8');\n logger.info('Migration complete.');\n }\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { getPreset, presetNames } from '../../presets/index.js';\n\nexport const listPresetsCommand = new Command('list-presets')\n .option('--details', 'show preset details')\n .action((options) => {\n const presets = presetNames;\n for (const name of presets) {\n const preset = getPreset(name);\n if (!preset) {\n logger.info(`${name}: missing`);\n continue;\n }\n if (options.details) {\n const features = preset.features && preset.features.length ? preset.features.join(', ') : 'none';\n logger.info(`${name}: frontend=${preset.frontend?.type ?? 'n/a'} ui=${preset.ui?.library ?? 'n/a'} db=${preset.database?.provider ?? 'n/a'} orm=${preset.database?.orm ?? 'n/a'} auth=${preset.auth?.provider ?? 'n/a'} api=${preset.api?.type ?? 'n/a'} features=${features}`);\n } else {\n logger.info(`${name}: available`);\n }\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { removeLockfiles } from '../../utils/package-manager.js';\nimport { runInstall } from '../../utils/install.js';\nimport type { PackageManager } from '../../types/config.js';\n\nconst PACKAGE_MANAGERS: PackageManager[] = ['npm', 'pnpm', 'yarn', 'bun'];\n\nexport const useCommand = new Command('use')\n .argument('<packageManager>', 'npm | pnpm | yarn | bun')\n .option('--no-install', 'skip installing dependencies after switching')\n .action(async (packageManager: string, options) => {\n if (!PACKAGE_MANAGERS.includes(packageManager as PackageManager)) {\n throw new Error(`Unsupported package manager: ${packageManager}`);\n }\n\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const nextManager = packageManager as PackageManager;\n\n if (config.packageManager === nextManager) {\n logger.info(`Package manager already set to ${nextManager}.`);\n return;\n }\n\n await removeLockfiles(cwd);\n await writeProjectConfig(cwd, { ...config, packageManager: nextManager });\n\n if (options.install !== false) {\n await runInstall(nextManager, cwd);\n }\n\n logger.info(`Package manager switched to ${nextManager}.`);\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { checkProject } from '../../utils/doctor.js';\n\nexport const validateCommand = new Command('validate')\n .description('validate project configuration and generated files')\n .action(async () => {\n const result = await checkProject(process.cwd());\n if (result.issues.length === 0) {\n logger.info('Validation passed.');\n return;\n }\n for (const issue of result.issues) {\n logger.error(issue);\n }\n process.exitCode = 1;\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { checkProject, fixProject } from '../../utils/doctor.js';\n\nexport const fixCommand = new Command('fix')\n .description('apply safe fixes to project configuration')\n .action(async () => {\n const cwd = process.cwd();\n const result = await checkProject(cwd);\n if (result.issues.length === 0) {\n logger.info('No issues found.');\n return;\n }\n await fixProject(result, cwd);\n logger.info('Applied fixes.');\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { getPreset } from '../../presets/index.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { cleanupFeature } from '../../utils/feature-cleanup.js';\nimport { syncPackageJson } from '../../utils/feature-update.js';\nimport { generateUiFiles } from '../../generators/ui/ui-files.js';\nimport { generateDatabaseFiles } from '../../generators/database/database-files.js';\nimport { generateAuthFiles } from '../../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../../generators/api/api-files.js';\nimport { generateFeatureFiles } from '../../generators/features/feature-files.js';\nimport { generateFrontendFiles } from '../../generators/frontend/frontend-files.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join, dirname } from 'node:path';\n\nexport const upgradeCommand = new Command('upgrade')\n .option('--preset <name>', 'preset to upgrade to')\n .action(async (options) => {\n const cwd = process.cwd();\n const current = await readProjectConfig(cwd);\n const preset = getPreset(options.preset);\n if (!preset) {\n throw new Error('Unknown preset. Use stackforge list-presets.');\n }\n\n const next = {\n ...current,\n ...preset,\n preset: options.preset,\n projectName: current.projectName,\n packageManager: current.packageManager,\n aiAgents: current.aiAgents\n };\n\n if (current.frontend.type !== next.frontend.type || current.frontend.language !== next.frontend.language) {\n throw new Error('Preset upgrade does not support changing frontend type or language yet.');\n }\n\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n if (current.ui.library !== next.ui.library) {\n await cleanupFeature(cwd, current, 'ui', current.ui.library);\n }\n if (current.database.provider !== next.database.provider) {\n await cleanupFeature(cwd, current, 'database', current.database.provider);\n }\n if (current.database.orm !== next.database.orm) {\n await cleanupFeature(cwd, current, 'orm', current.database.orm);\n }\n if (current.auth.provider !== next.auth.provider) {\n await cleanupFeature(cwd, current, 'auth', current.auth.provider);\n }\n if (current.api.type !== next.api.type) {\n await cleanupFeature(cwd, current, 'api', current.api.type);\n }\n const removedFeatures = current.features.filter((f) => !next.features.includes(f));\n for (const feature of removedFeatures) {\n await cleanupFeature(cwd, current, 'feature', feature);\n }\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(join(cwd, 'package.json'), current, next);\n\n const root = dirname(cwd);\n await generateFrontendFiles(root, next);\n await generateUiFiles(root, next);\n await generateDatabaseFiles(root, next);\n await generateAuthFiles(root, next);\n await generateApiFiles(root, next);\n await generateFeatureFiles(root, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Upgraded project to preset: ${options.preset}`);\n });\n"],"mappings":"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","names":["Command","base","join","readFile","writeFile","join","join","writeFile","readFile","join","join","fileURLToPath","readFile","writeFile","dirname","readFile","writeFile","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","fileURLToPath","join","existsSync","join","existsSync","join","fileURLToPath","join","supported","resolve","join","Command","Command","Command","readFile","writeFile","dirname","join","Command","dirname","join","Command","join","join","join","parseFeature","Command","Command","join","readFile","Command","join","readFile","version","Command","existsSync","join","existsSync","readFile","join","dirname","join","existsSync","readFile","dirname","readFile","Command","join","existsSync","Command","Command","Command","Command","Command","Command","Command","Command","Command","readFile","writeFile","join","Command","join","readFile","writeFile","Command","Command","presets","Command","Command","Command","Command","Command","Command","Command","join","dirname","Command","require","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/cli/commands/create.ts","../src/cli/prompts/index.ts","../src/utils/package-manager.ts","../src/presets/index.ts","../src/cli/config-builder.ts","../src/cli/defaults.ts","../src/utils/supported.ts","../src/generators/core/project-creator.ts","../src/utils/file-system.ts","../src/generators/scripts/scripts-registry.ts","../src/utils/versions.ts","../src/generators/deps/deps-registry.ts","../src/generators/core/readme.ts","../src/utils/project-config.ts","../src/utils/schema.ts","../src/utils/migrations.ts","../src/generators/database/database-files.ts","../src/utils/env-file.ts","../src/utils/templates-dir.ts","../src/generators/frontend/frontend-files.ts","../src/generators/templates/template-engine.ts","../src/generators/ui/ui-files.ts","../src/generators/auth/auth-files.ts","../src/generators/api/api-files.ts","../src/ai-agents/config-generator.ts","../src/generators/features/feature-files.ts","../src/cli/run-generators.ts","../src/cli/validators/config.ts","../src/cli/validators/compatibility.ts","../src/utils/version-manager.ts","../src/utils/dependency-resolver.ts","../src/cli/validators/dependencies.ts","../src/utils/logger.ts","../src/utils/install.ts","../src/cli/commands/list.ts","../src/cli/commands/add.ts","../src/utils/package-json.ts","../src/utils/feature-update.ts","../src/cli/commands/remove.ts","../src/utils/feature-cleanup.ts","../src/cli/commands/update.ts","../src/cli/commands/doctor.ts","../src/utils/doctor.ts","../src/cli/commands/configure-agents.ts","../src/cli/commands/add-agent.ts","../src/cli/commands/remove-agent.ts","../src/cli/commands/list-agents.ts","../src/cli/commands/migrate.ts","../src/cli/commands/list-presets.ts","../src/cli/commands/use.ts","../src/cli/commands/validate.ts","../src/cli/commands/fix.ts","../src/cli/commands/upgrade.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createRequire } from 'node:module';\nimport { createCommand } from './cli/commands/create.js';\nimport { listCommand } from './cli/commands/list.js';\nimport { addCommand } from './cli/commands/add.js';\nimport { removeCommand } from './cli/commands/remove.js';\nimport { updateCommand } from './cli/commands/update.js';\nimport { doctorCommand } from './cli/commands/doctor.js';\nimport { configureAgentsCommand } from './cli/commands/configure-agents.js';\nimport { addAgentCommand } from './cli/commands/add-agent.js';\nimport { removeAgentCommand } from './cli/commands/remove-agent.js';\nimport { listAgentsCommand } from './cli/commands/list-agents.js';\nimport { migrateCommand } from './cli/commands/migrate.js';\nimport { listPresetsCommand } from './cli/commands/list-presets.js';\nimport { useCommand } from './cli/commands/use.js';\nimport { validateCommand } from './cli/commands/validate.js';\nimport { fixCommand } from './cli/commands/fix.js';\nimport { upgradeCommand } from './cli/commands/upgrade.js';\nimport { logger } from './utils/logger.js';\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json');\n\nconst program = new Command();\n\nprogram\n .name('create-stackforge')\n .description('Universal full-stack boilerplate generator')\n .version(version);\n\nprogram.addCommand(createCommand, { isDefault: true });\nprogram.addCommand(listCommand);\nprogram.addCommand(addCommand);\nprogram.addCommand(removeCommand);\nprogram.addCommand(updateCommand);\nprogram.addCommand(doctorCommand);\nprogram.addCommand(configureAgentsCommand);\nprogram.addCommand(addAgentCommand);\nprogram.addCommand(removeAgentCommand);\nprogram.addCommand(listAgentsCommand);\nprogram.addCommand(migrateCommand);\nprogram.addCommand(listPresetsCommand);\nprogram.addCommand(useCommand);\nprogram.addCommand(validateCommand);\nprogram.addCommand(fixCommand);\nprogram.addCommand(upgradeCommand);\n\nprogram.parseAsync(process.argv).catch((err) => {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n","import { Command } from 'commander';\nimport { promptForConfig } from '../prompts/index.js';\nimport { runGenerators } from '../run-generators.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { logger } from '../../utils/logger.js';\nimport { runInstall } from '../../utils/install.js';\nimport { join, resolve } from 'node:path';\n\nfunction parseCsv(input?: string): string[] | undefined {\n if (!input) return undefined;\n return input.split(',').map((a) => a.trim()).filter(Boolean);\n}\n\nexport const createCommand = new Command('create')\n .argument('[project-name]', 'name of the project')\n .option('--preset <name>', 'use a preset config')\n .option('--no-install', 'skip dependency install')\n .option('--dry-run', 'print planned actions without writing files')\n .option('--ai-agents <list>', 'comma-separated list of AI agents to configure')\n .option('--features <list>', 'comma-separated list of features to include')\n .option('--yes', 'skip prompts and use defaults')\n .option('--no-prompts', 'alias for --yes')\n .option('--out-dir <path>', 'output directory (defaults to current working directory)')\n .action(async (projectName, options) => {\n logger.info('Starting StackForge create flow...');\n const skipPrompts = Boolean(options.yes || options.noPrompts);\n const config = await promptForConfig({ projectName, preset: options.preset, skipPrompts });\n if (options.aiAgents) {\n config.aiAgents = parseCsv(options.aiAgents) ?? [];\n }\n if (options.features) {\n config.features = parseCsv(options.features) ?? [];\n }\n validateConfig(config);\n validateCompatibility(config);\n validateDependencies(config);\n const ctx = {\n dryRun: Boolean(options.dryRun),\n log: (message: string) => logger.info(message)\n };\n const outDir = options.outDir ? resolve(options.outDir) : process.cwd();\n await runGenerators(outDir, config, ctx);\n if (options.install !== false && !options.dryRun) {\n const projectRoot = join(outDir, config.projectName);\n logger.info('Installing dependencies...');\n await runInstall(config.packageManager, projectRoot);\n }\n logger.info(`Project created: ${config.projectName}`);\n });\n","import inquirer from 'inquirer';\nimport type { PackageManager, StackforgeConfig } from '../../types/config.js';\nimport { detectPackageManager } from '../../utils/package-manager.js';\nimport { buildConfig } from '../config-builder.js';\nimport { defaultConfig } from '../defaults.js';\nimport { supported } from '../../utils/supported.js';\n\nconst displayNames: Record<string, string> = {\n // Frontend\n nextjs: 'Next.js',\n vite: 'Vite',\n // UI\n none: 'None',\n tailwind: 'Tailwind CSS',\n shadcn: 'shadcn/ui',\n mui: 'Material UI',\n chakra: 'Chakra UI',\n mantine: 'Mantine',\n antd: 'Ant Design',\n nextui: 'NextUI',\n // Database\n postgres: 'PostgreSQL',\n mysql: 'MySQL',\n sqlite: 'SQLite',\n mongodb: 'MongoDB',\n neon: 'Neon',\n supabase: 'Supabase',\n // ORM\n drizzle: 'Drizzle',\n prisma: 'Prisma',\n mongoose: 'Mongoose',\n typeorm: 'TypeORM',\n // Auth\n nextauth: 'NextAuth',\n clerk: 'Clerk',\n 'better-auth': 'Better Auth',\n // API\n rest: 'REST',\n trpc: 'tRPC',\n graphql: 'GraphQL',\n // Features\n email: 'Email (Resend)',\n storage: 'File Storage (Cloudinary)',\n payments: 'Payments (Stripe)',\n analytics: 'Analytics (PostHog)',\n 'error-tracking': 'Error Tracking (Sentry)'\n};\n\nfunction label(value: string): string {\n return displayNames[value] || value;\n}\n\nexport async function promptForConfig(input: {\n projectName?: string;\n preset?: string;\n skipPrompts?: boolean;\n}): Promise<StackforgeConfig> {\n if (input.skipPrompts) {\n const base = defaultConfig();\n const merged: StackforgeConfig = {\n ...base,\n projectName: input.projectName ?? base.projectName,\n preset: input.preset\n };\n return buildConfig(merged);\n }\n\n const detected = detectPackageManager(process.cwd());\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'projectName',\n message: 'Project name',\n default: input.projectName || 'my-app'\n },\n {\n type: 'list',\n name: 'packageManager',\n message: 'Package manager',\n choices: [\n { name: 'npm', value: 'npm' },\n { name: 'pnpm', value: 'pnpm' },\n { name: 'yarn', value: 'yarn' },\n { name: 'bun', value: 'bun' }\n ],\n default: detected || 'npm'\n },\n {\n type: 'list',\n name: 'frontend',\n message: 'Frontend framework',\n choices: supported.frontend.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'language',\n message: 'Language',\n choices: [\n { name: 'TypeScript', value: 'ts' },\n { name: 'JavaScript', value: 'js' }\n ]\n },\n {\n type: 'list',\n name: 'uiLibrary',\n message: 'UI library',\n choices: supported.ui.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'databaseProvider',\n message: 'Database provider',\n choices: supported.database.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'orm',\n message: 'ORM',\n when: (ans) => ans.databaseProvider !== 'none',\n choices: supported.orm.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'authProvider',\n message: 'Authentication',\n choices: supported.auth.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'list',\n name: 'apiType',\n message: 'API type',\n choices: supported.api.map((v) => ({ name: label(v), value: v }))\n },\n {\n type: 'checkbox',\n name: 'features',\n message: 'Additional features',\n choices: supported.features.map((v) => ({ name: label(v), value: v }))\n }\n ]);\n\n const base: StackforgeConfig = {\n projectName: answers.projectName,\n packageManager: answers.packageManager as PackageManager,\n frontend: { type: answers.frontend, language: answers.language },\n ui: { library: answers.uiLibrary },\n database: { provider: answers.databaseProvider, orm: answers.orm },\n auth: { provider: answers.authProvider },\n api: { type: answers.apiType },\n features: answers.features ?? [],\n aiAgents: [],\n preset: input.preset\n };\n\n return buildConfig(base);\n}\n","import { existsSync } from 'node:fs';\nimport { unlink } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { PackageManager } from '../types/config.js';\n\nexport const LOCKFILES: Array<{ pm: PackageManager; file: string }> = [\n { pm: 'pnpm', file: 'pnpm-lock.yaml' },\n { pm: 'yarn', file: 'yarn.lock' },\n { pm: 'bun', file: 'bun.lockb' },\n { pm: 'npm', file: 'package-lock.json' }\n];\n\nexport function detectPackageManager(cwd: string): PackageManager | null {\n for (const entry of LOCKFILES) {\n if (existsSync(join(cwd, entry.file))) {\n return entry.pm;\n }\n }\n return null;\n}\n\nexport async function removeLockfiles(cwd: string): Promise<void> {\n for (const entry of LOCKFILES) {\n const target = join(cwd, entry.file);\n if (existsSync(target)) {\n await unlink(target);\n }\n }\n}\n","import type { StackforgeConfig } from '../types/config.js';\n\nexport type PresetName = 'starter' | 'saas' | 'ecommerce' | 'blog' | 'api';\n\nconst presets: Record<PresetName, Partial<StackforgeConfig>> = {\n starter: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'drizzle' },\n auth: { provider: 'none' },\n api: { type: 'trpc' },\n features: []\n },\n saas: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'prisma' },\n auth: { provider: 'nextauth' },\n api: { type: 'trpc' },\n features: ['email', 'payments']\n },\n ecommerce: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'postgres', orm: 'prisma' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: ['payments', 'storage']\n },\n blog: {\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'tailwind' },\n database: { provider: 'sqlite', orm: 'prisma' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: ['storage']\n },\n api: {\n frontend: { type: 'vite', language: 'ts' },\n ui: { library: 'none' },\n database: { provider: 'postgres', orm: 'drizzle' },\n auth: { provider: 'none' },\n api: { type: 'rest' },\n features: []\n }\n};\n\nexport const presetNames: PresetName[] = Object.keys(presets) as PresetName[];\n\nexport function getPreset(name: string | undefined): Partial<StackforgeConfig> | null {\n if (!name) return null;\n return presets[name as PresetName] ?? null;\n}","import type { StackforgeConfig } from '../types/config.js';\nimport { getPreset } from '../presets/index.js';\n\nexport function buildConfig(base: StackforgeConfig): StackforgeConfig {\n const preset = getPreset(base.preset);\n const merged: StackforgeConfig = preset\n ? {\n ...base,\n ...preset,\n frontend: preset.frontend ?? base.frontend,\n ui: preset.ui ?? base.ui,\n database: preset.database ?? base.database,\n auth: preset.auth ?? base.auth,\n api: preset.api ?? base.api,\n features: preset.features ?? base.features,\n aiAgents: preset.aiAgents ?? base.aiAgents\n }\n : base;\n\n if (merged.ui.library === 'shadcn') {\n // Ensure Tailwind base requirements are satisfied by generator/deps.\n merged.ui = { library: 'shadcn' };\n }\n\n return merged;\n}","import type { StackforgeConfig } from '../../types/config.js';\n\nexport function defaultConfig(): StackforgeConfig {\n return {\n projectName: 'my-app',\n packageManager: 'npm',\n frontend: { type: 'nextjs', language: 'ts' },\n ui: { library: 'none' },\n database: { provider: 'none' },\n auth: { provider: 'none' },\n api: { type: 'none' },\n features: [],\n aiAgents: []\n };\n}","export const supported = {\n frontend: ['nextjs', 'vite'] as const,\n ui: ['none', 'tailwind', 'shadcn', 'mui', 'chakra', 'mantine', 'antd', 'nextui'] as const,\n database: ['none', 'postgres', 'mysql', 'sqlite', 'mongodb', 'neon', 'supabase'] as const,\n orm: ['drizzle', 'prisma', 'mongoose', 'typeorm'] as const,\n auth: ['none', 'nextauth', 'clerk', 'better-auth', 'supabase'] as const,\n api: ['none', 'rest', 'trpc', 'graphql'] as const,\n agents: ['claude', 'copilot', 'codex', 'gemini', 'cursor', 'codeium', 'windsurf', 'tabnine'] as const,\n features: ['email', 'storage', 'payments', 'analytics', 'error-tracking'] as const\n};\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, writeTextFile } from '../../utils/file-system.js';\nimport { collectScripts } from '../scripts/scripts-registry.js';\nimport { collectDependencies } from '../deps/deps-registry.js';\nimport { buildProjectReadme } from './readme.js';\nimport type { GeneratorContext } from '../context.js';\nimport { writeProjectConfig } from '../../utils/project-config.js';\n\nconst GITIGNORE_CONTENT = `node_modules/\n.next/\ndist/\n.env\n.env.local\n.env.*.local\n.DS_Store\n`;\n\nconst EDITORCONFIG_CONTENT = `root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 2\n`;\n\ninterface PackageJson {\n name: string;\n version: string;\n private: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nexport async function createProjectSkeleton(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n await ensureDir(projectRoot, ctx);\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(projectRoot, 'README.md'), readme + '\\n', ctx);\n\n const envExample = `# Environment Variables\\n`;\n await writeTextFile(join(projectRoot, '.env.example'), envExample, ctx);\n await writeTextFile(join(projectRoot, '.gitignore'), GITIGNORE_CONTENT, ctx);\n await writeTextFile(join(projectRoot, '.editorconfig'), EDITORCONFIG_CONTENT, ctx);\n\n const pkg: PackageJson = {\n name: config.projectName,\n version: '0.0.0',\n private: true\n };\n\n const featureScripts = collectScripts(config);\n const featureDeps = collectDependencies(config);\n\n if (Object.keys(featureScripts).length > 0) {\n pkg.scripts = featureScripts;\n }\n pkg.dependencies = featureDeps.dependencies;\n pkg.devDependencies = featureDeps.devDependencies;\n\n await writeTextFile(join(projectRoot, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', ctx);\n\n if (!ctx?.dryRun) {\n await writeProjectConfig(projectRoot, config);\n }\n\n if (config.frontend.language === 'ts') {\n const tsconfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'Bundler',\n strict: true,\n jsx: 'preserve',\n baseUrl: '.',\n paths: {\n '@/*': ['src/*']\n },\n esModuleInterop: true,\n resolveJsonModule: true,\n incremental: true,\n noEmit: true,\n forceConsistentCasingInFileNames: true,\n skipLibCheck: true\n },\n include: ['src', 'app']\n };\n\n await writeTextFile(join(projectRoot, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', ctx);\n }\n}\n","import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { GeneratorContext } from '../generators/context.js';\n\nexport async function ensureDir(path: string, ctx?: GeneratorContext): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: mkdir ${path}`);\n return;\n }\n await mkdir(path, { recursive: true });\n}\n\nexport async function writeTextFile(\n path: string,\n content: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: write ${path}`);\n return;\n }\n await ensureDir(dirname(path), ctx);\n await writeFile(path, content, 'utf8');\n}\n\nexport async function readTextFile(path: string): Promise<string> {\n return readFile(path, 'utf8');\n}\n\nexport async function removePath(path: string, ctx?: GeneratorContext): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: remove ${path}`);\n return;\n }\n await rm(path, { recursive: true, force: true });\n}","import type { StackforgeConfig } from '../types/config.js';\n\nexport type ScriptMap = Record<string, string>;\n\nexport function collectScripts(config: StackforgeConfig): ScriptMap {\n const scripts: ScriptMap = {};\n\n if (config.frontend.type === 'nextjs') {\n scripts['dev'] = 'next dev';\n scripts['build'] = 'next build';\n scripts['start'] = 'next start';\n scripts['lint'] = 'next lint';\n }\n\n if (config.frontend.type === 'vite') {\n scripts['dev'] = 'vite';\n scripts['build'] = 'vite build';\n scripts['preview'] = 'vite preview';\n\n if (config.api.type === 'rest' || config.api.type === 'graphql' || config.api.type === 'trpc') {\n scripts['api:dev'] = config.frontend.language === 'ts' ? 'tsx src/server/index.ts' : 'node src/server/index.js';\n }\n }\n\n if (config.ui.library === 'tailwind') {\n scripts['css:build'] = 'npx tailwindcss -i ./src/styles.css -o ./dist/styles.css';\n scripts['css:watch'] = 'npx tailwindcss -i ./src/styles.css -o ./dist/styles.css --watch';\n }\n\n if (config.database.orm === 'drizzle') {\n scripts['db:generate'] = 'npx drizzle-kit generate';\n scripts['db:migrate'] = 'npx drizzle-kit migrate';\n }\n\n if (config.database.orm === 'prisma') {\n scripts['db:generate'] = 'npx prisma generate';\n scripts['db:migrate'] = 'npx prisma migrate dev';\n scripts['db:studio'] = 'npx prisma studio';\n }\n\n if (config.ui.library === 'shadcn') {\n scripts['ui:add'] = 'npx shadcn-ui@latest add';\n }\n\n if (config.database.orm === 'typeorm') {\n scripts['db:generate'] = 'npx typeorm migration:generate';\n scripts['db:migrate'] = 'npx typeorm migration:run';\n }\n\n return scripts;\n}\n","export const versions = {\n next: '^16.0.10',\n react: '^19.0.0',\n reactDom: '^19.0.0',\n vite: '^6.0.0',\n viteReactSwc: '^3.5.0',\n typescript: '^5.5.4',\n typesReact: '^19.0.0',\n typesReactDom: '^19.0.0',\n typesNode: '^20.14.10',\n tsx: '^4.16.5',\n tailwindcss: '^3.4.0',\n postcss: '^8.4.0',\n autoprefixer: '^10.4.0',\n cva: '^0.7.0',\n clsx: '^2.1.1',\n tailwindMerge: '^2.4.0',\n muiMaterial: '^5.16.0',\n muiEmotionReact: '^11.13.0',\n muiEmotionStyled: '^11.13.0',\n chakraUi: '^2.8.2',\n chakraEmotionReact: '^11.11.0',\n chakraEmotionStyled: '^11.11.0',\n chakraFramerMotion: '^11.11.0',\n mantineCore: '^7.12.0',\n mantineHooks: '^7.12.0',\n mantineDates: '^7.12.0',\n mantineNotifications: '^7.12.0',\n antd: '^5.20.0',\n nextui: '^2.4.6',\n drizzleOrm: '^0.36.0',\n drizzleKit: '^0.24.0',\n prisma: '^5.17.0',\n prismaClient: '^5.17.0',\n mongoose: '^8.5.0',\n typeorm: '^0.3.20',\n reflectMetadata: '^0.2.2',\n pg: '^8.12.0',\n typesPg: '^8.11.10',\n mysql2: '^3.10.0',\n betterSqlite3: '^9.4.0',\n neonServerless: '^0.9.5',\n nextAuth: '^4.24.0',\n clerkNext: '^5.0.0',\n supabaseJs: '^2.45.0',\n supabaseSsr: '^0.5.2',\n trpcServer: '^10.45.0',\n trpcClient: '^10.45.0',\n trpcReactQuery: '^10.45.0',\n tanstackQuery: '^4.18.0',\n zod: '^3.23.0',\n graphql: '^16.9.0',\n graphqlRequest: '^6.1.0',\n graphqlYoga: '^5.7.0',\n mongodb: '^6.8.0',\n betterAuth: '^1.2.0',\n resend: '^3.5.0',\n sendgrid: '^8.1.0',\n nodemailer: '^6.9.0',\n typesNodemailer: '^6.4.0',\n awsSes: '^3.700.0',\n cloudinary: '^2.0.0',\n awsS3: '^3.700.0',\n vercelBlob: '^0.24.0',\n stripe: '^14.0.0',\n paypal: '^1.0.0',\n razorpay: '^2.9.0',\n posthog: '^1.165.0',\n reactGa4: '^2.1.0',\n vercelAnalytics: '^1.3.0',\n sentryNext: '^8.35.0',\n logrocket: '^8.1.0'\n} as const;\n","import type { StackforgeConfig } from '../types/config.js';\nimport { versions } from '../../utils/versions.js';\n\nexport interface DependencyResult {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n}\n\nexport function collectDependencies(config: StackforgeConfig): DependencyResult {\n const dependencies: Record<string, string> = {};\n const devDependencies: Record<string, string> = {};\n\n if (config.frontend.type === 'nextjs') {\n dependencies['next'] = versions.next;\n dependencies['react'] = versions.react;\n dependencies['react-dom'] = versions.reactDom;\n }\n\n if (config.frontend.type === 'vite') {\n dependencies['react'] = versions.react;\n dependencies['react-dom'] = versions.reactDom;\n devDependencies['vite'] = versions.vite;\n devDependencies['@vitejs/plugin-react-swc'] = versions.viteReactSwc;\n\n if ((config.api.type === 'rest' || config.api.type === 'graphql') && config.frontend.language === 'ts') {\n devDependencies['tsx'] = versions.tsx;\n devDependencies['@types/node'] = versions.typesNode;\n }\n }\n\n if (config.frontend.language === 'ts') {\n devDependencies['typescript'] = versions.typescript;\n devDependencies['@types/react'] = versions.typesReact;\n devDependencies['@types/react-dom'] = versions.typesReactDom;\n }\n\n if (config.ui.library === 'tailwind' || config.ui.library === 'shadcn') {\n devDependencies['tailwindcss'] = versions.tailwindcss;\n devDependencies['postcss'] = versions.postcss;\n devDependencies['autoprefixer'] = versions.autoprefixer;\n }\n\n if (config.ui.library === 'shadcn') {\n dependencies['class-variance-authority'] = versions.cva;\n dependencies['clsx'] = versions.clsx;\n dependencies['tailwind-merge'] = versions.tailwindMerge;\n }\n\n if (config.ui.library === 'mui') {\n dependencies['@mui/material'] = versions.muiMaterial;\n dependencies['@emotion/react'] = versions.muiEmotionReact;\n dependencies['@emotion/styled'] = versions.muiEmotionStyled;\n }\n\n if (config.ui.library === 'chakra') {\n dependencies['@chakra-ui/react'] = versions.chakraUi;\n dependencies['@emotion/react'] = versions.chakraEmotionReact;\n dependencies['@emotion/styled'] = versions.chakraEmotionStyled;\n dependencies['framer-motion'] = versions.chakraFramerMotion;\n }\n\n if (config.ui.library === 'mantine') {\n dependencies['@mantine/core'] = versions.mantineCore;\n dependencies['@mantine/hooks'] = versions.mantineHooks;\n dependencies['@mantine/dates'] = versions.mantineDates;\n dependencies['@mantine/notifications'] = versions.mantineNotifications;\n }\n\n if (config.ui.library === 'antd') {\n dependencies['antd'] = versions.antd;\n }\n\n if (config.ui.library === 'nextui') {\n dependencies['@nextui-org/react'] = versions.nextui;\n }\n\n if (config.database.provider === 'postgres' || config.database.provider === 'neon' || config.database.provider === 'supabase') {\n dependencies['pg'] = versions.pg;\n if (config.frontend.language === 'ts') {\n devDependencies['@types/pg'] = versions.typesPg;\n }\n }\n\n if (config.database.provider === 'mysql') {\n dependencies['mysql2'] = versions.mysql2;\n }\n\n if (config.database.provider === 'sqlite') {\n dependencies['better-sqlite3'] = versions.betterSqlite3;\n }\n\n if (config.database.provider === 'mongodb') {\n dependencies['mongodb'] = versions.mongodb;\n }\n\n if (config.database.provider === 'neon') {\n dependencies['@neondatabase/serverless'] = versions.neonServerless;\n }\n\n if (config.database.provider === 'supabase') {\n dependencies['@supabase/supabase-js'] = versions.supabaseJs;\n }\n\n if (config.database.orm === 'drizzle') {\n dependencies['drizzle-orm'] = versions.drizzleOrm;\n devDependencies['drizzle-kit'] = versions.drizzleKit;\n }\n\n if (config.database.orm === 'prisma') {\n devDependencies['prisma'] = versions.prisma;\n dependencies['@prisma/client'] = versions.prismaClient;\n }\n\n if (config.database.orm === 'mongoose') {\n dependencies['mongoose'] = versions.mongoose;\n }\n\n if (config.database.orm === 'typeorm') {\n dependencies['typeorm'] = versions.typeorm;\n dependencies['reflect-metadata'] = versions.reflectMetadata;\n }\n\n if (config.auth.provider === 'nextauth') {\n dependencies['next-auth'] = versions.nextAuth;\n }\n\n if (config.auth.provider === 'clerk') {\n dependencies['@clerk/nextjs'] = versions.clerkNext;\n }\n\n if (config.auth.provider === 'better-auth') {\n dependencies['better-auth'] = versions.betterAuth;\n }\n\n if (config.auth.provider === 'supabase') {\n dependencies['@supabase/supabase-js'] = versions.supabaseJs;\n if (config.frontend.type === 'nextjs') {\n dependencies['@supabase/ssr'] = versions.supabaseSsr;\n }\n }\n\n if (config.api.type === 'trpc') {\n dependencies['@trpc/server'] = versions.trpcServer;\n dependencies['@trpc/client'] = versions.trpcClient;\n dependencies['@trpc/react-query'] = versions.trpcReactQuery;\n dependencies['@tanstack/react-query'] = versions.tanstackQuery;\n dependencies['zod'] = versions.zod;\n if (config.frontend.type === 'vite') {\n devDependencies['tsx'] = versions.tsx;\n devDependencies['@types/node'] = versions.typesNode;\n }\n }\n\n if (config.api.type === 'graphql') {\n dependencies['graphql'] = versions.graphql;\n dependencies['graphql-request'] = versions.graphqlRequest;\n dependencies['graphql-yoga'] = versions.graphqlYoga;\n }\n\n if (config.features.includes('email')) {\n dependencies['resend'] = versions.resend;\n }\n\n if (config.features.includes('storage')) {\n dependencies['cloudinary'] = versions.cloudinary;\n }\n\n if (config.features.includes('payments')) {\n dependencies['stripe'] = versions.stripe;\n }\n\n if (config.features.includes('analytics')) {\n dependencies['posthog-js'] = versions.posthog;\n }\n\n if (config.features.includes('error-tracking') && config.frontend.type === 'nextjs') {\n dependencies['@sentry/nextjs'] = versions.sentryNext;\n }\n\n return { dependencies, devDependencies };\n}\n","import type { StackforgeConfig } from '../types/config.js';\n\nfunction formatDb(config: StackforgeConfig): string {\n if (config.database.provider === 'none') return 'none';\n return `${config.database.provider}${config.database.orm ? ` (${config.database.orm})` : ''}`;\n}\n\nfunction getDevCommand(config: StackforgeConfig): string {\n if (config.frontend.type === 'vite' && (config.api.type === 'rest' || config.api.type === 'graphql')) {\n return 'npm run dev (frontend) + npm run api:dev (API)';\n }\n return 'npm run dev';\n}\n\nfunction formatFeatures(config: StackforgeConfig): string {\n if (!config.features || config.features.length === 0) return 'none';\n return config.features.join(', ');\n}\n\nexport function buildProjectReadme(config: StackforgeConfig): string {\n const featureLinks = config.features\n .map((f) => `- features/${f}/README.md`)\n .join('\\n');\n\n return `# ${config.projectName}\n\nGenerated by StackForge.\n\n## Stack\n- Frontend: ${config.frontend.type} (${config.frontend.language})\n- UI: ${config.ui.library}\n- Database: ${formatDb(config)}\n- Auth: ${config.auth.provider}\n- API: ${config.api.type}\n- Features: ${formatFeatures(config)}\n\n## Commands\n- Install: ${config.packageManager} install\n- Dev: ${getDevCommand(config)}\n\n${config.features.length ? `## Feature Docs\\n${featureLinks}\\n` : ''}\n## Notes\n- Update .env values before running in production.\n`;\n}","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { STACKFORGE_SCHEMA_VERSION } from './schema.js';\nimport type { StackforgeProjectFile } from './migrations.js';\nimport { migrateConfig } from './migrations.js';\n\nexport async function writeProjectConfig(root: string, config: StackforgeConfig): Promise<void> {\n const path = join(root, 'stackforge.json');\n const payload: StackforgeProjectFile = { ...config, _schemaVersion: STACKFORGE_SCHEMA_VERSION };\n await writeFile(path, JSON.stringify(payload, null, 2) + '\\n', 'utf8');\n}\n\nexport async function readProjectConfig(root: string): Promise<StackforgeConfig> {\n const path = join(root, 'stackforge.json');\n const raw = await readFile(path, 'utf8');\n const parsed = JSON.parse(raw) as StackforgeProjectFile;\n const migrated = migrateConfig(parsed);\n if (migrated._schemaVersion !== parsed._schemaVersion) {\n await writeFile(path, JSON.stringify(migrated, null, 2) + '\\n', 'utf8');\n }\n return migrated as StackforgeConfig;\n}","export const STACKFORGE_SCHEMA_VERSION = 1;","import { STACKFORGE_SCHEMA_VERSION } from './schema.js';\nimport type { StackforgeConfig } from '../types/config.js';\n\nexport interface StackforgeProjectFile extends StackforgeConfig {\n _schemaVersion?: number;\n}\n\nexport function migrateConfig(input: StackforgeProjectFile): StackforgeProjectFile {\n let current = input._schemaVersion ?? 0;\n let config: StackforgeProjectFile = { ...input };\n\n if (current < 1) {\n config = { ...config, _schemaVersion: 1 };\n current = 1;\n }\n\n if (current !== STACKFORGE_SCHEMA_VERSION) {\n config._schemaVersion = STACKFORGE_SCHEMA_VERSION;\n }\n\n return config;\n}","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, writeTextFile, readTextFile } from '../../utils/file-system.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport type { GeneratorContext } from '../context.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateDatabaseFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = TEMPLATES_DIR;\n\n if (config.database.provider !== 'none') {\n const envPath = join(projectRoot, '.env.example');\n if (config.database.provider === 'mongodb') {\n await appendEnvLine(envPath, 'MONGODB_URI=\"\"', ctx);\n } else {\n await appendEnvLine(envPath, 'DATABASE_URL=\"\"', ctx);\n }\n if (config.database.provider === 'neon') {\n await appendEnvLine(envPath, 'NEON_API_KEY=\"\"', ctx);\n await appendEnvLine(envPath, 'NEON_PROJECT_ID=\"\"', ctx);\n const providerDir = join(projectRoot, 'database');\n await ensureDir(providerDir, ctx);\n const providerReadme = await readTextFile(join(templatesRoot, 'database', 'providers', 'neon.README.md'));\n await writeTextFile(join(providerDir, 'README.md'), providerReadme, ctx);\n }\n if (config.database.provider === 'supabase') {\n await appendEnvLine(envPath, 'SUPABASE_URL=\"\"', ctx);\n await appendEnvLine(envPath, 'SUPABASE_ANON_KEY=\"\"', ctx);\n const providerDir = join(projectRoot, 'database');\n await ensureDir(providerDir, ctx);\n const providerReadme = await readTextFile(join(templatesRoot, 'database', 'providers', 'supabase.README.md'));\n await writeTextFile(join(providerDir, 'README.md'), providerReadme, ctx);\n }\n }\n\n if (config.database.orm === 'drizzle') {\n const drizzleDir = join(projectRoot, 'drizzle');\n await ensureDir(drizzleDir, ctx);\n const configContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', 'drizzle.config.ts'));\n const schemaContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', 'schema.ts'));\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const clientContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', `client.${ext}`));\n const exampleContent = await readTextFile(join(templatesRoot, 'database', 'drizzle', `example.${ext}`));\n await writeTextFile(join(projectRoot, 'drizzle.config.ts'), configContent, ctx);\n await writeTextFile(join(drizzleDir, 'schema.ts'), schemaContent, ctx);\n await writeTextFile(join(drizzleDir, `client.${ext}`), clientContent, ctx);\n await writeTextFile(join(drizzleDir, `example.${ext}`), exampleContent, ctx);\n }\n\n if (config.database.orm === 'prisma') {\n const prismaDir = join(projectRoot, 'prisma');\n await ensureDir(prismaDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'database', 'prisma', 'schema.prisma'));\n await writeTextFile(join(prismaDir, 'schema.prisma'), schema, ctx);\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const client = await readTextFile(join(templatesRoot, 'database', 'prisma', `client.${ext}`));\n const example = await readTextFile(join(templatesRoot, 'database', 'prisma', `example.${ext}`));\n await writeTextFile(join(dbDir, `prisma.${ext}`), client, ctx);\n await writeTextFile(join(dbDir, `prisma-example.${ext}`), example, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `prisma-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'mongoose') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const connection = await readTextFile(join(templatesRoot, 'database', 'mongoose', `connection.${ext}`));\n const model = await readTextFile(join(templatesRoot, 'database', 'mongoose', `model.${ext}`));\n await writeTextFile(join(dbDir, `mongoose.${ext}`), connection, ctx);\n await writeTextFile(join(dbDir, `mongoose-model.${ext}`), model, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `mongoose-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'typeorm') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const template = await readTextFile(join(templatesRoot, 'database', 'typeorm', `data-source.${ext}`));\n const typeormType =\n config.database.provider === 'mysql'\n ? 'mysql'\n : config.database.provider === 'sqlite'\n ? 'sqlite'\n : 'postgres';\n const migrationsPath = config.frontend.language === 'ts' ? 'migrations/*.ts' : 'migrations/*.js';\n const content = template.replace('{{typeormType}}', typeormType).replace('{{migrationsPath}}', migrationsPath);\n await writeTextFile(join(dbDir, `data-source.${ext}`), content, ctx);\n const entitiesDir = join(dbDir, 'entities');\n await ensureDir(entitiesDir, ctx);\n const entity = await readTextFile(join(templatesRoot, 'database', 'typeorm', `entity.${ext}`));\n await writeTextFile(join(entitiesDir, `User.${ext}`), entity, ctx);\n const migrationsDir = join(dbDir, 'migrations');\n await ensureDir(migrationsDir, ctx);\n const migrationReadme = await readTextFile(join(templatesRoot, 'database', 'typeorm', 'migrations', 'README.md'));\n await writeTextFile(join(migrationsDir, 'README.md'), migrationReadme, ctx);\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `typeorm-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n\n if (config.database.orm === 'drizzle') {\n const dbDir = join(projectRoot, 'src', 'db');\n await ensureDir(dbDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const usage = await readTextFile(join(templatesRoot, 'database', 'usage', `drizzle-users.${ext}`));\n await writeTextFile(join(dbDir, `users.${ext}`), usage, ctx);\n }\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { ensureDir } from './file-system.js';\nimport { dirname } from 'node:path';\nimport type { GeneratorContext } from '../generators/context.js';\n\nexport async function appendEnvLine(\n path: string,\n line: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: append ${path} -> ${line}`);\n return;\n }\n await ensureDir(dirname(path), ctx);\n let existing = '';\n try {\n existing = await readFile(path, 'utf8');\n } catch {\n existing = '';\n }\n\n const normalized = existing.endsWith('\\n') || existing.length === 0 ? existing : existing + '\\n';\n const content = normalized + line + (line.endsWith('\\n') ? '' : '\\n');\n await writeFile(path, content, 'utf8');\n}\n\nexport async function removeEnvKey(\n path: string,\n key: string,\n ctx?: GeneratorContext\n): Promise<void> {\n if (ctx?.dryRun) {\n ctx.log(`dry-run: remove env ${key} from ${path}`);\n return;\n }\n let existing = '';\n try {\n existing = await readFile(path, 'utf8');\n } catch {\n return;\n }\n const lines = existing.split(/\\r?\\n/);\n const filtered = lines.filter((line) => {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) return true;\n return !trimmed.startsWith(`${key}=`);\n });\n await writeFile(path, filtered.join('\\n'), 'utf8');\n}","import { dirname, join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Resolves the templates directory reliably, whether running from:\n * - Source: `tsx src/cli.ts` (import.meta.url = src/cli.ts)\n * - Bundle: `node dist/cli.js` (import.meta.url = dist/cli.js)\n *\n * Walks up from the current file's directory until it finds package.json,\n * then resolves templates/ from there.\n */\nfunction findPackageRoot(): string {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 10; i++) {\n if (existsSync(join(dir, 'package.json'))) {\n return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error('Could not find package root (package.json)');\n}\n\nexport const TEMPLATES_DIR = join(findPackageRoot(), 'templates');\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { applyTemplate } from '../templates/template-engine.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateFrontendFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = TEMPLATES_DIR;\n\n if (config.frontend.type === 'nextjs') {\n const appDir = join(projectRoot, 'app');\n await ensureDir(appDir, ctx);\n\n const uiCssImports = buildUiCssImports(config, 'nextjs');\n const importCss = uiCssImports.length ? uiCssImports.join('') + '\\n' : '';\n const hasTrpc = config.api.type === 'trpc';\n const hasUiProvider = requiresUiProvider(config);\n const hasProviders = hasTrpc || hasUiProvider;\n const providersImport = hasProviders ? \"import { Providers } from './providers';\\n\" : '';\n const wrapChildren = hasProviders ? '<Providers>{children}</Providers>' : '{children}';\n\n const layoutTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'layout.tsx' : 'layout.jsx'\n );\n const pageTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'\n );\n const actionsTemplatePath = join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'actions.ts' : 'actions.js'\n );\n const nextConfigTemplatePath = join(\n templatesRoot,\n 'nextjs',\n config.frontend.language === 'ts' ? 'next.config.ts' : 'next.config.js'\n );\n\n const layoutTemplate = await readTextFile(layoutTemplatePath);\n const pageTemplate = await readTextFile(pageTemplatePath);\n const examplesTemplate = await readTextFile(\n join(\n templatesRoot,\n 'nextjs',\n 'app',\n config.frontend.language === 'ts' ? 'examples-page.tsx' : 'examples-page.jsx'\n )\n );\n const nextConfigTemplate = await readTextFile(nextConfigTemplatePath);\n const actionsTemplate = await readTextFile(actionsTemplatePath);\n\n const layout = applyTemplate(layoutTemplate, {\n importCss,\n providersImport,\n wrapChildren\n });\n const links = buildPageLinks(config);\n const page = applyTemplate(pageTemplate, { projectName: config.projectName, links });\n\n await writeTextFile(\n join(projectRoot, config.frontend.language === 'ts' ? 'next.config.ts' : 'next.config.js'),\n nextConfigTemplate,\n ctx\n );\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'layout.tsx' : 'layout.jsx'), layout, ctx);\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'), page, ctx);\n await writeTextFile(join(appDir, config.frontend.language === 'ts' ? 'actions.ts' : 'actions.js'), actionsTemplate, ctx);\n\n if (config.api.type !== 'none') {\n const examplesDir = join(appDir, 'examples');\n await ensureDir(examplesDir, ctx);\n const { imports, components } = buildApiExamples(config, 'nextjs');\n const featureNotes = buildFeatureNotes(config);\n const { uiDemoImport, uiDemoComponent } = buildUiDemoTokens(config, 'nextjs');\n const examplesPage = applyTemplate(examplesTemplate, {\n imports,\n components,\n featureNotes,\n uiDemoImport,\n uiDemoComponent\n });\n await writeTextFile(\n join(examplesDir, config.frontend.language === 'ts' ? 'page.tsx' : 'page.jsx'),\n examplesPage,\n ctx\n );\n }\n\n if (hasProviders) {\n const providers = buildProvidersComponent(config, 'nextjs');\n await writeTextFile(\n join(appDir, config.frontend.language === 'ts' ? 'providers.tsx' : 'providers.jsx'),\n providers,\n ctx\n );\n }\n }\n\n if (config.frontend.type === 'vite') {\n const srcDir = join(projectRoot, 'src');\n await ensureDir(srcDir, ctx);\n\n const uiCssImports = buildUiCssImports(config, 'vite');\n const cssImport = uiCssImports.length ? uiCssImports.join('') : '';\n const ext = config.frontend.language === 'ts' ? 'tsx' : 'jsx';\n const mainTemplatePath = join(templatesRoot, 'vite', config.frontend.language === 'ts' ? 'main.tsx' : 'main.jsx');\n const appTemplatePath = join(templatesRoot, 'vite', config.frontend.language === 'ts' ? 'App.tsx' : 'App.jsx');\n const indexTemplatePath = join(templatesRoot, 'vite', 'index.html');\n const viteConfigTemplatePath = join(templatesRoot, 'vite', 'vite.config.ts');\n const viteEnvTemplatePath = join(templatesRoot, 'vite', 'vite-env.d.ts');\n\n const mainTemplate = await readTextFile(mainTemplatePath);\n const appTemplate = await readTextFile(appTemplatePath);\n const indexTemplate = await readTextFile(indexTemplatePath);\n const viteConfigTemplate = await readTextFile(viteConfigTemplatePath);\n const viteEnvTemplate = await readTextFile(viteEnvTemplatePath);\n\n const hasTrpc = config.api.type === 'trpc';\n const hasUiProvider = requiresUiProvider(config);\n const hasProviders = hasTrpc || hasUiProvider;\n const providersImport = hasProviders ? \"import { Providers } from './providers';\\n\" : '';\n const wrapApp = hasProviders ? '<Providers><App /></Providers>' : '<App />';\n\n const { initImports, initCalls } = buildFeatureInit(config, 'vite');\n const main = applyTemplate(mainTemplate, {\n importCss: cssImport,\n providersImport,\n wrapApp,\n initImports,\n initCalls\n });\n const { imports, components } = buildApiExamples(config, 'vite');\n const featureNotes = buildFeatureNotes(config);\n const { uiDemoImport, uiDemoComponent } = buildUiDemoTokens(config, 'vite');\n const apiImports = imports ? imports + '\\n' : '';\n const apiExamples = components || '';\n const app = applyTemplate(appTemplate, {\n projectName: config.projectName,\n apiImports,\n apiExamples,\n featureNotes,\n uiDemoImport,\n uiDemoComponent\n });\n const indexHtml = applyTemplate(indexTemplate, { projectName: config.projectName, ext });\n\n await writeTextFile(join(projectRoot, 'index.html'), indexHtml, ctx);\n await writeTextFile(join(projectRoot, 'vite.config.ts'), viteConfigTemplate, ctx);\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'main.tsx' : 'main.jsx'), main, ctx);\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'App.tsx' : 'App.jsx'), app, ctx);\n if (config.frontend.language === 'ts') {\n await writeTextFile(join(srcDir, 'vite-env.d.ts'), viteEnvTemplate, ctx);\n }\n await appendEnvLine(join(projectRoot, '.env.example'), 'VITE_API_URL=\"http://localhost:3001\"', ctx);\n\n if (hasProviders) {\n const providers = buildProvidersComponent(config, 'vite');\n await writeTextFile(join(srcDir, config.frontend.language === 'ts' ? 'providers.tsx' : 'providers.jsx'), providers, ctx);\n }\n }\n}\n\nfunction buildUiCssImports(config: StackforgeConfig, target: 'nextjs' | 'vite'): string[] {\n const imports: string[] = [];\n const tailwindPath = target === 'nextjs' ? \"../src/styles.css\" : \"./styles.css\";\n if (config.ui.library === 'tailwind') {\n imports.push(`import '${tailwindPath}';\\n`);\n }\n if (config.ui.library === 'mantine') {\n imports.push(\"import '@mantine/core/styles.css';\\n\");\n imports.push(\"import '@mantine/dates/styles.css';\\n\");\n imports.push(\"import '@mantine/notifications/styles.css';\\n\");\n }\n if (config.ui.library === 'antd') {\n imports.push(\"import 'antd/dist/reset.css';\\n\");\n }\n return imports;\n}\n\nfunction requiresUiProvider(config: StackforgeConfig): boolean {\n return ['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(config.ui.library);\n}\n\nfunction buildProvidersComponent(config: StackforgeConfig, target: 'nextjs' | 'vite'): string {\n const hasTrpc = config.api.type === 'trpc';\n const ui = config.ui.library;\n const needsTheme = ['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(ui);\n const isTypescript = config.frontend.language === 'ts';\n const hasFeatureInit = config.features.includes('analytics') || config.features.includes('error-tracking');\n const themeImportPath = target === 'nextjs' ? '../src/theme' : './theme';\n\n const imports: string[] = [];\n const lines: string[] = [];\n\n if (target === 'nextjs') {\n lines.push('\"use client\";\\n');\n }\n\n if (hasTrpc && isTypescript) {\n imports.push(\"import type React from 'react';\");\n imports.push(\"import { useState, useEffect } from 'react';\");\n } else if (hasTrpc) {\n imports.push(\"import { useState, useEffect } from 'react';\");\n } else if (isTypescript) {\n imports.push(\"import type React from 'react';\");\n if (hasFeatureInit) {\n imports.push(\"import { useEffect } from 'react';\");\n }\n } else if (hasFeatureInit) {\n imports.push(\"import { useEffect } from 'react';\");\n }\n\n if (hasTrpc) {\n imports.push(\"import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\");\n }\n\n if (ui === 'mui') {\n imports.push(\"import { ThemeProvider, CssBaseline } from '@mui/material';\");\n }\n if (ui === 'chakra') {\n imports.push(\"import { ChakraProvider } from '@chakra-ui/react';\");\n }\n if (ui === 'mantine') {\n imports.push(\"import { MantineProvider } from '@mantine/core';\");\n }\n if (ui === 'antd') {\n imports.push(\"import { ConfigProvider } from 'antd';\");\n }\n if (ui === 'nextui') {\n imports.push(\"import { NextUIProvider } from '@nextui-org/react';\");\n }\n if (needsTheme) {\n imports.push(`import { theme } from '${themeImportPath}';`);\n }\n if (config.features.includes('analytics')) {\n const analyticsPath = target === 'nextjs' ? '../src/lib/posthog' : './lib/posthog';\n imports.push(`import { initPosthog } from '${analyticsPath}';`);\n }\n if (config.features.includes('error-tracking')) {\n const sentryPath = target === 'nextjs' ? '../src/lib/sentry' : './lib/sentry';\n imports.push(`import { initSentry } from '${sentryPath}';`);\n }\n\n lines.push(imports.join('\\n') + '\\n');\n\n const propsType = isTypescript ? ': { children: React.ReactNode }' : '';\n lines.push(`export function Providers({ children }${propsType}) {\\n`);\n\n if (hasTrpc) {\n lines.push(' const [client] = useState(() => new QueryClient());\\n\\n');\n }\n if (hasFeatureInit) {\n lines.push(' useEffect(() => {\\n');\n if (config.features.includes('analytics')) {\n lines.push(' initPosthog();\\n');\n }\n if (config.features.includes('error-tracking')) {\n lines.push(' initSentry();\\n');\n }\n lines.push(' }, []);\\n\\n');\n }\n\n let body = '{children}';\n if (ui === 'mui') {\n body = '<ThemeProvider theme={theme}><CssBaseline />{children}</ThemeProvider>';\n } else if (ui === 'chakra') {\n body = '<ChakraProvider theme={theme}>{children}</ChakraProvider>';\n } else if (ui === 'mantine') {\n body = '<MantineProvider theme={theme}>{children}</MantineProvider>';\n } else if (ui === 'antd') {\n body = '<ConfigProvider theme={theme}>{children}</ConfigProvider>';\n } else if (ui === 'nextui') {\n body = '<NextUIProvider theme={theme}>{children}</NextUIProvider>';\n }\n\n if (hasTrpc) {\n body = `<QueryClientProvider client={client}>${body}</QueryClientProvider>`;\n }\n\n lines.push(` return ${body};\\n`);\n lines.push('}\\n');\n\n return lines.join('');\n}\n\nfunction buildFeatureInit(config: StackforgeConfig, target: 'vite' | 'nextjs'): { initImports: string; initCalls: string } {\n if (target !== 'vite') return { initImports: '', initCalls: '' };\n const imports: string[] = [];\n const calls: string[] = [];\n if (config.features.includes('analytics')) {\n imports.push(\"import { initPosthog } from './lib/posthog';\");\n calls.push('initPosthog();');\n }\n if (config.features.includes('error-tracking')) {\n imports.push(\"import { initSentry } from './lib/sentry';\");\n calls.push('initSentry();');\n }\n return {\n initImports: imports.length ? imports.join('\\n') + '\\n' : '',\n initCalls: calls.length ? calls.join('\\n') + '\\n' : ''\n };\n}\n\nfunction buildApiExamples(\n config: StackforgeConfig,\n target: 'nextjs' | 'vite'\n): { imports: string; components: string } {\n if (config.api.type === 'none') {\n return { imports: '', components: '' };\n }\n\n const imports: string[] = [];\n const components: string[] = [];\n\n if (config.api.type === 'rest') {\n const path = target === 'nextjs' ? '../../src/api/client-usage' : './api/client-usage';\n imports.push(`import { RestExample } from '${path}';`);\n components.push('<RestExample />');\n }\n\n if (config.api.type === 'graphql') {\n const path = target === 'nextjs' ? '../../src/graphql/client-usage' : './graphql/client-usage';\n imports.push(`import { GraphqlExample } from '${path}';`);\n components.push('<GraphqlExample />');\n }\n\n if (config.api.type === 'trpc') {\n const path = target === 'nextjs' ? '../../src/trpc/client-usage' : './trpc/client-usage';\n imports.push(`import { TrpcExample } from '${path}';`);\n components.push('<TrpcExample />');\n }\n\n return { imports: imports.join('\\n') + '\\n', components: components.join('\\n ') };\n}\n\nfunction buildFeatureNotes(config: StackforgeConfig): string {\n const notes: string[] = [];\n if (config.features.includes('analytics')) notes.push('<p>Analytics enabled (PostHog).</p>');\n if (config.features.includes('error-tracking')) notes.push('<p>Error tracking enabled (Sentry).</p>');\n if (config.features.includes('email')) notes.push('<p>Email feature enabled (Resend).</p>');\n if (config.features.includes('payments')) notes.push('<p>Payments feature enabled (Stripe).</p>');\n if (config.features.includes('storage')) notes.push('<p>Storage feature enabled (Cloudinary).</p>');\n if (!notes.length) return '';\n return notes.join('\\n ');\n}\n\nfunction buildUiDemoTokens(\n config: StackforgeConfig,\n target: 'nextjs' | 'vite'\n): { uiDemoImport: string; uiDemoComponent: string } {\n if (config.ui.library === 'none') {\n return { uiDemoImport: '', uiDemoComponent: '' };\n }\n const importPath = target === 'nextjs' ? '../../src/components/ui-demo' : './components/ui-demo';\n return {\n uiDemoImport: `import { UiDemo } from '${importPath}';\\n`,\n uiDemoComponent: '<UiDemo />'\n };\n}\n\nfunction buildPageLinks(config: StackforgeConfig): string {\n const items: string[] = [];\n if (config.api.type === 'rest') {\n items.push('<li><Link href=\"/api/hello\">REST hello</Link></li>');\n }\n if (config.api.type === 'graphql') {\n items.push('<li><Link href=\"/api/graphql\">GraphQL endpoint</Link></li>');\n }\n if (config.api.type !== 'none') {\n items.push('<li><Link href=\"/examples\">API examples</Link></li>');\n }\n if (config.auth.provider !== 'none') {\n items.push('<li><Link href=\"/auth/protected\">Auth protected page</Link></li>');\n }\n return items.join('\\n ');\n}\n","export type TemplateVars = Record<string, string>;\n\nexport function applyTemplate(content: string, vars: TemplateVars): string {\n let out = content;\n for (const [key, value] of Object.entries(vars)) {\n out = out.replaceAll(`{{${key}}}`, value);\n }\n return out;\n}","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateUiFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = TEMPLATES_DIR;\n\n if (config.ui.library === 'tailwind') {\n const tailwindTemplate = await readTextFile(join(templatesRoot, 'ui', 'tailwind.config.js'));\n const postcssTemplate = await readTextFile(join(templatesRoot, 'ui', 'postcss.config.js'));\n const stylesTemplate = await readTextFile(join(templatesRoot, 'ui', 'styles.css'));\n\n await writeTextFile(join(projectRoot, 'tailwind.config.js'), tailwindTemplate, ctx);\n await writeTextFile(join(projectRoot, 'postcss.config.js'), postcssTemplate, ctx);\n\n const stylesDir = join(projectRoot, 'src');\n await ensureDir(stylesDir, ctx);\n await writeTextFile(join(stylesDir, 'styles.css'), stylesTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'demo-tailwind.tsx' : 'demo-tailwind.jsx')\n );\n await ensureDir(join(projectRoot, 'src', 'components'), ctx);\n await writeTextFile(\n join(projectRoot, 'src', 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n if (config.ui.library === 'shadcn') {\n await ensureDir(join(projectRoot, 'components'), ctx);\n const shadcnReadme = await readTextFile(join(templatesRoot, 'ui', 'shadcn.README.md'));\n await writeTextFile(join(projectRoot, 'components', 'README.md'), shadcnReadme, ctx);\n\n const componentsJson = await readTextFile(join(templatesRoot, 'ui', 'components.json'));\n await writeTextFile(join(projectRoot, 'components.json'), componentsJson, ctx);\n\n const srcDir = join(projectRoot, 'src');\n await ensureDir(join(srcDir, 'lib'), ctx);\n await ensureDir(join(srcDir, 'components', 'ui'), ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const utilsTemplate = await readTextFile(join(templatesRoot, 'ui', `utils.${ext}`));\n await writeTextFile(join(srcDir, 'lib', `utils.${ext}`), utilsTemplate, ctx);\n const buttonTemplate = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'button.tsx' : 'button.jsx')\n );\n await writeTextFile(join(srcDir, 'components', 'ui', config.frontend.language === 'ts' ? 'button.tsx' : 'button.jsx'), buttonTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', config.frontend.language === 'ts' ? 'demo-shadcn.tsx' : 'demo-shadcn.jsx')\n );\n await writeTextFile(\n join(srcDir, 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n if (['mui', 'chakra', 'mantine', 'antd', 'nextui'].includes(config.ui.library)) {\n await ensureDir(join(projectRoot, 'components'), ctx);\n const readme = await readTextFile(join(templatesRoot, 'ui', `${config.ui.library}.README.md`));\n await writeTextFile(join(projectRoot, 'components', 'README.md'), readme, ctx);\n\n const srcDir = join(projectRoot, 'src');\n await ensureDir(srcDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const themeTemplate = await readTextFile(join(templatesRoot, 'ui', `${config.ui.library}.theme.${ext}`));\n await writeTextFile(join(srcDir, `theme.${ext}`), themeTemplate, ctx);\n\n const demo = await readTextFile(\n join(templatesRoot, 'ui', `demo-${config.ui.library}.${config.frontend.language === 'ts' ? 'tsx' : 'jsx'}`)\n );\n await ensureDir(join(srcDir, 'components'), ctx);\n await writeTextFile(\n join(srcDir, 'components', config.frontend.language === 'ts' ? 'ui-demo.tsx' : 'ui-demo.jsx'),\n demo,\n ctx\n );\n }\n\n}\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport { writeTextFile, ensureDir, readTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateAuthFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = TEMPLATES_DIR;\n\n if (config.auth.provider === 'nextauth') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXTAUTH_SECRET=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXTAUTH_URL=\"\"', ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'auth', '[...nextauth]');\n await ensureDir(routeDir, ctx);\n\n const route = await readTextFile(join(templatesRoot, 'auth', `nextauth-route.${ext}`));\n await writeTextFile(join(routeDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'), route, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'nextauth.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n const options = await readTextFile(join(templatesRoot, 'auth', `nextauth-options.${ext}`));\n await writeTextFile(join(authDir, `auth-options.${ext}`), options, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `nextauth-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `nextauth-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `nextauth-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n }\n }\n\n if (config.auth.provider === 'clerk') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'CLERK_SECRET_KEY=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"\"', ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const clerkClient = `import { clerkClient } from '@clerk/nextjs/server';\\n\\nexport { clerkClient };\\n`;\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n await writeTextFile(join(libDir, `clerk.${ext}`), clerkClient, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const middleware = `import { authMiddleware } from '@clerk/nextjs';\\n\\nexport default authMiddleware();\\n\\nexport const config = {\\n matcher: ['/((?!.*\\\\..*|_next).*)', '/', '/(api|trpc)(.*)']\\n};\\n`;\n await writeTextFile(join(projectRoot, `middleware.${ext}`), middleware, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'clerk.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `clerk-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `clerk-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `clerk-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n }\n }\n\n if (config.auth.provider === 'better-auth') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'BETTER_AUTH_SECRET=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'BETTER_AUTH_URL=\"\"', ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'better-auth.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n const serverConfig = await readTextFile(join(templatesRoot, 'auth', `better-auth-server.${ext}`));\n await writeTextFile(join(authDir, `auth.${ext}`), serverConfig, ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const clientConfig = await readTextFile(join(templatesRoot, 'auth', `better-auth-client.${ext}`));\n await writeTextFile(join(libDir, `auth-client.${ext}`), clientConfig, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'auth', '[...all]');\n await ensureDir(routeDir, ctx);\n const route = await readTextFile(join(templatesRoot, 'auth', `better-auth-route.${ext}`));\n await writeTextFile(join(routeDir, `route.${ext}`), route, ctx);\n\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `better-auth-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `better-auth-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n }\n }\n\n if (config.auth.provider === 'supabase') {\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_SUPABASE_URL=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_SUPABASE_ANON_KEY=\"\"', ctx);\n\n const libDir = join(projectRoot, 'src', 'lib');\n await ensureDir(libDir, ctx);\n const supabaseClient = `import { createClient } from '@supabase/supabase-js';\\n\\nconst url = process.env.NEXT_PUBLIC_SUPABASE_URL || '';\\nconst key = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || '';\\n\\nexport const supabase = createClient(url, key);\\n`;\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n await writeTextFile(join(libDir, `supabase.${ext}`), supabaseClient, ctx);\n\n if (config.frontend.type === 'nextjs') {\n const supabaseServer = `import { createServerClient } from '@supabase/ssr';\\nimport { cookies } from 'next/headers';\\n\\nexport function createSupabaseServerClient() {\\n const cookieStore = cookies();\\n return createServerClient(\\n process.env.NEXT_PUBLIC_SUPABASE_URL || '',\\n process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || '',\\n {\\n cookies: {\\n get(name) {\\n return cookieStore.get(name)?.value;\\n }\\n }\\n }\\n );\\n}\\n`;\n await writeTextFile(join(libDir, `supabase-server.${ext}`), supabaseServer, ctx);\n }\n\n const authDir = join(projectRoot, 'auth');\n await ensureDir(authDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'auth', 'supabase.README.md'));\n await writeTextFile(join(authDir, 'README.md'), readme, ctx);\n if (config.frontend.type === 'nextjs') {\n const protectedDir = join(projectRoot, 'app', 'auth', 'protected');\n await ensureDir(protectedDir, ctx);\n const protectedPage = await readTextFile(\n join(templatesRoot, 'auth', `supabase-protected-page.${ext}x`)\n );\n await writeTextFile(join(protectedDir, `page.${ext}x`), protectedPage, ctx);\n\n const signInDir = join(projectRoot, 'app', 'auth', 'signin');\n await ensureDir(signInDir, ctx);\n const signInPage = await readTextFile(join(templatesRoot, 'auth', `supabase-signin.${ext}x`));\n await writeTextFile(join(signInDir, `page.${ext}x`), signInPage, ctx);\n } else {\n const protectedPage = await readTextFile(join(templatesRoot, 'auth', `supabase-protected.${ext}x`));\n await writeTextFile(join(authDir, `protected.${ext}x`), protectedPage, ctx);\n const signin = await readTextFile(\n join(templatesRoot, 'auth', `supabase-vite-signin.${ext}x`)\n );\n const authUiDir = join(projectRoot, 'src', 'auth');\n await ensureDir(authUiDir, ctx);\n await writeTextFile(join(authUiDir, `signin.${ext}x`), signin, ctx);\n }\n }\n}\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, writeTextFile, readTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateApiFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n\n const templatesRoot = TEMPLATES_DIR;\n\n if (config.api.type === 'rest') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# REST API\n\n## Overview\n- Next.js: app/api/hello/route.(ts|js) provides a sample GET route.\n- If a database is selected, app/api/users/route.(ts|js) includes CRUD examples.\n- Vite: src/server/index.(ts|js) hosts the API server (run npm run api:dev).\n\n## Client usage\n- src/api/client.(ts|js) wraps fetch helpers.\n- src/api/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const routeDir = join(projectRoot, 'app', 'api', 'hello');\n await ensureDir(routeDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n const handler = await readTextFile(join(templatesRoot, 'api', 'rest', `route.${ext}`));\n await writeTextFile(join(routeDir, `route.${ext}`), handler, ctx);\n\n if (config.database.orm) {\n const usersDir = join(projectRoot, 'app', 'api', 'users');\n await ensureDir(usersDir, ctx);\n const usersRoute = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'users-route.ts' : 'users-route.js')\n );\n await writeTextFile(\n join(usersDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'),\n usersRoute,\n ctx\n );\n }\n }\n\n if (config.frontend.type === 'vite') {\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n }\n\n const clientDir = join(projectRoot, 'src', 'api');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'rest', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.api.type === 'trpc') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# tRPC Setup\n\n## Overview\n- Router lives in src/server/api/trpc.ts and src/server/api/root.ts.\n- Next.js: app/api/trpc/[trpc]/route.(ts|js) wires the handler.\n- Vite: src/server/index.(ts|js) runs the API server (npm run api:dev).\n\n## Client usage\n- src/trpc/client.(ts|js) configures the tRPC client.\n- src/trpc/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const trpcDir = join(projectRoot, 'src', 'server', 'api');\n await ensureDir(trpcDir, ctx);\n const router = await readTextFile(join(templatesRoot, 'api', 'trpc', 'trpc.ts'));\n const appRouter = await readTextFile(join(templatesRoot, 'api', 'trpc', 'root.ts'));\n await writeTextFile(join(trpcDir, 'trpc.ts'), router, ctx);\n await writeTextFile(join(trpcDir, 'root.ts'), appRouter, ctx);\n\n const routeDir = join(projectRoot, 'app', 'api', 'trpc', '[trpc]');\n await ensureDir(routeDir, ctx);\n const handler = await readTextFile(join(templatesRoot, 'api', 'trpc', 'route.ts'));\n await writeTextFile(join(routeDir, config.frontend.language === 'ts' ? 'route.ts' : 'route.js'), handler, ctx);\n\n const clientDir = join(projectRoot, 'src', 'trpc');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.frontend.type === 'vite') {\n const trpcDir = join(projectRoot, 'src', 'server', 'api');\n await ensureDir(trpcDir, ctx);\n const router = await readTextFile(join(templatesRoot, 'api', 'trpc', 'trpc.ts'));\n const appRouter = await readTextFile(join(templatesRoot, 'api', 'trpc', 'root.ts'));\n await writeTextFile(join(trpcDir, 'trpc.ts'), router, ctx);\n await writeTextFile(join(trpcDir, 'root.ts'), appRouter, ctx);\n\n const clientDir = join(projectRoot, 'src', 'trpc');\n await ensureDir(clientDir, ctx);\n const client = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-vite.ts' : 'client-vite.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'trpc', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n }\n }\n\n if (config.api.type === 'graphql') {\n const apiDir = join(projectRoot, 'api');\n await ensureDir(apiDir, ctx);\n await writeTextFile(\n join(apiDir, 'README.md'),\n `# GraphQL Setup\n\n## Overview\n- Schema in src/graphql/schema.graphql.\n- Next.js: app/api/graphql/route.(ts|js) runs the Yoga handler.\n- Vite: src/server/index.(ts|js) runs the API server (npm run api:dev).\n\n## Client usage\n- src/graphql/client.(ts|js) configures the GraphQL client.\n- src/graphql/client-usage.(tsx|jsx) shows usage in the UI.\n- For Vite, set VITE_API_URL in .env to point at the API server.\n`,\n ctx\n );\n\n if (config.frontend.type === 'nextjs') {\n const gqlDir = join(projectRoot, 'src', 'graphql');\n await ensureDir(gqlDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'api', 'graphql', 'schema.graphql'));\n await writeTextFile(join(gqlDir, 'schema.graphql'), schema, ctx);\n\n const routeDir = join(projectRoot, 'app', 'api', 'graphql');\n await ensureDir(routeDir, ctx);\n const gqlExt = config.frontend.language === 'ts' ? 'ts' : 'js';\n const handler = await readTextFile(join(templatesRoot, 'api', 'graphql', `route.${gqlExt}`));\n await writeTextFile(join(routeDir, `route.${gqlExt}`), handler, ctx);\n\n const clientDir = join(projectRoot, 'src', 'graphql');\n const client = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n\n if (config.frontend.type === 'vite') {\n const gqlDir = join(projectRoot, 'src', 'graphql');\n await ensureDir(gqlDir, ctx);\n const schema = await readTextFile(join(templatesRoot, 'api', 'graphql', 'schema.graphql'));\n await writeTextFile(join(gqlDir, 'schema.graphql'), schema, ctx);\n\n const serverDir = join(projectRoot, 'src', 'server');\n await ensureDir(serverDir, ctx);\n const serverTemplate = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'vite-server.ts' : 'vite-server.js')\n );\n await writeTextFile(\n join(serverDir, config.frontend.language === 'ts' ? 'index.ts' : 'index.js'),\n serverTemplate,\n ctx\n );\n\n const clientDir = join(projectRoot, 'src', 'graphql');\n const client = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client.ts' : 'client.js')\n );\n await writeTextFile(join(clientDir, config.frontend.language === 'ts' ? 'client.ts' : 'client.js'), client, ctx);\n const usage = await readTextFile(\n join(templatesRoot, 'api', 'graphql', config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx')\n );\n await writeTextFile(\n join(clientDir, config.frontend.language === 'ts' ? 'client-usage.tsx' : 'client-usage.jsx'),\n usage,\n ctx\n );\n }\n }\n}\n","import { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { ensureDir, writeTextFile } from '../utils/file-system.js';\nimport type { GeneratorContext } from '../generators/context.js';\n\nfunction buildAgentContext(config: StackforgeConfig) {\n return {\n stack: {\n frontend: config.frontend,\n ui: config.ui,\n database: config.database,\n auth: config.auth,\n api: config.api\n },\n features: config.features,\n aiAgents: config.aiAgents,\n hints: buildHints(config)\n };\n}\n\nfunction buildTools(config: StackforgeConfig): string[] {\n const tools: string[] = [];\n if (config.database.provider !== 'none') tools.push('database');\n if (config.database.orm) tools.push('orm');\n if (config.api.type !== 'none') tools.push('api');\n if (config.auth.provider !== 'none') tools.push('auth');\n if (config.features.includes('email')) tools.push('email');\n if (config.features.includes('storage')) tools.push('storage');\n if (config.features.includes('payments')) tools.push('payments');\n if (config.features.includes('analytics')) tools.push('analytics');\n if (config.features.includes('error-tracking')) tools.push('error-tracking');\n return tools;\n}\n\nfunction buildFunctionDefinitions(tools: string[]) {\n return tools.map((tool) => {\n switch (tool) {\n case 'database':\n return {\n name: 'stackforge_database',\n description: 'Inspect database connection and configuration.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['status', 'env', 'client-paths'] }\n },\n required: ['action']\n }\n };\n case 'orm':\n return {\n name: 'stackforge_orm',\n description: 'Inspect ORM configuration and schema locations.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['schema', 'migrations', 'examples'] }\n },\n required: ['action']\n }\n };\n case 'api':\n return {\n name: 'stackforge_api',\n description: 'Inspect API routes and clients.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['routes', 'clients', 'examples'] }\n },\n required: ['action']\n }\n };\n case 'auth':\n return {\n name: 'stackforge_auth',\n description: 'Inspect auth routes and helpers.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['routes', 'helpers', 'env'] }\n },\n required: ['action']\n }\n };\n case 'email':\n return {\n name: 'stackforge_email',\n description: 'Inspect email client and docs.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'storage':\n return {\n name: 'stackforge_storage',\n description: 'Inspect storage setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'payments':\n return {\n name: 'stackforge_payments',\n description: 'Inspect payments setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'docs', 'env'] }\n },\n required: ['action']\n }\n };\n case 'analytics':\n return {\n name: 'stackforge_analytics',\n description: 'Inspect analytics setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'env'] }\n },\n required: ['action']\n }\n };\n case 'error-tracking':\n return {\n name: 'stackforge_error-tracking',\n description: 'Inspect error tracking setup.',\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string', enum: ['client', 'env'] }\n },\n required: ['action']\n }\n };\n default:\n return {\n name: `stackforge_${tool}`,\n description: `Access ${tool} helpers for this project.`,\n parameters: {\n type: 'object',\n properties: {\n action: { type: 'string' }\n },\n required: ['action']\n }\n };\n }\n });\n}\n\nfunction buildHints(config: StackforgeConfig): string[] {\n const hints: string[] = [];\n if (config.api.type === 'trpc') hints.push('tRPC router at src/server/api/root.ts');\n if (config.api.type === 'graphql') hints.push('GraphQL schema at src/graphql/schema.graphql');\n if (config.api.type === 'rest') {\n hints.push(\n config.frontend.type === 'nextjs'\n ? 'REST route at app/api/hello/route.ts'\n : 'REST server at src/server/index.ts'\n );\n }\n if (config.database.orm === 'drizzle') hints.push('Drizzle schema at drizzle/schema.ts');\n if (config.database.orm === 'prisma') hints.push('Prisma schema at prisma/schema.prisma');\n if (config.database.orm === 'mongoose') hints.push('Mongoose connection at src/db/mongoose.ts');\n if (config.database.orm === 'typeorm') hints.push('TypeORM data source at src/db/data-source.ts');\n if (config.ui.library === 'mui') hints.push('MUI components docs in components/README.md');\n if (config.ui.library === 'chakra') hints.push('Chakra UI docs in components/README.md');\n if (config.ui.library === 'mantine') hints.push('Mantine docs in components/README.md');\n if (config.ui.library === 'antd') hints.push('Ant Design docs in components/README.md');\n if (config.ui.library === 'nextui') hints.push('NextUI docs in components/README.md');\n if (config.features.includes('analytics')) hints.push('Analytics client at src/lib/posthog.ts');\n if (config.features.includes('error-tracking')) hints.push('Error tracking at src/lib/sentry.ts');\n if (config.auth.provider === 'nextauth') hints.push('NextAuth route at app/api/auth/[...nextauth]/route.ts');\n if (config.auth.provider === 'clerk') hints.push('Clerk middleware at middleware.ts');\n if (config.auth.provider === 'supabase') hints.push('Supabase client at src/lib/supabase.ts');\n return hints;\n}\n\nexport async function generateAiAgentConfigs(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n if (!config.aiAgents || config.aiAgents.length === 0) return;\n\n const projectRoot = resolveProjectRoot(root, config);\n const agentsRoot = join(projectRoot, '.ai-agents');\n await ensureDir(agentsRoot, ctx);\n const serversRoot = join(agentsRoot, 'servers');\n await ensureDir(serversRoot, ctx);\n const protocolsRoot = join(agentsRoot, 'protocols');\n await ensureDir(protocolsRoot, ctx);\n const tools = buildTools(config);\n const hints = buildHints(config);\n\n for (const agent of config.aiAgents) {\n const agentDir = join(agentsRoot, agent);\n await ensureDir(agentDir, ctx);\n const ext = config.frontend.language === 'ts' ? 'ts' : 'js';\n\n const contextJson = JSON.stringify(buildAgentContext(config), null, 2);\n await writeTextFile(join(agentDir, 'context.json'), contextJson + '\\n', ctx);\n const toolsJson = JSON.stringify({ tools }, null, 2);\n await writeTextFile(join(agentDir, 'tools.json'), toolsJson + '\\n', ctx);\n\n if (agent === 'claude') {\n const content = JSON.stringify(\n {\n mcpServers: {\n stackforge: {\n command: 'node',\n args: [`.ai-agents/servers/claude/mcp-server.${ext}`]\n }\n }\n },\n null,\n 2\n );\n await writeTextFile(join(agentDir, 'claude_desktop_config.json'), content + '\\n', ctx);\n const claudeRoot = join(projectRoot, '.claude');\n await ensureDir(claudeRoot, ctx);\n await writeTextFile(join(claudeRoot, 'claude_desktop_config.json'), content + '\\n', ctx);\n await writeTextFile(\n join(claudeRoot, 'README.md'),\n 'StackForge generated this folder for Claude. Use claude_desktop_config.json to configure the MCP server. The server lives in .ai-agents/servers/claude/mcp-server.(ts|js).\\n',\n ctx\n );\n const serverDir = join(serversRoot, 'claude');\n await ensureDir(serverDir, ctx);\n const serverContent = buildMcpServerContent(ext, tools, hints);\n await writeTextFile(join(serverDir, `mcp-server.${ext}`), serverContent, ctx);\n const mcpSpec = JSON.stringify(\n {\n name: 'stackforge',\n tools\n },\n null,\n 2\n );\n await writeTextFile(join(serverDir, 'mcp.json'), mcpSpec + '\\n', ctx);\n await writeTextFile(\n join(serverDir, 'README.md'),\n 'Run the MCP server: `node mcp-server.js` (or .ts with tsx). Endpoints: /tools and /invoke.\\n',\n ctx\n );\n }\n\n if (agent === 'copilot') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'functions.json'), content + '\\n', ctx);\n const serverDir = join(serversRoot, 'copilot');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'functions.json'), content + '\\n', ctx);\n }\n\n if (agent === 'codex') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'functions.json'), content + '\\n', ctx);\n const codexRoot = join(projectRoot, '.codex');\n await ensureDir(codexRoot, ctx);\n await writeTextFile(join(codexRoot, 'functions.json'), content + '\\n', ctx);\n await writeTextFile(\n join(codexRoot, 'README.md'),\n 'StackForge generated this folder for Codex. Use functions.json for OpenAI function calling integrations.\\n',\n ctx\n );\n const serverDir = join(serversRoot, 'codex');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'functions.json'), content + '\\n', ctx);\n }\n\n if (agent === 'gemini') {\n const content = JSON.stringify({ functions: buildFunctionDefinitions(tools) }, null, 2);\n await writeTextFile(join(agentDir, 'function_declarations.json'), content + '\\n', ctx);\n const serverDir = join(serversRoot, 'gemini');\n await ensureDir(serverDir, ctx);\n const serverContent = `export const functions = ${JSON.stringify(buildFunctionDefinitions(tools), null, 2)};\\n\\nexport function handleFunctionCall(name, args) {\\n return { name, args, ok: true, message: 'Implement tool logic here.' };\\n}\\n`;\n await writeTextFile(join(serverDir, `functions.${ext}`), serverContent, ctx);\n await writeTextFile(join(serverDir, 'function_declarations.json'), content + '\\n', ctx);\n }\n\n if (agent === 'cursor') {\n const content = `# Cursor rules\\n# See context.json for project stack details\\n`;\n await writeTextFile(join(agentDir, '.cursorrules'), content, ctx);\n await writeTextFile(join(projectRoot, '.cursorrules'), content, ctx);\n const cursorRoot = join(projectRoot, '.cursor');\n await ensureDir(cursorRoot, ctx);\n const extensions = JSON.stringify({ recommendations: ['cursor.cursor'] }, null, 2);\n await writeTextFile(join(cursorRoot, 'extensions.json'), extensions + '\\n', ctx);\n const serverDir = join(serversRoot, 'cursor');\n await ensureDir(serverDir, ctx);\n const serverContent = `# Cursor uses .cursorrules for guidance.\\n`;\n await writeTextFile(join(serverDir, 'README.md'), serverContent, ctx);\n }\n\n if (agent === 'codeium') {\n const content = JSON.stringify({ protocol: 'lsp', tools, hints }, null, 2);\n await writeTextFile(join(agentDir, 'server-config.json'), content + '\\n', ctx);\n }\n\n if (agent === 'windsurf') {\n const windsurfRoot = join(projectRoot, '.windsurf');\n await ensureDir(windsurfRoot, ctx);\n const content = JSON.stringify({ protocol: 'cascade', tools, hints }, null, 2);\n await writeTextFile(join(windsurfRoot, 'cascade.json'), content + '\\n', ctx);\n }\n\n if (agent === 'tabnine') {\n const tabnineRoot = join(projectRoot, '.tabnine');\n await ensureDir(tabnineRoot, ctx);\n const content = JSON.stringify({ tools, hints }, null, 2);\n await writeTextFile(join(tabnineRoot, 'config.json'), content + '\\n', ctx);\n }\n }\n\n const protocolTools = tools;\n const openAiFunctions = buildFunctionDefinitions(protocolTools);\n const openAiSchema = JSON.stringify({ functions: openAiFunctions }, null, 2);\n await writeTextFile(join(protocolsRoot, 'openai-functions.json'), openAiSchema + '\\n', ctx);\n const lspSchema = JSON.stringify(\n {\n version: '0.1',\n capabilities: {\n tools: protocolTools\n }\n },\n null,\n 2\n );\n await writeTextFile(join(protocolsRoot, 'lsp.json'), lspSchema + '\\n', ctx);\n\n const docsDir = join(projectRoot, 'docs');\n await ensureDir(docsDir, ctx);\n const aiDoc = buildAiAgentsDoc(config);\n await writeTextFile(join(docsDir, 'AI_AGENTS.md'), aiDoc + '\\n', ctx);\n}\n\nfunction resolveProjectRoot(root: string, config: StackforgeConfig): string {\n const candidate = join(root, 'stackforge.json');\n if (existsSync(candidate)) return root;\n return join(root, config.projectName);\n}\n\nfunction buildAiAgentsDoc(config: StackforgeConfig): string {\n const agentsList = config.aiAgents.map((agent) => `- ${agent}`).join('\\n');\n const tools = buildTools(config).map((tool) => `- ${tool}`).join('\\n');\n const hints = buildHints(config).map((hint) => `- ${hint}`).join('\\n');\n\n return `# AI Agent Integrations\n\nThis project includes configuration files for the selected AI agents.\n\n## Enabled Agents\n${agentsList || '- none'}\n\n## Tools Enabled\n${tools || '- none'}\n\n## Project Hints\n${hints || '- none'}\n\n## Files\n- .ai-agents/<agent>/context.json\n- .ai-agents/<agent>/tools.json\n- .ai-agents/servers/<agent>/\n- .claude/claude_desktop_config.json (when Claude is enabled)\n- .codex/functions.json (when Codex is enabled)\n- .cursor/extensions.json and .cursorrules (when Cursor is enabled)\n- .windsurf/cascade.json (when Windsurf is enabled)\n- .tabnine/config.json (when Tabnine is enabled)\n\n## Setup Notes\n- Claude Desktop: copy .ai-agents/claude/claude_desktop_config.json into your Claude config folder.\n- Claude MCP server: run .ai-agents/servers/claude/mcp-server.(ts|js).\n- Copilot: use .ai-agents/copilot/functions.json for function calling.\n- Codex: use .codex/functions.json for function calling.\n- Gemini: use .ai-agents/gemini/function_declarations.json in AI Studio.\n- Cursor: .ai-agents/cursor/.cursorrules is auto-discovered when opening the project.\n- Codeium: use .ai-agents/codeium/server-config.json for LSP tools.\n- Windsurf: use .windsurf/cascade.json for Cascade protocol.\n- Tabnine: use .tabnine/config.json for plugin configuration.\n\n## Notes\n- Agent configs are generated based on stackforge.json.\n- Re-run \\`stackforge configure-agents\\` after changing your stack.\n`;\n}\n\nfunction buildMcpServerContent(ext: string, tools: string[], hints: string[]): string {\n const toolCases = [\n \"case 'stackforge_database':\\n return { ok: true, message: 'Check DATABASE_URL in .env and review db clients in src/db or drizzle/' };\",\n \"case 'stackforge_orm':\\n return { ok: true, message: 'Review ORM schema or models in drizzle/ or prisma/ or src/db' };\",\n \"case 'stackforge_api':\\n return { ok: true, message: 'API routes in app/api and clients in src/api, src/graphql, or src/trpc' };\",\n \"case 'stackforge_auth':\\n return { ok: true, message: 'Auth routes in app/api/auth and auth helpers in auth/' };\",\n \"case 'stackforge_email':\\n return { ok: true, message: 'Email client at src/lib/resend.ts and docs in features/email' };\",\n \"case 'stackforge_storage':\\n return { ok: true, message: 'Storage docs in features/storage' };\",\n \"case 'stackforge_payments':\\n return { ok: true, message: 'Stripe client at src/lib/stripe.ts and docs in features/payments' };\",\n \"case 'stackforge_analytics':\\n return { ok: true, message: 'PostHog client at src/lib/posthog.ts' };\",\n \"case 'stackforge_error-tracking':\\n return { ok: true, message: 'Sentry client at src/lib/sentry.ts' };\"\n ].join('\\n ');\n\n const nameType = ext === 'ts' ? ': string' : '';\n const actionType = ext === 'ts' ? ': string' : '';\n const createServerExpr = ext === 'ts' ? 'createServer' : 'http.createServer';\n const importLine = ext === 'ts'\n ? \"import { createServer } from 'node:http';\"\n : \"const http = require('node:http');\";\n\n return `${importLine}\n\nconst tools = ${JSON.stringify(tools, null, 2)};\nconst hints = ${JSON.stringify(hints, null, 2)};\n\nfunction handleTool(name${nameType}, action${actionType}) {\n switch (name) {\n ${toolCases}\n default:\n return { ok: false, message: 'Unknown tool' };\n }\n}\n\nconst server = ${createServerExpr}((req, res) => {\n if (req.url === '/tools') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ tools, hints }));\n return;\n }\n if (req.url === '/invoke' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => (body += chunk));\n req.on('end', () => {\n try {\n const payload = JSON.parse(body || '{}');\n const name = payload.name || '';\n const action = payload.arguments?.action || '';\n const result = handleTool(name, action);\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(result));\n } catch (err) {\n res.writeHead(400, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ok: false, message: 'Invalid JSON' }));\n }\n });\n return;\n }\n res.writeHead(404);\n res.end();\n});\n\nconst port = Number(process.env.MCP_PORT || 7341);\nserver.listen(port, () => {\n console.log('MCP server listening on', port);\n});\n`;\n}\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../../types/config.js';\nimport { ensureDir, readTextFile, writeTextFile } from '../../utils/file-system.js';\nimport type { GeneratorContext } from '../context.js';\nimport { appendEnvLine } from '../../utils/env-file.js';\nimport { TEMPLATES_DIR } from '../../utils/templates-dir.js';\n\nexport async function generateFeatureFiles(\n root: string,\n config: StackforgeConfig,\n ctx?: GeneratorContext\n): Promise<void> {\n const projectRoot = join(root, config.projectName);\n const templatesRoot = TEMPLATES_DIR;\n const libDir = join(projectRoot, 'src', 'lib');\n const isTs = config.frontend.language === 'ts';\n\n if (config.features.includes('email')) {\n const dir = join(projectRoot, 'features', 'email');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'email', 'README.md'));\n const resendClient = await readTextFile(\n join(templatesRoot, 'features', 'email', isTs ? 'resend.ts' : 'resend.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'resend.ts' : 'resend.js'), resendClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'RESEND_API_KEY=\"\"', ctx);\n }\n\n if (config.features.includes('storage')) {\n const dir = join(projectRoot, 'features', 'storage');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'storage', 'README.md'));\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n const storageClient = await readTextFile(\n join(templatesRoot, 'features', 'storage', isTs ? 'storage.ts' : 'storage.js')\n );\n await writeTextFile(join(libDir, isTs ? 'storage.ts' : 'storage.js'), storageClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'CLOUDINARY_URL=\"\"', ctx);\n }\n\n if (config.features.includes('payments')) {\n const dir = join(projectRoot, 'features', 'payments');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'payments', 'README.md'));\n const stripeClient = await readTextFile(\n join(templatesRoot, 'features', 'payments', isTs ? 'stripe.ts' : 'stripe.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'stripe.ts' : 'stripe.js'), stripeClient, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'STRIPE_SECRET_KEY=\"\"', ctx);\n }\n\n if (config.features.includes('analytics')) {\n const dir = join(projectRoot, 'features', 'analytics');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'analytics', 'README.md'));\n const client = await readTextFile(\n join(templatesRoot, 'features', 'analytics', isTs ? 'posthog.ts' : 'posthog.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'posthog.ts' : 'posthog.js'), client, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_POSTHOG_KEY=\"\"', ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'NEXT_PUBLIC_POSTHOG_HOST=\"\"', ctx);\n }\n\n if (config.features.includes('error-tracking')) {\n const dir = join(projectRoot, 'features', 'error-tracking');\n await ensureDir(dir, ctx);\n await ensureDir(libDir, ctx);\n const readme = await readTextFile(join(templatesRoot, 'features', 'error-tracking', 'README.md'));\n const client = await readTextFile(\n join(templatesRoot, 'features', 'error-tracking', isTs ? 'sentry.ts' : 'sentry.js')\n );\n await writeTextFile(join(dir, 'README.md'), readme, ctx);\n await writeTextFile(join(libDir, isTs ? 'sentry.ts' : 'sentry.js'), client, ctx);\n await appendEnvLine(join(projectRoot, '.env.example'), 'SENTRY_DSN=\"\"', ctx);\n }\n}\n","import type { StackforgeConfig } from '../types/config.js';\nimport { createProjectSkeleton } from '../generators/core/project-creator.js';\nimport { generateDatabaseFiles } from '../generators/database/database-files.js';\nimport { generateFrontendFiles } from '../generators/frontend/frontend-files.js';\nimport { generateUiFiles } from '../generators/ui/ui-files.js';\nimport { generateAuthFiles } from '../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../generators/api/api-files.js';\nimport type { GeneratorContext } from '../generators/context.js';\nimport { generateAiAgentConfigs } from '../ai-agents/config-generator.js';\nimport { generateFeatureFiles } from '../generators/features/feature-files.js';\n\nexport async function runGenerators(\n cwd: string,\n config: StackforgeConfig,\n ctx: GeneratorContext\n): Promise<void> {\n await createProjectSkeleton(cwd, config, ctx);\n await generateFrontendFiles(cwd, config, ctx);\n await generateUiFiles(cwd, config, ctx);\n await generateDatabaseFiles(cwd, config, ctx);\n await generateAuthFiles(cwd, config, ctx);\n await generateApiFiles(cwd, config, ctx);\n await generateFeatureFiles(cwd, config, ctx);\n await generateAiAgentConfigs(cwd, config, ctx);\n}","import type { StackforgeConfig } from '../../types/config.js';\nimport { supported } from '../../utils/supported.js';\n\nexport function validateConfig(config: StackforgeConfig): void {\n if (!supported.frontend.includes(config.frontend.type)) {\n throw new Error(`Unsupported frontend: ${config.frontend.type}`);\n }\n if (!supported.ui.includes(config.ui.library)) {\n throw new Error(`Unsupported UI library: ${config.ui.library}`);\n }\n if (!supported.database.includes(config.database.provider)) {\n throw new Error(`Unsupported database: ${config.database.provider}`);\n }\n if (config.database.orm && !supported.orm.includes(config.database.orm)) {\n throw new Error(`Unsupported ORM: ${config.database.orm}`);\n }\n if (!supported.auth.includes(config.auth.provider)) {\n throw new Error(`Unsupported auth: ${config.auth.provider}`);\n }\n if (!supported.api.includes(config.api.type)) {\n throw new Error(`Unsupported API: ${config.api.type}`);\n }\n for (const feature of config.features) {\n if (!(supported.features as readonly string[]).includes(feature)) {\n throw new Error(`Unsupported feature: ${feature}`);\n }\n }\n\n if (config.database.orm && config.database.provider === 'none') {\n throw new Error('ORM requires a database provider.');\n }\n}","import type { StackforgeConfig } from '../../types/config.js';\n\nexport function validateCompatibility(config: StackforgeConfig): void {\n if (config.auth.provider === 'nextauth' && config.frontend.type !== 'nextjs') {\n throw new Error('NextAuth requires Next.js.');\n }\n\n if (config.auth.provider === 'clerk' && config.frontend.type !== 'nextjs') {\n throw new Error('Clerk requires Next.js.');\n }\n\n if (config.api.type === 'trpc' && config.frontend.language !== 'ts') {\n throw new Error('tRPC requires TypeScript.');\n }\n\n if (config.database.orm === 'mongoose' && config.database.provider !== 'mongodb') {\n throw new Error('Mongoose requires MongoDB. Use drizzle, prisma, or typeorm with SQL databases.');\n }\n\n if (config.database.orm === 'typeorm') {\n const supported = ['postgres', 'mysql', 'sqlite'];\n if (!supported.includes(config.database.provider)) {\n throw new Error('TypeORM requires postgres, mysql, or sqlite.');\n }\n }\n\n if (config.features.includes('error-tracking') && config.frontend.type !== 'nextjs') {\n throw new Error('Error tracking (Sentry) requires Next.js.');\n }\n}\n","import { versions } from './versions.js';\n\nexport function resolveVersions(options?: { allowMajor?: boolean }): typeof versions {\n return versions;\n}\n","import type { StackforgeConfig } from '../types/config.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport { resolveVersions } from './version-manager.js';\n\nexport function resolveDependencies(config: StackforgeConfig, options?: { allowMajor?: boolean }) {\n resolveVersions(options);\n return collectDependencies(config);\n}\n\nexport function resolveScripts(config: StackforgeConfig) {\n return collectScripts(config);\n}\n","import type { StackforgeConfig } from '../../types/config.js';\nimport { resolveDependencies, resolveScripts } from '../../utils/dependency-resolver.js';\n\nexport function validateDependencies(config: StackforgeConfig): void {\n const deps = resolveDependencies(config);\n const scripts = resolveScripts(config);\n\n if (Object.keys(scripts).length === 0) {\n throw new Error('No scripts resolved for the selected stack.');\n }\n\n if (Object.keys(deps.dependencies).length === 0 && Object.keys(deps.devDependencies).length === 0) {\n throw new Error('No dependencies resolved for the selected stack.');\n }\n}\n","export const logger = {\n info(message: string) {\n console.log(message);\n },\n warn(message: string) {\n console.warn(message);\n },\n error(message: string) {\n console.error(message);\n }\n};","import { exec } from 'node:child_process';\nimport type { PackageManager } from '../types/config.js';\n\nexport function getInstallCommand(pm: PackageManager): string {\n switch (pm) {\n case 'pnpm':\n return 'pnpm install';\n case 'yarn':\n return 'yarn install';\n case 'bun':\n return 'bun install';\n default:\n return 'npm install';\n }\n}\n\nexport function runInstall(pm: PackageManager, cwd: string): Promise<void> {\n const command = getInstallCommand(pm);\n return new Promise((resolve, reject) => {\n const child = exec(command, { cwd }, (err) => {\n if (err) reject(err);\n else resolve();\n });\n child.stdout?.pipe(process.stdout);\n child.stderr?.pipe(process.stderr);\n });\n}","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const listCommand = new Command('list')\n .option('--available', 'show available features')\n .option('--category <name>', 'filter by category')\n .action(async (options) => {\n try {\n if (options.available) {\n logger.info('Available features:');\n logger.info(`frontend: ${supported.frontend.join(', ')}`);\n logger.info(`ui: ${supported.ui.join(', ')}`);\n logger.info(`database: ${supported.database.join(', ')}`);\n logger.info(`orm: ${supported.orm.join(', ')}`);\n logger.info(`auth: ${supported.auth.join(', ')}`);\n logger.info(`api: ${supported.api.join(', ')}`);\n logger.info(`features: ${supported.features.join(', ')}`);\n return;\n }\n\n const config = await readProjectConfig(process.cwd());\n if (!options.category) {\n logger.info(`frontend: ${config.frontend.type} (${config.frontend.language})`);\n logger.info(`ui: ${config.ui.library}`);\n logger.info(`database: ${config.database.provider}${config.database.orm ? ' (' + config.database.orm + ')' : ''}`);\n logger.info(`auth: ${config.auth.provider}`);\n logger.info(`api: ${config.api.type}`);\n logger.info(`features: ${config.features.length ? config.features.join(', ') : 'none'}`);\n return;\n }\n\n switch (options.category) {\n case 'frontend':\n logger.info(`frontend: ${config.frontend.type} (${config.frontend.language})`);\n break;\n case 'ui':\n logger.info(`ui: ${config.ui.library}`);\n break;\n case 'database':\n logger.info(`database: ${config.database.provider}${config.database.orm ? ' (' + config.database.orm + ')' : ''}`);\n break;\n case 'auth':\n logger.info(`auth: ${config.auth.provider}`);\n break;\n case 'api':\n logger.info(`api: ${config.api.type}`);\n break;\n case 'features':\n logger.info(`features: ${config.features.length ? config.features.join(', ') : 'none'}`);\n break;\n default:\n logger.error(`Unknown category: ${options.category}`);\n }\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { updateConfigForFeature, syncPackageJson } from '../../utils/feature-update.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { generateUiFiles } from '../../generators/ui/ui-files.js';\nimport { generateDatabaseFiles } from '../../generators/database/database-files.js';\nimport { generateAuthFiles } from '../../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../../generators/api/api-files.js';\nimport { generateFeatureFiles } from '../../generators/features/feature-files.js';\nimport { dirname, join } from 'node:path';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\n\nfunction parseFeature(feature: string): { category: string; value: string } {\n const parts = feature.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('Feature must be in the form category:value (e.g., auth:nextauth).');\n }\n const [category, value] = parts;\n return { category, value };\n}\n\nexport const addCommand = new Command('add')\n .argument('<feature>', 'feature to add (category:value)')\n .action(async (feature) => {\n try {\n const cwd = process.cwd();\n const { category, value } = parseFeature(feature);\n const current = await readProjectConfig(cwd);\n const next = updateConfigForFeature(current, category, value, 'add');\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(`${cwd}/package.json`, current, next);\n\n const root = dirname(cwd);\n if (category === 'ui') await generateUiFiles(root, next);\n if (category === 'database' || category === 'orm') await generateDatabaseFiles(root, next);\n if (category === 'auth') await generateAuthFiles(root, next);\n if (category === 'api') await generateApiFiles(root, next);\n if (category === 'feature') await generateFeatureFiles(root, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Added ${feature}`);\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n","import { readFile, writeFile } from 'node:fs/promises';\nimport type { ScriptMap } from '../generators/scripts/scripts-registry.js';\nimport type { DependencyResult } from '../generators/deps/deps-registry.js';\n\ninterface PackageJson {\n name?: string;\n version?: string;\n private?: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nexport async function readPackageJson(path: string): Promise<PackageJson> {\n const raw = await readFile(path, 'utf8');\n return JSON.parse(raw) as PackageJson;\n}\n\nexport async function writePackageJson(path: string, pkg: PackageJson): Promise<void> {\n await writeFile(path, JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n}\n\nexport function mergeScripts(pkg: PackageJson, scripts: ScriptMap): PackageJson {\n return { ...pkg, scripts: { ...(pkg.scripts ?? {}), ...scripts } };\n}\n\nexport function mergeDependencies(pkg: PackageJson, deps: DependencyResult): PackageJson {\n return {\n ...pkg,\n dependencies: { ...(pkg.dependencies ?? {}), ...deps.dependencies },\n devDependencies: { ...(pkg.devDependencies ?? {}), ...deps.devDependencies }\n };\n}\n\nexport function removeScripts(pkg: PackageJson, scriptsToRemove: ScriptMap): PackageJson {\n if (!pkg.scripts) return pkg;\n const next = { ...pkg.scripts };\n for (const key of Object.keys(scriptsToRemove)) {\n delete next[key];\n }\n return { ...pkg, scripts: next };\n}\n\nexport function removeDependencies(pkg: PackageJson, depsToRemove: DependencyResult): PackageJson {\n const nextDeps = { ...(pkg.dependencies ?? {}) };\n const nextDev = { ...(pkg.devDependencies ?? {}) };\n\n for (const key of Object.keys(depsToRemove.dependencies)) {\n delete nextDeps[key];\n }\n for (const key of Object.keys(depsToRemove.devDependencies)) {\n delete nextDev[key];\n }\n\n return { ...pkg, dependencies: nextDeps, devDependencies: nextDev };\n}","import type { StackforgeConfig } from '../types/config.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport {\n mergeDependencies,\n mergeScripts,\n readPackageJson,\n removeDependencies,\n removeScripts,\n writePackageJson\n} from './package-json.js';\nimport { supported } from './supported.js';\n\nexport function updateConfigForFeature(\n config: StackforgeConfig,\n category: string,\n value: string | undefined,\n action: 'add' | 'remove'\n): StackforgeConfig {\n const next = { ...config, database: { ...config.database }, ui: { ...config.ui }, auth: { ...config.auth }, api: { ...config.api } };\n\n switch (category) {\n case 'ui':\n if (action === 'add' && value && !supported.ui.includes(value as StackforgeConfig['ui']['library'])) {\n throw new Error(`Unsupported UI library: ${value}`);\n }\n next.ui.library = action === 'remove' ? 'none' : (value as StackforgeConfig['ui']['library']);\n break;\n case 'auth':\n if (action === 'add' && value && !supported.auth.includes(value as StackforgeConfig['auth']['provider'])) {\n throw new Error(`Unsupported auth provider: ${value}`);\n }\n next.auth.provider = action === 'remove' ? 'none' : (value as StackforgeConfig['auth']['provider']);\n break;\n case 'api':\n if (action === 'add' && value && !supported.api.includes(value as StackforgeConfig['api']['type'])) {\n throw new Error(`Unsupported API type: ${value}`);\n }\n next.api.type = action === 'remove' ? 'none' : (value as StackforgeConfig['api']['type']);\n break;\n case 'database':\n if (action === 'add' && value && !supported.database.includes(value as StackforgeConfig['database']['provider'])) {\n throw new Error(`Unsupported database: ${value}`);\n }\n next.database.provider = action === 'remove' ? 'none' : (value as StackforgeConfig['database']['provider']);\n if (action === 'remove' || value === 'none') next.database.orm = undefined;\n break;\n case 'orm':\n if (action === 'add' && value && !supported.orm.includes(value as NonNullable<StackforgeConfig['database']['orm']>)) {\n throw new Error(`Unsupported ORM: ${value}`);\n }\n next.database.orm = action === 'remove' ? undefined : (value as NonNullable<StackforgeConfig['database']['orm']>);\n break;\n case 'feature':\n if (action === 'add' && value && !(supported.features as readonly string[]).includes(value)) {\n throw new Error(`Unsupported feature: ${value}`);\n }\n if (action === 'add' && value) {\n next.features = Array.from(new Set([...next.features, value]));\n } else if (action === 'remove' && value) {\n next.features = next.features.filter((f) => f !== value);\n }\n break;\n default:\n throw new Error(`Unknown feature category: ${category}`);\n }\n\n return next;\n}\n\nfunction diffKeys<T extends Record<string, string>>(oldMap: T, newMap: T): T {\n const diff: Record<string, string> = {};\n for (const key of Object.keys(oldMap)) {\n if (!(key in newMap)) diff[key] = oldMap[key];\n }\n return diff as T;\n}\n\nexport async function syncPackageJson(\n path: string,\n oldConfig: StackforgeConfig,\n newConfig: StackforgeConfig\n): Promise<void> {\n const pkg = await readPackageJson(path);\n const oldScripts = collectScripts(oldConfig);\n const newScripts = collectScripts(newConfig);\n const oldDeps = collectDependencies(oldConfig);\n const newDeps = collectDependencies(newConfig);\n\n const scriptsToRemove = diffKeys(oldScripts, newScripts);\n const depsToRemove = {\n dependencies: diffKeys(oldDeps.dependencies, newDeps.dependencies),\n devDependencies: diffKeys(oldDeps.devDependencies, newDeps.devDependencies)\n };\n\n let nextPkg = removeScripts(pkg, scriptsToRemove);\n nextPkg = removeDependencies(nextPkg, depsToRemove);\n nextPkg = mergeScripts(nextPkg, newScripts);\n nextPkg = mergeDependencies(nextPkg, newDeps);\n\n await writePackageJson(path, nextPkg);\n}","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { updateConfigForFeature, syncPackageJson } from '../../utils/feature-update.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { cleanupFeature } from '../../utils/feature-cleanup.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join } from 'node:path';\n\nfunction parseFeature(feature: string): { category: string; value: string } {\n const parts = feature.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('Feature must be in the form category:value (e.g., auth:nextauth).');\n }\n const [category, value] = parts;\n return { category, value };\n}\n\nfunction assertRemovalTarget(category: string, value: string, current: Awaited<ReturnType<typeof readProjectConfig>>): void {\n switch (category) {\n case 'ui':\n if (current.ui.library !== value) {\n throw new Error(`UI library ${value} is not installed.`);\n }\n break;\n case 'auth':\n if (current.auth.provider !== value) {\n throw new Error(`Auth provider ${value} is not installed.`);\n }\n break;\n case 'api':\n if (current.api.type !== value) {\n throw new Error(`API type ${value} is not installed.`);\n }\n break;\n case 'database':\n if (current.database.provider !== value) {\n throw new Error(`Database provider ${value} is not installed.`);\n }\n break;\n case 'orm':\n if (current.database.orm !== value) {\n throw new Error(`ORM ${value} is not installed.`);\n }\n break;\n case 'feature':\n if (!current.features.includes(value)) {\n throw new Error(`Feature ${value} is not installed.`);\n }\n break;\n default:\n throw new Error(`Unknown feature category: ${category}`);\n }\n}\n\nexport const removeCommand = new Command('remove')\n .argument('<feature>', 'feature to remove (category:value)')\n .action(async (feature) => {\n try {\n const cwd = process.cwd();\n const { category, value } = parseFeature(feature);\n const current = await readProjectConfig(cwd);\n assertRemovalTarget(category, value, current);\n await cleanupFeature(cwd, current, category, value);\n\n const next = updateConfigForFeature(current, category, value, 'remove');\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(`${cwd}/package.json`, current, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Removed ${feature}`);\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n","import { join } from 'node:path';\nimport type { StackforgeConfig } from '../types/config.js';\nimport { removePath } from './file-system.js';\nimport { removeEnvKey } from './env-file.js';\n\nexport async function cleanupFeature(\n cwd: string,\n config: StackforgeConfig,\n category: string,\n value?: string\n): Promise<void> {\n const root = cwd;\n\n if (category === 'ui') {\n if (config.ui.library === 'tailwind') {\n await removePath(join(root, 'tailwind.config.js'));\n await removePath(join(root, 'postcss.config.js'));\n await removePath(join(root, 'src', 'styles.css'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n if (config.ui.library === 'shadcn') {\n await removePath(join(root, 'components'));\n await removePath(join(root, 'components.json'));\n await removePath(join(root, 'src', 'lib', 'utils.ts'));\n await removePath(join(root, 'src', 'lib', 'utils.js'));\n await removePath(join(root, 'src', 'components', 'ui'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n if (\n config.ui.library === 'mui' ||\n config.ui.library === 'chakra' ||\n config.ui.library === 'mantine' ||\n config.ui.library === 'antd' ||\n config.ui.library === 'nextui'\n ) {\n await removePath(join(root, 'components'));\n await removePath(join(root, 'src', 'theme.ts'));\n await removePath(join(root, 'src', 'theme.js'));\n await removePath(join(root, 'src', 'components', 'ui-demo.tsx'));\n await removePath(join(root, 'src', 'components', 'ui-demo.jsx'));\n }\n }\n\n if (category === 'auth') {\n if (config.auth.provider === 'nextauth') {\n await removePath(join(root, 'app', 'api', 'auth'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removeEnvKey(join(root, '.env.example'), 'NEXTAUTH_SECRET');\n await removeEnvKey(join(root, '.env.example'), 'NEXTAUTH_URL');\n }\n if (config.auth.provider === 'clerk') {\n await removePath(join(root, 'middleware.ts'));\n await removePath(join(root, 'middleware.js'));\n await removePath(join(root, 'src', 'lib', 'clerk.ts'));\n await removePath(join(root, 'src', 'lib', 'clerk.js'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removeEnvKey(join(root, '.env.example'), 'CLERK_SECRET_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY');\n }\n if (config.auth.provider === 'supabase') {\n await removePath(join(root, 'src', 'lib', 'supabase.ts'));\n await removePath(join(root, 'src', 'lib', 'supabase.js'));\n await removePath(join(root, 'src', 'lib', 'supabase-server.ts'));\n await removePath(join(root, 'src', 'lib', 'supabase-server.js'));\n await removePath(join(root, 'app', 'auth', 'protected'));\n await removePath(join(root, 'app', 'auth', 'signin'));\n await removePath(join(root, 'src', 'auth', 'signin.tsx'));\n await removePath(join(root, 'src', 'auth', 'signin.jsx'));\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_SUPABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_SUPABASE_ANON_KEY');\n }\n await removePath(join(root, 'auth'));\n }\n\n if (category === 'api') {\n if (config.api.type === 'rest') {\n await removePath(join(root, 'app', 'api', 'hello'));\n await removePath(join(root, 'app', 'api', 'users'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'server'));\n await removePath(join(root, 'src', 'api'));\n await removePath(join(root, 'src', 'api', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'api', 'client-usage.jsx'));\n }\n if (config.api.type === 'trpc') {\n await removePath(join(root, 'app', 'api', 'trpc'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'server', 'api'));\n await removePath(join(root, 'src', 'trpc'));\n await removePath(join(root, 'src', 'trpc', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'trpc', 'client-usage.jsx'));\n await removePath(join(root, 'src', 'server'));\n }\n if (config.api.type === 'graphql') {\n await removePath(join(root, 'app', 'api', 'graphql'));\n await removePath(join(root, 'app', 'examples'));\n await removePath(join(root, 'src', 'graphql'));\n await removePath(join(root, 'src', 'server'));\n await removePath(join(root, 'src', 'graphql', 'client-usage.tsx'));\n await removePath(join(root, 'src', 'graphql', 'client-usage.jsx'));\n }\n await removePath(join(root, 'api'));\n }\n\n if (category === 'database') {\n if (config.database.orm === 'drizzle') {\n await removePath(join(root, 'drizzle.config.ts'));\n await removePath(join(root, 'drizzle'));\n }\n if (config.database.orm === 'prisma') {\n await removePath(join(root, 'prisma'));\n await removePath(join(root, 'src', 'db', 'prisma.ts'));\n await removePath(join(root, 'src', 'db', 'prisma.js'));\n await removePath(join(root, 'src', 'db', 'prisma-example.ts'));\n await removePath(join(root, 'src', 'db', 'prisma-example.js'));\n }\n if (config.database.orm === 'mongoose') {\n await removePath(join(root, 'src', 'db', 'mongoose.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose.js'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.js'));\n }\n if (config.database.orm === 'typeorm') {\n await removePath(join(root, 'src', 'db', 'data-source.ts'));\n await removePath(join(root, 'src', 'db', 'data-source.js'));\n await removePath(join(root, 'src', 'db', 'entities'));\n await removePath(join(root, 'src', 'db', 'migrations'));\n }\n await removeEnvKey(join(root, '.env.example'), 'DATABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'NEON_API_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEON_PROJECT_ID');\n await removeEnvKey(join(root, '.env.example'), 'SUPABASE_URL');\n await removeEnvKey(join(root, '.env.example'), 'SUPABASE_ANON_KEY');\n }\n\n if (category === 'orm') {\n if (config.database.orm === 'drizzle') {\n await removePath(join(root, 'drizzle.config.ts'));\n await removePath(join(root, 'drizzle'));\n }\n if (config.database.orm === 'prisma') {\n await removePath(join(root, 'prisma'));\n await removePath(join(root, 'src', 'db', 'prisma.ts'));\n await removePath(join(root, 'src', 'db', 'prisma.js'));\n await removePath(join(root, 'src', 'db', 'prisma-example.ts'));\n await removePath(join(root, 'src', 'db', 'prisma-example.js'));\n }\n if (config.database.orm === 'mongoose') {\n await removePath(join(root, 'src', 'db', 'mongoose.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose.js'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.ts'));\n await removePath(join(root, 'src', 'db', 'mongoose-model.js'));\n }\n if (config.database.orm === 'typeorm') {\n await removePath(join(root, 'src', 'db', 'data-source.ts'));\n await removePath(join(root, 'src', 'db', 'data-source.js'));\n await removePath(join(root, 'src', 'db', 'entities'));\n await removePath(join(root, 'src', 'db', 'migrations'));\n }\n }\n\n if (category === 'feature') {\n const targets = value ? [value] : config.features;\n if (targets.includes('email')) {\n await removePath(join(root, 'features', 'email'));\n await removeEnvKey(join(root, '.env.example'), 'RESEND_API_KEY');\n await removePath(join(root, 'src', 'lib', 'resend.ts'));\n await removePath(join(root, 'src', 'lib', 'resend.js'));\n }\n if (targets.includes('storage')) {\n await removePath(join(root, 'features', 'storage'));\n await removeEnvKey(join(root, '.env.example'), 'CLOUDINARY_URL');\n await removePath(join(root, 'src', 'lib', 'storage.ts'));\n await removePath(join(root, 'src', 'lib', 'storage.js'));\n }\n if (targets.includes('payments')) {\n await removePath(join(root, 'features', 'payments'));\n await removeEnvKey(join(root, '.env.example'), 'STRIPE_SECRET_KEY');\n await removePath(join(root, 'src', 'lib', 'stripe.ts'));\n await removePath(join(root, 'src', 'lib', 'stripe.js'));\n }\n if (targets.includes('analytics')) {\n await removePath(join(root, 'features', 'analytics'));\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_POSTHOG_KEY');\n await removeEnvKey(join(root, '.env.example'), 'NEXT_PUBLIC_POSTHOG_HOST');\n await removePath(join(root, 'src', 'lib', 'posthog.ts'));\n await removePath(join(root, 'src', 'lib', 'posthog.js'));\n }\n if (targets.includes('error-tracking')) {\n await removePath(join(root, 'features', 'error-tracking'));\n await removeEnvKey(join(root, '.env.example'), 'SENTRY_DSN');\n await removePath(join(root, 'src', 'lib', 'sentry.ts'));\n await removePath(join(root, 'src', 'lib', 'sentry.js'));\n }\n }\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { syncPackageJson } from '../../utils/feature-update.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { resolveDependencies, resolveScripts } from '../../utils/dependency-resolver.js';\nimport { readPackageJson, writePackageJson } from '../../utils/package-json.js';\n\nexport const updateCommand = new Command('update')\n .option('--check', 'check for updates')\n .option('--major', 'allow major updates')\n .option('--live', 'compare against latest registry versions')\n .action(async (options) => {\n try {\n const cwd = process.cwd();\n\n const config = await readProjectConfig(cwd);\n const pkgPath = join(cwd, 'package.json');\n if (options.check) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf8')) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n const expectedScripts = resolveScripts(config);\n const expectedDeps = resolveDependencies(config, { allowMajor: Boolean(options.major) });\n\n const issues: string[] = [];\n for (const key of Object.keys(expectedScripts)) {\n if (!pkg.scripts || !(key in pkg.scripts)) {\n issues.push(`Missing script: ${key}`);\n } else if (pkg.scripts[key] !== expectedScripts[key]) {\n issues.push(`Script mismatch: ${key}`);\n }\n }\n\n for (const key of Object.keys(expectedDeps.dependencies)) {\n if (!pkg.dependencies || !(key in pkg.dependencies)) {\n issues.push(`Missing dependency: ${key}`);\n } else if (pkg.dependencies[key] !== expectedDeps.dependencies[key]) {\n issues.push(`Dependency version mismatch: ${key}`);\n }\n }\n\n for (const key of Object.keys(expectedDeps.devDependencies)) {\n if (!pkg.devDependencies || !(key in pkg.devDependencies)) {\n issues.push(`Missing devDependency: ${key}`);\n } else if (pkg.devDependencies[key] !== expectedDeps.devDependencies[key]) {\n issues.push(`Dev dependency version mismatch: ${key}`);\n }\n }\n\n if (options.live) {\n const { fetchLatestVersion } = await import('../../utils/npm-registry.js');\n const allDeps = {\n ...expectedDeps.dependencies,\n ...expectedDeps.devDependencies\n };\n for (const [name, version] of Object.entries(allDeps)) {\n const latest = await fetchLatestVersion(name);\n if (latest && !version.includes(latest)) {\n issues.push(`Latest available: ${name}@${latest} (current ${version})`);\n }\n }\n }\n\n if (issues.length === 0) {\n logger.info('No updates needed.');\n } else {\n for (const issue of issues) logger.warn(issue);\n }\n return;\n }\n\n await syncPackageJson(pkgPath, config, config);\n if (options.live) {\n const { fetchLatestVersion } = await import('../../utils/npm-registry.js');\n const pkg = await readPackageJson(pkgPath);\n const allowMajor = Boolean(options.major);\n\n const updateMap = async (deps: Record<string, string> | undefined) => {\n if (!deps) return;\n for (const [name, current] of Object.entries(deps)) {\n const latest = await fetchLatestVersion(name);\n if (!latest) continue;\n const currentMajor = parseMajor(current);\n const latestMajor = parseMajor(latest);\n if (!allowMajor && currentMajor !== null && latestMajor !== null && latestMajor > currentMajor) {\n continue;\n }\n deps[name] = `^${latest}`;\n }\n };\n\n await updateMap(pkg.dependencies);\n await updateMap(pkg.devDependencies);\n await writePackageJson(pkgPath, pkg);\n }\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info('Project updated.');\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\nfunction parseMajor(version: string): number | null {\n const match = version.match(/(\\d+)\\./);\n if (!match) return null;\n return Number(match[1]);\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { STACKFORGE_SCHEMA_VERSION } from '../../utils/schema.js';\nimport { checkProject, fixProject } from '../../utils/doctor.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\nimport { readFile } from 'node:fs/promises';\n\nexport const doctorCommand = new Command('doctor')\n .option('--fix', 'apply non-destructive fixes')\n .action(async (options) => {\n const cwd = process.cwd();\n const configPath = join(cwd, 'stackforge.json');\n if (!existsSync(configPath)) {\n logger.error('Missing stackforge.json. Run from a StackForge project root.');\n return;\n }\n\n let config;\n try {\n const raw = JSON.parse(await readFile(configPath, 'utf8')) as { _schemaVersion?: number };\n const schemaVersion = raw._schemaVersion ?? 0;\n if (schemaVersion !== STACKFORGE_SCHEMA_VERSION) {\n logger.warn(`stackforge.json schema version ${schemaVersion} (expected ${STACKFORGE_SCHEMA_VERSION})`);\n } else {\n logger.info('stackforge.json OK');\n }\n config = await readProjectConfig(cwd);\n } catch (err) {\n logger.error('Failed to read stackforge.json');\n return;\n }\n\n const pkgPath = join(cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n logger.error('Missing package.json');\n return;\n }\n const result = await checkProject(cwd);\n if (result.issues.length === 0) {\n logger.info('No issues found.');\n return;\n }\n\n for (const issue of result.issues) {\n logger.warn(issue);\n }\n\n if (options.fix) {\n await fixProject(result, cwd);\n logger.info('Applied fixes.');\n }\n });\n","import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { join, dirname, basename } from 'node:path';\nimport { collectScripts } from '../generators/scripts/scripts-registry.js';\nimport { collectDependencies } from '../generators/deps/deps-registry.js';\nimport { syncPackageJson } from './feature-update.js';\nimport { buildProjectReadme } from '../generators/core/readme.js';\nimport { writeTextFile } from './file-system.js';\nimport { appendEnvLine } from './env-file.js';\nimport { generateAiAgentConfigs } from '../ai-agents/config-generator.js';\nimport { readProjectConfig } from './project-config.js';\n\nexport interface DoctorResult {\n issues: string[];\n config?: Awaited<ReturnType<typeof readProjectConfig>>;\n pkgPath: string;\n envPath: string;\n hasConfig: boolean;\n hasPackageJson: boolean;\n}\n\nfunction requiredEnvKeys(config: NonNullable<DoctorResult['config']>): string[] {\n const keys: string[] = [];\n if (config.database.provider !== 'none') keys.push('DATABASE_URL');\n if (config.database.provider === 'neon') keys.push('NEON_API_KEY', 'NEON_PROJECT_ID');\n if (config.database.provider === 'supabase') keys.push('SUPABASE_URL', 'SUPABASE_ANON_KEY');\n if (config.auth.provider === 'nextauth') keys.push('NEXTAUTH_SECRET', 'NEXTAUTH_URL');\n if (config.auth.provider === 'clerk') keys.push('CLERK_SECRET_KEY', 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY');\n if (config.auth.provider === 'supabase') keys.push('NEXT_PUBLIC_SUPABASE_URL', 'NEXT_PUBLIC_SUPABASE_ANON_KEY');\n if (config.features.includes('email')) keys.push('RESEND_API_KEY');\n if (config.features.includes('storage')) keys.push('CLOUDINARY_URL');\n if (config.features.includes('payments')) keys.push('STRIPE_SECRET_KEY');\n if (config.features.includes('analytics')) keys.push('NEXT_PUBLIC_POSTHOG_KEY', 'NEXT_PUBLIC_POSTHOG_HOST');\n if (config.features.includes('error-tracking')) keys.push('SENTRY_DSN');\n return keys;\n}\n\nfunction agentFiles(agent: string): string[] {\n const files = ['context.json', 'tools.json'];\n if (agent === 'claude') files.push('claude_desktop_config.json');\n if (agent === 'copilot') files.push('functions.json');\n if (agent === 'codex') files.push('functions.json');\n if (agent === 'gemini') files.push('function_declarations.json');\n if (agent === 'cursor') files.push('.cursorrules');\n if (agent === 'codeium') files.push('server-config.json');\n if (agent === 'windsurf') files.push('cascade.json');\n if (agent === 'tabnine') files.push('config.json');\n return files;\n}\n\nexport async function checkProject(cwd: string): Promise<DoctorResult> {\n const configPath = join(cwd, 'stackforge.json');\n const pkgPath = join(cwd, 'package.json');\n const envPath = join(cwd, '.env.example');\n const issues: string[] = [];\n\n if (!existsSync(configPath)) {\n return {\n issues: ['Missing stackforge.json. Run from a StackForge project root.'],\n config: undefined,\n pkgPath,\n envPath,\n hasConfig: false,\n hasPackageJson: existsSync(pkgPath)\n };\n }\n\n if (!existsSync(pkgPath)) {\n return {\n issues: ['Missing package.json'],\n config: await readProjectConfig(cwd),\n pkgPath,\n envPath,\n hasConfig: true,\n hasPackageJson: false\n };\n }\n\n const config = await readProjectConfig(cwd);\n const pkg = JSON.parse(await readFile(pkgPath, 'utf8')) as {\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const requiredScripts = collectScripts(config);\n const requiredDeps = collectDependencies(config);\n\n for (const key of Object.keys(requiredScripts)) {\n if (!pkg.scripts || !(key in pkg.scripts)) {\n issues.push(`Missing script: ${key}`);\n }\n }\n\n for (const key of Object.keys(requiredDeps.dependencies)) {\n if (!pkg.dependencies || !(key in pkg.dependencies)) {\n issues.push(`Missing dependency: ${key}`);\n }\n }\n\n for (const key of Object.keys(requiredDeps.devDependencies)) {\n if (!pkg.devDependencies || !(key in pkg.devDependencies)) {\n issues.push(`Missing devDependency: ${key}`);\n }\n }\n\n let envContent = '';\n if (existsSync(envPath)) {\n envContent = await readFile(envPath, 'utf8');\n }\n const envKeys = new Set(\n envContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'))\n .map((line) => line.split('=')[0])\n );\n const requiredEnv = requiredEnvKeys(config);\n for (const key of requiredEnv) {\n if (!envKeys.has(key)) {\n issues.push(`Missing env key in .env.example: ${key}`);\n }\n }\n\n for (const agent of config.aiAgents) {\n const agentRoot = join(cwd, '.ai-agents', agent);\n for (const file of agentFiles(agent)) {\n if (!existsSync(join(agentRoot, file))) {\n issues.push(`Missing AI agent file: .ai-agents/${agent}/${file}`);\n }\n }\n if (agent === 'claude' && !existsSync(join(cwd, '.claude', 'claude_desktop_config.json'))) {\n issues.push('Missing Claude config: .claude/claude_desktop_config.json');\n }\n if (agent === 'codex' && !existsSync(join(cwd, '.codex', 'functions.json'))) {\n issues.push('Missing Codex config: .codex/functions.json');\n }\n if (agent === 'cursor' && !existsSync(join(cwd, '.cursor', 'extensions.json'))) {\n issues.push('Missing Cursor config: .cursor/extensions.json');\n }\n if (agent === 'windsurf' && !existsSync(join(cwd, '.windsurf', 'cascade.json'))) {\n issues.push('Missing Windsurf config: .windsurf/cascade.json');\n }\n if (agent === 'tabnine' && !existsSync(join(cwd, '.tabnine', 'config.json'))) {\n issues.push('Missing Tabnine config: .tabnine/config.json');\n }\n }\n\n return {\n issues,\n config,\n pkgPath,\n envPath,\n hasConfig: true,\n hasPackageJson: true\n };\n}\n\nexport async function fixProject(result: DoctorResult, cwd: string): Promise<void> {\n const { config, pkgPath, envPath } = result;\n if (!config) return;\n await syncPackageJson(pkgPath, config, config);\n\n const envContent = existsSync(envPath) ? await readFile(envPath, 'utf8') : '';\n const envKeys = new Set(\n envContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'))\n .map((line) => line.split('=')[0])\n );\n const missingEnv = requiredEnvKeys(config).filter((key) => !envKeys.has(key));\n for (const key of missingEnv) {\n await appendEnvLine(envPath, `${key}=\"\"`);\n }\n\n if (config.aiAgents.length > 0) {\n const base = basename(cwd) === config.projectName ? dirname(cwd) : cwd;\n await generateAiAgentConfigs(base, config);\n }\n\n const readme = buildProjectReadme(config);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n}\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const configureAgentsCommand = new Command('configure-agents')\n .option('--agents <list>', 'comma-separated list of agents')\n .action(async (options) => {\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const agents = options.agents\n ? String(options.agents)\n .split(',')\n .map((a: string) => a.trim())\n .filter(Boolean)\n : config.aiAgents;\n\n const invalid = (agents ?? []).filter((a) => !supported.agents.includes(a as typeof supported.agents[number]));\n if (invalid.length) {\n throw new Error(`Unsupported agents: ${invalid.join(', ')}`);\n }\n\n const next = { ...config, aiAgents: agents };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info('AI agents configured.');\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const addAgentCommand = new Command('add-agent')\n .argument('<agent>', 'agent to add')\n .action(async (agent) => {\n if (!supported.agents.includes(agent as typeof supported.agents[number])) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const set = new Set(config.aiAgents ?? []);\n set.add(agent);\n const next = { ...config, aiAgents: Array.from(set) };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info(`Added agent: ${agent}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { generateAiAgentConfigs } from '../../ai-agents/config-generator.js';\nimport { supported } from '../../utils/supported.js';\n\nexport const removeAgentCommand = new Command('remove-agent')\n .argument('<agent>', 'agent to remove')\n .action(async (agent) => {\n if (!supported.agents.includes(agent as typeof supported.agents[number])) {\n throw new Error(`Unsupported agent: ${agent}`);\n }\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const next = { ...config, aiAgents: (config.aiAgents ?? []).filter((a) => a !== agent) };\n await writeProjectConfig(cwd, next);\n await generateAiAgentConfigs(cwd, next, { dryRun: false, log: logger.info });\n logger.info(`Removed agent: ${agent}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig } from '../../utils/project-config.js';\n\nexport const listAgentsCommand = new Command('list-agents')\n .action(async () => {\n const config = await readProjectConfig(process.cwd());\n const agents = config.aiAgents ?? [];\n if (agents.length === 0) {\n logger.info('No agents configured.');\n return;\n }\n logger.info(`Configured agents: ${agents.join(', ')}`);\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { STACKFORGE_SCHEMA_VERSION } from '../../utils/schema.js';\nimport { migrateConfig } from '../../utils/migrations.js';\n\nexport const migrateCommand = new Command('migrate')\n .option('--dry-run', 'show planned migration without writing')\n .action(async (options) => {\n try {\n const cwd = process.cwd();\n const path = join(cwd, 'stackforge.json');\n const raw = await readFile(path, 'utf8');\n const parsed = JSON.parse(raw) as { _schemaVersion?: number };\n const current = parsed._schemaVersion ?? 0;\n\n if (current === STACKFORGE_SCHEMA_VERSION) {\n logger.info('No migration needed.');\n return;\n }\n\n logger.info(`Migrating schema ${current} -> ${STACKFORGE_SCHEMA_VERSION}`);\n const migrated = migrateConfig(parsed as any);\n if (!options.dryRun) {\n await writeFile(path, JSON.stringify(migrated, null, 2) + '\\n', 'utf8');\n logger.info('Migration complete.');\n }\n } catch (err) {\n logger.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { getPreset, presetNames } from '../../presets/index.js';\n\nexport const listPresetsCommand = new Command('list-presets')\n .option('--details', 'show preset details')\n .action((options) => {\n const presets = presetNames;\n for (const name of presets) {\n const preset = getPreset(name);\n if (!preset) {\n logger.info(`${name}: missing`);\n continue;\n }\n if (options.details) {\n const features = preset.features && preset.features.length ? preset.features.join(', ') : 'none';\n logger.info(`${name}: frontend=${preset.frontend?.type ?? 'n/a'} ui=${preset.ui?.library ?? 'n/a'} db=${preset.database?.provider ?? 'n/a'} orm=${preset.database?.orm ?? 'n/a'} auth=${preset.auth?.provider ?? 'n/a'} api=${preset.api?.type ?? 'n/a'} features=${features}`);\n } else {\n logger.info(`${name}: available`);\n }\n }\n });","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { removeLockfiles } from '../../utils/package-manager.js';\nimport { runInstall } from '../../utils/install.js';\nimport type { PackageManager } from '../../types/config.js';\n\nconst PACKAGE_MANAGERS: PackageManager[] = ['npm', 'pnpm', 'yarn', 'bun'];\n\nexport const useCommand = new Command('use')\n .argument('<packageManager>', 'npm | pnpm | yarn | bun')\n .option('--no-install', 'skip installing dependencies after switching')\n .action(async (packageManager: string, options) => {\n if (!PACKAGE_MANAGERS.includes(packageManager as PackageManager)) {\n throw new Error(`Unsupported package manager: ${packageManager}`);\n }\n\n const cwd = process.cwd();\n const config = await readProjectConfig(cwd);\n const nextManager = packageManager as PackageManager;\n\n if (config.packageManager === nextManager) {\n logger.info(`Package manager already set to ${nextManager}.`);\n return;\n }\n\n await removeLockfiles(cwd);\n await writeProjectConfig(cwd, { ...config, packageManager: nextManager });\n\n if (options.install !== false) {\n await runInstall(nextManager, cwd);\n }\n\n logger.info(`Package manager switched to ${nextManager}.`);\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { checkProject } from '../../utils/doctor.js';\n\nexport const validateCommand = new Command('validate')\n .description('validate project configuration and generated files')\n .action(async () => {\n const result = await checkProject(process.cwd());\n if (result.issues.length === 0) {\n logger.info('Validation passed.');\n return;\n }\n for (const issue of result.issues) {\n logger.error(issue);\n }\n process.exitCode = 1;\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { checkProject, fixProject } from '../../utils/doctor.js';\n\nexport const fixCommand = new Command('fix')\n .description('apply safe fixes to project configuration')\n .action(async () => {\n const cwd = process.cwd();\n const result = await checkProject(cwd);\n if (result.issues.length === 0) {\n logger.info('No issues found.');\n return;\n }\n await fixProject(result, cwd);\n logger.info('Applied fixes.');\n });\n","import { Command } from 'commander';\nimport { logger } from '../../utils/logger.js';\nimport { readProjectConfig, writeProjectConfig } from '../../utils/project-config.js';\nimport { getPreset } from '../../presets/index.js';\nimport { validateConfig } from '../validators/config.js';\nimport { validateCompatibility } from '../validators/compatibility.js';\nimport { validateDependencies } from '../validators/dependencies.js';\nimport { cleanupFeature } from '../../utils/feature-cleanup.js';\nimport { syncPackageJson } from '../../utils/feature-update.js';\nimport { generateUiFiles } from '../../generators/ui/ui-files.js';\nimport { generateDatabaseFiles } from '../../generators/database/database-files.js';\nimport { generateAuthFiles } from '../../generators/auth/auth-files.js';\nimport { generateApiFiles } from '../../generators/api/api-files.js';\nimport { generateFeatureFiles } from '../../generators/features/feature-files.js';\nimport { generateFrontendFiles } from '../../generators/frontend/frontend-files.js';\nimport { buildProjectReadme } from '../../generators/core/readme.js';\nimport { writeTextFile } from '../../utils/file-system.js';\nimport { join, dirname } from 'node:path';\n\nexport const upgradeCommand = new Command('upgrade')\n .option('--preset <name>', 'preset to upgrade to')\n .action(async (options) => {\n const cwd = process.cwd();\n const current = await readProjectConfig(cwd);\n const preset = getPreset(options.preset);\n if (!preset) {\n throw new Error('Unknown preset. Use stackforge list-presets.');\n }\n\n const next = {\n ...current,\n ...preset,\n preset: options.preset,\n projectName: current.projectName,\n packageManager: current.packageManager,\n aiAgents: current.aiAgents\n };\n\n if (current.frontend.type !== next.frontend.type || current.frontend.language !== next.frontend.language) {\n throw new Error('Preset upgrade does not support changing frontend type or language yet.');\n }\n\n validateConfig(next);\n validateCompatibility(next);\n validateDependencies(next);\n\n if (current.ui.library !== next.ui.library) {\n await cleanupFeature(cwd, current, 'ui', current.ui.library);\n }\n if (current.database.provider !== next.database.provider) {\n await cleanupFeature(cwd, current, 'database', current.database.provider);\n }\n if (current.database.orm !== next.database.orm) {\n await cleanupFeature(cwd, current, 'orm', current.database.orm);\n }\n if (current.auth.provider !== next.auth.provider) {\n await cleanupFeature(cwd, current, 'auth', current.auth.provider);\n }\n if (current.api.type !== next.api.type) {\n await cleanupFeature(cwd, current, 'api', current.api.type);\n }\n const removedFeatures = current.features.filter((f) => !next.features.includes(f));\n for (const feature of removedFeatures) {\n await cleanupFeature(cwd, current, 'feature', feature);\n }\n\n await writeProjectConfig(cwd, next);\n await syncPackageJson(join(cwd, 'package.json'), current, next);\n\n const root = dirname(cwd);\n await generateFrontendFiles(root, next);\n await generateUiFiles(root, next);\n await generateDatabaseFiles(root, next);\n await generateAuthFiles(root, next);\n await generateApiFiles(root, next);\n await generateFeatureFiles(root, next);\n\n const readme = buildProjectReadme(next);\n await writeTextFile(join(cwd, 'README.md'), readme + '\\n');\n\n logger.info(`Upgraded project to preset: ${options.preset}`);\n });\n"],"mappings":"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","names":["Command","base","join","readFile","writeFile","join","join","writeFile","readFile","join","join","readFile","writeFile","dirname","readFile","writeFile","dirname","join","existsSync","join","join","join","join","join","join","join","join","join","join","existsSync","join","existsSync","join","join","supported","resolve","join","Command","Command","Command","readFile","writeFile","dirname","join","Command","dirname","join","Command","join","join","join","parseFeature","Command","Command","join","readFile","Command","join","readFile","version","Command","existsSync","join","existsSync","readFile","join","dirname","join","existsSync","readFile","dirname","readFile","Command","join","existsSync","Command","Command","Command","Command","Command","Command","Command","Command","Command","readFile","writeFile","join","Command","join","readFile","writeFile","Command","Command","presets","Command","Command","Command","Command","Command","Command","Command","join","dirname","Command","require","Command"]}
|