#!/usr/bin/env node import { Command } from 'commander'; import { readFileSync } from 'fs'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { initCommand } from './commands/init.js'; import { versionsCommand } from './commands/versions.js'; import { updateCommand } from './commands/update.js'; import type { AIType } from './types/index.js'; import { AI_TYPES } from './types/index.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')); const program = new Command(); program .name('uipro') .description('CLI to install UI/UX Pro Max skill for AI coding assistants') .version(pkg.version); program .command('init') .description('Install UI/UX Pro Max skill to current project') .option('-a, --ai ', `AI assistant type (${AI_TYPES.join(', ')})`) .option('-f, --force', 'Overwrite existing files') .option('-o, --offline', 'Skip GitHub download, use bundled assets only') .action(async (options) => { if (options.ai && !AI_TYPES.includes(options.ai)) { console.error(`Invalid AI type: ${options.ai}`); console.error(`Valid types: ${AI_TYPES.join(', ')}`); process.exit(1); } await initCommand({ ai: options.ai as AIType | undefined, force: options.force, offline: options.offline, }); }); program .command('versions') .description('List available versions') .action(versionsCommand); program .command('update') .description('Update UI/UX Pro Max to latest version') .option('-a, --ai ', `AI assistant type (${AI_TYPES.join(', ')})`) .action(async (options) => { if (options.ai && !AI_TYPES.includes(options.ai)) { console.error(`Invalid AI type: ${options.ai}`); console.error(`Valid types: ${AI_TYPES.join(', ')}`); process.exit(1); } await updateCommand({ ai: options.ai as AIType | undefined, }); }); program.parse();