@aiorg/cli 1.1.5 → 1.1.7

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 CHANGED
@@ -30,6 +30,13 @@ var LatestVersionSchema = z.object({
30
30
  packageName: z.string(),
31
31
  packageDisplayName: z.string(),
32
32
  changelog: z.record(z.string(), z.any()).optional(),
33
+ allVersions: z.array(
34
+ z.object({
35
+ version: z.string(),
36
+ changelog: z.record(z.string(), z.any()).optional(),
37
+ releasedAt: z.string().optional()
38
+ })
39
+ ).optional(),
33
40
  tier: z.enum(["free", "paid", "private"]).optional(),
34
41
  type: z.enum(["template", "companion", "inject"]).optional()
35
42
  });
@@ -770,21 +777,23 @@ async function upgrade(options) {
770
777
  log(
771
778
  `Update available: ${pc5.cyan(`v${kit.version}`)} \u2192 ${pc5.green(`v${latest.version}`)}`
772
779
  );
773
- if (latest.changelog) {
774
- const allVersions = Object.keys(latest.changelog).filter((v) => {
775
- if (!semver.valid(v)) return false;
780
+ if (latest.allVersions && Array.isArray(latest.allVersions)) {
781
+ const versionsToShow = latest.allVersions.filter((v) => {
782
+ if (!semver.valid(v.version)) return false;
776
783
  try {
777
- return semver.gt(v, kit.version) && semver.lte(v, latest.version);
784
+ return semver.gt(v.version, kit.version) && semver.lte(v.version, latest.version);
778
785
  } catch {
779
786
  return false;
780
787
  }
781
- }).sort((a, b) => semver.rcompare(a, b));
782
- if (allVersions.length > 0) {
788
+ }).sort(
789
+ (a, b) => semver.rcompare(a.version, b.version)
790
+ );
791
+ if (versionsToShow.length > 0) {
783
792
  blank();
784
- const versionCount = allVersions.length;
793
+ const versionCount = versionsToShow.length;
785
794
  header(`Changelog (${versionCount} version${versionCount > 1 ? "s" : ""})`);
786
- for (const version2 of allVersions) {
787
- const entry = latest.changelog[version2];
795
+ for (const versionEntry of versionsToShow) {
796
+ const { version: version2, changelog: entry } = versionEntry;
788
797
  if (!entry) continue;
789
798
  const highlights = entry.highlights?.join(", ") || "";
790
799
  blank();
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 if (latest.changelog) {\n // Get all versions between current and latest (exclusive current, inclusive latest)\n // Filter out non-semver keys (like \"added\", \"changed\" if API returns wrong format)\n const allVersions = Object.keys(latest.changelog)\n .filter((v) => {\n // Must be valid semver\n if (!semver.valid(v)) return false\n // Must be greater than current and <= latest\n try {\n return semver.gt(v, kit.version) && semver.lte(v, latest.version)\n } catch {\n return false\n }\n })\n .sort((a, b) => semver.rcompare(a, b)) // newest first\n\n if (allVersions.length > 0) {\n logger.blank()\n const versionCount = allVersions.length\n logger.header(`Changelog (${versionCount} version${versionCount > 1 ? 's' : ''})`)\n\n for (const version of allVersions) {\n const entry = latest.changelog[version]\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":"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","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/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 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 * 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":"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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiorg/cli",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "CLI for downloading and upgrading aiorg kits",
5
5
  "type": "module",
6
6
  "publishConfig": {