@aiorg/cli 1.1.6 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/lib/api.ts","../src/lib/auth.ts","../src/utils/logger.ts","../src/commands/logout.ts","../src/commands/init.ts","../src/lib/extract.ts","../src/commands/upgrade.ts","../src/lib/detect.ts","../src/lib/apply.ts","../src/commands/version.ts","../src/commands/list.ts"],"sourcesContent":["import cac from 'cac'\nimport { login } from './commands/login.js'\nimport { logout } from './commands/logout.js'\nimport { init } from './commands/init.js'\nimport { upgrade } from './commands/upgrade.js'\nimport { version } from './commands/version.js'\nimport { list } from './commands/list.js'\nimport * as logger from './utils/logger.js'\n\nconst cli = cac('aiorg')\n\n// Login command\ncli\n .command('login', 'Save your license key')\n .action(async () => {\n try {\n await login()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Login failed')\n process.exit(1)\n }\n })\n\n// Logout command\ncli\n .command('logout', 'Remove saved license key')\n .action(async () => {\n try {\n await logout()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Logout failed')\n process.exit(1)\n }\n })\n\n// Init command\ncli\n .command('init <kit> [path]', 'Download and extract a kit')\n .option('--force', 'Overwrite existing folder')\n .action(async (kit: string, path: string | undefined, options: { force?: boolean }) => {\n try {\n await init(kit, path, options)\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Init failed')\n process.exit(1)\n }\n })\n\n// Upgrade command\ncli\n .command('upgrade', 'Upgrade kit in current directory')\n .option('--yes, -y', 'Skip confirmation')\n .option('--backup', 'Always create git backup')\n .action(async (options: { yes?: boolean; backup?: boolean }) => {\n try {\n await upgrade(options)\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Upgrade failed')\n process.exit(1)\n }\n })\n\n// List command\ncli\n .command('list', 'Show available kits')\n .alias('ls')\n .action(async () => {\n try {\n await list()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Failed to list kits')\n process.exit(1)\n }\n })\n\n// Version command\ncli\n .command('version', 'Show CLI and kit versions')\n .action(async () => {\n try {\n await version()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Version check failed')\n process.exit(1)\n }\n })\n\n// Global options\ncli.help()\ncli.version('1.0.0')\n\n// Parse and run\ncli.parse()\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { verifyLicense } from '../lib/api.js'\nimport { saveLicenseKey, isLoggedIn, loadConfig } from '../lib/auth.js'\nimport * as logger from '../utils/logger.js'\n\nexport async function login(): Promise<void> {\n p.intro(pc.cyan('aiorg login'))\n\n // Check if already logged in\n if (await isLoggedIn()) {\n const config = await loadConfig()\n const shouldContinue = await p.confirm({\n message: `Already logged in${config?.email ? ` as ${pc.cyan(config.email)}` : ''}. Replace license key?`,\n initialValue: false,\n })\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.outro('Login cancelled')\n return\n }\n }\n\n // Get license key\n const licenseKey = await p.text({\n message: 'Enter your license key',\n placeholder: 'ak_live_xxxxx',\n validate: (value) => {\n if (!value) return 'License key is required'\n if (!value.startsWith('ak_')) return 'License key should start with \"ak_\"'\n return undefined\n },\n })\n\n if (p.isCancel(licenseKey)) {\n p.cancel('Login cancelled')\n process.exit(0)\n }\n\n // Verify with API\n const spinner = p.spinner()\n spinner.start('Verifying license...')\n\n try {\n const result = await verifyLicense(licenseKey)\n\n if (!result.valid) {\n spinner.stop('License verification failed')\n logger.error(result.error || 'Invalid license key')\n process.exit(1)\n }\n\n // Save to config\n const kitsRecord: Record<string, { tier: 'free' | 'paid'; purchasedAt: string }> = {}\n if (result.kits) {\n for (const kit of result.kits) {\n kitsRecord[kit.name] = {\n tier: kit.tier,\n purchasedAt: kit.purchasedAt,\n }\n }\n }\n\n await saveLicenseKey(licenseKey, result.email, kitsRecord)\n spinner.stop('License verified')\n\n // Show success\n logger.blank()\n logger.success(`Logged in${result.email ? ` as ${pc.cyan(result.email)}` : ''}`)\n\n if (result.kits && result.kits.length > 0) {\n logger.blank()\n logger.log('Licensed kits:')\n for (const kit of result.kits) {\n logger.listItem(`${kit.name} (${kit.tier})`)\n }\n }\n\n p.outro('Ready to use aiorg kits!')\n } catch (error) {\n spinner.stop('License verification failed')\n throw error\n }\n}\n","import { z } from 'zod'\n\nconst API_BASE_URL = process.env.AIORG_API_URL?.trim() || 'https://aiorg.dev'\nconst API_TIMEOUT_MS = 30000 // 30 seconds\n\n/**\n * Fetch with timeout support\n */\nasync function fetchWithTimeout(\n url: string,\n options: RequestInit = {},\n timeoutMs: number = API_TIMEOUT_MS\n): Promise<Response> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n })\n return response\n } finally {\n clearTimeout(timeout)\n }\n}\n\n// Response schemas\nconst LatestVersionSchema = z.object({\n version: z.string(),\n releasedAt: z.string(),\n packageName: z.string(),\n packageDisplayName: z.string(),\n changelog: z.record(z.string(), z.any()).optional(),\n tier: z.enum(['free', 'paid', 'private']).optional(),\n type: z.enum(['template', 'companion', 'inject']).optional(),\n})\n\nconst DownloadResponseSchema = z.object({\n downloadUrl: z.string(),\n version: z.string(),\n filename: z.string(),\n})\n\nconst VerifyLicenseResponseSchema = z.object({\n valid: z.boolean(),\n email: z.string().optional(),\n kits: z\n .array(\n z.object({\n name: z.string(),\n tier: z.enum(['free', 'paid', 'private']),\n purchasedAt: z.string(),\n })\n )\n .optional(),\n error: z.string().optional(),\n})\n\nconst ListKitsSchema = z.object({\n kits: z.array(z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string().nullable(),\n tier: z.enum(['free', 'paid', 'private']),\n type: z.enum(['template', 'companion', 'inject']),\n deployMode: z.string().nullable(),\n version: z.string(),\n priceCents: z.number(),\n }))\n})\n\nexport type LatestVersion = z.infer<typeof LatestVersionSchema>\nexport type DownloadResponse = z.infer<typeof DownloadResponseSchema>\nexport type VerifyLicenseResponse = z.infer<typeof VerifyLicenseResponseSchema>\nexport type ListKitsResponse = z.infer<typeof ListKitsSchema>\n\nclass APIError extends Error {\n constructor(\n message: string,\n public statusCode?: number\n ) {\n super(message)\n this.name = 'APIError'\n }\n}\n\n/**\n * Fetch latest version info for a kit\n */\nexport async function fetchLatestVersion(\n kitName: string\n): Promise<LatestVersion> {\n const url = `${API_BASE_URL}/api/kits/${kitName}/latest`\n\n try {\n const response = await fetchWithTimeout(url)\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new APIError(`Kit not found: \"${kitName}\"`, 404)\n }\n throw new APIError(`Failed to fetch version info`, response.status)\n }\n\n const data = await response.json()\n return LatestVersionSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Get download URL for a kit (license key optional for free kits)\n */\nexport async function getDownloadUrl(\n kitName: string,\n licenseKey: string | null\n): Promise<DownloadResponse> {\n const url = `${API_BASE_URL}/api/kits/${kitName}/download`\n\n const headers: Record<string, string> = {}\n if (licenseKey) {\n headers.Authorization = `Bearer ${licenseKey}`\n }\n\n try {\n const response = await fetchWithTimeout(url, { headers })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new APIError('Invalid or expired license key', 401)\n }\n if (response.status === 403) {\n throw new APIError(\n 'License key does not have access to this kit',\n 403\n )\n }\n if (response.status === 404) {\n throw new APIError(`Kit not found: \"${kitName}\"`, 404)\n }\n throw new APIError(`Failed to get download URL`, response.status)\n }\n\n const data = await response.json()\n return DownloadResponseSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Verify a license key with the API\n */\nexport async function verifyLicense(\n licenseKey: string,\n kitName?: string\n): Promise<VerifyLicenseResponse> {\n const url = `${API_BASE_URL}/api/licenses/verify`\n\n try {\n const response = await fetchWithTimeout(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: licenseKey,\n kit: kitName,\n }),\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({})) as { error?: string }\n throw new APIError(\n data.error || 'License verification failed',\n response.status\n )\n }\n\n const data = await response.json()\n return VerifyLicenseResponseSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Download a file from a URL\n */\nexport async function downloadFile(url: string): Promise<ArrayBuffer> {\n const DOWNLOAD_TIMEOUT_MS = 120000 // 2 minutes for file downloads\n\n try {\n const response = await fetchWithTimeout(url, {}, DOWNLOAD_TIMEOUT_MS)\n\n if (!response.ok) {\n throw new APIError(`Download failed`, response.status)\n }\n\n return await response.arrayBuffer()\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Download timed out')\n }\n throw new APIError(\n `Download failed: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Fetch list of all available kits\n */\nexport async function fetchKitsList(): Promise<ListKitsResponse> {\n const url = `${API_BASE_URL}/api/kits`\n\n try {\n const response = await fetchWithTimeout(url)\n\n if (!response.ok) {\n throw new APIError('Failed to fetch kits list', response.status)\n }\n\n const data = await response.json()\n return ListKitsSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport os from 'os'\nimport { z } from 'zod'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.aiorg')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\nconst KitLicenseSchema = z.object({\n tier: z.enum(['free', 'paid', 'private']),\n purchasedAt: z.string(),\n})\n\nconst ConfigSchema = z.object({\n licenseKey: z.string(),\n email: z.string().optional(),\n kits: z.record(z.string(), KitLicenseSchema).optional(),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\nexport type KitLicense = z.infer<typeof KitLicenseSchema>\n\n/**\n * Get the config directory path\n */\nexport function getConfigDir(): string {\n return CONFIG_DIR\n}\n\n/**\n * Get the config file path\n */\nexport function getConfigFile(): string {\n return CONFIG_FILE\n}\n\n/**\n * Ensure config directory exists\n */\nexport async function ensureConfigDir(): Promise<void> {\n await fs.ensureDir(CONFIG_DIR)\n}\n\n/**\n * Check if user is logged in (has config file with license key)\n */\nexport async function isLoggedIn(): Promise<boolean> {\n try {\n const config = await loadConfig()\n return !!config?.licenseKey\n } catch {\n return false\n }\n}\n\n/**\n * Load config from disk\n */\nexport async function loadConfig(): Promise<Config | null> {\n try {\n if (!(await fs.pathExists(CONFIG_FILE))) {\n return null\n }\n const raw = await fs.readJson(CONFIG_FILE)\n return ConfigSchema.parse(raw)\n } catch {\n return null\n }\n}\n\n/**\n * Save config to disk\n */\nexport async function saveConfig(config: Config): Promise<void> {\n await ensureConfigDir()\n await fs.writeJson(CONFIG_FILE, config, { spaces: 2 })\n}\n\n/**\n * Get license key from config or environment\n */\nexport async function getLicenseKey(): Promise<string | null> {\n // Check environment first\n const envKey = process.env.AIORG_LICENSE_KEY\n if (envKey) {\n return envKey\n }\n\n // Check config file\n const config = await loadConfig()\n return config?.licenseKey ?? null\n}\n\n/**\n * Save license key to config\n */\nexport async function saveLicenseKey(\n licenseKey: string,\n email?: string,\n kits?: Record<string, KitLicense>\n): Promise<void> {\n const existing = await loadConfig()\n await saveConfig({\n ...(existing || {}),\n licenseKey,\n email: email ?? existing?.email,\n kits: kits ?? existing?.kits,\n })\n}\n\n/**\n * Clear config (logout)\n */\nexport async function clearConfig(): Promise<void> {\n try {\n await fs.remove(CONFIG_FILE)\n } catch {\n // Ignore errors\n }\n}\n\n/**\n * Add kit to user's licensed kits\n */\nexport async function addLicensedKit(\n kitName: string,\n tier: 'free' | 'paid' | 'private' = 'paid'\n): Promise<void> {\n const config = await loadConfig()\n if (!config) {\n throw new Error('Not logged in')\n }\n\n const kits = config.kits ?? {}\n kits[kitName] = {\n tier,\n purchasedAt: new Date().toISOString().split('T')[0],\n }\n\n await saveConfig({ ...config, kits })\n}\n","import pc from 'picocolors'\n\n/**\n * Log a success message\n */\nexport function success(message: string): void {\n console.log(pc.green('✓'), message)\n}\n\n/**\n * Log an error message\n */\nexport function error(message: string): void {\n console.log(pc.red('✗'), message)\n}\n\n/**\n * Log a warning message\n */\nexport function warn(message: string): void {\n console.log(pc.yellow('!'), message)\n}\n\n/**\n * Log an info message\n */\nexport function info(message: string): void {\n console.log(pc.blue('ℹ'), message)\n}\n\n/**\n * Log a plain message\n */\nexport function log(message: string): void {\n console.log(message)\n}\n\n/**\n * Log a blank line\n */\nexport function blank(): void {\n console.log()\n}\n\n/**\n * Log a header\n */\nexport function header(title: string): void {\n console.log()\n console.log(pc.bold(title))\n console.log(pc.dim('─'.repeat(40)))\n}\n\n/**\n * Log a key-value pair\n */\nexport function keyValue(key: string, value: string): void {\n console.log(`${pc.dim(key + ':')} ${value}`)\n}\n\n/**\n * Log a list item\n */\nexport function listItem(item: string, indent: number = 0): void {\n const prefix = ' '.repeat(indent)\n console.log(`${prefix}${pc.dim('•')} ${item}`)\n}\n\n/**\n * Format a version for display\n */\nexport function formatVersion(version: string): string {\n return pc.cyan(`v${version}`)\n}\n\n/**\n * Format a kit name for display\n */\nexport function formatKit(name: string): string {\n return pc.magenta(name)\n}\n\n/**\n * Format a path for display\n */\nexport function formatPath(path: string): string {\n return pc.yellow(path)\n}\n\n/**\n * Format a command for display\n */\nexport function formatCommand(cmd: string): string {\n return pc.cyan(cmd)\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { clearConfig, isLoggedIn, loadConfig } from '../lib/auth.js'\nimport * as logger from '../utils/logger.js'\n\nexport async function logout(): Promise<void> {\n p.intro(pc.cyan('aiorg logout'))\n\n // Check if logged in\n if (!(await isLoggedIn())) {\n logger.info('Not currently logged in')\n p.outro('')\n return\n }\n\n const config = await loadConfig()\n const email = config?.email\n\n // Confirm\n const shouldLogout = await p.confirm({\n message: `Log out${email ? ` from ${pc.cyan(email)}` : ''}?`,\n initialValue: true,\n })\n\n if (p.isCancel(shouldLogout) || !shouldLogout) {\n p.cancel('Logout cancelled')\n return\n }\n\n // Clear config\n await clearConfig()\n\n logger.success('Logged out')\n p.outro('')\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport path from 'path'\nimport os from 'os'\nimport { getLicenseKey, isLoggedIn } from '../lib/auth.js'\nimport { fetchLatestVersion, getDownloadUrl, downloadFile } from '../lib/api.js'\nimport {\n createTempDir,\n saveToFile,\n extractZipToDir,\n cleanupTempDir,\n dirExistsAndNotEmpty,\n getFileSizeKB,\n} from '../lib/extract.js'\nimport * as logger from '../utils/logger.js'\nimport { login } from './login.js'\n\ninterface InitOptions {\n force?: boolean\n}\n\nexport async function init(\n kitName: string,\n targetPath: string | undefined,\n options: InitOptions\n): Promise<void> {\n p.intro(pc.cyan(`aiorg init ${kitName}`))\n\n // Resolve target path\n const resolvedPath = targetPath\n ? path.resolve(targetPath.replace(/^~/, os.homedir()))\n : path.resolve(process.cwd(), kitName)\n\n // Check if target exists\n if (!options.force && (await dirExistsAndNotEmpty(resolvedPath))) {\n logger.error(`Folder already exists: ${pc.yellow(resolvedPath)}`)\n logger.log(pc.dim('Use --force to overwrite'))\n process.exit(1)\n }\n\n // Fetch latest version info first (to check tier)\n const spinner = p.spinner()\n spinner.start('Fetching version info...')\n\n let versionInfo\n try {\n versionInfo = await fetchLatestVersion(kitName)\n spinner.stop(`Found ${pc.cyan(versionInfo.packageDisplayName)} v${versionInfo.version}`)\n } catch (error) {\n spinner.stop('Failed to fetch version info')\n throw error\n }\n\n const isFreeKit = versionInfo.tier === 'free'\n let licenseKey: string | null = null\n\n // Only require login for paid kits\n if (!isFreeKit) {\n if (!(await isLoggedIn())) {\n logger.info('Not logged in. Please log in first.')\n logger.blank()\n await login()\n logger.blank()\n }\n\n licenseKey = await getLicenseKey()\n if (!licenseKey) {\n logger.error('No license key found. Run \"aiorg login\" first.')\n process.exit(1)\n }\n }\n\n // Get download URL\n if (isFreeKit) {\n spinner.start('Getting download URL...')\n } else {\n spinner.start('Verifying license...')\n }\n\n let downloadInfo\n try {\n downloadInfo = await getDownloadUrl(kitName, licenseKey)\n spinner.stop(isFreeKit ? 'Ready to download' : 'License verified')\n } catch (error) {\n spinner.stop(isFreeKit ? 'Failed to get download URL' : 'License verification failed')\n throw error\n }\n\n // Download ZIP\n spinner.start(`Downloading ${kitName} v${versionInfo.version}...`)\n\n let tempDir: string | null = null\n try {\n tempDir = await createTempDir('aiorg-init-')\n const zipPath = path.join(tempDir, 'kit.zip')\n\n const zipData = await downloadFile(downloadInfo.downloadUrl)\n await saveToFile(zipData, zipPath)\n\n const sizeKB = await getFileSizeKB(zipPath)\n spinner.stop(`Downloaded ${kitName} v${versionInfo.version} (${sizeKB} KB)`)\n\n // Extract to target\n spinner.start(`Extracting to ${resolvedPath}...`)\n await extractZipToDir(zipPath, resolvedPath)\n spinner.stop(`Extracted to ${pc.yellow(resolvedPath)}`)\n\n // Cleanup\n await cleanupTempDir(tempDir)\n } catch (error) {\n if (tempDir) {\n await cleanupTempDir(tempDir)\n }\n throw error\n }\n\n // Success message\n logger.blank()\n logger.success(`${versionInfo.packageDisplayName} v${versionInfo.version} installed!`)\n logger.blank()\n logger.log('Next steps:')\n logger.listItem(`cd ${resolvedPath}`)\n logger.listItem('claude')\n logger.listItem('/setup')\n\n // Kit-specific outro messages\n const outroMessages: Record<string, string> = {\n 'investor-os': 'Happy investing!',\n }\n const outro = outroMessages[kitName] || 'Happy building!'\n p.outro(pc.green(outro))\n}\n","import extractZip from 'extract-zip'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport os from 'os'\n\n/**\n * Create a temporary directory for downloads\n */\nexport async function createTempDir(prefix: string = 'aiorg-'): Promise<string> {\n const tempDir = path.join(os.tmpdir(), `${prefix}${Date.now()}`)\n await fs.ensureDir(tempDir)\n return tempDir\n}\n\n/**\n * Save buffer to a file\n */\nexport async function saveToFile(\n data: ArrayBuffer,\n filePath: string\n): Promise<void> {\n await fs.ensureDir(path.dirname(filePath))\n await fs.writeFile(filePath, Buffer.from(data))\n}\n\n/**\n * Extract ZIP file to a directory\n */\nexport async function extractZipToDir(\n zipPath: string,\n destPath: string\n): Promise<void> {\n await fs.ensureDir(destPath)\n await extractZip(zipPath, { dir: destPath })\n}\n\n/**\n * Clean up temporary directory\n */\nexport async function cleanupTempDir(tempDir: string): Promise<void> {\n try {\n await fs.remove(tempDir)\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * Check if a directory exists and is not empty\n */\nexport async function dirExistsAndNotEmpty(dirPath: string): Promise<boolean> {\n try {\n const exists = await fs.pathExists(dirPath)\n if (!exists) return false\n\n const files = await fs.readdir(dirPath)\n return files.length > 0\n } catch {\n return false\n }\n}\n\n/**\n * Get the size of a file in KB\n */\nexport async function getFileSizeKB(filePath: string): Promise<number> {\n const stats = await fs.stat(filePath)\n return Math.round(stats.size / 1024)\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport path from 'path'\nimport semver from 'semver'\nimport { detectKitInCwd, detectKit } from '../lib/detect.js'\nimport { getLicenseKey, isLoggedIn } from '../lib/auth.js'\nimport { fetchLatestVersion, getDownloadUrl, downloadFile } from '../lib/api.js'\nimport {\n createTempDir,\n saveToFile,\n extractZipToDir,\n cleanupTempDir,\n getFileSizeKB,\n} from '../lib/extract.js'\nimport { applyFileCategories, isGitRepo, createGitBackup } from '../lib/apply.js'\nimport * as logger from '../utils/logger.js'\nimport { login } from './login.js'\n\ninterface UpgradeOptions {\n yes?: boolean\n backup?: boolean\n}\n\nexport async function upgrade(options: UpgradeOptions): Promise<void> {\n p.intro(pc.cyan('aiorg upgrade'))\n\n // Detect kit in current directory\n const kit = await detectKitInCwd()\n\n if (!kit) {\n logger.error('Not in a kit directory')\n logger.log(pc.dim('Run this command from a folder with .claude/version.json'))\n process.exit(1)\n }\n\n logger.keyValue('Kit', pc.magenta(kit.displayName))\n logger.keyValue('Current version', pc.cyan(`v${kit.version}`))\n\n // Check for updates\n const spinner = p.spinner()\n spinner.start('Checking for updates...')\n\n let latest\n try {\n latest = await fetchLatestVersion(kit.name)\n spinner.stop('Version info fetched')\n } catch (error) {\n spinner.stop('Failed to check for updates')\n throw error\n }\n\n // Compare versions\n if (!semver.gt(latest.version, kit.version)) {\n logger.blank()\n logger.success(`Already on latest version (${pc.cyan(`v${kit.version}`)})`)\n p.outro('')\n return\n }\n\n // Show update available\n logger.blank()\n logger.log(\n `Update available: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n\n // Show changelog for ALL intermediate versions\n // API returns allVersions array with { version, changelog, releasedAt } objects\n if (latest.allVersions && Array.isArray(latest.allVersions)) {\n // Filter versions between current and latest (exclusive current, inclusive latest)\n const versionsToShow = latest.allVersions\n .filter((v: { version: string }) => {\n if (!semver.valid(v.version)) return false\n try {\n return semver.gt(v.version, kit.version) && semver.lte(v.version, latest.version)\n } catch {\n return false\n }\n })\n .sort((a: { version: string }, b: { version: string }) =>\n semver.rcompare(a.version, b.version)\n ) // newest first\n\n if (versionsToShow.length > 0) {\n logger.blank()\n const versionCount = versionsToShow.length\n logger.header(`Changelog (${versionCount} version${versionCount > 1 ? 's' : ''})`)\n\n for (const versionEntry of versionsToShow) {\n const { version, changelog: entry } = versionEntry as {\n version: string\n changelog: { highlights?: string[]; added?: string[]; upgradeNotes?: string }\n }\n if (!entry) continue\n\n // Version header with highlights\n const highlights = entry.highlights?.join(', ') || ''\n logger.blank()\n logger.log(`${pc.green(`v${version}`)}${highlights ? ` - ${pc.white(highlights)}` : ''}`)\n\n // Show first 2 added items (condensed)\n if (entry.added && entry.added.length > 0) {\n for (const item of entry.added.slice(0, 2)) {\n logger.log(pc.dim(` + ${item}`))\n }\n if (entry.added.length > 2) {\n logger.log(pc.dim(` + ... and ${entry.added.length - 2} more`))\n }\n }\n\n // Show upgrade notes if present (important for breaking changes)\n if (entry.upgradeNotes && version === latest.version) {\n logger.log(pc.yellow(` Note: ${entry.upgradeNotes}`))\n }\n }\n }\n }\n\n // Show what will be preserved\n logger.blank()\n logger.log('Your data will be preserved:')\n const neverTouch = kit.versionJson.fileCategories?.neverTouch ?? []\n for (const pattern of neverTouch.slice(0, 5)) {\n logger.listItem(pc.dim(pattern))\n }\n if (neverTouch.length > 5) {\n logger.log(pc.dim(` ... and ${neverTouch.length - 5} more patterns`))\n }\n\n // Confirm upgrade\n if (!options.yes) {\n logger.blank()\n const shouldUpgrade = await p.confirm({\n message: 'Proceed with upgrade?',\n initialValue: true,\n })\n\n if (p.isCancel(shouldUpgrade) || !shouldUpgrade) {\n p.cancel('Upgrade cancelled')\n return\n }\n }\n\n // Check if kit is free (no license required)\n const isFreeKit = latest.tier === 'free'\n let licenseKey: string | null = null\n\n // Only require login for paid kits\n if (!isFreeKit) {\n if (!(await isLoggedIn())) {\n logger.blank()\n logger.info('Login required for download')\n await login()\n logger.blank()\n }\n\n licenseKey = await getLicenseKey()\n if (!licenseKey) {\n logger.error('No license key found')\n process.exit(1)\n }\n }\n\n // Git backup\n const inGitRepo = await isGitRepo(kit.rootPath)\n if (inGitRepo) {\n if (options.backup) {\n spinner.start('Creating git backup...')\n const created = await createGitBackup(\n kit.rootPath,\n `chore: backup before upgrade to v${latest.version}`\n )\n spinner.stop(created ? 'Git backup created' : 'No changes to backup')\n } else if (!options.yes) {\n const shouldBackup = await p.confirm({\n message: 'Create git backup commit first?',\n initialValue: true,\n })\n\n if (shouldBackup === true) {\n spinner.start('Creating git backup...')\n const created = await createGitBackup(\n kit.rootPath,\n `chore: backup before upgrade to v${latest.version}`\n )\n spinner.stop(created ? 'Git backup created' : 'No changes to backup')\n }\n }\n }\n\n // Get download URL\n if (isFreeKit) {\n spinner.start('Getting download URL...')\n } else {\n spinner.start('Verifying license...')\n }\n\n let downloadInfo\n try {\n downloadInfo = await getDownloadUrl(kit.name, licenseKey)\n spinner.stop(isFreeKit ? 'Ready to download' : 'License verified')\n } catch (error) {\n spinner.stop(isFreeKit ? 'Failed to get download URL' : 'License verification failed')\n throw error\n }\n\n // Download\n spinner.start(`Downloading v${latest.version}...`)\n\n let tempDir: string | null = null\n try {\n tempDir = await createTempDir('aiorg-upgrade-')\n const zipPath = path.join(tempDir, 'kit.zip')\n const extractPath = path.join(tempDir, 'extracted')\n\n const zipData = await downloadFile(downloadInfo.downloadUrl)\n await saveToFile(zipData, zipPath)\n\n const sizeKB = await getFileSizeKB(zipPath)\n spinner.stop(`Downloaded v${latest.version} (${sizeKB} KB)`)\n\n // Extract to temp\n spinner.start('Extracting...')\n await extractZipToDir(zipPath, extractPath)\n spinner.stop('Extracted')\n\n // Read fileCategories from NEW version (extracted), not old local version\n // This is critical - old kit might not have fileCategories defined\n const newKit = await detectKit(extractPath)\n if (!newKit) {\n throw new Error('Failed to read version.json from downloaded kit')\n }\n\n // Apply fileCategories from new version\n spinner.start('Applying updates...')\n const result = await applyFileCategories(\n extractPath,\n kit.rootPath,\n newKit.versionJson\n )\n spinner.stop('Updates applied')\n\n // Show summary\n logger.blank()\n logger.success(\n `Upgraded ${kit.displayName}: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n logger.blank()\n logger.keyValue('Files updated', String(result.replaced.length))\n if (result.merged.length > 0) {\n logger.keyValue('Files merged', String(result.merged.length))\n }\n if (result.added.length > 0) {\n logger.keyValue('Files added', String(result.added.length))\n }\n logger.keyValue('Files preserved', String(result.skipped.length))\n\n if (result.errors.length > 0) {\n logger.blank()\n logger.warn(`${result.errors.length} errors occurred:`)\n for (const err of result.errors) {\n logger.listItem(pc.dim(err))\n }\n }\n\n // Cleanup\n await cleanupTempDir(tempDir)\n } catch (error) {\n if (tempDir) {\n await cleanupTempDir(tempDir)\n }\n throw error\n }\n\n // Post-upgrade note\n logger.blank()\n logger.log(pc.yellow('⚠️ Restart Claude Code to use new commands'))\n logger.log(pc.dim(' Type \"exit\" then start a new session'))\n\n p.outro(pc.green('Upgrade complete!'))\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport { z } from 'zod'\n\nconst VersionJsonSchema = z.object({\n version: z.string(),\n packageName: z.string(),\n packageDisplayName: z.string().optional(),\n releasedAt: z.string().optional(),\n minUpgradeFrom: z.string().optional(),\n fileCategories: z\n .object({\n alwaysReplace: z.array(z.string()).optional(),\n neverTouch: z.array(z.string()).optional(),\n mergeIfChanged: z.array(z.string()).optional(),\n addOnly: z.array(z.string()).optional(),\n })\n .optional(),\n changelog: z.record(z.string(), z.any()).optional(),\n})\n\nconst KitJsonSchema = z.object({\n name: z.string(),\n displayName: z.string().optional(),\n type: z.enum(['bootstrap', 'inject']).optional(),\n})\n\nexport type VersionJson = z.infer<typeof VersionJsonSchema>\nexport type KitJson = z.infer<typeof KitJsonSchema>\n\nexport interface DetectedKit {\n name: string\n displayName: string\n version: string\n versionJson: VersionJson\n kitJson?: KitJson\n rootPath: string\n}\n\n/**\n * Detect kit in a directory by looking for .claude/version.json or .claude/kit.json\n */\nexport async function detectKit(dirPath: string): Promise<DetectedKit | null> {\n const versionJsonPath = path.join(dirPath, '.claude', 'version.json')\n const kitJsonPath = path.join(dirPath, '.claude', 'kit.json')\n\n // Check for version.json (required)\n if (!(await fs.pathExists(versionJsonPath))) {\n return null\n }\n\n try {\n const versionRaw = await fs.readJson(versionJsonPath)\n const versionJson = VersionJsonSchema.parse(versionRaw)\n\n // Optionally load kit.json\n let kitJson: KitJson | undefined\n if (await fs.pathExists(kitJsonPath)) {\n try {\n const kitRaw = await fs.readJson(kitJsonPath)\n kitJson = KitJsonSchema.parse(kitRaw)\n } catch {\n // Ignore kit.json parse errors\n }\n }\n\n return {\n name: kitJson?.name ?? versionJson.packageName,\n displayName:\n kitJson?.displayName ??\n versionJson.packageDisplayName ??\n versionJson.packageName,\n version: versionJson.version,\n versionJson,\n kitJson,\n rootPath: dirPath,\n }\n } catch {\n return null\n }\n}\n\n/**\n * Detect kit in current working directory\n */\nexport async function detectKitInCwd(): Promise<DetectedKit | null> {\n return detectKit(process.cwd())\n}\n\n/**\n * Get file categories from version.json\n */\nexport function getFileCategories(versionJson: VersionJson): {\n alwaysReplace: string[]\n neverTouch: string[]\n mergeIfChanged: string[]\n addOnly: string[]\n} {\n return {\n alwaysReplace: versionJson.fileCategories?.alwaysReplace ?? [],\n neverTouch: versionJson.fileCategories?.neverTouch ?? [],\n mergeIfChanged: versionJson.fileCategories?.mergeIfChanged ?? [],\n addOnly: versionJson.fileCategories?.addOnly ?? [],\n }\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport { glob } from 'glob'\nimport { minimatch } from 'minimatch'\nimport { merge } from 'lodash-es'\nimport type { VersionJson } from './detect.js'\n\n/**\n * Safely extract error message from unknown error\n */\nfunction getErrorMessage(err: unknown): string {\n if (err instanceof Error) return err.message\n return String(err)\n}\n\nexport interface ApplyResult {\n replaced: string[]\n merged: string[]\n added: string[]\n skipped: string[]\n errors: string[]\n}\n\n/**\n * Apply fileCategories from source to destination\n * - alwaysReplace: copy/overwrite from source\n * - neverTouch: skip entirely\n * - mergeIfChanged: deep merge JSON files (user values win)\n * - addOnly: add only if file doesn't exist\n */\nexport async function applyFileCategories(\n sourceDir: string,\n destDir: string,\n versionJson: VersionJson\n): Promise<ApplyResult> {\n const result: ApplyResult = {\n replaced: [],\n merged: [],\n added: [],\n skipped: [],\n errors: [],\n }\n\n const alwaysReplace = versionJson.fileCategories?.alwaysReplace ?? []\n const neverTouch = versionJson.fileCategories?.neverTouch ?? []\n const mergeIfChanged = versionJson.fileCategories?.mergeIfChanged ?? []\n const addOnly = versionJson.fileCategories?.addOnly ?? []\n\n // Track processed files to avoid duplicates\n const processedFiles = new Set<string>()\n\n // 1. Process alwaysReplace patterns\n for (const pattern of alwaysReplace) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath, { overwrite: true })\n result.replaced.push(file)\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to copy ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n // 2. Process mergeIfChanged patterns (JSON deep merge)\n for (const pattern of mergeIfChanged) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n const destExists = await fs.pathExists(destPath)\n\n if (destExists && file.endsWith('.json')) {\n // Merge JSON files - user's values win (existing overwrites incoming)\n const incoming = await fs.readJson(srcPath)\n const existing = await fs.readJson(destPath)\n\n // Deep merge: start with incoming, overlay existing (user's changes win)\n const merged = merge({}, incoming, existing)\n\n await fs.writeJson(destPath, merged, { spaces: 2 })\n result.merged.push(file)\n } else if (destExists) {\n // Non-JSON file exists - skip (preserve user's version)\n result.skipped.push(file)\n } else {\n // File doesn't exist - copy it\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath)\n result.replaced.push(file)\n }\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to merge ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process merge pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n // 3. Process addOnly patterns (add if missing)\n for (const pattern of addOnly) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n const destExists = await fs.pathExists(destPath)\n\n if (!destExists) {\n // Only add if file doesn't exist\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath)\n result.added.push(file)\n } else {\n // File exists - skip\n result.skipped.push(file)\n }\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to add ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process addOnly pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n return result\n}\n\n/**\n * Pattern matching using minimatch (supports *, **, etc.)\n */\nfunction matchesPattern(filePath: string, pattern: string): boolean {\n return minimatch(filePath, pattern, { dot: true })\n}\n\n/**\n * Check if git is available and directory is a git repo\n */\nexport async function isGitRepo(dirPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(dirPath, '.git')\n return await fs.pathExists(gitDir)\n } catch {\n return false\n }\n}\n\n/**\n * Create a git backup commit\n */\nexport async function createGitBackup(\n dirPath: string,\n message: string\n): Promise<boolean> {\n try {\n const { spawnSync } = await import('child_process')\n\n // Stage all changes\n spawnSync('git', ['add', '-A'], { cwd: dirPath, stdio: 'pipe' })\n\n // Check if there are changes to commit\n const diffResult = spawnSync('git', ['diff', '--cached', '--quiet'], {\n cwd: dirPath,\n stdio: 'pipe',\n })\n\n if (diffResult.status === 0) {\n // No changes\n return false\n }\n\n // Has changes, commit them (using spawnSync to avoid shell injection)\n const commitResult = spawnSync('git', ['commit', '-m', message], {\n cwd: dirPath,\n stdio: 'pipe',\n })\n\n return commitResult.status === 0\n } catch {\n return false\n }\n}\n","import pc from 'picocolors'\nimport semver from 'semver'\nimport { detectKitInCwd } from '../lib/detect.js'\nimport { fetchLatestVersion } from '../lib/api.js'\nimport * as logger from '../utils/logger.js'\n\nconst CLI_VERSION = '1.0.0'\n\nexport async function version(): Promise<void> {\n logger.header('aiorg version')\n\n // CLI version\n logger.keyValue('CLI', pc.cyan(`v${CLI_VERSION}`))\n\n // Detect kit in current directory\n const kit = await detectKitInCwd()\n\n if (!kit) {\n logger.blank()\n logger.info('No kit detected in current directory')\n logger.log(pc.dim('Run this command from a folder containing a kit'))\n return\n }\n\n // Show current kit version\n logger.keyValue(kit.displayName, pc.cyan(`v${kit.version}`))\n\n // Check for updates\n try {\n const latest = await fetchLatestVersion(kit.name)\n\n if (semver.gt(latest.version, kit.version)) {\n logger.blank()\n logger.warn(\n `Update available: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n logger.log(pc.dim(\"Run 'aiorg upgrade' to update\"))\n } else {\n logger.blank()\n logger.success('You are on the latest version')\n }\n } catch {\n // Silently ignore API errors for version check\n logger.blank()\n logger.log(pc.dim('Could not check for updates'))\n }\n}\n","import pc from 'picocolors'\nimport { fetchKitsList } from '../lib/api.js'\nimport * as logger from '../utils/logger.js'\n\n/**\n * Format price in cents to display string\n */\nfunction formatPrice(cents: number): string {\n if (cents === 0) return ''\n return `$${(cents / 100).toFixed(0)}`\n}\n\n/**\n * List all available kits\n */\nexport async function list(): Promise<void> {\n const { kits } = await fetchKitsList()\n\n if (kits.length === 0) {\n logger.warn('No kits available')\n return\n }\n\n // Group by tier\n const freeKits = kits.filter(k => k.tier === 'free')\n const paidKits = kits.filter(k => k.tier === 'paid')\n\n logger.blank()\n console.log(pc.bold('Available Kits'))\n logger.blank()\n\n // Free kits\n if (freeKits.length > 0) {\n console.log(pc.green(pc.bold('FREE')))\n logger.blank()\n for (const kit of freeKits) {\n printKit(kit)\n }\n }\n\n // Paid kits\n if (paidKits.length > 0) {\n console.log(pc.yellow(pc.bold('PAID')))\n logger.blank()\n for (const kit of paidKits) {\n printKit(kit)\n }\n }\n\n // Footer\n console.log(pc.dim('─'.repeat(50)))\n logger.blank()\n console.log(pc.dim('Free kits work without login.'))\n console.log(pc.dim(`Run '${pc.cyan('aiorg login')}' first for paid kits.`))\n console.log(pc.dim(`Visit ${pc.cyan('https://aiorg.dev')} for details.`))\n logger.blank()\n}\n\nfunction printKit(kit: {\n name: string\n displayName: string\n description: string | null\n tier: 'free' | 'paid'\n version: string\n priceCents: number\n}): void {\n const price = formatPrice(kit.priceCents)\n const priceStr = price ? pc.yellow(price) : ''\n\n // Kit name and version\n console.log(\n ` ${pc.bold(kit.name.padEnd(24))} ${pc.cyan(`v${kit.version}`)} ${priceStr}`\n )\n\n // Description\n if (kit.description) {\n console.log(` ${pc.dim(kit.description)}`)\n }\n\n // Example command\n console.log(\n ` ${pc.dim('→')} ${pc.dim('npx @aiorg/cli init')} ${pc.magenta(kit.name)} ${pc.dim('~/my-project')}`\n )\n\n logger.blank()\n}\n"],"mappings":";;;AAAA,OAAO,SAAS;;;ACAhB,YAAY,OAAO;AACnB,OAAOA,SAAQ;;;ACDf,SAAS,SAAS;AAElB,IAAM,eAAe,QAAQ,IAAI,eAAe,KAAK,KAAK;AAC1D,IAAM,iBAAiB;AAKvB,eAAe,iBACb,KACA,UAAuB,CAAC,GACxB,YAAoB,gBACD;AACnB,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAE9D,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH,QAAQ,WAAW;AAAA,IACrB,CAAC;AACD,WAAO;AAAA,EACT,UAAE;AACA,iBAAa,OAAO;AAAA,EACtB;AACF;AAGA,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,OAAO;AAAA,EACrB,aAAa,EAAE,OAAO;AAAA,EACtB,oBAAoB,EAAE,OAAO;AAAA,EAC7B,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClD,MAAM,EAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,EACnD,MAAM,EAAE,KAAK,CAAC,YAAY,aAAa,QAAQ,CAAC,EAAE,SAAS;AAC7D,CAAC;AAED,IAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,aAAa,EAAE,OAAO;AAAA,EACtB,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,OAAO;AACrB,CAAC;AAED,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAC3C,OAAO,EAAE,QAAQ;AAAA,EACjB,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EACH;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,MAAM,EAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC;AAAA,MACxC,aAAa,EAAE,OAAO;AAAA,IACxB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,IAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,MAAM,EAAE,MAAM,EAAE,OAAO;AAAA,IACrB,MAAM,EAAE,OAAO;AAAA,IACf,aAAa,EAAE,OAAO;AAAA,IACtB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,IACjC,MAAM,EAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC;AAAA,IACxC,MAAM,EAAE,KAAK,CAAC,YAAY,aAAa,QAAQ,CAAC;AAAA,IAChD,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,SAAS,EAAE,OAAO;AAAA,IAClB,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC,CAAC;AACJ,CAAC;AAOD,IAAM,WAAN,cAAuB,MAAM;AAAA,EAC3B,YACE,SACO,YACP;AACA,UAAM,OAAO;AAFN;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAKA,eAAsB,mBACpB,SACwB;AACxB,QAAM,MAAM,GAAG,YAAY,aAAa,OAAO;AAE/C,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB,GAAG;AAE3C,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,SAAS,mBAAmB,OAAO,KAAK,GAAG;AAAA,MACvD;AACA,YAAM,IAAI,SAAS,gCAAgC,SAAS,MAAM;AAAA,IACpE;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,oBAAoB,MAAM,IAAI;AAAA,EACvC,SAASC,QAAO;AACd,QAAIA,kBAAiB,SAAU,OAAMA;AACrC,QAAIA,kBAAiB,SAASA,OAAM,SAAS,cAAc;AACzD,YAAM,IAAI,SAAS,mBAAmB;AAAA,IACxC;AACA,UAAM,IAAI;AAAA,MACR,kBAAkBA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AAAA,IAC5E;AAAA,EACF;AACF;AAKA,eAAsB,eACpB,SACA,YAC2B;AAC3B,QAAM,MAAM,GAAG,YAAY,aAAa,OAAO;AAE/C,QAAM,UAAkC,CAAC;AACzC,MAAI,YAAY;AACd,YAAQ,gBAAgB,UAAU,UAAU;AAAA,EAC9C;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB,KAAK,EAAE,QAAQ,CAAC;AAExD,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,SAAS,kCAAkC,GAAG;AAAA,MAC1D;AACA,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI,SAAS,mBAAmB,OAAO,KAAK,GAAG;AAAA,MACvD;AACA,YAAM,IAAI,SAAS,8BAA8B,SAAS,MAAM;AAAA,IAClE;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,uBAAuB,MAAM,IAAI;AAAA,EAC1C,SAASA,QAAO;AACd,QAAIA,kBAAiB,SAAU,OAAMA;AACrC,QAAIA,kBAAiB,SAASA,OAAM,SAAS,cAAc;AACzD,YAAM,IAAI,SAAS,mBAAmB;AAAA,IACxC;AACA,UAAM,IAAI;AAAA,MACR,kBAAkBA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AAAA,IAC5E;AAAA,EACF;AACF;AAKA,eAAsB,cACpB,YACA,SACgC;AAChC,QAAM,MAAM,GAAG,YAAY;AAE3B,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB,KAAK;AAAA,MAC3C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,KAAK;AAAA,QACL,KAAK;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAMC,QAAO,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACnD,YAAM,IAAI;AAAA,QACRA,MAAK,SAAS;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,4BAA4B,MAAM,IAAI;AAAA,EAC/C,SAASD,QAAO;AACd,QAAIA,kBAAiB,SAAU,OAAMA;AACrC,QAAIA,kBAAiB,SAASA,OAAM,SAAS,cAAc;AACzD,YAAM,IAAI,SAAS,mBAAmB;AAAA,IACxC;AACA,UAAM,IAAI;AAAA,MACR,kBAAkBA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AAAA,IAC5E;AAAA,EACF;AACF;AAKA,eAAsB,aAAa,KAAmC;AACpE,QAAM,sBAAsB;AAE5B,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB,KAAK,CAAC,GAAG,mBAAmB;AAEpE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,SAAS,mBAAmB,SAAS,MAAM;AAAA,IACvD;AAEA,WAAO,MAAM,SAAS,YAAY;AAAA,EACpC,SAASA,QAAO;AACd,QAAIA,kBAAiB,SAAU,OAAMA;AACrC,QAAIA,kBAAiB,SAASA,OAAM,SAAS,cAAc;AACzD,YAAM,IAAI,SAAS,oBAAoB;AAAA,IACzC;AACA,UAAM,IAAI;AAAA,MACR,oBAAoBA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AAAA,IAC9E;AAAA,EACF;AACF;AAKA,eAAsB,gBAA2C;AAC/D,QAAM,MAAM,GAAG,YAAY;AAE3B,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB,GAAG;AAE3C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,SAAS,6BAA6B,SAAS,MAAM;AAAA,IACjE;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,eAAe,MAAM,IAAI;AAAA,EAClC,SAASA,QAAO;AACd,QAAIA,kBAAiB,SAAU,OAAMA;AACrC,QAAIA,kBAAiB,SAASA,OAAM,SAAS,cAAc;AACzD,YAAM,IAAI,SAAS,mBAAmB;AAAA,IACxC;AACA,UAAM,IAAI;AAAA,MACR,kBAAkBA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AAAA,IAC5E;AAAA,EACF;AACF;;;AC/PA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,KAAAE,UAAS;AAElB,IAAM,aAAa,KAAK,KAAK,GAAG,QAAQ,GAAG,QAAQ;AACnD,IAAM,cAAc,KAAK,KAAK,YAAY,aAAa;AAEvD,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,MAAMA,GAAE,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC;AAAA,EACxC,aAAaA,GAAE,OAAO;AACxB,CAAC;AAED,IAAM,eAAeA,GAAE,OAAO;AAAA,EAC5B,YAAYA,GAAE,OAAO;AAAA,EACrB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAMA,GAAE,OAAOA,GAAE,OAAO,GAAG,gBAAgB,EAAE,SAAS;AACxD,CAAC;AAsBD,eAAsB,kBAAiC;AACrD,QAAM,GAAG,UAAU,UAAU;AAC/B;AAKA,eAAsB,aAA+B;AACnD,MAAI;AACF,UAAM,SAAS,MAAM,WAAW;AAChC,WAAO,CAAC,CAAC,QAAQ;AAAA,EACnB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,aAAqC;AACzD,MAAI;AACF,QAAI,CAAE,MAAM,GAAG,WAAW,WAAW,GAAI;AACvC,aAAO;AAAA,IACT;AACA,UAAM,MAAM,MAAM,GAAG,SAAS,WAAW;AACzC,WAAO,aAAa,MAAM,GAAG;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,WAAW,QAA+B;AAC9D,QAAM,gBAAgB;AACtB,QAAM,GAAG,UAAU,aAAa,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvD;AAKA,eAAsB,gBAAwC;AAE5D,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,MAAM,WAAW;AAChC,SAAO,QAAQ,cAAc;AAC/B;AAKA,eAAsB,eACpB,YACA,OACA,MACe;AACf,QAAM,WAAW,MAAM,WAAW;AAClC,QAAM,WAAW;AAAA,IACf,GAAI,YAAY,CAAC;AAAA,IACjB;AAAA,IACA,OAAO,SAAS,UAAU;AAAA,IAC1B,MAAM,QAAQ,UAAU;AAAA,EAC1B,CAAC;AACH;AAKA,eAAsB,cAA6B;AACjD,MAAI;AACF,UAAM,GAAG,OAAO,WAAW;AAAA,EAC7B,QAAQ;AAAA,EAER;AACF;;;ACvHA,OAAO,QAAQ;AAKR,SAAS,QAAQ,SAAuB;AAC7C,UAAQ,IAAI,GAAG,MAAM,QAAG,GAAG,OAAO;AACpC;AAKO,SAAS,MAAM,SAAuB;AAC3C,UAAQ,IAAI,GAAG,IAAI,QAAG,GAAG,OAAO;AAClC;AAKO,SAAS,KAAK,SAAuB;AAC1C,UAAQ,IAAI,GAAG,OAAO,GAAG,GAAG,OAAO;AACrC;AAKO,SAAS,KAAK,SAAuB;AAC1C,UAAQ,IAAI,GAAG,KAAK,QAAG,GAAG,OAAO;AACnC;AAKO,SAAS,IAAI,SAAuB;AACzC,UAAQ,IAAI,OAAO;AACrB;AAKO,SAAS,QAAc;AAC5B,UAAQ,IAAI;AACd;AAKO,SAAS,OAAO,OAAqB;AAC1C,UAAQ,IAAI;AACZ,UAAQ,IAAI,GAAG,KAAK,KAAK,CAAC;AAC1B,UAAQ,IAAI,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AACpC;AAKO,SAAS,SAAS,KAAa,OAAqB;AACzD,UAAQ,IAAI,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,EAAE;AAC7C;AAKO,SAAS,SAAS,MAAc,SAAiB,GAAS;AAC/D,QAAM,SAAS,KAAK,OAAO,MAAM;AACjC,UAAQ,IAAI,GAAG,MAAM,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,IAAI,EAAE;AAC/C;;;AH5DA,eAAsB,QAAuB;AAC3C,EAAE,QAAMC,IAAG,KAAK,aAAa,CAAC;AAG9B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,iBAAiB,MAAQ,UAAQ;AAAA,MACrC,SAAS,oBAAoB,QAAQ,QAAQ,OAAOA,IAAG,KAAK,OAAO,KAAK,CAAC,KAAK,EAAE;AAAA,MAChF,cAAc;AAAA,IAChB,CAAC;AAED,QAAM,WAAS,cAAc,KAAK,CAAC,gBAAgB;AACjD,MAAE,QAAM,iBAAiB;AACzB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,aAAa,MAAQ,OAAK;AAAA,IAC9B,SAAS;AAAA,IACT,aAAa;AAAA,IACb,UAAU,CAAC,UAAU;AACnB,UAAI,CAAC,MAAO,QAAO;AACnB,UAAI,CAAC,MAAM,WAAW,KAAK,EAAG,QAAO;AACrC,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,MAAM,WAAS,UAAU,GAAG;AAC1B,IAAE,SAAO,iBAAiB;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAMC,WAAY,UAAQ;AAC1B,EAAAA,SAAQ,MAAM,sBAAsB;AAEpC,MAAI;AACF,UAAM,SAAS,MAAM,cAAc,UAAU;AAE7C,QAAI,CAAC,OAAO,OAAO;AACjB,MAAAA,SAAQ,KAAK,6BAA6B;AAC1C,MAAO,MAAM,OAAO,SAAS,qBAAqB;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,UAAM,aAA6E,CAAC;AACpF,QAAI,OAAO,MAAM;AACf,iBAAW,OAAO,OAAO,MAAM;AAC7B,mBAAW,IAAI,IAAI,IAAI;AAAA,UACrB,MAAM,IAAI;AAAA,UACV,aAAa,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,eAAe,YAAY,OAAO,OAAO,UAAU;AACzD,IAAAA,SAAQ,KAAK,kBAAkB;AAG/B,IAAO,MAAM;AACb,IAAO,QAAQ,YAAY,OAAO,QAAQ,OAAOD,IAAG,KAAK,OAAO,KAAK,CAAC,KAAK,EAAE,EAAE;AAE/E,QAAI,OAAO,QAAQ,OAAO,KAAK,SAAS,GAAG;AACzC,MAAO,MAAM;AACb,MAAO,IAAI,gBAAgB;AAC3B,iBAAW,OAAO,OAAO,MAAM;AAC7B,QAAO,SAAS,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG;AAAA,MAC7C;AAAA,IACF;AAEA,IAAE,QAAM,0BAA0B;AAAA,EACpC,SAASE,QAAO;AACd,IAAAD,SAAQ,KAAK,6BAA6B;AAC1C,UAAMC;AAAA,EACR;AACF;;;AInFA,YAAYC,QAAO;AACnB,OAAOC,SAAQ;AAIf,eAAsB,SAAwB;AAC5C,EAAE,SAAMC,IAAG,KAAK,cAAc,CAAC;AAG/B,MAAI,CAAE,MAAM,WAAW,GAAI;AACzB,IAAO,KAAK,yBAAyB;AACrC,IAAE,SAAM,EAAE;AACV;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,WAAW;AAChC,QAAM,QAAQ,QAAQ;AAGtB,QAAM,eAAe,MAAQ,WAAQ;AAAA,IACnC,SAAS,UAAU,QAAQ,SAASA,IAAG,KAAK,KAAK,CAAC,KAAK,EAAE;AAAA,IACzD,cAAc;AAAA,EAChB,CAAC;AAED,MAAM,YAAS,YAAY,KAAK,CAAC,cAAc;AAC7C,IAAE,UAAO,kBAAkB;AAC3B;AAAA,EACF;AAGA,QAAM,YAAY;AAElB,EAAO,QAAQ,YAAY;AAC3B,EAAE,SAAM,EAAE;AACZ;;;AClCA,YAAYC,QAAO;AACnB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,SAAQ;;;ACHf,OAAO,gBAAgB;AACvB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,SAAQ;AAKf,eAAsB,cAAc,SAAiB,UAA2B;AAC9E,QAAM,UAAUD,MAAK,KAAKC,IAAG,OAAO,GAAG,GAAG,MAAM,GAAG,KAAK,IAAI,CAAC,EAAE;AAC/D,QAAMF,IAAG,UAAU,OAAO;AAC1B,SAAO;AACT;AAKA,eAAsB,WACpB,MACA,UACe;AACf,QAAMA,IAAG,UAAUC,MAAK,QAAQ,QAAQ,CAAC;AACzC,QAAMD,IAAG,UAAU,UAAU,OAAO,KAAK,IAAI,CAAC;AAChD;AAKA,eAAsB,gBACpB,SACA,UACe;AACf,QAAMA,IAAG,UAAU,QAAQ;AAC3B,QAAM,WAAW,SAAS,EAAE,KAAK,SAAS,CAAC;AAC7C;AAKA,eAAsB,eAAe,SAAgC;AACnE,MAAI;AACF,UAAMA,IAAG,OAAO,OAAO;AAAA,EACzB,QAAQ;AAAA,EAER;AACF;AAKA,eAAsB,qBAAqB,SAAmC;AAC5E,MAAI;AACF,UAAM,SAAS,MAAMA,IAAG,WAAW,OAAO;AAC1C,QAAI,CAAC,OAAQ,QAAO;AAEpB,UAAM,QAAQ,MAAMA,IAAG,QAAQ,OAAO;AACtC,WAAO,MAAM,SAAS;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,cAAc,UAAmC;AACrE,QAAM,QAAQ,MAAMA,IAAG,KAAK,QAAQ;AACpC,SAAO,KAAK,MAAM,MAAM,OAAO,IAAI;AACrC;;;AD/CA,eAAsB,KACpB,SACA,YACA,SACe;AACf,EAAE,SAAMG,IAAG,KAAK,cAAc,OAAO,EAAE,CAAC;AAGxC,QAAM,eAAe,aACjBC,MAAK,QAAQ,WAAW,QAAQ,MAAMC,IAAG,QAAQ,CAAC,CAAC,IACnDD,MAAK,QAAQ,QAAQ,IAAI,GAAG,OAAO;AAGvC,MAAI,CAAC,QAAQ,SAAU,MAAM,qBAAqB,YAAY,GAAI;AAChE,IAAO,MAAM,0BAA0BD,IAAG,OAAO,YAAY,CAAC,EAAE;AAChE,IAAO,IAAIA,IAAG,IAAI,0BAA0B,CAAC;AAC7C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAMG,WAAY,WAAQ;AAC1B,EAAAA,SAAQ,MAAM,0BAA0B;AAExC,MAAI;AACJ,MAAI;AACF,kBAAc,MAAM,mBAAmB,OAAO;AAC9C,IAAAA,SAAQ,KAAK,SAASH,IAAG,KAAK,YAAY,kBAAkB,CAAC,KAAK,YAAY,OAAO,EAAE;AAAA,EACzF,SAASI,QAAO;AACd,IAAAD,SAAQ,KAAK,8BAA8B;AAC3C,UAAMC;AAAA,EACR;AAEA,QAAM,YAAY,YAAY,SAAS;AACvC,MAAI,aAA4B;AAGhC,MAAI,CAAC,WAAW;AACd,QAAI,CAAE,MAAM,WAAW,GAAI;AACzB,MAAO,KAAK,qCAAqC;AACjD,MAAO,MAAM;AACb,YAAM,MAAM;AACZ,MAAO,MAAM;AAAA,IACf;AAEA,iBAAa,MAAM,cAAc;AACjC,QAAI,CAAC,YAAY;AACf,MAAO,MAAM,gDAAgD;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,WAAW;AACb,IAAAD,SAAQ,MAAM,yBAAyB;AAAA,EACzC,OAAO;AACL,IAAAA,SAAQ,MAAM,sBAAsB;AAAA,EACtC;AAEA,MAAI;AACJ,MAAI;AACF,mBAAe,MAAM,eAAe,SAAS,UAAU;AACvD,IAAAA,SAAQ,KAAK,YAAY,sBAAsB,kBAAkB;AAAA,EACnE,SAASC,QAAO;AACd,IAAAD,SAAQ,KAAK,YAAY,+BAA+B,6BAA6B;AACrF,UAAMC;AAAA,EACR;AAGA,EAAAD,SAAQ,MAAM,eAAe,OAAO,KAAK,YAAY,OAAO,KAAK;AAEjE,MAAI,UAAyB;AAC7B,MAAI;AACF,cAAU,MAAM,cAAc,aAAa;AAC3C,UAAM,UAAUF,MAAK,KAAK,SAAS,SAAS;AAE5C,UAAM,UAAU,MAAM,aAAa,aAAa,WAAW;AAC3D,UAAM,WAAW,SAAS,OAAO;AAEjC,UAAM,SAAS,MAAM,cAAc,OAAO;AAC1C,IAAAE,SAAQ,KAAK,cAAc,OAAO,KAAK,YAAY,OAAO,KAAK,MAAM,MAAM;AAG3E,IAAAA,SAAQ,MAAM,iBAAiB,YAAY,KAAK;AAChD,UAAM,gBAAgB,SAAS,YAAY;AAC3C,IAAAA,SAAQ,KAAK,gBAAgBH,IAAG,OAAO,YAAY,CAAC,EAAE;AAGtD,UAAM,eAAe,OAAO;AAAA,EAC9B,SAASI,QAAO;AACd,QAAI,SAAS;AACX,YAAM,eAAe,OAAO;AAAA,IAC9B;AACA,UAAMA;AAAA,EACR;AAGA,EAAO,MAAM;AACb,EAAO,QAAQ,GAAG,YAAY,kBAAkB,KAAK,YAAY,OAAO,aAAa;AACrF,EAAO,MAAM;AACb,EAAO,IAAI,aAAa;AACxB,EAAO,SAAS,MAAM,YAAY,EAAE;AACpC,EAAO,SAAS,QAAQ;AACxB,EAAO,SAAS,QAAQ;AAGxB,QAAM,gBAAwC;AAAA,IAC5C,eAAe;AAAA,EACjB;AACA,QAAMC,SAAQ,cAAc,OAAO,KAAK;AACxC,EAAE,SAAML,IAAG,MAAMK,MAAK,CAAC;AACzB;;;AEnIA,YAAYC,QAAO;AACnB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,YAAY;;;ACHnB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,SAAS,KAAAC,UAAS;AAElB,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,SAASA,GAAE,OAAO;AAAA,EAClB,aAAaA,GAAE,OAAO;AAAA,EACtB,oBAAoBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACxC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,gBAAgBA,GACb,OAAO;AAAA,IACN,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC5C,YAAYA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACzC,gBAAgBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC7C,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,SAAS;AAAA,EACZ,WAAWA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AACpD,CAAC;AAED,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EAC7B,MAAMA,GAAE,OAAO;AAAA,EACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,KAAK,CAAC,aAAa,QAAQ,CAAC,EAAE,SAAS;AACjD,CAAC;AAiBD,eAAsB,UAAU,SAA8C;AAC5E,QAAM,kBAAkBD,MAAK,KAAK,SAAS,WAAW,cAAc;AACpE,QAAM,cAAcA,MAAK,KAAK,SAAS,WAAW,UAAU;AAG5D,MAAI,CAAE,MAAMD,IAAG,WAAW,eAAe,GAAI;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,aAAa,MAAMA,IAAG,SAAS,eAAe;AACpD,UAAM,cAAc,kBAAkB,MAAM,UAAU;AAGtD,QAAI;AACJ,QAAI,MAAMA,IAAG,WAAW,WAAW,GAAG;AACpC,UAAI;AACF,cAAM,SAAS,MAAMA,IAAG,SAAS,WAAW;AAC5C,kBAAU,cAAc,MAAM,MAAM;AAAA,MACtC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,SAAS,QAAQ,YAAY;AAAA,MACnC,aACE,SAAS,eACT,YAAY,sBACZ,YAAY;AAAA,MACd,SAAS,YAAY;AAAA,MACrB;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,iBAA8C;AAClE,SAAO,UAAU,QAAQ,IAAI,CAAC;AAChC;;;ACvFA,OAAOG,SAAQ;AACf,OAAOC,WAAU;AACjB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAMtB,SAAS,gBAAgB,KAAsB;AAC7C,MAAI,eAAe,MAAO,QAAO,IAAI;AACrC,SAAO,OAAO,GAAG;AACnB;AAiBA,eAAsB,oBACpB,WACA,SACA,aACsB;AACtB,QAAM,SAAsB;AAAA,IAC1B,UAAU,CAAC;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,EACX;AAEA,QAAM,gBAAgB,YAAY,gBAAgB,iBAAiB,CAAC;AACpE,QAAM,aAAa,YAAY,gBAAgB,cAAc,CAAC;AAC9D,QAAM,iBAAiB,YAAY,gBAAgB,kBAAkB,CAAC;AACtE,QAAM,UAAU,YAAY,gBAAgB,WAAW,CAAC;AAGxD,QAAM,iBAAiB,oBAAI,IAAY;AAGvC,aAAW,WAAW,eAAe;AACnC,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,SAAS;AAAA,QAChC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,MACT,CAAC;AAED,iBAAW,QAAQ,OAAO;AACxB,YAAI,eAAe,IAAI,IAAI,EAAG;AAG9B,cAAM,aAAa,WAAW,KAAK,CAAC,cAAc;AAChD,iBAAO,eAAe,MAAM,SAAS;AAAA,QACvC,CAAC;AAED,YAAI,YAAY;AACd,iBAAO,QAAQ,KAAK,IAAI;AACxB,yBAAe,IAAI,IAAI;AACvB;AAAA,QACF;AAEA,cAAM,UAAUA,MAAK,KAAK,WAAW,IAAI;AACzC,cAAM,WAAWA,MAAK,KAAK,SAAS,IAAI;AAExC,YAAI;AACF,gBAAMD,IAAG,UAAUC,MAAK,QAAQ,QAAQ,CAAC;AACzC,gBAAMD,IAAG,KAAK,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AACpD,iBAAO,SAAS,KAAK,IAAI;AACzB,yBAAe,IAAI,IAAI;AAAA,QACzB,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,kBAAkB,IAAI,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,QACtE;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,OAAO,KAAK,6BAA6B,OAAO,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,IACpF;AAAA,EACF;AAGA,aAAW,WAAW,gBAAgB;AACpC,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,SAAS;AAAA,QAChC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,MACT,CAAC;AAED,iBAAW,QAAQ,OAAO;AACxB,YAAI,eAAe,IAAI,IAAI,EAAG;AAG9B,cAAM,aAAa,WAAW,KAAK,CAAC,cAAc;AAChD,iBAAO,eAAe,MAAM,SAAS;AAAA,QACvC,CAAC;AAED,YAAI,YAAY;AACd,iBAAO,QAAQ,KAAK,IAAI;AACxB,yBAAe,IAAI,IAAI;AACvB;AAAA,QACF;AAEA,cAAM,UAAUC,MAAK,KAAK,WAAW,IAAI;AACzC,cAAM,WAAWA,MAAK,KAAK,SAAS,IAAI;AAExC,YAAI;AACF,gBAAM,aAAa,MAAMD,IAAG,WAAW,QAAQ;AAE/C,cAAI,cAAc,KAAK,SAAS,OAAO,GAAG;AAExC,kBAAM,WAAW,MAAMA,IAAG,SAAS,OAAO;AAC1C,kBAAM,WAAW,MAAMA,IAAG,SAAS,QAAQ;AAG3C,kBAAM,SAAS,MAAM,CAAC,GAAG,UAAU,QAAQ;AAE3C,kBAAMA,IAAG,UAAU,UAAU,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAClD,mBAAO,OAAO,KAAK,IAAI;AAAA,UACzB,WAAW,YAAY;AAErB,mBAAO,QAAQ,KAAK,IAAI;AAAA,UAC1B,OAAO;AAEL,kBAAMA,IAAG,UAAUC,MAAK,QAAQ,QAAQ,CAAC;AACzC,kBAAMD,IAAG,KAAK,SAAS,QAAQ;AAC/B,mBAAO,SAAS,KAAK,IAAI;AAAA,UAC3B;AACA,yBAAe,IAAI,IAAI;AAAA,QACzB,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,mBAAmB,IAAI,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,QACvE;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,OAAO,KAAK,mCAAmC,OAAO,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,IAC1F;AAAA,EACF;AAGA,aAAW,WAAW,SAAS;AAC7B,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,SAAS;AAAA,QAChC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,MACT,CAAC;AAED,iBAAW,QAAQ,OAAO;AACxB,YAAI,eAAe,IAAI,IAAI,EAAG;AAG9B,cAAM,aAAa,WAAW,KAAK,CAAC,cAAc;AAChD,iBAAO,eAAe,MAAM,SAAS;AAAA,QACvC,CAAC;AAED,YAAI,YAAY;AACd,iBAAO,QAAQ,KAAK,IAAI;AACxB,yBAAe,IAAI,IAAI;AACvB;AAAA,QACF;AAEA,cAAM,UAAUC,MAAK,KAAK,WAAW,IAAI;AACzC,cAAM,WAAWA,MAAK,KAAK,SAAS,IAAI;AAExC,YAAI;AACF,gBAAM,aAAa,MAAMD,IAAG,WAAW,QAAQ;AAE/C,cAAI,CAAC,YAAY;AAEf,kBAAMA,IAAG,UAAUC,MAAK,QAAQ,QAAQ,CAAC;AACzC,kBAAMD,IAAG,KAAK,SAAS,QAAQ;AAC/B,mBAAO,MAAM,KAAK,IAAI;AAAA,UACxB,OAAO;AAEL,mBAAO,QAAQ,KAAK,IAAI;AAAA,UAC1B;AACA,yBAAe,IAAI,IAAI;AAAA,QACzB,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,iBAAiB,IAAI,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,QACrE;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,OAAO,KAAK,qCAAqC,OAAO,KAAK,gBAAgB,GAAG,CAAC,EAAE;AAAA,IAC5F;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,eAAe,UAAkB,SAA0B;AAClE,SAAO,UAAU,UAAU,SAAS,EAAE,KAAK,KAAK,CAAC;AACnD;AAKA,eAAsB,UAAU,SAAmC;AACjE,MAAI;AACF,UAAM,SAASC,MAAK,KAAK,SAAS,MAAM;AACxC,WAAO,MAAMD,IAAG,WAAW,MAAM;AAAA,EACnC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,gBACpB,SACA,SACkB;AAClB,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,eAAe;AAGlD,cAAU,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,KAAK,SAAS,OAAO,OAAO,CAAC;AAG/D,UAAM,aAAa,UAAU,OAAO,CAAC,QAAQ,YAAY,SAAS,GAAG;AAAA,MACnE,KAAK;AAAA,MACL,OAAO;AAAA,IACT,CAAC;AAED,QAAI,WAAW,WAAW,GAAG;AAE3B,aAAO;AAAA,IACT;AAGA,UAAM,eAAe,UAAU,OAAO,CAAC,UAAU,MAAM,OAAO,GAAG;AAAA,MAC/D,KAAK;AAAA,MACL,OAAO;AAAA,IACT,CAAC;AAED,WAAO,aAAa,WAAW;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AFtOA,eAAsB,QAAQ,SAAwC;AACpE,EAAE,SAAME,IAAG,KAAK,eAAe,CAAC;AAGhC,QAAM,MAAM,MAAM,eAAe;AAEjC,MAAI,CAAC,KAAK;AACR,IAAO,MAAM,wBAAwB;AACrC,IAAO,IAAIA,IAAG,IAAI,0DAA0D,CAAC;AAC7E,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,EAAO,SAAS,OAAOA,IAAG,QAAQ,IAAI,WAAW,CAAC;AAClD,EAAO,SAAS,mBAAmBA,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;AAG7D,QAAMC,WAAY,WAAQ;AAC1B,EAAAA,SAAQ,MAAM,yBAAyB;AAEvC,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,mBAAmB,IAAI,IAAI;AAC1C,IAAAA,SAAQ,KAAK,sBAAsB;AAAA,EACrC,SAASC,QAAO;AACd,IAAAD,SAAQ,KAAK,6BAA6B;AAC1C,UAAMC;AAAA,EACR;AAGA,MAAI,CAAC,OAAO,GAAG,OAAO,SAAS,IAAI,OAAO,GAAG;AAC3C,IAAO,MAAM;AACb,IAAO,QAAQ,8BAA8BF,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,GAAG;AAC1E,IAAE,SAAM,EAAE;AACV;AAAA,EACF;AAGA,EAAO,MAAM;AACb,EAAO;AAAA,IACL,qBAAqBA,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,WAAMA,IAAG,MAAM,IAAI,OAAO,OAAO,EAAE,CAAC;AAAA,EACrF;AAIA,MAAI,OAAO,eAAe,MAAM,QAAQ,OAAO,WAAW,GAAG;AAE3D,UAAM,iBAAiB,OAAO,YAC3B,OAAO,CAAC,MAA2B;AAClC,UAAI,CAAC,OAAO,MAAM,EAAE,OAAO,EAAG,QAAO;AACrC,UAAI;AACF,eAAO,OAAO,GAAG,EAAE,SAAS,IAAI,OAAO,KAAK,OAAO,IAAI,EAAE,SAAS,OAAO,OAAO;AAAA,MAClF,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,CAAC,EACA;AAAA,MAAK,CAAC,GAAwB,MAC7B,OAAO,SAAS,EAAE,SAAS,EAAE,OAAO;AAAA,IACtC;AAEF,QAAI,eAAe,SAAS,GAAG;AAC7B,MAAO,MAAM;AACb,YAAM,eAAe,eAAe;AACpC,MAAO,OAAO,cAAc,YAAY,WAAW,eAAe,IAAI,MAAM,EAAE,GAAG;AAEjF,iBAAW,gBAAgB,gBAAgB;AACzC,cAAM,EAAE,SAAAG,UAAS,WAAW,MAAM,IAAI;AAItC,YAAI,CAAC,MAAO;AAGZ,cAAM,aAAa,MAAM,YAAY,KAAK,IAAI,KAAK;AACnD,QAAO,MAAM;AACb,QAAO,IAAI,GAAGH,IAAG,MAAM,IAAIG,QAAO,EAAE,CAAC,GAAG,aAAa,MAAMH,IAAG,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE;AAGxF,YAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,qBAAW,QAAQ,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG;AAC1C,YAAO,IAAIA,IAAG,IAAI,OAAO,IAAI,EAAE,CAAC;AAAA,UAClC;AACA,cAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,YAAO,IAAIA,IAAG,IAAI,eAAe,MAAM,MAAM,SAAS,CAAC,OAAO,CAAC;AAAA,UACjE;AAAA,QACF;AAGA,YAAI,MAAM,gBAAgBG,aAAY,OAAO,SAAS;AACpD,UAAO,IAAIH,IAAG,OAAO,WAAW,MAAM,YAAY,EAAE,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAO,MAAM;AACb,EAAO,IAAI,8BAA8B;AACzC,QAAM,aAAa,IAAI,YAAY,gBAAgB,cAAc,CAAC;AAClE,aAAW,WAAW,WAAW,MAAM,GAAG,CAAC,GAAG;AAC5C,IAAO,SAASA,IAAG,IAAI,OAAO,CAAC;AAAA,EACjC;AACA,MAAI,WAAW,SAAS,GAAG;AACzB,IAAO,IAAIA,IAAG,IAAI,aAAa,WAAW,SAAS,CAAC,gBAAgB,CAAC;AAAA,EACvE;AAGA,MAAI,CAAC,QAAQ,KAAK;AAChB,IAAO,MAAM;AACb,UAAM,gBAAgB,MAAQ,WAAQ;AAAA,MACpC,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AAED,QAAM,YAAS,aAAa,KAAK,CAAC,eAAe;AAC/C,MAAE,UAAO,mBAAmB;AAC5B;AAAA,IACF;AAAA,EACF;AAGA,QAAM,YAAY,OAAO,SAAS;AAClC,MAAI,aAA4B;AAGhC,MAAI,CAAC,WAAW;AACd,QAAI,CAAE,MAAM,WAAW,GAAI;AACzB,MAAO,MAAM;AACb,MAAO,KAAK,6BAA6B;AACzC,YAAM,MAAM;AACZ,MAAO,MAAM;AAAA,IACf;AAEA,iBAAa,MAAM,cAAc;AACjC,QAAI,CAAC,YAAY;AACf,MAAO,MAAM,sBAAsB;AACnC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,QAAM,YAAY,MAAM,UAAU,IAAI,QAAQ;AAC9C,MAAI,WAAW;AACb,QAAI,QAAQ,QAAQ;AAClB,MAAAC,SAAQ,MAAM,wBAAwB;AACtC,YAAM,UAAU,MAAM;AAAA,QACpB,IAAI;AAAA,QACJ,oCAAoC,OAAO,OAAO;AAAA,MACpD;AACA,MAAAA,SAAQ,KAAK,UAAU,uBAAuB,sBAAsB;AAAA,IACtE,WAAW,CAAC,QAAQ,KAAK;AACvB,YAAM,eAAe,MAAQ,WAAQ;AAAA,QACnC,SAAS;AAAA,QACT,cAAc;AAAA,MAChB,CAAC;AAED,UAAI,iBAAiB,MAAM;AACzB,QAAAA,SAAQ,MAAM,wBAAwB;AACtC,cAAM,UAAU,MAAM;AAAA,UACpB,IAAI;AAAA,UACJ,oCAAoC,OAAO,OAAO;AAAA,QACpD;AACA,QAAAA,SAAQ,KAAK,UAAU,uBAAuB,sBAAsB;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAGA,MAAI,WAAW;AACb,IAAAA,SAAQ,MAAM,yBAAyB;AAAA,EACzC,OAAO;AACL,IAAAA,SAAQ,MAAM,sBAAsB;AAAA,EACtC;AAEA,MAAI;AACJ,MAAI;AACF,mBAAe,MAAM,eAAe,IAAI,MAAM,UAAU;AACxD,IAAAA,SAAQ,KAAK,YAAY,sBAAsB,kBAAkB;AAAA,EACnE,SAASC,QAAO;AACd,IAAAD,SAAQ,KAAK,YAAY,+BAA+B,6BAA6B;AACrF,UAAMC;AAAA,EACR;AAGA,EAAAD,SAAQ,MAAM,gBAAgB,OAAO,OAAO,KAAK;AAEjD,MAAI,UAAyB;AAC7B,MAAI;AACF,cAAU,MAAM,cAAc,gBAAgB;AAC9C,UAAM,UAAUG,MAAK,KAAK,SAAS,SAAS;AAC5C,UAAM,cAAcA,MAAK,KAAK,SAAS,WAAW;AAElD,UAAM,UAAU,MAAM,aAAa,aAAa,WAAW;AAC3D,UAAM,WAAW,SAAS,OAAO;AAEjC,UAAM,SAAS,MAAM,cAAc,OAAO;AAC1C,IAAAH,SAAQ,KAAK,eAAe,OAAO,OAAO,KAAK,MAAM,MAAM;AAG3D,IAAAA,SAAQ,MAAM,eAAe;AAC7B,UAAM,gBAAgB,SAAS,WAAW;AAC1C,IAAAA,SAAQ,KAAK,WAAW;AAIxB,UAAM,SAAS,MAAM,UAAU,WAAW;AAC1C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAGA,IAAAA,SAAQ,MAAM,qBAAqB;AACnC,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,IAAI;AAAA,MACJ,OAAO;AAAA,IACT;AACA,IAAAA,SAAQ,KAAK,iBAAiB;AAG9B,IAAO,MAAM;AACb,IAAO;AAAA,MACL,YAAY,IAAI,WAAW,KAAKD,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,WAAMA,IAAG,MAAM,IAAI,OAAO,OAAO,EAAE,CAAC;AAAA,IAChG;AACA,IAAO,MAAM;AACb,IAAO,SAAS,iBAAiB,OAAO,OAAO,SAAS,MAAM,CAAC;AAC/D,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,MAAO,SAAS,gBAAgB,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA,IAC9D;AACA,QAAI,OAAO,MAAM,SAAS,GAAG;AAC3B,MAAO,SAAS,eAAe,OAAO,OAAO,MAAM,MAAM,CAAC;AAAA,IAC5D;AACA,IAAO,SAAS,mBAAmB,OAAO,OAAO,QAAQ,MAAM,CAAC;AAEhE,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,MAAO,MAAM;AACb,MAAO,KAAK,GAAG,OAAO,OAAO,MAAM,mBAAmB;AACtD,iBAAW,OAAO,OAAO,QAAQ;AAC/B,QAAO,SAASA,IAAG,IAAI,GAAG,CAAC;AAAA,MAC7B;AAAA,IACF;AAGA,UAAM,eAAe,OAAO;AAAA,EAC9B,SAASE,QAAO;AACd,QAAI,SAAS;AACX,YAAM,eAAe,OAAO;AAAA,IAC9B;AACA,UAAMA;AAAA,EACR;AAGA,EAAO,MAAM;AACb,EAAO,IAAIF,IAAG,OAAO,uDAA6C,CAAC;AACnE,EAAO,IAAIA,IAAG,IAAI,yCAAyC,CAAC;AAE5D,EAAE,SAAMA,IAAG,MAAM,mBAAmB,CAAC;AACvC;;;AGvRA,OAAOK,SAAQ;AACf,OAAOC,aAAY;AAKnB,IAAM,cAAc;AAEpB,eAAsB,UAAyB;AAC7C,EAAO,OAAO,eAAe;AAG7B,EAAO,SAAS,OAAOC,IAAG,KAAK,IAAI,WAAW,EAAE,CAAC;AAGjD,QAAM,MAAM,MAAM,eAAe;AAEjC,MAAI,CAAC,KAAK;AACR,IAAO,MAAM;AACb,IAAO,KAAK,sCAAsC;AAClD,IAAO,IAAIA,IAAG,IAAI,iDAAiD,CAAC;AACpE;AAAA,EACF;AAGA,EAAO,SAAS,IAAI,aAAaA,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;AAG3D,MAAI;AACF,UAAM,SAAS,MAAM,mBAAmB,IAAI,IAAI;AAEhD,QAAIC,QAAO,GAAG,OAAO,SAAS,IAAI,OAAO,GAAG;AAC1C,MAAO,MAAM;AACb,MAAO;AAAA,QACL,qBAAqBD,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,WAAMA,IAAG,MAAM,IAAI,OAAO,OAAO,EAAE,CAAC;AAAA,MACrF;AACA,MAAO,IAAIA,IAAG,IAAI,+BAA+B,CAAC;AAAA,IACpD,OAAO;AACL,MAAO,MAAM;AACb,MAAO,QAAQ,+BAA+B;AAAA,IAChD;AAAA,EACF,QAAQ;AAEN,IAAO,MAAM;AACb,IAAO,IAAIA,IAAG,IAAI,6BAA6B,CAAC;AAAA,EAClD;AACF;;;AC9CA,OAAOE,SAAQ;AAOf,SAAS,YAAY,OAAuB;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACrC;AAKA,eAAsB,OAAsB;AAC1C,QAAM,EAAE,KAAK,IAAI,MAAM,cAAc;AAErC,MAAI,KAAK,WAAW,GAAG;AACrB,IAAO,KAAK,mBAAmB;AAC/B;AAAA,EACF;AAGA,QAAM,WAAW,KAAK,OAAO,OAAK,EAAE,SAAS,MAAM;AACnD,QAAM,WAAW,KAAK,OAAO,OAAK,EAAE,SAAS,MAAM;AAEnD,EAAO,MAAM;AACb,UAAQ,IAAIC,IAAG,KAAK,gBAAgB,CAAC;AACrC,EAAO,MAAM;AAGb,MAAI,SAAS,SAAS,GAAG;AACvB,YAAQ,IAAIA,IAAG,MAAMA,IAAG,KAAK,MAAM,CAAC,CAAC;AACrC,IAAO,MAAM;AACb,eAAW,OAAO,UAAU;AAC1B,eAAS,GAAG;AAAA,IACd;AAAA,EACF;AAGA,MAAI,SAAS,SAAS,GAAG;AACvB,YAAQ,IAAIA,IAAG,OAAOA,IAAG,KAAK,MAAM,CAAC,CAAC;AACtC,IAAO,MAAM;AACb,eAAW,OAAO,UAAU;AAC1B,eAAS,GAAG;AAAA,IACd;AAAA,EACF;AAGA,UAAQ,IAAIA,IAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AAClC,EAAO,MAAM;AACb,UAAQ,IAAIA,IAAG,IAAI,+BAA+B,CAAC;AACnD,UAAQ,IAAIA,IAAG,IAAI,QAAQA,IAAG,KAAK,aAAa,CAAC,wBAAwB,CAAC;AAC1E,UAAQ,IAAIA,IAAG,IAAI,SAASA,IAAG,KAAK,mBAAmB,CAAC,eAAe,CAAC;AACxE,EAAO,MAAM;AACf;AAEA,SAAS,SAAS,KAOT;AACP,QAAM,QAAQ,YAAY,IAAI,UAAU;AACxC,QAAM,WAAW,QAAQA,IAAG,OAAO,KAAK,IAAI;AAG5C,UAAQ;AAAA,IACN,KAAKA,IAAG,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,KAAK,QAAQ;AAAA,EAC9E;AAGA,MAAI,IAAI,aAAa;AACnB,YAAQ,IAAI,KAAKA,IAAG,IAAI,IAAI,WAAW,CAAC,EAAE;AAAA,EAC5C;AAGA,UAAQ;AAAA,IACN,KAAKA,IAAG,IAAI,QAAG,CAAC,IAAIA,IAAG,IAAI,qBAAqB,CAAC,IAAIA,IAAG,QAAQ,IAAI,IAAI,CAAC,IAAIA,IAAG,IAAI,cAAc,CAAC;AAAA,EACrG;AAEA,EAAO,MAAM;AACf;;;AZ5EA,IAAM,MAAM,IAAI,OAAO;AAGvB,IACG,QAAQ,SAAS,uBAAuB,EACxC,OAAO,YAAY;AAClB,MAAI;AACF,UAAM,MAAM;AAAA,EACd,SAASC,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,cAAc;AACpE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IACG,QAAQ,UAAU,0BAA0B,EAC5C,OAAO,YAAY;AAClB,MAAI;AACF,UAAM,OAAO;AAAA,EACf,SAASA,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,eAAe;AACrE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IACG,QAAQ,qBAAqB,4BAA4B,EACzD,OAAO,WAAW,2BAA2B,EAC7C,OAAO,OAAO,KAAaC,OAA0B,YAAiC;AACrF,MAAI;AACF,UAAM,KAAK,KAAKA,OAAM,OAAO;AAAA,EAC/B,SAASD,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,aAAa;AACnE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IACG,QAAQ,WAAW,kCAAkC,EACrD,OAAO,aAAa,mBAAmB,EACvC,OAAO,YAAY,0BAA0B,EAC7C,OAAO,OAAO,YAAiD;AAC9D,MAAI;AACF,UAAM,QAAQ,OAAO;AAAA,EACvB,SAASA,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,gBAAgB;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IACG,QAAQ,QAAQ,qBAAqB,EACrC,MAAM,IAAI,EACV,OAAO,YAAY;AAClB,MAAI;AACF,UAAM,KAAK;AAAA,EACb,SAASA,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,qBAAqB;AAC3E,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IACG,QAAQ,WAAW,2BAA2B,EAC9C,OAAO,YAAY;AAClB,MAAI;AACF,UAAM,QAAQ;AAAA,EAChB,SAASA,QAAO;AACd,IAAO,MAAMA,kBAAiB,QAAQA,OAAM,UAAU,sBAAsB;AAC5E,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAGH,IAAI,KAAK;AACT,IAAI,QAAQ,OAAO;AAGnB,IAAI,MAAM;","names":["pc","error","data","z","pc","spinner","error","p","pc","pc","p","pc","path","os","fs","path","os","pc","path","os","spinner","error","outro","p","pc","path","fs","path","z","fs","path","pc","spinner","error","version","path","pc","semver","pc","semver","pc","pc","error","path"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/lib/api.ts","../src/lib/auth.ts","../src/utils/logger.ts","../src/commands/logout.ts","../src/commands/init.ts","../src/lib/extract.ts","../src/lib/project.ts","../src/commands/upgrade.ts","../src/lib/detect.ts","../src/lib/apply.ts","../src/commands/version.ts","../src/commands/list.ts","../src/commands/status.ts"],"sourcesContent":["import cac from 'cac'\nimport { login } from './commands/login.js'\nimport { logout } from './commands/logout.js'\nimport { init } from './commands/init.js'\nimport { upgrade } from './commands/upgrade.js'\nimport { version } from './commands/version.js'\nimport { list } from './commands/list.js'\nimport { status } from './commands/status.js'\nimport * as logger from './utils/logger.js'\n\nconst cli = cac('aiorg')\n\n// Login command\ncli\n .command('login', 'Save your license key')\n .action(async () => {\n try {\n await login()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Login failed')\n process.exit(1)\n }\n })\n\n// Logout command\ncli\n .command('logout', 'Remove saved license key')\n .action(async () => {\n try {\n await logout()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Logout failed')\n process.exit(1)\n }\n })\n\n// Init command\ncli\n .command('init <kit> [path]', 'Download and extract a kit')\n .option('--force', 'Overwrite existing folder')\n .action(async (kit: string, path: string | undefined, options: { force?: boolean }) => {\n try {\n await init(kit, path, options)\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Init failed')\n process.exit(1)\n }\n })\n\n// Upgrade command\ncli\n .command('upgrade', 'Upgrade kit in current directory')\n .option('--yes, -y', 'Skip confirmation')\n .option('--backup', 'Always create git backup')\n .action(async (options: { yes?: boolean; backup?: boolean }) => {\n try {\n await upgrade(options)\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Upgrade failed')\n process.exit(1)\n }\n })\n\n// List command\ncli\n .command('list', 'Show available kits')\n .alias('ls')\n .action(async () => {\n try {\n await list()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Failed to list kits')\n process.exit(1)\n }\n })\n\n// Version command\ncli\n .command('version', 'Show CLI and kit versions')\n .action(async () => {\n try {\n await version()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Version check failed')\n process.exit(1)\n }\n })\n\n// Status command\ncli\n .command('status', 'Show project and kit status')\n .action(async () => {\n try {\n await status()\n } catch (error) {\n logger.error(error instanceof Error ? error.message : 'Status check failed')\n process.exit(1)\n }\n })\n\n// Global options\ncli.help()\ncli.version('1.0.0')\n\n// Parse and run\ncli.parse()\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { verifyLicense } from '../lib/api.js'\nimport { saveLicenseKey, isLoggedIn, loadConfig } from '../lib/auth.js'\nimport * as logger from '../utils/logger.js'\n\nexport async function login(): Promise<void> {\n p.intro(pc.cyan('aiorg login'))\n\n // Check if already logged in\n if (await isLoggedIn()) {\n const config = await loadConfig()\n const shouldContinue = await p.confirm({\n message: `Already logged in${config?.email ? ` as ${pc.cyan(config.email)}` : ''}. Replace license key?`,\n initialValue: false,\n })\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.outro('Login cancelled')\n return\n }\n }\n\n // Get license key\n const licenseKey = await p.text({\n message: 'Enter your license key',\n placeholder: 'ak_live_xxxxx',\n validate: (value) => {\n if (!value) return 'License key is required'\n if (!value.startsWith('ak_')) return 'License key should start with \"ak_\"'\n return undefined\n },\n })\n\n if (p.isCancel(licenseKey)) {\n p.cancel('Login cancelled')\n process.exit(0)\n }\n\n // Verify with API\n const spinner = p.spinner()\n spinner.start('Verifying license...')\n\n try {\n const result = await verifyLicense(licenseKey)\n\n if (!result.valid) {\n spinner.stop('License verification failed')\n logger.error(result.error || 'Invalid license key')\n process.exit(1)\n }\n\n // Save to config\n const kitsRecord: Record<string, { tier: 'free' | 'paid'; purchasedAt: string }> = {}\n if (result.kits) {\n for (const kit of result.kits) {\n kitsRecord[kit.name] = {\n tier: kit.tier,\n purchasedAt: kit.purchasedAt,\n }\n }\n }\n\n await saveLicenseKey(licenseKey, result.email, kitsRecord)\n spinner.stop('License verified')\n\n // Show success\n logger.blank()\n logger.success(`Logged in${result.email ? ` as ${pc.cyan(result.email)}` : ''}`)\n\n if (result.kits && result.kits.length > 0) {\n logger.blank()\n logger.log('Licensed kits:')\n for (const kit of result.kits) {\n logger.listItem(`${kit.name} (${kit.tier})`)\n }\n }\n\n p.outro('Ready to use aiorg kits!')\n } catch (error) {\n spinner.stop('License verification failed')\n throw error\n }\n}\n","import { z } from 'zod'\n\nconst API_BASE_URL = process.env.AIORG_API_URL?.trim() || 'https://aiorg.dev'\nconst API_TIMEOUT_MS = 30000 // 30 seconds\n\n/**\n * Fetch with timeout support\n */\nasync function fetchWithTimeout(\n url: string,\n options: RequestInit = {},\n timeoutMs: number = API_TIMEOUT_MS\n): Promise<Response> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n })\n return response\n } finally {\n clearTimeout(timeout)\n }\n}\n\n// Response schemas\nconst LatestVersionSchema = z.object({\n version: z.string(),\n releasedAt: z.string(),\n packageName: z.string(),\n packageDisplayName: z.string(),\n changelog: z.record(z.string(), z.any()).optional(),\n allVersions: z\n .array(\n z.object({\n version: z.string(),\n changelog: z.record(z.string(), z.any()).optional(),\n releasedAt: z.string().optional(),\n })\n )\n .optional(),\n tier: z.enum(['free', 'paid', 'private']).optional(),\n type: z.enum(['template', 'companion', 'inject']).optional(),\n})\n\nconst DownloadResponseSchema = z.object({\n downloadUrl: z.string(),\n version: z.string(),\n filename: z.string(),\n})\n\nconst VerifyLicenseResponseSchema = z.object({\n valid: z.boolean(),\n email: z.string().optional(),\n kits: z\n .array(\n z.object({\n name: z.string(),\n tier: z.enum(['free', 'paid', 'private']),\n purchasedAt: z.string(),\n })\n )\n .optional(),\n error: z.string().optional(),\n})\n\nconst ListKitsSchema = z.object({\n kits: z.array(z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string().nullable(),\n tier: z.enum(['free', 'paid', 'private']),\n type: z.enum(['template', 'companion', 'inject']),\n deployMode: z.string().nullable(),\n version: z.string(),\n priceCents: z.number(),\n }))\n})\n\nexport type LatestVersion = z.infer<typeof LatestVersionSchema>\nexport type DownloadResponse = z.infer<typeof DownloadResponseSchema>\nexport type VerifyLicenseResponse = z.infer<typeof VerifyLicenseResponseSchema>\nexport type ListKitsResponse = z.infer<typeof ListKitsSchema>\n\nclass APIError extends Error {\n constructor(\n message: string,\n public statusCode?: number\n ) {\n super(message)\n this.name = 'APIError'\n }\n}\n\n/**\n * Fetch latest version info for a kit\n */\nexport async function fetchLatestVersion(\n kitName: string\n): Promise<LatestVersion> {\n const url = `${API_BASE_URL}/api/kits/${kitName}/latest`\n\n try {\n const response = await fetchWithTimeout(url)\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new APIError(`Kit not found: \"${kitName}\"`, 404)\n }\n throw new APIError(`Failed to fetch version info`, response.status)\n }\n\n const data = await response.json()\n return LatestVersionSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Get download URL for a kit (license key optional for free kits)\n */\nexport async function getDownloadUrl(\n kitName: string,\n licenseKey: string | null\n): Promise<DownloadResponse> {\n const url = `${API_BASE_URL}/api/kits/${kitName}/download`\n\n const headers: Record<string, string> = {}\n if (licenseKey) {\n headers.Authorization = `Bearer ${licenseKey}`\n }\n\n try {\n const response = await fetchWithTimeout(url, { headers })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new APIError('Invalid or expired license key', 401)\n }\n if (response.status === 403) {\n throw new APIError(\n 'License key does not have access to this kit',\n 403\n )\n }\n if (response.status === 404) {\n throw new APIError(`Kit not found: \"${kitName}\"`, 404)\n }\n throw new APIError(`Failed to get download URL`, response.status)\n }\n\n const data = await response.json()\n return DownloadResponseSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Verify a license key with the API\n */\nexport async function verifyLicense(\n licenseKey: string,\n kitName?: string\n): Promise<VerifyLicenseResponse> {\n const url = `${API_BASE_URL}/api/licenses/verify`\n\n try {\n const response = await fetchWithTimeout(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: licenseKey,\n kit: kitName,\n }),\n })\n\n if (!response.ok) {\n const data = await response.json().catch(() => ({})) as { error?: string }\n throw new APIError(\n data.error || 'License verification failed',\n response.status\n )\n }\n\n const data = await response.json()\n return VerifyLicenseResponseSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Download a file from a URL\n */\nexport async function downloadFile(url: string): Promise<ArrayBuffer> {\n const DOWNLOAD_TIMEOUT_MS = 120000 // 2 minutes for file downloads\n\n try {\n const response = await fetchWithTimeout(url, {}, DOWNLOAD_TIMEOUT_MS)\n\n if (!response.ok) {\n throw new APIError(`Download failed`, response.status)\n }\n\n return await response.arrayBuffer()\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Download timed out')\n }\n throw new APIError(\n `Download failed: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n\n/**\n * Fetch list of all available kits\n */\nexport async function fetchKitsList(): Promise<ListKitsResponse> {\n const url = `${API_BASE_URL}/api/kits`\n\n try {\n const response = await fetchWithTimeout(url)\n\n if (!response.ok) {\n throw new APIError('Failed to fetch kits list', response.status)\n }\n\n const data = await response.json()\n return ListKitsSchema.parse(data)\n } catch (error) {\n if (error instanceof APIError) throw error\n if (error instanceof Error && error.name === 'AbortError') {\n throw new APIError('Request timed out')\n }\n throw new APIError(\n `Network error: ${error instanceof Error ? error.message : 'Unknown error'}`\n )\n }\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport os from 'os'\nimport { z } from 'zod'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.aiorg')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\nconst KitLicenseSchema = z.object({\n tier: z.enum(['free', 'paid', 'private']),\n purchasedAt: z.string(),\n})\n\nconst ConfigSchema = z.object({\n licenseKey: z.string(),\n email: z.string().optional(),\n kits: z.record(z.string(), KitLicenseSchema).optional(),\n})\n\nexport type Config = z.infer<typeof ConfigSchema>\nexport type KitLicense = z.infer<typeof KitLicenseSchema>\n\n/**\n * Get the config directory path\n */\nexport function getConfigDir(): string {\n return CONFIG_DIR\n}\n\n/**\n * Get the config file path\n */\nexport function getConfigFile(): string {\n return CONFIG_FILE\n}\n\n/**\n * Ensure config directory exists\n */\nexport async function ensureConfigDir(): Promise<void> {\n await fs.ensureDir(CONFIG_DIR)\n}\n\n/**\n * Check if user is logged in (has config file with license key)\n */\nexport async function isLoggedIn(): Promise<boolean> {\n try {\n const config = await loadConfig()\n return !!config?.licenseKey\n } catch {\n return false\n }\n}\n\n/**\n * Load config from disk\n */\nexport async function loadConfig(): Promise<Config | null> {\n try {\n if (!(await fs.pathExists(CONFIG_FILE))) {\n return null\n }\n const raw = await fs.readJson(CONFIG_FILE)\n return ConfigSchema.parse(raw)\n } catch {\n return null\n }\n}\n\n/**\n * Save config to disk\n */\nexport async function saveConfig(config: Config): Promise<void> {\n await ensureConfigDir()\n await fs.writeJson(CONFIG_FILE, config, { spaces: 2 })\n}\n\n/**\n * Get license key from config or environment\n */\nexport async function getLicenseKey(): Promise<string | null> {\n // Check environment first\n const envKey = process.env.AIORG_LICENSE_KEY\n if (envKey) {\n return envKey\n }\n\n // Check config file\n const config = await loadConfig()\n return config?.licenseKey ?? null\n}\n\n/**\n * Save license key to config\n */\nexport async function saveLicenseKey(\n licenseKey: string,\n email?: string,\n kits?: Record<string, KitLicense>\n): Promise<void> {\n const existing = await loadConfig()\n await saveConfig({\n ...(existing || {}),\n licenseKey,\n email: email ?? existing?.email,\n kits: kits ?? existing?.kits,\n })\n}\n\n/**\n * Clear config (logout)\n */\nexport async function clearConfig(): Promise<void> {\n try {\n await fs.remove(CONFIG_FILE)\n } catch {\n // Ignore errors\n }\n}\n\n/**\n * Add kit to user's licensed kits\n */\nexport async function addLicensedKit(\n kitName: string,\n tier: 'free' | 'paid' | 'private' = 'paid'\n): Promise<void> {\n const config = await loadConfig()\n if (!config) {\n throw new Error('Not logged in')\n }\n\n const kits = config.kits ?? {}\n kits[kitName] = {\n tier,\n purchasedAt: new Date().toISOString().split('T')[0],\n }\n\n await saveConfig({ ...config, kits })\n}\n","import pc from 'picocolors'\n\n/**\n * Log a success message\n */\nexport function success(message: string): void {\n console.log(pc.green('✓'), message)\n}\n\n/**\n * Log an error message\n */\nexport function error(message: string): void {\n console.log(pc.red('✗'), message)\n}\n\n/**\n * Log a warning message\n */\nexport function warn(message: string): void {\n console.log(pc.yellow('!'), message)\n}\n\n/**\n * Log an info message\n */\nexport function info(message: string): void {\n console.log(pc.blue('ℹ'), message)\n}\n\n/**\n * Log a plain message\n */\nexport function log(message: string): void {\n console.log(message)\n}\n\n/**\n * Log a blank line\n */\nexport function blank(): void {\n console.log()\n}\n\n/**\n * Log a header\n */\nexport function header(title: string): void {\n console.log()\n console.log(pc.bold(title))\n console.log(pc.dim('─'.repeat(40)))\n}\n\n/**\n * Log a key-value pair\n */\nexport function keyValue(key: string, value: string): void {\n console.log(`${pc.dim(key + ':')} ${value}`)\n}\n\n/**\n * Log a list item\n */\nexport function listItem(item: string, indent: number = 0): void {\n const prefix = ' '.repeat(indent)\n console.log(`${prefix}${pc.dim('•')} ${item}`)\n}\n\n/**\n * Format a version for display\n */\nexport function formatVersion(version: string): string {\n return pc.cyan(`v${version}`)\n}\n\n/**\n * Format a kit name for display\n */\nexport function formatKit(name: string): string {\n return pc.magenta(name)\n}\n\n/**\n * Format a path for display\n */\nexport function formatPath(path: string): string {\n return pc.yellow(path)\n}\n\n/**\n * Format a command for display\n */\nexport function formatCommand(cmd: string): string {\n return pc.cyan(cmd)\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { clearConfig, isLoggedIn, loadConfig } from '../lib/auth.js'\nimport * as logger from '../utils/logger.js'\n\nexport async function logout(): Promise<void> {\n p.intro(pc.cyan('aiorg logout'))\n\n // Check if logged in\n if (!(await isLoggedIn())) {\n logger.info('Not currently logged in')\n p.outro('')\n return\n }\n\n const config = await loadConfig()\n const email = config?.email\n\n // Confirm\n const shouldLogout = await p.confirm({\n message: `Log out${email ? ` from ${pc.cyan(email)}` : ''}?`,\n initialValue: true,\n })\n\n if (p.isCancel(shouldLogout) || !shouldLogout) {\n p.cancel('Logout cancelled')\n return\n }\n\n // Clear config\n await clearConfig()\n\n logger.success('Logged out')\n p.outro('')\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport path from 'path'\nimport os from 'os'\nimport { getLicenseKey, isLoggedIn } from '../lib/auth.js'\nimport { fetchLatestVersion, getDownloadUrl, downloadFile } from '../lib/api.js'\nimport {\n createTempDir,\n saveToFile,\n extractZipToDir,\n cleanupTempDir,\n dirExistsAndNotEmpty,\n getFileSizeKB,\n} from '../lib/extract.js'\nimport { setupProject } from '../lib/project.js'\nimport * as logger from '../utils/logger.js'\nimport { login } from './login.js'\n\ninterface InitOptions {\n force?: boolean\n}\n\nexport async function init(\n kitName: string,\n targetPath: string | undefined,\n options: InitOptions\n): Promise<void> {\n p.intro(pc.cyan(`aiorg init ${kitName}`))\n\n // Resolve target path\n const resolvedPath = targetPath\n ? path.resolve(targetPath.replace(/^~/, os.homedir()))\n : path.resolve(process.cwd(), kitName)\n\n // Check if target exists\n if (!options.force && (await dirExistsAndNotEmpty(resolvedPath))) {\n logger.error(`Folder already exists: ${pc.yellow(resolvedPath)}`)\n logger.log(pc.dim('Use --force to overwrite'))\n process.exit(1)\n }\n\n // Fetch latest version info first (to check tier)\n const spinner = p.spinner()\n spinner.start('Fetching version info...')\n\n let versionInfo\n try {\n versionInfo = await fetchLatestVersion(kitName)\n spinner.stop(`Found ${pc.cyan(versionInfo.packageDisplayName)} v${versionInfo.version}`)\n } catch (error) {\n spinner.stop('Failed to fetch version info')\n throw error\n }\n\n const isFreeKit = versionInfo.tier === 'free'\n let licenseKey: string | null = null\n\n // Only require login for paid kits\n if (!isFreeKit) {\n if (!(await isLoggedIn())) {\n logger.info('Not logged in. Please log in first.')\n logger.blank()\n await login()\n logger.blank()\n }\n\n licenseKey = await getLicenseKey()\n if (!licenseKey) {\n logger.error('No license key found. Run \"aiorg login\" first.')\n process.exit(1)\n }\n }\n\n // Get download URL\n if (isFreeKit) {\n spinner.start('Getting download URL...')\n } else {\n spinner.start('Verifying license...')\n }\n\n let downloadInfo\n try {\n downloadInfo = await getDownloadUrl(kitName, licenseKey)\n spinner.stop(isFreeKit ? 'Ready to download' : 'License verified')\n } catch (error) {\n spinner.stop(isFreeKit ? 'Failed to get download URL' : 'License verification failed')\n throw error\n }\n\n // Download ZIP\n spinner.start(`Downloading ${kitName} v${versionInfo.version}...`)\n\n let tempDir: string | null = null\n try {\n tempDir = await createTempDir('aiorg-init-')\n const zipPath = path.join(tempDir, 'kit.zip')\n\n const zipData = await downloadFile(downloadInfo.downloadUrl)\n await saveToFile(zipData, zipPath)\n\n const sizeKB = await getFileSizeKB(zipPath)\n spinner.stop(`Downloaded ${kitName} v${versionInfo.version} (${sizeKB} KB)`)\n\n // Extract to target\n spinner.start(`Extracting to ${resolvedPath}...`)\n await extractZipToDir(zipPath, resolvedPath)\n spinner.stop(`Extracted to ${pc.yellow(resolvedPath)}`)\n\n // Cleanup\n await cleanupTempDir(tempDir)\n } catch (error) {\n if (tempDir) {\n await cleanupTempDir(tempDir)\n }\n throw error\n }\n\n // Success message\n logger.blank()\n logger.success(`${versionInfo.packageDisplayName} v${versionInfo.version} installed!`)\n\n // Setup project linking (for kit ecosystem)\n await setupProject(resolvedPath, kitName)\n logger.blank()\n logger.log('Next steps:')\n logger.listItem(`cd ${resolvedPath}`)\n logger.listItem('claude')\n logger.listItem('/setup')\n\n // Kit-specific outro messages\n const outroMessages: Record<string, string> = {\n 'investor-os': 'Happy investing!',\n }\n const outro = outroMessages[kitName] || 'Happy building!'\n p.outro(pc.green(outro))\n}\n","import extractZip from 'extract-zip'\nimport fs from 'fs-extra'\nimport path from 'path'\nimport os from 'os'\n\n/**\n * Create a temporary directory for downloads\n */\nexport async function createTempDir(prefix: string = 'aiorg-'): Promise<string> {\n const tempDir = path.join(os.tmpdir(), `${prefix}${Date.now()}`)\n await fs.ensureDir(tempDir)\n return tempDir\n}\n\n/**\n * Save buffer to a file\n */\nexport async function saveToFile(\n data: ArrayBuffer,\n filePath: string\n): Promise<void> {\n await fs.ensureDir(path.dirname(filePath))\n await fs.writeFile(filePath, Buffer.from(data))\n}\n\n/**\n * Extract ZIP file to a directory\n */\nexport async function extractZipToDir(\n zipPath: string,\n destPath: string\n): Promise<void> {\n await fs.ensureDir(destPath)\n await extractZip(zipPath, { dir: destPath })\n}\n\n/**\n * Clean up temporary directory\n */\nexport async function cleanupTempDir(tempDir: string): Promise<void> {\n try {\n await fs.remove(tempDir)\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * Check if a directory exists and is not empty\n */\nexport async function dirExistsAndNotEmpty(dirPath: string): Promise<boolean> {\n try {\n const exists = await fs.pathExists(dirPath)\n if (!exists) return false\n\n const files = await fs.readdir(dirPath)\n return files.length > 0\n } catch {\n return false\n }\n}\n\n/**\n * Get the size of a file in KB\n */\nexport async function getFileSizeKB(filePath: string): Promise<number> {\n const stats = await fs.stat(filePath)\n return Math.round(stats.size / 1024)\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport os from 'os'\nimport * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { z } from 'zod'\nimport * as logger from '../utils/logger.js'\n\n// Schema for .aiorg file (links folder to project)\nconst AiorgFileSchema = z.object({\n project: z.string(),\n version: z.string().optional(),\n})\n\n// Schema for context.json (shared business context)\nconst ContextJsonSchema = z.object({\n version: z.string(),\n business: z.object({\n name: z.string(),\n description: z.string().optional(),\n stage: z.enum(['idea', 'building', 'launched', 'pmf', 'scaling']).optional(),\n launchDate: z.string().optional(),\n }),\n validation: z.object({\n ideaValidated: z.boolean().optional(),\n ideaScore: z.number().optional(),\n targetCustomer: z.string().optional(),\n valueProp: z.string().optional(),\n validatedAt: z.string().optional(),\n }).optional(),\n pmf: z.object({\n status: z.enum(['not-started', 'searching', 'approaching', 'achieved']).optional(),\n score: z.number().nullable().optional(),\n seanEllisScore: z.number().nullable().optional(),\n activationRate: z.number().nullable().optional(),\n weeklyRetention: z.number().nullable().optional(),\n measuredAt: z.string().nullable().optional(),\n }).optional(),\n installedKits: z.array(z.string()).optional(),\n lastUpdated: z.string(),\n updatedBy: z.string(),\n})\n\nexport type AiorgFile = z.infer<typeof AiorgFileSchema>\nexport type ContextJson = z.infer<typeof ContextJsonSchema>\n\n/**\n * Get the path to ~/.aiorg/ directory\n */\nexport function getAiorgDir(): string {\n return path.join(os.homedir(), '.aiorg')\n}\n\n/**\n * Get the path to ~/.aiorg/projects/ directory\n */\nexport function getProjectsDir(): string {\n return path.join(getAiorgDir(), 'projects')\n}\n\n/**\n * Get the path to a specific project's directory\n */\nexport function getProjectDir(projectName: string): string {\n return path.join(getProjectsDir(), projectName)\n}\n\n/**\n * Check if ~/.aiorg/ exists and is initialized\n */\nexport async function isAiorgInitialized(): Promise<boolean> {\n return fs.pathExists(getProjectsDir())\n}\n\n/**\n * Initialize ~/.aiorg/ directory structure\n */\nexport async function initializeAiorg(): Promise<void> {\n const aiorgDir = getAiorgDir()\n const projectsDir = getProjectsDir()\n\n await fs.ensureDir(projectsDir)\n\n // Create config.json if it doesn't exist\n const configPath = path.join(aiorgDir, 'config.json')\n if (!(await fs.pathExists(configPath))) {\n await fs.writeJson(configPath, {\n version: '1.0.0',\n createdAt: new Date().toISOString(),\n }, { spaces: 2 })\n }\n}\n\n/**\n * List all existing projects\n */\nexport async function listProjects(): Promise<string[]> {\n const projectsDir = getProjectsDir()\n\n if (!(await fs.pathExists(projectsDir))) {\n return []\n }\n\n const entries = await fs.readdir(projectsDir, { withFileTypes: true })\n return entries\n .filter(entry => entry.isDirectory())\n .map(entry => entry.name)\n}\n\n/**\n * Check if a project exists\n */\nexport async function projectExists(projectName: string): Promise<boolean> {\n const projectDir = getProjectDir(projectName)\n return fs.pathExists(projectDir)\n}\n\n/**\n * Create a new project\n */\nexport async function createProject(\n projectName: string,\n businessName: string,\n kitName: string\n): Promise<void> {\n const projectDir = getProjectDir(projectName)\n\n // Ensure parent directories exist\n await initializeAiorg()\n\n // Create project directory\n await fs.ensureDir(projectDir)\n\n // Create context.json\n const contextJson: ContextJson = {\n version: '1.0.0',\n business: {\n name: businessName,\n stage: 'building',\n },\n validation: {},\n pmf: {\n status: 'not-started',\n score: null,\n seanEllisScore: null,\n activationRate: null,\n weeklyRetention: null,\n measuredAt: null,\n },\n installedKits: [kitName],\n lastUpdated: new Date().toISOString(),\n updatedBy: kitName,\n }\n\n await fs.writeJson(\n path.join(projectDir, 'context.json'),\n contextJson,\n { spaces: 2 }\n )\n\n // Create empty learnings.json\n await fs.writeJson(\n path.join(projectDir, 'learnings.json'),\n {\n version: '1.0.0',\n whatWorks: [],\n whatDoesntWork: [],\n },\n { spaces: 2 }\n )\n}\n\n/**\n * Read the .aiorg file from a directory\n */\nexport async function readAiorgFile(dirPath: string): Promise<AiorgFile | null> {\n const aiorgPath = path.join(dirPath, '.aiorg')\n\n if (!(await fs.pathExists(aiorgPath))) {\n return null\n }\n\n try {\n const content = await fs.readJson(aiorgPath)\n return AiorgFileSchema.parse(content)\n } catch {\n return null\n }\n}\n\n/**\n * Write the .aiorg file to a directory\n */\nexport async function writeAiorgFile(dirPath: string, projectName: string): Promise<void> {\n const aiorgPath = path.join(dirPath, '.aiorg')\n const aiorgFile: AiorgFile = {\n project: projectName,\n version: '1.0.0',\n }\n await fs.writeJson(aiorgPath, aiorgFile, { spaces: 2 })\n}\n\n/**\n * Add a kit to an existing project's installedKits list\n */\nexport async function addKitToProject(projectName: string, kitName: string): Promise<void> {\n const contextPath = path.join(getProjectDir(projectName), 'context.json')\n\n if (!(await fs.pathExists(contextPath))) {\n return\n }\n\n try {\n const context = await fs.readJson(contextPath)\n const installedKits = context.installedKits || []\n\n if (!installedKits.includes(kitName)) {\n installedKits.push(kitName)\n context.installedKits = installedKits\n context.lastUpdated = new Date().toISOString()\n await fs.writeJson(contextPath, context, { spaces: 2 })\n }\n } catch {\n // Ignore errors\n }\n}\n\n/**\n * Read context.json for a project\n */\nexport async function readProjectContext(projectName: string): Promise<ContextJson | null> {\n const contextPath = path.join(getProjectDir(projectName), 'context.json')\n\n if (!(await fs.pathExists(contextPath))) {\n return null\n }\n\n try {\n const content = await fs.readJson(contextPath)\n return ContextJsonSchema.parse(content)\n } catch {\n return null\n }\n}\n\n/**\n * Suggest a project name from the directory name\n */\nexport function suggestProjectName(dirPath: string): string {\n const dirName = path.basename(dirPath)\n // Convert to kebab-case, remove special chars\n return dirName\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/**\n * Interactive project setup\n * Returns the project name that was set up\n */\nexport async function setupProject(\n targetPath: string,\n kitName: string,\n options: { silent?: boolean } = {}\n): Promise<string | null> {\n // Check if already linked to a project\n const existingAiorg = await readAiorgFile(targetPath)\n if (existingAiorg) {\n // Already has a project, just add the kit\n await addKitToProject(existingAiorg.project, kitName)\n\n if (!options.silent) {\n const context = await readProjectContext(existingAiorg.project)\n if (context) {\n logger.blank()\n logger.info(`Linked to project: ${pc.cyan(existingAiorg.project)}`)\n if (context.business?.name) {\n logger.log(pc.dim(` Business: ${context.business.name}`))\n }\n if (context.installedKits && context.installedKits.length > 0) {\n logger.log(pc.dim(` Installed kits: ${context.installedKits.join(', ')}`))\n }\n }\n }\n\n return existingAiorg.project\n }\n\n // Initialize ~/.aiorg/ if needed\n await initializeAiorg()\n\n // Get existing projects\n const existingProjects = await listProjects()\n\n let projectName: string\n\n if (existingProjects.length > 0) {\n // Ask: new or existing project?\n logger.blank()\n logger.header('Project Setup')\n logger.log(pc.dim('AI Org kits can share context across a project.'))\n logger.blank()\n\n const projectChoice = await p.select({\n message: 'Link this kit to:',\n options: [\n ...existingProjects.map(name => ({\n value: name,\n label: name,\n hint: 'existing project',\n })),\n {\n value: '__new__',\n label: 'Create new project',\n hint: 'start fresh',\n },\n ],\n })\n\n if (p.isCancel(projectChoice)) {\n return null\n }\n\n if (projectChoice === '__new__') {\n // Create new project\n const newProjectName = await askForNewProject(targetPath, kitName)\n if (!newProjectName) return null\n projectName = newProjectName\n } else {\n projectName = projectChoice as string\n // Add kit to existing project\n await addKitToProject(projectName, kitName)\n }\n } else {\n // First project ever\n logger.blank()\n logger.header('Project Setup')\n logger.log(pc.dim('AI Org kits share context through projects.'))\n logger.log(pc.dim('This helps kits work together and remember your business.'))\n logger.blank()\n\n const newProjectName = await askForNewProject(targetPath, kitName)\n if (!newProjectName) return null\n projectName = newProjectName\n }\n\n // Create .aiorg file\n await writeAiorgFile(targetPath, projectName)\n\n // Show success\n if (!options.silent) {\n logger.blank()\n logger.success(`Project ${pc.cyan(projectName)} linked`)\n logger.log(pc.dim(` Context: ~/.aiorg/projects/${projectName}/`))\n }\n\n return projectName\n}\n\n/**\n * Ask user for new project details and create it\n */\nasync function askForNewProject(\n targetPath: string,\n kitName: string\n): Promise<string | null> {\n const suggestedName = suggestProjectName(targetPath)\n\n const projectName = await p.text({\n message: 'Project name:',\n placeholder: suggestedName,\n defaultValue: suggestedName,\n validate: (value) => {\n if (!value) return 'Project name is required'\n if (!/^[a-z0-9-]+$/.test(value)) {\n return 'Use lowercase letters, numbers, and hyphens only'\n }\n return undefined\n },\n })\n\n if (p.isCancel(projectName)) {\n return null\n }\n\n const businessName = await p.text({\n message: 'Business/product name:',\n placeholder: 'My Startup',\n validate: (value) => {\n if (!value) return 'Business name is required'\n return undefined\n },\n })\n\n if (p.isCancel(businessName)) {\n return null\n }\n\n // Create the project\n await createProject(\n projectName as string,\n businessName as string,\n kitName\n )\n\n return projectName as string\n}\n\n/**\n * Check if this is an existing kit installation that needs migration\n * (has kit files but no .aiorg file)\n */\nexport async function needsProjectMigration(dirPath: string): Promise<boolean> {\n const aiorgFile = await readAiorgFile(dirPath)\n if (aiorgFile) {\n // Already has project link\n return false\n }\n\n // Check for signs of existing kit installation\n const hasClaudeDir = await fs.pathExists(path.join(dirPath, '.claude'))\n const hasVersionJson = await fs.pathExists(path.join(dirPath, '.claude', 'version.json'))\n\n return hasClaudeDir && hasVersionJson\n}\n\n/**\n * Migrate an existing installation to the project system\n */\nexport async function migrateToProjectSystem(\n dirPath: string,\n kitName: string\n): Promise<string | null> {\n logger.blank()\n logger.info('This kit installation needs to be linked to a project.')\n logger.log(pc.dim('Projects allow kits to share context and work together.'))\n\n return setupProject(dirPath, kitName)\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport path from 'path'\nimport semver from 'semver'\nimport { detectKitInCwd, detectKit } from '../lib/detect.js'\nimport { getLicenseKey, isLoggedIn } from '../lib/auth.js'\nimport { fetchLatestVersion, getDownloadUrl, downloadFile } from '../lib/api.js'\nimport {\n createTempDir,\n saveToFile,\n extractZipToDir,\n cleanupTempDir,\n getFileSizeKB,\n} from '../lib/extract.js'\nimport { applyFileCategories, isGitRepo, createGitBackup } from '../lib/apply.js'\nimport { needsProjectMigration, migrateToProjectSystem, readAiorgFile, addKitToProject } from '../lib/project.js'\nimport * as logger from '../utils/logger.js'\nimport { login } from './login.js'\n\ninterface UpgradeOptions {\n yes?: boolean\n backup?: boolean\n}\n\nexport async function upgrade(options: UpgradeOptions): Promise<void> {\n p.intro(pc.cyan('aiorg upgrade'))\n\n // Detect kit in current directory\n const kit = await detectKitInCwd()\n\n if (!kit) {\n logger.error('Not in a kit directory')\n logger.log(pc.dim('Run this command from a folder with .claude/version.json'))\n process.exit(1)\n }\n\n logger.keyValue('Kit', pc.magenta(kit.displayName))\n logger.keyValue('Current version', pc.cyan(`v${kit.version}`))\n\n // Check if this installation needs project migration\n if (await needsProjectMigration(kit.rootPath)) {\n const projectName = await migrateToProjectSystem(kit.rootPath, kit.name)\n if (!projectName) {\n // User cancelled migration - that's OK, continue with upgrade\n logger.blank()\n logger.log(pc.dim('Skipping project setup. You can run it later.'))\n }\n } else {\n // Already has project, just ensure kit is listed\n const aiorgFile = await readAiorgFile(kit.rootPath)\n if (aiorgFile) {\n await addKitToProject(aiorgFile.project, kit.name)\n }\n }\n\n // Check for updates\n const spinner = p.spinner()\n spinner.start('Checking for updates...')\n\n let latest\n try {\n latest = await fetchLatestVersion(kit.name)\n spinner.stop('Version info fetched')\n } catch (error) {\n spinner.stop('Failed to check for updates')\n throw error\n }\n\n // Compare versions\n if (!semver.gt(latest.version, kit.version)) {\n logger.blank()\n logger.success(`Already on latest version (${pc.cyan(`v${kit.version}`)})`)\n p.outro('')\n return\n }\n\n // Show update available\n logger.blank()\n logger.log(\n `Update available: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n\n // Show changelog for ALL intermediate versions\n // API returns allVersions array with { version, changelog, releasedAt } objects\n if (latest.allVersions && Array.isArray(latest.allVersions)) {\n // Filter versions between current and latest (exclusive current, inclusive latest)\n const versionsToShow = latest.allVersions\n .filter((v: { version: string }) => {\n if (!semver.valid(v.version)) return false\n try {\n return semver.gt(v.version, kit.version) && semver.lte(v.version, latest.version)\n } catch {\n return false\n }\n })\n .sort((a: { version: string }, b: { version: string }) =>\n semver.rcompare(a.version, b.version)\n ) // newest first\n\n if (versionsToShow.length > 0) {\n logger.blank()\n const versionCount = versionsToShow.length\n logger.header(`Changelog (${versionCount} version${versionCount > 1 ? 's' : ''})`)\n\n for (const versionEntry of versionsToShow) {\n const { version, changelog: entry } = versionEntry as {\n version: string\n changelog: { highlights?: string[]; added?: string[]; upgradeNotes?: string }\n }\n if (!entry) continue\n\n // Version header with highlights\n const highlights = entry.highlights?.join(', ') || ''\n logger.blank()\n logger.log(`${pc.green(`v${version}`)}${highlights ? ` - ${pc.white(highlights)}` : ''}`)\n\n // Show first 2 added items (condensed)\n if (entry.added && entry.added.length > 0) {\n for (const item of entry.added.slice(0, 2)) {\n logger.log(pc.dim(` + ${item}`))\n }\n if (entry.added.length > 2) {\n logger.log(pc.dim(` + ... and ${entry.added.length - 2} more`))\n }\n }\n\n // Show upgrade notes if present (important for breaking changes)\n if (entry.upgradeNotes && version === latest.version) {\n logger.log(pc.yellow(` Note: ${entry.upgradeNotes}`))\n }\n }\n }\n }\n\n // Show what will be preserved\n logger.blank()\n logger.log('Your data will be preserved:')\n const neverTouch = kit.versionJson.fileCategories?.neverTouch ?? []\n for (const pattern of neverTouch.slice(0, 5)) {\n logger.listItem(pc.dim(pattern))\n }\n if (neverTouch.length > 5) {\n logger.log(pc.dim(` ... and ${neverTouch.length - 5} more patterns`))\n }\n\n // Confirm upgrade\n if (!options.yes) {\n logger.blank()\n const shouldUpgrade = await p.confirm({\n message: 'Proceed with upgrade?',\n initialValue: true,\n })\n\n if (p.isCancel(shouldUpgrade) || !shouldUpgrade) {\n p.cancel('Upgrade cancelled')\n return\n }\n }\n\n // Check if kit is free (no license required)\n const isFreeKit = latest.tier === 'free'\n let licenseKey: string | null = null\n\n // Only require login for paid kits\n if (!isFreeKit) {\n if (!(await isLoggedIn())) {\n logger.blank()\n logger.info('Login required for download')\n await login()\n logger.blank()\n }\n\n licenseKey = await getLicenseKey()\n if (!licenseKey) {\n logger.error('No license key found')\n process.exit(1)\n }\n }\n\n // Git backup\n const inGitRepo = await isGitRepo(kit.rootPath)\n if (inGitRepo) {\n if (options.backup) {\n spinner.start('Creating git backup...')\n const created = await createGitBackup(\n kit.rootPath,\n `chore: backup before upgrade to v${latest.version}`\n )\n spinner.stop(created ? 'Git backup created' : 'No changes to backup')\n } else if (!options.yes) {\n const shouldBackup = await p.confirm({\n message: 'Create git backup commit first?',\n initialValue: true,\n })\n\n if (shouldBackup === true) {\n spinner.start('Creating git backup...')\n const created = await createGitBackup(\n kit.rootPath,\n `chore: backup before upgrade to v${latest.version}`\n )\n spinner.stop(created ? 'Git backup created' : 'No changes to backup')\n }\n }\n }\n\n // Get download URL\n if (isFreeKit) {\n spinner.start('Getting download URL...')\n } else {\n spinner.start('Verifying license...')\n }\n\n let downloadInfo\n try {\n downloadInfo = await getDownloadUrl(kit.name, licenseKey)\n spinner.stop(isFreeKit ? 'Ready to download' : 'License verified')\n } catch (error) {\n spinner.stop(isFreeKit ? 'Failed to get download URL' : 'License verification failed')\n throw error\n }\n\n // Download\n spinner.start(`Downloading v${latest.version}...`)\n\n let tempDir: string | null = null\n try {\n tempDir = await createTempDir('aiorg-upgrade-')\n const zipPath = path.join(tempDir, 'kit.zip')\n const extractPath = path.join(tempDir, 'extracted')\n\n const zipData = await downloadFile(downloadInfo.downloadUrl)\n await saveToFile(zipData, zipPath)\n\n const sizeKB = await getFileSizeKB(zipPath)\n spinner.stop(`Downloaded v${latest.version} (${sizeKB} KB)`)\n\n // Extract to temp\n spinner.start('Extracting...')\n await extractZipToDir(zipPath, extractPath)\n spinner.stop('Extracted')\n\n // Read fileCategories from NEW version (extracted), not old local version\n // This is critical - old kit might not have fileCategories defined\n const newKit = await detectKit(extractPath)\n if (!newKit) {\n throw new Error('Failed to read version.json from downloaded kit')\n }\n\n // Apply fileCategories from new version\n spinner.start('Applying updates...')\n const result = await applyFileCategories(\n extractPath,\n kit.rootPath,\n newKit.versionJson\n )\n spinner.stop('Updates applied')\n\n // Show summary\n logger.blank()\n logger.success(\n `Upgraded ${kit.displayName}: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n logger.blank()\n logger.keyValue('Files updated', String(result.replaced.length))\n if (result.merged.length > 0) {\n logger.keyValue('Files merged', String(result.merged.length))\n }\n if (result.added.length > 0) {\n logger.keyValue('Files added', String(result.added.length))\n }\n logger.keyValue('Files preserved', String(result.skipped.length))\n\n if (result.errors.length > 0) {\n logger.blank()\n logger.warn(`${result.errors.length} errors occurred:`)\n for (const err of result.errors) {\n logger.listItem(pc.dim(err))\n }\n }\n\n // Cleanup\n await cleanupTempDir(tempDir)\n } catch (error) {\n if (tempDir) {\n await cleanupTempDir(tempDir)\n }\n throw error\n }\n\n // Post-upgrade note\n logger.blank()\n logger.log(pc.yellow('⚠️ Restart Claude Code to use new commands'))\n logger.log(pc.dim(' Type \"exit\" then start a new session'))\n\n p.outro(pc.green('Upgrade complete!'))\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport { z } from 'zod'\n\nconst VersionJsonSchema = z.object({\n version: z.string(),\n packageName: z.string(),\n packageDisplayName: z.string().optional(),\n releasedAt: z.string().optional(),\n minUpgradeFrom: z.string().optional(),\n fileCategories: z\n .object({\n alwaysReplace: z.array(z.string()).optional(),\n neverTouch: z.array(z.string()).optional(),\n mergeIfChanged: z.array(z.string()).optional(),\n addOnly: z.array(z.string()).optional(),\n })\n .optional(),\n changelog: z.record(z.string(), z.any()).optional(),\n})\n\nconst KitJsonSchema = z.object({\n name: z.string(),\n displayName: z.string().optional(),\n type: z.enum(['bootstrap', 'inject']).optional(),\n})\n\nexport type VersionJson = z.infer<typeof VersionJsonSchema>\nexport type KitJson = z.infer<typeof KitJsonSchema>\n\nexport interface DetectedKit {\n name: string\n displayName: string\n version: string\n versionJson: VersionJson\n kitJson?: KitJson\n rootPath: string\n}\n\n/**\n * Detect kit in a directory by looking for .claude/version.json or .claude/kit.json\n */\nexport async function detectKit(dirPath: string): Promise<DetectedKit | null> {\n const versionJsonPath = path.join(dirPath, '.claude', 'version.json')\n const kitJsonPath = path.join(dirPath, '.claude', 'kit.json')\n\n // Check for version.json (required)\n if (!(await fs.pathExists(versionJsonPath))) {\n return null\n }\n\n try {\n const versionRaw = await fs.readJson(versionJsonPath)\n const versionJson = VersionJsonSchema.parse(versionRaw)\n\n // Optionally load kit.json\n let kitJson: KitJson | undefined\n if (await fs.pathExists(kitJsonPath)) {\n try {\n const kitRaw = await fs.readJson(kitJsonPath)\n kitJson = KitJsonSchema.parse(kitRaw)\n } catch {\n // Ignore kit.json parse errors\n }\n }\n\n return {\n name: kitJson?.name ?? versionJson.packageName,\n displayName:\n kitJson?.displayName ??\n versionJson.packageDisplayName ??\n versionJson.packageName,\n version: versionJson.version,\n versionJson,\n kitJson,\n rootPath: dirPath,\n }\n } catch {\n return null\n }\n}\n\n/**\n * Detect kit in current working directory\n */\nexport async function detectKitInCwd(): Promise<DetectedKit | null> {\n return detectKit(process.cwd())\n}\n\n/**\n * Get file categories from version.json\n */\nexport function getFileCategories(versionJson: VersionJson): {\n alwaysReplace: string[]\n neverTouch: string[]\n mergeIfChanged: string[]\n addOnly: string[]\n} {\n return {\n alwaysReplace: versionJson.fileCategories?.alwaysReplace ?? [],\n neverTouch: versionJson.fileCategories?.neverTouch ?? [],\n mergeIfChanged: versionJson.fileCategories?.mergeIfChanged ?? [],\n addOnly: versionJson.fileCategories?.addOnly ?? [],\n }\n}\n","import fs from 'fs-extra'\nimport path from 'path'\nimport { glob } from 'glob'\nimport { minimatch } from 'minimatch'\nimport { merge } from 'lodash-es'\nimport type { VersionJson } from './detect.js'\n\n/**\n * Safely extract error message from unknown error\n */\nfunction getErrorMessage(err: unknown): string {\n if (err instanceof Error) return err.message\n return String(err)\n}\n\nexport interface ApplyResult {\n replaced: string[]\n merged: string[]\n added: string[]\n skipped: string[]\n errors: string[]\n}\n\n/**\n * Apply fileCategories from source to destination\n * - alwaysReplace: copy/overwrite from source\n * - neverTouch: skip entirely\n * - mergeIfChanged: deep merge JSON files (user values win)\n * - addOnly: add only if file doesn't exist\n */\nexport async function applyFileCategories(\n sourceDir: string,\n destDir: string,\n versionJson: VersionJson\n): Promise<ApplyResult> {\n const result: ApplyResult = {\n replaced: [],\n merged: [],\n added: [],\n skipped: [],\n errors: [],\n }\n\n const alwaysReplace = versionJson.fileCategories?.alwaysReplace ?? []\n const neverTouch = versionJson.fileCategories?.neverTouch ?? []\n const mergeIfChanged = versionJson.fileCategories?.mergeIfChanged ?? []\n const addOnly = versionJson.fileCategories?.addOnly ?? []\n\n // Track processed files to avoid duplicates\n const processedFiles = new Set<string>()\n\n // 1. Process alwaysReplace patterns\n for (const pattern of alwaysReplace) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath, { overwrite: true })\n result.replaced.push(file)\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to copy ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n // 2. Process mergeIfChanged patterns (JSON deep merge)\n for (const pattern of mergeIfChanged) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n const destExists = await fs.pathExists(destPath)\n\n if (destExists && file.endsWith('.json')) {\n // Merge JSON files - user's values win (existing overwrites incoming)\n const incoming = await fs.readJson(srcPath)\n const existing = await fs.readJson(destPath)\n\n // Deep merge: start with incoming, overlay existing (user's changes win)\n const merged = merge({}, incoming, existing)\n\n await fs.writeJson(destPath, merged, { spaces: 2 })\n result.merged.push(file)\n } else if (destExists) {\n // Non-JSON file exists - skip (preserve user's version)\n result.skipped.push(file)\n } else {\n // File doesn't exist - copy it\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath)\n result.replaced.push(file)\n }\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to merge ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process merge pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n // 3. Process addOnly patterns (add if missing)\n for (const pattern of addOnly) {\n try {\n const files = await glob(pattern, {\n cwd: sourceDir,\n dot: true,\n nodir: true,\n })\n\n for (const file of files) {\n if (processedFiles.has(file)) continue\n\n // Check if file matches any neverTouch pattern\n const shouldSkip = neverTouch.some((ntPattern) => {\n return matchesPattern(file, ntPattern)\n })\n\n if (shouldSkip) {\n result.skipped.push(file)\n processedFiles.add(file)\n continue\n }\n\n const srcPath = path.join(sourceDir, file)\n const destPath = path.join(destDir, file)\n\n try {\n const destExists = await fs.pathExists(destPath)\n\n if (!destExists) {\n // Only add if file doesn't exist\n await fs.ensureDir(path.dirname(destPath))\n await fs.copy(srcPath, destPath)\n result.added.push(file)\n } else {\n // File exists - skip\n result.skipped.push(file)\n }\n processedFiles.add(file)\n } catch (err) {\n result.errors.push(`Failed to add ${file}: ${getErrorMessage(err)}`)\n }\n }\n } catch (err) {\n result.errors.push(`Failed to process addOnly pattern ${pattern}: ${getErrorMessage(err)}`)\n }\n }\n\n return result\n}\n\n/**\n * Pattern matching using minimatch (supports *, **, etc.)\n */\nfunction matchesPattern(filePath: string, pattern: string): boolean {\n return minimatch(filePath, pattern, { dot: true })\n}\n\n/**\n * Check if git is available and directory is a git repo\n */\nexport async function isGitRepo(dirPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(dirPath, '.git')\n return await fs.pathExists(gitDir)\n } catch {\n return false\n }\n}\n\n/**\n * Create a git backup commit\n */\nexport async function createGitBackup(\n dirPath: string,\n message: string\n): Promise<boolean> {\n try {\n const { spawnSync } = await import('child_process')\n\n // Stage all changes\n spawnSync('git', ['add', '-A'], { cwd: dirPath, stdio: 'pipe' })\n\n // Check if there are changes to commit\n const diffResult = spawnSync('git', ['diff', '--cached', '--quiet'], {\n cwd: dirPath,\n stdio: 'pipe',\n })\n\n if (diffResult.status === 0) {\n // No changes\n return false\n }\n\n // Has changes, commit them (using spawnSync to avoid shell injection)\n const commitResult = spawnSync('git', ['commit', '-m', message], {\n cwd: dirPath,\n stdio: 'pipe',\n })\n\n return commitResult.status === 0\n } catch {\n return false\n }\n}\n","import pc from 'picocolors'\nimport semver from 'semver'\nimport { detectKitInCwd } from '../lib/detect.js'\nimport { fetchLatestVersion } from '../lib/api.js'\nimport * as logger from '../utils/logger.js'\n\nconst CLI_VERSION = '1.0.0'\n\nexport async function version(): Promise<void> {\n logger.header('aiorg version')\n\n // CLI version\n logger.keyValue('CLI', pc.cyan(`v${CLI_VERSION}`))\n\n // Detect kit in current directory\n const kit = await detectKitInCwd()\n\n if (!kit) {\n logger.blank()\n logger.info('No kit detected in current directory')\n logger.log(pc.dim('Run this command from a folder containing a kit'))\n return\n }\n\n // Show current kit version\n logger.keyValue(kit.displayName, pc.cyan(`v${kit.version}`))\n\n // Check for updates\n try {\n const latest = await fetchLatestVersion(kit.name)\n\n if (semver.gt(latest.version, kit.version)) {\n logger.blank()\n logger.warn(\n `Update available: ${pc.cyan(`v${kit.version}`)} → ${pc.green(`v${latest.version}`)}`\n )\n logger.log(pc.dim(\"Run 'aiorg upgrade' to update\"))\n } else {\n logger.blank()\n logger.success('You are on the latest version')\n }\n } catch {\n // Silently ignore API errors for version check\n logger.blank()\n logger.log(pc.dim('Could not check for updates'))\n }\n}\n","import pc from 'picocolors'\nimport { fetchKitsList } from '../lib/api.js'\nimport * as logger from '../utils/logger.js'\n\n/**\n * Format price in cents to display string\n */\nfunction formatPrice(cents: number): string {\n if (cents === 0) return ''\n return `$${(cents / 100).toFixed(0)}`\n}\n\n/**\n * List all available kits\n */\nexport async function list(): Promise<void> {\n const { kits } = await fetchKitsList()\n\n if (kits.length === 0) {\n logger.warn('No kits available')\n return\n }\n\n // Group by tier\n const freeKits = kits.filter(k => k.tier === 'free')\n const paidKits = kits.filter(k => k.tier === 'paid')\n\n logger.blank()\n console.log(pc.bold('Available Kits'))\n logger.blank()\n\n // Free kits\n if (freeKits.length > 0) {\n console.log(pc.green(pc.bold('FREE')))\n logger.blank()\n for (const kit of freeKits) {\n printKit(kit)\n }\n }\n\n // Paid kits\n if (paidKits.length > 0) {\n console.log(pc.yellow(pc.bold('PAID')))\n logger.blank()\n for (const kit of paidKits) {\n printKit(kit)\n }\n }\n\n // Footer\n console.log(pc.dim('─'.repeat(50)))\n logger.blank()\n console.log(pc.dim('Free kits work without login.'))\n console.log(pc.dim(`Run '${pc.cyan('aiorg login')}' first for paid kits.`))\n console.log(pc.dim(`Visit ${pc.cyan('https://aiorg.dev')} for details.`))\n logger.blank()\n}\n\nfunction printKit(kit: {\n name: string\n displayName: string\n description: string | null\n tier: 'free' | 'paid'\n version: string\n priceCents: number\n}): void {\n const price = formatPrice(kit.priceCents)\n const priceStr = price ? pc.yellow(price) : ''\n\n // Kit name and version\n console.log(\n ` ${pc.bold(kit.name.padEnd(24))} ${pc.cyan(`v${kit.version}`)} ${priceStr}`\n )\n\n // Description\n if (kit.description) {\n console.log(` ${pc.dim(kit.description)}`)\n }\n\n // Example command\n console.log(\n ` ${pc.dim('→')} ${pc.dim('npx @aiorg/cli init')} ${pc.magenta(kit.name)} ${pc.dim('~/my-project')}`\n )\n\n logger.blank()\n}\n","import * as p from '@clack/prompts'\nimport pc from 'picocolors'\nimport { detectKitInCwd } from '../lib/detect.js'\nimport {\n readAiorgFile,\n readProjectContext,\n listProjects,\n getProjectDir,\n} from '../lib/project.js'\nimport * as logger from '../utils/logger.js'\n\nexport async function status(): Promise<void> {\n p.intro(pc.cyan('aiorg status'))\n\n // Check for kit in current directory\n const kit = await detectKitInCwd()\n const aiorgFile = await readAiorgFile(process.cwd())\n\n if (!kit && !aiorgFile) {\n // Show global status\n const projects = await listProjects()\n\n if (projects.length === 0) {\n logger.info('No AI Org projects found')\n logger.blank()\n logger.log(pc.dim('Get started with:'))\n logger.listItem('npx @aiorg/cli init <kit-name> <path>')\n p.outro('')\n return\n }\n\n logger.header('Your Projects')\n\n for (const projectName of projects) {\n const context = await readProjectContext(projectName)\n if (context) {\n logger.blank()\n logger.log(pc.cyan(projectName))\n if (context.business?.name) {\n logger.log(pc.dim(` Business: ${context.business.name}`))\n }\n if (context.business?.stage) {\n logger.log(pc.dim(` Stage: ${context.business.stage}`))\n }\n if (context.installedKits && context.installedKits.length > 0) {\n logger.log(pc.dim(` Kits: ${context.installedKits.join(', ')}`))\n }\n if (context.pmf?.status && context.pmf.status !== 'not-started') {\n logger.log(pc.dim(` PMF: ${context.pmf.status}`))\n }\n } else {\n logger.blank()\n logger.log(pc.cyan(projectName))\n logger.log(pc.dim(' (no context)'))\n }\n }\n\n logger.blank()\n logger.log(pc.dim(`Projects stored in: ~/.aiorg/projects/`))\n p.outro('')\n return\n }\n\n // Show status for current directory\n if (kit) {\n logger.keyValue('Kit', pc.magenta(kit.displayName))\n logger.keyValue('Version', pc.cyan(`v${kit.version}`))\n }\n\n if (aiorgFile) {\n logger.keyValue('Project', pc.cyan(aiorgFile.project))\n\n const context = await readProjectContext(aiorgFile.project)\n if (context) {\n logger.blank()\n logger.header('Project Context')\n\n if (context.business?.name) {\n logger.keyValue('Business', context.business.name)\n }\n if (context.business?.stage) {\n logger.keyValue('Stage', context.business.stage)\n }\n if (context.validation?.ideaValidated) {\n logger.keyValue('Idea Validated', pc.green('Yes'))\n if (context.validation.ideaScore) {\n logger.keyValue('Idea Score', `${context.validation.ideaScore}/100`)\n }\n }\n if (context.pmf?.status && context.pmf.status !== 'not-started') {\n const pmfColor = context.pmf.status === 'achieved' ? pc.green : pc.yellow\n logger.keyValue('PMF Status', pmfColor(context.pmf.status))\n if (context.pmf.score !== null && context.pmf.score !== undefined) {\n logger.keyValue('PMF Score', `${context.pmf.score}/100`)\n }\n }\n if (context.installedKits && context.installedKits.length > 0) {\n logger.blank()\n logger.log(pc.dim('Installed kits:'))\n for (const kitName of context.installedKits) {\n logger.listItem(kitName)\n }\n }\n\n logger.blank()\n logger.log(pc.dim(`Context: ~/.aiorg/projects/${aiorgFile.project}/`))\n }\n } else if (kit) {\n logger.blank()\n logger.warn('Not linked to a project')\n logger.log(pc.dim('Run upgrade to set up project linking'))\n }\n\n p.outro('')\n}\n"],"mappings":"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","names":["pc","error","data","z","pc","spinner","error","p","pc","pc","p","pc","path","os","fs","path","os","fs","path","os","p","pc","z","z","path","os","fs","path","fs","path","pc","pc","path","os","spinner","error","outro","p","pc","path","fs","path","z","fs","path","pc","spinner","error","version","path","pc","semver","pc","semver","pc","pc","p","pc","pc","error","path"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiorg/cli",
3
- "version": "1.1.6",
3
+ "version": "1.2.0",
4
4
  "description": "CLI for downloading and upgrading aiorg kits",
5
5
  "type": "module",
6
6
  "publishConfig": {